diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/js/compiler_api_test.ts | 4 | ||||
-rw-r--r-- | cli/js/compiler_bundler.ts | 13 | ||||
-rw-r--r-- | cli/tests/bundle.test.out | 5 |
3 files changed, 15 insertions, 7 deletions
diff --git a/cli/js/compiler_api_test.ts b/cli/js/compiler_api_test.ts index a6baecbf5..82f72cdef 100644 --- a/cli/js/compiler_api_test.ts +++ b/cli/js/compiler_api_test.ts @@ -94,14 +94,14 @@ test(async function bundleApiSources() { "/bar.ts": `export const bar = "bar";\n` }); assert(diagnostics == null); - assert(actual.includes(`__inst("foo")`)); + assert(actual.includes(`__inst_s("foo")`)); assert(actual.includes(`__exp["bar"]`)); }); test(async function bundleApiNoSources() { const [diagnostics, actual] = await bundle("./cli/tests/subdir/mod1.ts"); assert(diagnostics == null); - assert(actual.includes(`__inst("mod1")`)); + assert(actual.includes(`__inst_s("mod1")`)); assert(actual.includes(`__exp["printHello3"]`)); }); diff --git a/cli/js/compiler_bundler.ts b/cli/js/compiler_bundler.ts index b9893620a..f8f0b48e8 100644 --- a/cli/js/compiler_bundler.ts +++ b/cli/js/compiler_bundler.ts @@ -42,9 +42,16 @@ export function buildBundle( rootName = normalizeUrl(rootName) .replace(sharedPath, "") .replace(/\.\w+$/i, ""); + // If one of the modules requires support for top-level-await, TypeScript will + // emit the execute function as an async function. When this is the case we + // need to bubble up the TLA to the instantiation, otherwise we instantiate + // synchronously. + const hasTla = data.match(/execute:\sasync\sfunction\s/); let instantiate: string; if (rootExports && rootExports.length) { - instantiate = `const __exp = await __inst("${rootName}");\n`; + instantiate = hasTla + ? `const __exp = await __inst("${rootName}");\n` + : `const __exp = __inst_s("${rootName}");\n`; for (const rootExport of rootExports) { if (rootExport === "default") { instantiate += `export default __exp["${rootExport}"];\n`; @@ -53,7 +60,9 @@ export function buildBundle( } } } else { - instantiate = `await __inst("${rootName}");\n`; + instantiate = hasTla + ? `await __inst("${rootName}");\n` + : `__inst_s("${rootName}");\n`; } return `${SYSTEM_LOADER}\n${data}\n${instantiate}`; } diff --git a/cli/tests/bundle.test.out b/cli/tests/bundle.test.out index 1379eb7e5..778754c34 100644 --- a/cli/tests/bundle.test.out +++ b/cli/tests/bundle.test.out @@ -1,6 +1,5 @@ [WILDCARD] -let System; -let __inst; +let System, __inst, __inst_s; [WILDCARD] (() => { [WILDCARD] @@ -16,7 +15,7 @@ System.register("mod1", ["subdir2/mod2"], function (exports_3, context_3) { [WILDCARD] }); -const __exp = await __inst("mod1"); +const __exp = __inst_s("mod1"); export const returnsHi = __exp["returnsHi"]; export const returnsFoo2 = __exp["returnsFoo2"]; export const printHello3 = __exp["printHello3"]; |