summaryrefslogtreecommitdiffstats
path: root/js/src/shell/ModuleLoader.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /js/src/shell/ModuleLoader.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'js/src/shell/ModuleLoader.js')
-rw-r--r--js/src/shell/ModuleLoader.js43
1 files changed, 43 insertions, 0 deletions
diff --git a/js/src/shell/ModuleLoader.js b/js/src/shell/ModuleLoader.js
new file mode 100644
index 000000000..d8767f05f
--- /dev/null
+++ b/js/src/shell/ModuleLoader.js
@@ -0,0 +1,43 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// A basic synchronous module loader for testing the shell.
+
+Reflect.Loader = new class {
+ constructor() {
+ this.registry = new Map();
+ this.loadPath = getModuleLoadPath();
+ }
+
+ resolve(name) {
+ if (os.path.isAbsolute(name))
+ return name;
+
+ return os.path.join(this.loadPath, name);
+ }
+
+ fetch(path) {
+ return os.file.readFile(path);
+ }
+
+ loadAndParse(name) {
+ let path = this.resolve(name);
+
+ if (this.registry.has(path))
+ return this.registry.get(path);
+
+ let source = this.fetch(path);
+ let module = parseModule(source, path);
+ this.registry.set(path, module);
+ return module;
+ }
+
+ ["import"](name, referrer) {
+ let module = this.loadAndParse(name);
+ module.declarationInstantiation();
+ return module.evaluation();
+ }
+};
+
+setModuleResolveHook((module, requestName) => Reflect.Loader.loadAndParse(requestName));