diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2018-08-23 13:29:31 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-08-23 17:55:22 -0400 |
commit | 59231d74b5e275b6cb1c7a551c3382202c3f0d9e (patch) | |
tree | 9bcff21188977926496514e7f37681ed13d47751 /js/compiler.ts | |
parent | 1355803849aebab738b5f704386a034463192aab (diff) |
Improve DenoCompiler.makeDefine and localRequire
Diffstat (limited to 'js/compiler.ts')
-rw-r--r-- | js/compiler.ts | 65 |
1 files changed, 29 insertions, 36 deletions
diff --git a/js/compiler.ts b/js/compiler.ts index 84330490f..fcbfc7c5e 100644 --- a/js/compiler.ts +++ b/js/compiler.ts @@ -17,11 +17,6 @@ type AmdErrback = (err: any) => void; export type AmdFactory = (...args: any[]) => object | void; // tslint:enable:no-any export type AmdDefine = (deps: string[], factory: AmdFactory) => void; -type AmdRequire = ( - deps: string[], - callback: AmdCallback, - errback?: AmdErrback -) => void; // The location that a module is being loaded from. This could be a directory, // like ".", or it could be a module specifier like @@ -264,44 +259,42 @@ export class DenoCompiler implements ts.LanguageServiceHost { const localDefine = (deps: string[], factory: AmdFactory): void => { // TypeScript will emit a local require dependency when doing dynamic // `import()` - const localRequire: AmdRequire = ( + const { _log: log } = this; + const localExports = moduleMetaData.exports; + + // tslint:disable-next-line:no-any + const resolveDependencies = (deps: string[]): any[] => { + return deps.map(dep => { + if (dep === "require") { + return localRequire; + } else if (dep === "exports") { + return localExports; + } else if (dep in DenoCompiler._builtins) { + return DenoCompiler._builtins[dep]; + } else { + const depModuleMetaData = this.run(dep, moduleMetaData.fileName); + return depModuleMetaData.exports; + } + }); + }; + + // this is a function because we need hoisting + function localRequire( deps: string[], callback: AmdCallback, - errback?: AmdErrback - ): void => { - this._log("localRequire", deps); + errback: AmdErrback + ): void { + log("localRequire", deps); try { - const args = deps.map(dep => { - if (dep in DenoCompiler._builtins) { - return DenoCompiler._builtins[dep]; - } else { - const depModuleMetaData = this.run(dep, moduleMetaData.fileName); - return depModuleMetaData.exports; - } - }); + const args = resolveDependencies(deps); callback(...args); } catch (e) { - if (errback) { - errback(e); - } else { - throw e; - } + errback(e); } - }; - const localExports = moduleMetaData.exports; + } + this._log("localDefine", moduleMetaData.fileName, deps, localExports); - const args = deps.map(dep => { - if (dep === "require") { - return localRequire; - } else if (dep === "exports") { - return localExports; - } else if (dep in DenoCompiler._builtins) { - return DenoCompiler._builtins[dep]; - } else { - const depModuleMetaData = this.run(dep, moduleMetaData.fileName); - return depModuleMetaData.exports; - } - }); + const args = resolveDependencies(deps); factory(...args); }; return localDefine; |