@buddhilive/sandbox-sw 0.1.0-beta.4 → 0.1.0-beta.6

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.
Files changed (2) hide show
  1. package/dist/sw.js +59 -44
  2. package/package.json +1 -1
package/dist/sw.js CHANGED
@@ -1,9 +1,9 @@
1
- var T = Object.defineProperty;
2
- var O = (e, t, r) => t in e ? T(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
- var g = (e, t, r) => O(e, typeof t != "symbol" ? t + "" : t, r);
4
- class C {
1
+ var C = Object.defineProperty;
2
+ var O = (e, t, r) => t in e ? C(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;
3
+ var m = (e, t, r) => O(e, typeof t != "symbol" ? t + "" : t, r);
4
+ class E {
5
5
  constructor() {
6
- g(this, "ports", /* @__PURE__ */ new Map());
6
+ m(this, "ports", /* @__PURE__ */ new Map());
7
7
  }
8
8
  register(t, r) {
9
9
  this.ports.set(t, {
@@ -25,9 +25,9 @@ class C {
25
25
  return Array.from(this.ports.keys());
26
26
  }
27
27
  }
28
- const a = new C();
29
- async function E(e, t, r) {
30
- const s = a.get(e);
28
+ const l = new E();
29
+ async function x(e, t, r) {
30
+ const s = l.get(e);
31
31
  if (!s)
32
32
  return new Response(
33
33
  `<html><body><h2>503 Service Unavailable</h2><p>No virtual HTTP server listening on port ${e}.</p></body></html>`,
@@ -43,65 +43,80 @@ async function E(e, t, r) {
43
43
  );
44
44
  if (s.messagePort) {
45
45
  const o = new MessageChannel(), f = {};
46
- t.headers.forEach((l, i) => {
47
- f[i] = l;
46
+ t.headers.forEach((c, i) => {
47
+ f[i] = c;
48
48
  });
49
- const m = t.method !== "GET" && t.method !== "HEAD" ? await t.arrayBuffer() : null;
50
- return new Promise((l) => {
51
- let i = null, p = !1, h = 200, y = "OK";
52
- const c = new Headers({
49
+ const w = t.method !== "GET" && t.method !== "HEAD" ? await t.arrayBuffer() : null;
50
+ return new Promise((c) => {
51
+ let i = null, d = !1, h = 200, y = "OK";
52
+ const u = new Headers({
53
53
  "Cross-Origin-Opener-Policy": "same-origin",
54
54
  "Cross-Origin-Embedder-Policy": "require-corp"
55
- }), w = setTimeout(() => {
56
- p || (p = !0, l(
55
+ }), b = setTimeout(() => {
56
+ d || (d = !0, c(
57
57
  new Response(
58
58
  `<html><body><h2>504 Gateway Timeout</h2><p>Port ${e} timed out responding.</p></body></html>`,
59
59
  { status: 504, headers: { "Content-Type": "text/html" } }
60
60
  )
61
61
  ));
62
62
  }, 15e3);
63
- o.port1.onmessage = (b) => {
64
- clearTimeout(w);
65
- const n = b.data;
63
+ let g = !1;
64
+ o.port1.onmessage = (P) => {
65
+ clearTimeout(b);
66
+ const n = P.data;
66
67
  if (n.type === "headers") {
67
68
  if (h = n.status || 200, y = n.statusText || "OK", n.headers)
68
- for (const [u, d] of Object.entries(n.headers))
69
- c.set(u, String(d));
69
+ for (const [p, a] of Object.entries(n.headers))
70
+ u.set(p, String(a)), p.toLowerCase() === "content-type" && String(a).includes("text/event-stream") && (g = !0);
70
71
  return;
71
72
  }
72
73
  if (n.type === "chunk") {
73
- if (p)
74
+ if (d)
74
75
  i && i.enqueue(new Uint8Array(n.data));
75
76
  else {
76
- p = !0;
77
- const u = new ReadableStream({
78
- start(d) {
79
- i = d, d.enqueue(new Uint8Array(n.data));
77
+ d = !0;
78
+ const p = new ReadableStream({
79
+ start(a) {
80
+ i = a, a.enqueue(new Uint8Array(n.data));
81
+ },
82
+ cancel() {
83
+ try {
84
+ o.port1.postMessage({ type: "abort" }), o.port1.close();
85
+ } catch {
86
+ }
80
87
  }
81
88
  });
82
- l(
83
- new Response(u, {
89
+ c(
90
+ new Response(p, {
84
91
  status: h,
85
92
  statusText: y,
86
- headers: c
93
+ headers: u
87
94
  })
88
95
  );
89
96
  }
90
97
  return;
91
98
  }
99
+ if (n.type === "close") {
100
+ if (i)
101
+ try {
102
+ i.close();
103
+ } catch {
104
+ }
105
+ return;
106
+ }
92
107
  if (n.type === "end" || !n.type) {
93
108
  if (i)
94
- n.body && n.body.byteLength > 0 && i.enqueue(new Uint8Array(n.body)), i.close();
95
- else if (!p) {
96
- if (p = !0, n.headers)
97
- for (const [d, P] of Object.entries(n.headers))
98
- c.set(d, String(P));
99
- const u = new Response(n.body || null, {
109
+ n.body && n.body.byteLength > 0 && i.enqueue(new Uint8Array(n.body)), g || i.close();
110
+ else if (!d) {
111
+ if (d = !0, n.headers)
112
+ for (const [a, T] of Object.entries(n.headers))
113
+ u.set(a, String(T));
114
+ const p = new Response(n.body || null, {
100
115
  status: n.status || h,
101
116
  statusText: n.statusText || y,
102
- headers: c
117
+ headers: u
103
118
  });
104
- l(u);
119
+ c(p);
105
120
  }
106
121
  }
107
122
  }, s.messagePort.postMessage(
@@ -111,7 +126,7 @@ async function E(e, t, r) {
111
126
  path: r,
112
127
  method: t.method,
113
128
  headers: f,
114
- body: m,
129
+ body: w,
115
130
  replyPort: o.port2
116
131
  },
117
132
  [o.port2]
@@ -135,13 +150,13 @@ function R() {
135
150
  const e = new BroadcastChannel("buddhilive-sandbox-sw");
136
151
  e.onmessage = (t) => {
137
152
  const { type: r, port: s } = t.data;
138
- r === "port:register" && typeof s == "number" ? (a.register(s), e.postMessage({ type: "port:registered", port: s })) : r === "port:unregister" && typeof s == "number" ? a.unregister(s) : r === "sw:ping" && e.postMessage({
153
+ r === "port:register" && typeof s == "number" ? (l.register(s), e.postMessage({ type: "port:registered", port: s })) : r === "port:unregister" && typeof s == "number" ? l.unregister(s) : r === "sw:ping" && e.postMessage({
139
154
  type: "sw:pong",
140
- ports: a.list()
155
+ ports: l.list()
141
156
  });
142
157
  }, e.postMessage({
143
158
  type: "sw:ready",
144
- ports: a.list()
159
+ ports: l.list()
145
160
  });
146
161
  }
147
162
  self.addEventListener("message", (e) => {
@@ -150,8 +165,8 @@ self.addEventListener("message", (e) => {
150
165
  const { type: r, port: s } = t;
151
166
  if (r === "port:register" && typeof s == "number") {
152
167
  const o = e.ports && e.ports[0];
153
- a.register(s, o), e.source && "postMessage" in e.source && e.source.postMessage({ type: "port:registered", port: s });
154
- } else r === "port:unregister" && typeof s == "number" && a.unregister(s);
168
+ l.register(s, o), e.source && "postMessage" in e.source && e.source.postMessage({ type: "port:registered", port: s });
169
+ } else r === "port:unregister" && typeof s == "number" && l.unregister(s);
155
170
  });
156
171
  self.addEventListener("install", (e) => {
157
172
  e.waitUntil(self.skipWaiting());
@@ -167,7 +182,7 @@ self.addEventListener("fetch", (e) => {
167
182
  const t = new URL(e.request.url), r = t.pathname.match(/^\/__preview\/(\d+)(.*)/);
168
183
  if (r) {
169
184
  const s = parseInt(r[1], 10), o = r[2] || "/";
170
- e.respondWith(E(s, e.request, o));
185
+ e.respondWith(x(s, e.request, o));
171
186
  return;
172
187
  }
173
188
  t.origin === self.location.origin && e.respondWith(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buddhilive/sandbox-sw",
3
- "version": "0.1.0-beta.4",
3
+ "version": "0.1.0-beta.6",
4
4
  "description": "Service Worker HTTP preview bridge for client-side Node.js sandbox",
5
5
  "main": "./dist/sw.js",
6
6
  "module": "./dist/sw.js",