Skip to content

Commit bc97e60

Browse files
build(runtime): add pre-built dist artifacts for v0.1.0
- rawscript.js: IIFE boot script for main-thread SW registration - rawscript-sw.js: ESM Service Worker with inlined transpiler - Committed for local development until CI pipeline (v0.9.0)
1 parent 3915065 commit bc97e60

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// src/transpiler.ts
2+
import * as esbuild from "https://unpkg.com/esbuild-wasm@0.20.2/esm/browser.js";
3+
var initPromise = null;
4+
async function ensureInitialized() {
5+
if (!initPromise) {
6+
initPromise = esbuild.initialize({
7+
wasmURL: "https://unpkg.com/esbuild-wasm@0.20.2/esbuild.wasm",
8+
worker: false
9+
});
10+
}
11+
await initPromise;
12+
}
13+
async function transpile(source, filename) {
14+
await ensureInitialized();
15+
const result = await esbuild.transform(source, {
16+
loader: "ts",
17+
format: "esm",
18+
target: "esnext",
19+
sourcefile: filename,
20+
sourcemap: "inline"
21+
});
22+
return result.code;
23+
}
24+
25+
// src/sw.ts
26+
async function handleFetch(event) {
27+
const url = new URL(event.request.url);
28+
if (url.pathname.endsWith(".ts") || url.pathname.endsWith(".tsx")) {
29+
const response = await fetch(event.request);
30+
const source = await response.text();
31+
const transpiled = await transpile(source, url.pathname);
32+
return new Response(transpiled, {
33+
headers: { "Content-Type": "application/javascript" }
34+
});
35+
}
36+
return fetch(event.request);
37+
}
38+
self.addEventListener("fetch", (event) => {
39+
event.respondWith(handleFetch(event));
40+
});

packages/runtime/dist/rawscript.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
"use strict";
2+
(() => {
3+
// src/boot.ts
4+
var SW_PATH = "/rawscript-sw.js";
5+
if ("serviceWorker" in navigator) {
6+
navigator.serviceWorker.register(SW_PATH, { type: "module" }).then((reg) => {
7+
if (reg.installing) {
8+
reg.installing.addEventListener("statechange", (e) => {
9+
if (e.target.state === "activated") {
10+
location.reload();
11+
}
12+
});
13+
}
14+
});
15+
}
16+
})();

0 commit comments

Comments
 (0)