wip on fakeSystem

This commit is contained in:
ScriptedAlchemy 2020-04-09 12:39:29 -07:00 committed by Tobias Koppers
parent 88f4d1fe0b
commit aabcb3ceac
2 changed files with 16 additions and 24 deletions

View File

@ -32,19 +32,6 @@ module.exports = {
} }
}); });
}); });
scope.DEF = {
get(module) {
return new Promise(resolve => {
setTimeout(() => {
resolve(() => ({
__esModule: true,
module,
default: "def"
}));
}, 100);
});
}
};
}, },
afterExecute: () => { afterExecute: () => {
System.execute("(anonym)"); System.execute("(anonym)");

View File

@ -12,6 +12,15 @@ const System = {
fn = deps; fn = deps;
deps = []; deps = [];
} }
let entry = {
name,
deps,
fn,
executed: false,
exports: undefined
};
const dynamicExport = result => { const dynamicExport = result => {
if (System.registry[name] !== entry) { if (System.registry[name] !== entry) {
throw new Error(`Module ${name} calls dynamicExport too late`); throw new Error(`Module ${name} calls dynamicExport too late`);
@ -26,30 +35,25 @@ const System = {
return Promise.resolve(); return Promise.resolve();
} }
}; };
if (name in System.registry) { if (name in System.registry) {
throw new Error(`Module ${name} is already registered`); throw new Error(`Module ${name} is already registered`);
} }
const mod = fn(dynamicExport, systemContext);
System.registry[name] = entry;
entry.mod = fn(dynamicExport, systemContext);
if (deps.length > 0) { if (deps.length > 0) {
if (!Array.isArray(mod.setters)) { if (!Array.isArray(entry.mod.setters)) {
throw new Error( throw new Error(
`Module ${name} must have setters, because it has dependencies` `Module ${name} must have setters, because it has dependencies`
); );
} }
if (mod.setters.length !== deps.length) { if (entry.mod.setters.length !== deps.length) {
throw new Error( throw new Error(
`Module ${name} has incorrect number of setters for the dependencies` `Module ${name} has incorrect number of setters for the dependencies`
); );
} }
} }
const entry = {
name,
deps,
fn,
mod,
executed: false,
exports: undefined
};
System.registry[name] = entry; System.registry[name] = entry;
}, },
registry: undefined, registry: undefined,
@ -72,6 +76,7 @@ const System = {
}, },
ensureExecuted: name => { ensureExecuted: name => {
const m = System.registry[name]; const m = System.registry[name];
console.log(m);
if (!m) throw new Error(`Module ${name} not registered`); if (!m) throw new Error(`Module ${name} not registered`);
if (!m.executed) { if (!m.executed) {
m.executed = true; m.executed = true;