in lib/main.ts [261:306]
private propagateNamespaceExportDeclarations(
sourceFile: ts.SourceFile,
sourceFileMap: Map<string, ts.SourceFile>,
compilerHost: ts.CompilerHost,
) {
let globalModuleName: string;
sourceFile.forEachChild((n: ts.Node) => {
if (!ts.isNamespaceExportDeclaration(n)) return;
// This is the name we are interested in for Dart purposes until Dart supports AMD module
// loaders. This module name should all be reflected by all modules exported by this
// library as we need to specify a global module location for every Dart library.
globalModuleName = base.ident(n.name);
sourceFile.moduleName = globalModuleName;
});
const missingFiles: string[] = [];
sourceFile.statements.forEach((e: ts.Node) => {
if (!ts.isExportDeclaration(e)) return;
let exportDecl = e;
if (!exportDecl.moduleSpecifier) return;
let moduleLocation = <ts.StringLiteral>exportDecl.moduleSpecifier;
let location = moduleLocation.text;
let resolvedPath = compilerHost.resolveModuleNames(
[location], sourceFile.fileName, undefined, undefined, this.getCompilerOptions());
resolvedPath.forEach((p) => {
if (!p || p.isExternalLibraryImport) return;
const exportedFile = sourceFileMap.get(p.resolvedFileName);
if (exportedFile) {
exportedFile.moduleName = globalModuleName;
} else {
missingFiles.push(p.resolvedFileName);
}
});
});
if (missingFiles.length) {
const error = new Error();
error.message =
'The following files were referenced but were not supplied as a command line arguments. Reference the README for usage instructions.';
for (const file of missingFiles) {
error.message += '\n';
error.message += file;
}
error.name = 'DartFacadeError';
throw error;
}
}