summaryrefslogtreecommitdiff
path: root/cli/js/compiler_bootstrap.ts
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js/compiler_bootstrap.ts')
-rw-r--r--cli/js/compiler_bootstrap.ts34
1 files changed, 34 insertions, 0 deletions
diff --git a/cli/js/compiler_bootstrap.ts b/cli/js/compiler_bootstrap.ts
new file mode 100644
index 000000000..6de978750
--- /dev/null
+++ b/cli/js/compiler_bootstrap.ts
@@ -0,0 +1,34 @@
+// 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"
+});