an ability to require modules using "./" and "../" syntax
This commit is contained in:
parent
7d0c2d079b
commit
26edf60654
37
browser.js
37
browser.js
@ -133,7 +133,7 @@ const Mimicry = (function privateMimicryClosure () {
|
||||
for (let i = 0; i < deps.length; ++i) {
|
||||
const element = deps[i];
|
||||
const contentType = element.contentType;
|
||||
const elName = element.name;
|
||||
const elName = element.name = fromRelative(element.name, moduleName);
|
||||
|
||||
this.load(elName, loadedFileForModule.bind(this, module, elName), contentType);
|
||||
}
|
||||
@ -626,12 +626,41 @@ const Mimicry = (function privateMimicryClosure () {
|
||||
}
|
||||
}
|
||||
|
||||
const src = launcher.src.split("/");
|
||||
src.pop();
|
||||
let pathPrefix = src.join('/');
|
||||
let pathPrefix = directory(launcher.src);
|
||||
if (pathPrefix !== "")
|
||||
pathPrefix += "/";
|
||||
|
||||
function directory (path) {
|
||||
const hops = path.split("/");
|
||||
hops.pop();
|
||||
return hops.join("/");
|
||||
}
|
||||
|
||||
function fromRelative (path, reference) {
|
||||
let indexSame = path.indexOf("./");
|
||||
let indexParent = path.indexOf("../");
|
||||
if (indexSame === 0 || indexParent === 0) {
|
||||
reference = directory(reference);
|
||||
while (indexSame === 0 || indexParent === 0) {
|
||||
if (indexSame === 0) {
|
||||
path = path.slice(2);
|
||||
} else {
|
||||
reference = directory(reference);
|
||||
path = path.slice(3);
|
||||
}
|
||||
indexSame = path.indexOf("./");
|
||||
indexParent = path.indexOf("../");
|
||||
}
|
||||
let result = reference;
|
||||
if (result !== "")
|
||||
result += "/";
|
||||
|
||||
result += path
|
||||
return result
|
||||
}
|
||||
return path;
|
||||
}
|
||||
|
||||
getScriptWithTag(pathPrefix + "errors.js", function (event) {
|
||||
cleanTag(event.target);
|
||||
BasicError = window.__MimicryErrors__.BasicError;
|
||||
|
11
node.js
11
node.js
@ -125,7 +125,7 @@ class Mimicry {
|
||||
for (let i = 0; i < deps.length; ++i) {
|
||||
const element = deps[i];
|
||||
const contentType = element.contentType;
|
||||
const elName = element.name;
|
||||
const elName = element.name = fromRelative(element.name, moduleName);
|
||||
|
||||
this.load(elName, loadedFileForModule.bind(this, module, elName), contentType);
|
||||
}
|
||||
@ -508,6 +508,15 @@ function getCurrentHref(caller = "") {
|
||||
return path.relative(caller || __dirname, _getCallerFile());
|
||||
}
|
||||
|
||||
function fromRelative (request, reference) {
|
||||
let indexSame = request.indexOf("./");
|
||||
let indexParent = request.indexOf("../");
|
||||
if (indexSame === 0 || indexParent === 0)
|
||||
return path.join(path.dirname(reference), request);
|
||||
|
||||
return request;
|
||||
}
|
||||
|
||||
function _getCallerFile() {
|
||||
let caller;
|
||||
try {
|
||||
|
3
test/inner/dependency.js
Normal file
3
test/inner/dependency.js
Normal file
@ -0,0 +1,3 @@
|
||||
mimicry.module(function () {
|
||||
return "Dep";
|
||||
})
|
6
test/inner/inner.js
Normal file
6
test/inner/inner.js
Normal file
@ -0,0 +1,6 @@
|
||||
mimicry.module([
|
||||
"./dependency",
|
||||
"../outer"
|
||||
], function (global, [dependency, outer]) {
|
||||
return dependency === "Dep" && outer === "Outer";
|
||||
})
|
@ -4,8 +4,9 @@ mimicry.module([
|
||||
"simple", Mimicry.Type.json,
|
||||
"background", Mimicry.Type.css,
|
||||
"text", Mimicry.Type.text,
|
||||
"binary", Mimicry.Type.binary
|
||||
], function (global, [terminalModule, simple, background, text, binary]) {
|
||||
"binary", Mimicry.Type.binary,
|
||||
"inner/inner"
|
||||
], function (global, [terminalModule, simple, background, text, binary, inner]) {
|
||||
let bnr = false;
|
||||
if (binary instanceof ArrayBuffer) {
|
||||
const view = new Uint8Array(binary);
|
||||
@ -27,6 +28,7 @@ mimicry.module([
|
||||
terminalModule === "terminal",
|
||||
simple.a[4] === 115,
|
||||
text === "Lorem ipsum, I guess",
|
||||
bnr
|
||||
bnr,
|
||||
inner === true
|
||||
];
|
||||
});
|
3
test/outer.js
Normal file
3
test/outer.js
Normal file
@ -0,0 +1,3 @@
|
||||
mimicry.module(function () {
|
||||
return "Outer";
|
||||
});
|
Loading…
Reference in New Issue
Block a user