summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpunteek <prateek1@ucla.edu>2018-03-06 19:46:39 -0800
committerGus Caplan <me@gus.host>2018-03-31 19:55:50 -0500
commit07ba9141e475ec63f6ef56b67ec5f98077cd3446 (patch)
tree99f36abde8cd6fd8b4a074fdfe8b1d8fe7fa6388 /lib
parent28b622cb08602d77512fa3d659451cd317dfcc41 (diff)
downloadandroid-node-v8-07ba9141e475ec63f6ef56b67ec5f98077cd3446.tar.gz
android-node-v8-07ba9141e475ec63f6ef56b67ec5f98077cd3446.tar.bz2
android-node-v8-07ba9141e475ec63f6ef56b67ec5f98077cd3446.zip
vm: add support for import.meta to Module
Fixes: https://github.com/nodejs/node/issues/18570 PR-URL: https://github.com/nodejs/node/pull/19277 Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: Tiancheng "Timothy" Gu <timothygu99@gmail.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/internal/bootstrap/node.js11
-rw-r--r--lib/internal/process/esm_loader.js17
-rw-r--r--lib/internal/vm/module.js19
3 files changed, 41 insertions, 6 deletions
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index 01efe6f329..99bf00a6d6 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -108,10 +108,13 @@
'DeprecationWarning', 'DEP0062', startup, true);
}
- if (process.binding('config').experimentalModules) {
- process.emitWarning(
- 'The ESM module loader is experimental.',
- 'ExperimentalWarning', undefined);
+ if (process.binding('config').experimentalModules ||
+ process.binding('config').experimentalVMModules) {
+ if (process.binding('config').experimentalModules) {
+ process.emitWarning(
+ 'The ESM module loader is experimental.',
+ 'ExperimentalWarning', undefined);
+ }
NativeModule.require('internal/process/esm_loader').setup();
}
diff --git a/lib/internal/process/esm_loader.js b/lib/internal/process/esm_loader.js
index bcb6501af6..db28ca04b1 100644
--- a/lib/internal/process/esm_loader.js
+++ b/lib/internal/process/esm_loader.js
@@ -10,6 +10,10 @@ const { getURLFromFilePath } = require('internal/url');
const Loader = require('internal/modules/esm/loader');
const path = require('path');
const { URL } = require('url');
+const {
+ initImportMetaMap,
+ wrapToModuleMap
+} = require('internal/vm/module');
function normalizeReferrerURL(referrer) {
if (typeof referrer === 'string' && path.isAbsolute(referrer)) {
@@ -19,7 +23,18 @@ function normalizeReferrerURL(referrer) {
}
function initializeImportMetaObject(wrap, meta) {
- meta.url = wrap.url;
+ const vmModule = wrapToModuleMap.get(wrap);
+ if (vmModule === undefined) {
+ // This ModuleWrap belongs to the Loader.
+ meta.url = wrap.url;
+ } else {
+ const initializeImportMeta = initImportMetaMap.get(vmModule);
+ if (initializeImportMeta !== undefined) {
+ // This ModuleWrap belongs to vm.Module, initializer callback was
+ // provided.
+ initializeImportMeta(meta, vmModule);
+ }
+ }
}
let loaderResolve;
diff --git a/lib/internal/vm/module.js b/lib/internal/vm/module.js
index 48d591f3bf..9af071ce28 100644
--- a/lib/internal/vm/module.js
+++ b/lib/internal/vm/module.js
@@ -43,6 +43,10 @@ const perContextModuleId = new WeakMap();
const wrapMap = new WeakMap();
const dependencyCacheMap = new WeakMap();
const linkingStatusMap = new WeakMap();
+// vm.Module -> function
+const initImportMetaMap = new WeakMap();
+// ModuleWrap -> vm.Module
+const wrapToModuleMap = new WeakMap();
class Module {
constructor(src, options = {}) {
@@ -80,6 +84,16 @@ class Module {
perContextModuleId.set(context, 1);
}
+ if (options.initializeImportMeta !== undefined) {
+ if (typeof options.initializeImportMeta === 'function') {
+ initImportMetaMap.set(this, options.initializeImportMeta);
+ } else {
+ throw new ERR_INVALID_ARG_TYPE(
+ 'options.initializeImportMeta', 'function',
+ options.initializeImportMeta);
+ }
+ }
+
const wrap = new ModuleWrap(src, url, {
[kParsingContext]: context,
lineOffset: options.lineOffset,
@@ -88,6 +102,7 @@ class Module {
wrapMap.set(this, wrap);
linkingStatusMap.set(this, 'unlinked');
+ wrapToModuleMap.set(wrap, this);
Object.defineProperties(this, {
url: { value: url, enumerable: true },
@@ -206,5 +221,7 @@ class Module {
}
module.exports = {
- Module
+ Module,
+ initImportMetaMap,
+ wrapToModuleMap
};