diff options
author | Ry Dahl <ry@tinyclouds.org> | 2020-01-21 14:57:56 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-21 14:57:56 -0500 |
commit | fa7f34eb8cec07f4c68ca4e9c46a983bc3e2308f (patch) | |
tree | 821263579dd75de3c16508fdecfdcaba52987373 /cli/js | |
parent | 7fd50065a7d8a4c6ed1b1090703a7baaabdbd6aa (diff) |
Revert "Create an old program to be used in snapshot. (#3644)"
Ref #3712. This change allowed the deno_typescript crate to reference
cli/js/lib.deno_runtime.d.ts which breaks "cargo package". We intend to
reintroduce a revised version of this patch later once "cargo
package" is working and tested.
This reverts commit 737ab94ea1bdf65eeef323ea37e84bcf430fb92c.
Diffstat (limited to 'cli/js')
-rw-r--r-- | cli/js/compiler.ts | 17 | ||||
-rw-r--r-- | cli/js/compiler_bootstrap.ts | 34 | ||||
-rw-r--r-- | cli/js/compiler_bundler.ts | 14 | ||||
-rw-r--r-- | cli/js/compiler_host.ts | 10 | ||||
-rw-r--r-- | cli/js/compiler_sourcefile.ts | 2 | ||||
-rw-r--r-- | cli/js/dispatch.ts | 5 | ||||
-rw-r--r-- | cli/js/dispatch_json.ts | 2 |
7 files changed, 25 insertions, 59 deletions
diff --git a/cli/js/compiler.ts b/cli/js/compiler.ts index 54861f713..3cebf24b2 100644 --- a/cli/js/compiler.ts +++ b/cli/js/compiler.ts @@ -6,7 +6,6 @@ import "./globals.ts"; import "./ts_global.d.ts"; import { TranspileOnlyResult } from "./compiler_api.ts"; -import { oldProgram } from "./compiler_bootstrap.ts"; import { setRootExports } from "./compiler_bundler.ts"; import { defaultBundlerOptions, @@ -143,12 +142,7 @@ self.bootstrapTsCompiler = function tsCompilerMain(): void { // to generate the program and possibly emit it. if (!diagnostics || (diagnostics && diagnostics.length === 0)) { const options = host.getCompilationSettings(); - const program = ts.createProgram({ - rootNames, - options, - host, - oldProgram - }); + const program = ts.createProgram(rootNames, options, host); diagnostics = ts .getPreEmitDiagnostics(program) @@ -226,12 +220,11 @@ self.bootstrapTsCompiler = function tsCompilerMain(): void { } host.mergeOptions(...compilerOptions); - const program = ts.createProgram({ + const program = ts.createProgram( rootNames, - options: host.getCompilationSettings(), - host, - oldProgram - }); + host.getCompilationSettings(), + host + ); if (bundle) { setRootExports(program, rootNames[0]); diff --git a/cli/js/compiler_bootstrap.ts b/cli/js/compiler_bootstrap.ts deleted file mode 100644 index 6de978750..000000000 --- a/cli/js/compiler_bootstrap.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. - -import { ASSETS, Host } from "./compiler_host.ts"; -import { core } from "./core.ts"; -import * as dispatch from "./dispatch.ts"; -import { sendSync } from "./dispatch_json.ts"; - -// This registers ops that are available during the snapshotting process. -const ops = core.ops(); -for (const [name, opId] of Object.entries(ops)) { - const opName = `OP_${name.toUpperCase()}`; - // TODO This type casting is dangerous, and should be improved when the same - // code in `os.ts` is done. - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (dispatch as any)[opName] = opId; -} - -const host = new Host({ writeFile(): void {} }); -const options = host.getCompilationSettings(); - -/** Used to generate the foundational AST for all other compilations, so it can - * be cached as part of the snapshot and available to speed up startup */ -export const oldProgram = ts.createProgram({ - rootNames: [`${ASSETS}/bootstrap.ts`], - options, - host -}); - -/** A module loader which is concatenated into bundle files. We read all static - * assets during the snapshotting process, which is why this is located in - * compiler_bootstrap. */ -export const bundleLoader = sendSync(dispatch.OP_FETCH_ASSET, { - name: "bundle_loader.js" -}); diff --git a/cli/js/compiler_bundler.ts b/cli/js/compiler_bundler.ts index 8fb68cc7a..a4e4557ca 100644 --- a/cli/js/compiler_bundler.ts +++ b/cli/js/compiler_bundler.ts @@ -1,6 +1,7 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -import { bundleLoader } from "./compiler_bootstrap.ts"; +import * as dispatch from "./dispatch.ts"; +import { sendSync } from "./dispatch_json.ts"; import { assert, commonPath, @@ -8,6 +9,11 @@ import { CHAR_FORWARD_SLASH } from "./util.ts"; +const BUNDLE_LOADER = "bundle_loader.js"; + +/** A loader of bundled modules that we will inline into any bundle outputs. */ +let bundleLoader: string; + /** Local state of what the root exports are of a root module. */ let rootExports: string[] | undefined; @@ -34,6 +40,12 @@ export function buildBundle( data: string, sourceFiles: readonly ts.SourceFile[] ): string { + // we can only do this once we are bootstrapped and easiest way to do it is + // inline here + if (!bundleLoader) { + bundleLoader = sendSync(dispatch.OP_FETCH_ASSET, { name: BUNDLE_LOADER }); + } + // when outputting to AMD and a single outfile, TypeScript makes up the module // specifiers which are used to define the modules, and doesn't expose them // publicly, so we have to try to replicate diff --git a/cli/js/compiler_host.ts b/cli/js/compiler_host.ts index 3e6df4485..f8921a352 100644 --- a/cli/js/compiler_host.ts +++ b/cli/js/compiler_host.ts @@ -18,7 +18,7 @@ export interface ConfigureResponse { diagnostics?: ts.Diagnostic[]; } -export const ASSETS = "$asset$"; +const ASSETS = "$asset$"; /** Options that need to be used when generating a bundle (either trusted or * runtime). */ @@ -129,11 +129,11 @@ export class Host implements ts.CompilerHost { private _writeFile: WriteFileCallback; private _getAsset(filename: string): SourceFile { - const url = filename.split("/").pop()!; - const sourceFile = SourceFile.get(url); + const sourceFile = SourceFile.get(filename); if (sourceFile) { return sourceFile; } + const url = filename.split("/").pop()!; const name = url.includes(".") ? url : `${url}.d.ts`; const sourceCode = sendSync(dispatch.OP_FETCH_ASSET, { name }); return new SourceFile({ @@ -238,15 +238,13 @@ export class Host implements ts.CompilerHost { : SourceFile.get(fileName); assert(sourceFile != null); if (!sourceFile.tsSourceFile) { - assert(sourceFile.sourceCode != null); sourceFile.tsSourceFile = ts.createSourceFile( fileName, sourceFile.sourceCode, languageVersion ); - delete sourceFile.sourceCode; } - return sourceFile.tsSourceFile; + return sourceFile!.tsSourceFile; } catch (e) { if (onError) { onError(String(e)); diff --git a/cli/js/compiler_sourcefile.ts b/cli/js/compiler_sourcefile.ts index 8e81cdb45..087891c99 100644 --- a/cli/js/compiler_sourcefile.ts +++ b/cli/js/compiler_sourcefile.ts @@ -61,7 +61,7 @@ export class SourceFile { mediaType!: MediaType; processed = false; - sourceCode?: string; + sourceCode!: string; tsSourceFile?: ts.SourceFile; url!: string; diff --git a/cli/js/dispatch.ts b/cli/js/dispatch.ts index f5049cca8..073c32f7a 100644 --- a/cli/js/dispatch.ts +++ b/cli/js/dispatch.ts @@ -70,15 +70,12 @@ export let OP_TRUNCATE: number; export let OP_MAKE_TEMP_DIR: number; export let OP_CWD: number; export let OP_CONNECT_TLS: number; +export let OP_FETCH_ASSET: number; export let OP_HOSTNAME: number; export let OP_OPEN_PLUGIN: number; export let OP_COMPILE: number; export let OP_TRANSPILE: number; -/** **WARNING:** This is only available during the snapshotting process and is - * unavailable at runtime. */ -export let OP_FETCH_ASSET: number; - const PLUGIN_ASYNC_HANDLER_MAP: Map<number, AsyncHandler> = new Map(); export function setPluginAsyncHandler( diff --git a/cli/js/dispatch_json.ts b/cli/js/dispatch_json.ts index adccb69c6..104a7e564 100644 --- a/cli/js/dispatch_json.ts +++ b/cli/js/dispatch_json.ts @@ -62,7 +62,7 @@ export function sendSync( const resUi8 = core.dispatch(opId, argsUi8, zeroCopy); util.assert(resUi8 != null); - const res = decode(resUi8); + const res = decode(resUi8!); util.assert(res.promiseId == null); return unwrapResponse(res); } |