Skip to content

Commit 6ebdfc7

Browse files
feat(runtime): implement esbuild-wasm transpiler with lazy initialization
- Load esbuild-wasm from CDN (pinned v0.20.2) — zero npm dependencies - Implement Promise-based lazy init guard for concurrent call safety - Expose transpile() with ESM output, esnext target, inline sourcemaps - Disable nested worker (worker: false) for ServiceWorker compat
1 parent 331c3ee commit 6ebdfc7

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

packages/runtime/src/transpiler.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import * as esbuild from 'https://unpkg.com/esbuild-wasm@0.20.2/esm/browser.js'
2+
3+
let initPromise: Promise<void> | null = null
4+
5+
async function ensureInitialized(): Promise<void> {
6+
if (!initPromise) {
7+
initPromise = esbuild.initialize({
8+
wasmURL: 'https://unpkg.com/esbuild-wasm@0.20.2/esbuild.wasm',
9+
worker: false,
10+
})
11+
}
12+
await initPromise
13+
}
14+
15+
export async function transpile(source: string, filename: string): Promise<string> {
16+
await ensureInitialized()
17+
const result = await esbuild.transform(source, {
18+
loader: 'ts',
19+
format: 'esm',
20+
target: 'esnext',
21+
sourcefile: filename,
22+
sourcemap: 'inline',
23+
})
24+
return result.code
25+
}

0 commit comments

Comments
 (0)