@b9g/platform 0.1.3 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/worker-web.js DELETED
@@ -1,119 +0,0 @@
1
- // src/worker-web.js
2
- async function initializeWorker() {
3
- let messagePort = self;
4
- let sendMessage2 = (message) => postMessage(message);
5
- onmessage = function(event) {
6
- handleMessage(event.data);
7
- };
8
- return { messagePort, sendMessage: sendMessage2 };
9
- }
10
- var { createServiceWorkerGlobals, ServiceWorkerRuntime, createBucketStorage } = await import("./index.js");
11
- var { CustomCacheStorage, PostMessageCache } = await import("@b9g/cache");
12
- var caches = new CustomCacheStorage((name) => {
13
- return new PostMessageCache(name, {
14
- maxEntries: 1e3,
15
- maxAge: 60 * 60 * 1e3
16
- // 1 hour
17
- });
18
- });
19
- var buckets = createBucketStorage(process.cwd() + "/dist");
20
- var runtime = new ServiceWorkerRuntime();
21
- createServiceWorkerGlobals(runtime, { caches, buckets });
22
- var workerSelf = runtime;
23
- var currentApp = null;
24
- var serviceWorkerReady = false;
25
- var loadedVersion = null;
26
- async function handleFetchEvent(request) {
27
- if (!currentApp || !serviceWorkerReady) {
28
- throw new Error("ServiceWorker not ready");
29
- }
30
- try {
31
- const response = await runtime.handleRequest(request);
32
- return response;
33
- } catch (error) {
34
- console.error("[Worker] ServiceWorker request failed:", error);
35
- const response = new Response("ServiceWorker request failed", {
36
- status: 500
37
- });
38
- return response;
39
- }
40
- }
41
- async function loadServiceWorker(version, entrypoint) {
42
- try {
43
- console.info("[Worker] loadServiceWorker called with:", { version, entrypoint });
44
- const entrypointPath = process.env.SERVICEWORKER_PATH || entrypoint || `${process.cwd()}/dist/server/app.js`;
45
- console.info("[Worker] Loading from:", entrypointPath);
46
- if (loadedVersion !== null && loadedVersion !== version) {
47
- console.info(`[Worker] Hot reload detected: ${loadedVersion} -> ${version}`);
48
- console.info("[Worker] Creating completely fresh ServiceWorker context");
49
- runtime = new ServiceWorkerRuntime();
50
- createServiceWorkerGlobals(runtime, { caches, buckets });
51
- workerSelf = runtime;
52
- currentApp = null;
53
- serviceWorkerReady = false;
54
- }
55
- if (loadedVersion === version) {
56
- console.info("[Worker] ServiceWorker already loaded for version", version);
57
- return;
58
- }
59
- globalThis.self = runtime;
60
- globalThis.addEventListener = runtime.addEventListener.bind(runtime);
61
- globalThis.removeEventListener = runtime.removeEventListener.bind(runtime);
62
- globalThis.dispatchEvent = runtime.dispatchEvent.bind(runtime);
63
- const appModule = await import(`${entrypointPath}?v=${version}`);
64
- loadedVersion = version;
65
- currentApp = appModule;
66
- await runtime.install();
67
- await runtime.activate();
68
- serviceWorkerReady = true;
69
- console.info(`[Worker] ServiceWorker loaded and activated (v${version}) from ${entrypointPath}`);
70
- } catch (error) {
71
- console.error("[Worker] Failed to load ServiceWorker:", error);
72
- serviceWorkerReady = false;
73
- throw error;
74
- }
75
- }
76
- var workerId = Math.random().toString(36).substring(2, 8);
77
- var sendMessage;
78
- async function handleMessage(message) {
79
- try {
80
- if (message.type === "load") {
81
- await loadServiceWorker(message.version, message.entrypoint);
82
- sendMessage({ type: "ready", version: message.version });
83
- } else if (message.type === "request") {
84
- console.log(`[Worker-${workerId}] Handling request:`, message.request.url);
85
- const request = new Request(message.request.url, {
86
- method: message.request.method,
87
- headers: message.request.headers,
88
- body: message.request.body
89
- });
90
- const response = await handleFetchEvent(request);
91
- sendMessage({
92
- type: "response",
93
- response: {
94
- status: response.status,
95
- statusText: response.statusText,
96
- headers: Object.fromEntries(response.headers.entries()),
97
- body: await response.text()
98
- },
99
- requestId: message.requestId
100
- });
101
- } else if (message.type.startsWith("cache:") || message.type.startsWith("cachestorage:")) {
102
- } else {
103
- console.warn("[Worker] Unknown message type:", message.type);
104
- }
105
- } catch (error) {
106
- sendMessage({
107
- type: "error",
108
- error: error.message,
109
- stack: error.stack,
110
- requestId: message.requestId
111
- });
112
- }
113
- }
114
- initializeWorker().then(({ messagePort, sendMessage: send }) => {
115
- sendMessage = send;
116
- sendMessage({ type: "worker-ready" });
117
- }).catch((error) => {
118
- console.error("[Worker] Failed to initialize:", error);
119
- });