mirror of
https://github.com/denoland/deno.git
synced 2025-10-03 07:34:36 +00:00
Fix circular dependencies
This commit is contained in:
parent
bbc4e55bda
commit
739ef6a8ec
1 changed files with 8 additions and 5 deletions
|
@ -77,6 +77,7 @@ export class ModuleMetaData implements ts.IScriptSnapshot {
|
||||||
public deps?: ModuleFileName[];
|
public deps?: ModuleFileName[];
|
||||||
public readonly exports = {};
|
public readonly exports = {};
|
||||||
public factory?: AmdFactory;
|
public factory?: AmdFactory;
|
||||||
|
public gatheringDeps = false;
|
||||||
public hasRun = false;
|
public hasRun = false;
|
||||||
public scriptVersion = "";
|
public scriptVersion = "";
|
||||||
|
|
||||||
|
@ -250,10 +251,6 @@ export class DenoCompiler implements ts.LanguageServiceHost {
|
||||||
}
|
}
|
||||||
const dependencyMetaData = this._getModuleMetaData(dep);
|
const dependencyMetaData = this._getModuleMetaData(dep);
|
||||||
assert(dependencyMetaData != null, `Missing dependency "${dep}".`);
|
assert(dependencyMetaData != null, `Missing dependency "${dep}".`);
|
||||||
assert(
|
|
||||||
dependencyMetaData!.hasRun === true,
|
|
||||||
`Module "${dep}" was not run.`
|
|
||||||
);
|
|
||||||
// TypeScript does not track assert, therefore using not null operator
|
// TypeScript does not track assert, therefore using not null operator
|
||||||
return dependencyMetaData!.exports;
|
return dependencyMetaData!.exports;
|
||||||
});
|
});
|
||||||
|
@ -436,6 +433,9 @@ export class DenoCompiler implements ts.LanguageServiceHost {
|
||||||
): void => {
|
): void => {
|
||||||
this._log("compiler.localDefine", moduleMetaData.fileName);
|
this._log("compiler.localDefine", moduleMetaData.fileName);
|
||||||
moduleMetaData.factory = factory;
|
moduleMetaData.factory = factory;
|
||||||
|
// when there are circular dependencies, we need to skip recursing the
|
||||||
|
// dependencies
|
||||||
|
moduleMetaData.gatheringDeps = true;
|
||||||
// we will recursively resolve the dependencies for any modules
|
// we will recursively resolve the dependencies for any modules
|
||||||
moduleMetaData.deps = deps.map(dep => {
|
moduleMetaData.deps = deps.map(dep => {
|
||||||
if (
|
if (
|
||||||
|
@ -449,9 +449,12 @@ export class DenoCompiler implements ts.LanguageServiceHost {
|
||||||
dep,
|
dep,
|
||||||
moduleMetaData.fileName
|
moduleMetaData.fileName
|
||||||
);
|
);
|
||||||
this._gatherDependencies(dependencyMetaData);
|
if (!dependencyMetaData.gatheringDeps) {
|
||||||
|
this._gatherDependencies(dependencyMetaData);
|
||||||
|
}
|
||||||
return dependencyMetaData.fileName;
|
return dependencyMetaData.fileName;
|
||||||
});
|
});
|
||||||
|
moduleMetaData.gatheringDeps = false;
|
||||||
if (!this._runQueue.includes(moduleMetaData)) {
|
if (!this._runQueue.includes(moduleMetaData)) {
|
||||||
this._runQueue.push(moduleMetaData);
|
this._runQueue.push(moduleMetaData);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue