UNPKG

17.2 kBJavaScriptView Raw
1"use strict";
2(() => {
3 var __create = Object.create;
4 var __defProp = Object.defineProperty;
5 var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6 var __getOwnPropNames = Object.getOwnPropertyNames;
7 var __getProtoOf = Object.getPrototypeOf;
8 var __hasOwnProp = Object.prototype.hasOwnProperty;
9 var __commonJS = (cb, mod) => function __require() {
10 return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11 };
12 var __copyProps = (to, from, except, desc) => {
13 if (from && typeof from === "object" || typeof from === "function") {
14 for (let key of __getOwnPropNames(from))
15 if (!__hasOwnProp.call(to, key) && key !== except)
16 __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17 }
18 return to;
19 };
20 var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21 // If the importer is in node compatibility mode or this is not an ESM
22 // file that has been converted to a CommonJS file using a Babel-
23 // compatible transform (i.e. "__esModule" has not been set), then set
24 // "default" to the CommonJS "module.exports" for node compatibility.
25 isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26 mod
27 ));
28
29 // node_modules/.pnpm/outvariant@1.3.0/node_modules/outvariant/lib/format.js
30 var require_format = __commonJS({
31 "node_modules/.pnpm/outvariant@1.3.0/node_modules/outvariant/lib/format.js"(exports) {
32 "use strict";
33 Object.defineProperty(exports, "__esModule", { value: true });
34 exports.format = void 0;
35 var POSITIONALS_EXP = /(%?)(%([sdjo]))/g;
36 function serializePositional(positional, flag) {
37 switch (flag) {
38 case "s":
39 return positional;
40 case "d":
41 case "i":
42 return Number(positional);
43 case "j":
44 return JSON.stringify(positional);
45 case "o": {
46 if (typeof positional === "string") {
47 return positional;
48 }
49 var json = JSON.stringify(positional);
50 if (json === "{}" || json === "[]" || /^\[object .+?\]$/.test(json)) {
51 return positional;
52 }
53 return json;
54 }
55 }
56 }
57 function format(message) {
58 var positionals = [];
59 for (var _i = 1; _i < arguments.length; _i++) {
60 positionals[_i - 1] = arguments[_i];
61 }
62 if (positionals.length === 0) {
63 return message;
64 }
65 var positionalIndex = 0;
66 var formattedMessage = message.replace(POSITIONALS_EXP, function(match, isEscaped, _, flag) {
67 var positional = positionals[positionalIndex];
68 var value = serializePositional(positional, flag);
69 if (!isEscaped) {
70 positionalIndex++;
71 return value;
72 }
73 return match;
74 });
75 if (positionalIndex < positionals.length) {
76 formattedMessage += " " + positionals.slice(positionalIndex).join(" ");
77 }
78 formattedMessage = formattedMessage.replace(/%{2,2}/g, "%");
79 return formattedMessage;
80 }
81 exports.format = format;
82 }
83 });
84
85 // node_modules/.pnpm/outvariant@1.3.0/node_modules/outvariant/lib/invariant.js
86 var require_invariant = __commonJS({
87 "node_modules/.pnpm/outvariant@1.3.0/node_modules/outvariant/lib/invariant.js"(exports) {
88 "use strict";
89 var __extends = exports && exports.__extends || function() {
90 var extendStatics = function(d, b) {
91 extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
92 d2.__proto__ = b2;
93 } || function(d2, b2) {
94 for (var p in b2)
95 if (Object.prototype.hasOwnProperty.call(b2, p))
96 d2[p] = b2[p];
97 };
98 return extendStatics(d, b);
99 };
100 return function(d, b) {
101 if (typeof b !== "function" && b !== null)
102 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
103 extendStatics(d, b);
104 function __() {
105 this.constructor = d;
106 }
107 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
108 };
109 }();
110 var __spreadArray = exports && exports.__spreadArray || function(to, from) {
111 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
112 to[j] = from[i];
113 return to;
114 };
115 Object.defineProperty(exports, "__esModule", { value: true });
116 exports.invariant = exports.createInvariantWith = exports.InvariantError = void 0;
117 var format_1 = require_format();
118 var STACK_FRAMES_TO_IGNORE = 2;
119 function cleanErrorStack(error) {
120 if (!error.stack) {
121 return;
122 }
123 var nextStack = error.stack.split("\n");
124 nextStack.splice(1, STACK_FRAMES_TO_IGNORE);
125 error.stack = nextStack.join("\n");
126 }
127 var InvariantError = (
128 /** @class */
129 function(_super) {
130 __extends(InvariantError2, _super);
131 function InvariantError2(message) {
132 var positionals = [];
133 for (var _i = 1; _i < arguments.length; _i++) {
134 positionals[_i - 1] = arguments[_i];
135 }
136 var _this = _super.call(this, message) || this;
137 _this.message = message;
138 _this.name = "Invariant Violation";
139 _this.message = format_1.format.apply(void 0, __spreadArray([message], positionals));
140 cleanErrorStack(_this);
141 return _this;
142 }
143 return InvariantError2;
144 }(Error)
145 );
146 exports.InvariantError = InvariantError;
147 function createInvariantWith(ErrorConstructor) {
148 var invariant2 = function(predicate, message) {
149 var positionals = [];
150 for (var _i = 2; _i < arguments.length; _i++) {
151 positionals[_i - 2] = arguments[_i];
152 }
153 if (!predicate) {
154 var resolvedMessage = format_1.format.apply(void 0, __spreadArray([message], positionals));
155 var isConstructor = !!ErrorConstructor.prototype.name;
156 var error = isConstructor ? (
157 // @ts-expect-error Construct/call signature too dynamic.
158 new ErrorConstructor(resolvedMessage)
159 ) : (
160 // @ts-expect-error Construct/call signature too dynamic.
161 ErrorConstructor(resolvedMessage)
162 );
163 cleanErrorStack(error);
164 throw error;
165 }
166 };
167 return invariant2;
168 }
169 exports.createInvariantWith = createInvariantWith;
170 function polymorphicInvariant(ErrorClass) {
171 var args = [];
172 for (var _i = 1; _i < arguments.length; _i++) {
173 args[_i - 1] = arguments[_i];
174 }
175 return createInvariantWith(ErrorClass).apply(void 0, args);
176 }
177 exports.invariant = createInvariantWith(InvariantError);
178 exports.invariant.as = polymorphicInvariant;
179 }
180 });
181
182 // node_modules/.pnpm/outvariant@1.3.0/node_modules/outvariant/lib/index.js
183 var require_lib = __commonJS({
184 "node_modules/.pnpm/outvariant@1.3.0/node_modules/outvariant/lib/index.js"(exports) {
185 "use strict";
186 var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
187 if (k2 === void 0)
188 k2 = k;
189 Object.defineProperty(o, k2, { enumerable: true, get: function() {
190 return m[k];
191 } });
192 } : function(o, m, k, k2) {
193 if (k2 === void 0)
194 k2 = k;
195 o[k2] = m[k];
196 });
197 var __exportStar = exports && exports.__exportStar || function(m, exports2) {
198 for (var p in m)
199 if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
200 __createBinding(exports2, m, p);
201 };
202 Object.defineProperty(exports, "__esModule", { value: true });
203 __exportStar(require_invariant(), exports);
204 __exportStar(require_format(), exports);
205 }
206 });
207
208 // node_modules/.pnpm/@open-draft+deferred-promise@2.1.0/node_modules/@open-draft/deferred-promise/build/createDeferredExecutor.js
209 var require_createDeferredExecutor = __commonJS({
210 "node_modules/.pnpm/@open-draft+deferred-promise@2.1.0/node_modules/@open-draft/deferred-promise/build/createDeferredExecutor.js"(exports) {
211 "use strict";
212 Object.defineProperty(exports, "__esModule", { value: true });
213 exports.createDeferredExecutor = void 0;
214 function createDeferredExecutor() {
215 const executor = (resolve, reject) => {
216 executor.state = "pending";
217 executor.resolve = (data) => {
218 if (executor.state !== "pending") {
219 return;
220 }
221 executor.result = data;
222 const onFulfilled = (value) => {
223 executor.state = "fulfilled";
224 return value;
225 };
226 return resolve(data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled));
227 };
228 executor.reject = (reason) => {
229 if (executor.state !== "pending") {
230 return;
231 }
232 queueMicrotask(() => {
233 executor.state = "rejected";
234 });
235 return reject(executor.rejectionReason = reason);
236 };
237 };
238 return executor;
239 }
240 exports.createDeferredExecutor = createDeferredExecutor;
241 }
242 });
243
244 // node_modules/.pnpm/@open-draft+deferred-promise@2.1.0/node_modules/@open-draft/deferred-promise/build/DeferredPromise.js
245 var require_DeferredPromise = __commonJS({
246 "node_modules/.pnpm/@open-draft+deferred-promise@2.1.0/node_modules/@open-draft/deferred-promise/build/DeferredPromise.js"(exports) {
247 "use strict";
248 Object.defineProperty(exports, "__esModule", { value: true });
249 exports.DeferredPromise = void 0;
250 var createDeferredExecutor_1 = require_createDeferredExecutor();
251 var DeferredPromise2 = class extends Promise {
252 #executor;
253 resolve;
254 reject;
255 constructor(executor = null) {
256 const deferredExecutor = (0, createDeferredExecutor_1.createDeferredExecutor)();
257 super((originalResolve, originalReject) => {
258 deferredExecutor(originalResolve, originalReject);
259 executor?.(deferredExecutor.resolve, deferredExecutor.reject);
260 });
261 this.#executor = deferredExecutor;
262 this.resolve = this.#executor.resolve;
263 this.reject = this.#executor.reject;
264 }
265 get state() {
266 return this.#executor.state;
267 }
268 get rejectionReason() {
269 return this.#executor.rejectionReason;
270 }
271 then(onFulfilled, onRejected) {
272 return this.#decorate(super.then(onFulfilled, onRejected));
273 }
274 catch(onRejected) {
275 return this.#decorate(super.catch(onRejected));
276 }
277 finally(onfinally) {
278 return this.#decorate(super.finally(onfinally));
279 }
280 #decorate(promise) {
281 return Object.defineProperties(promise, {
282 resolve: { configurable: true, value: this.resolve },
283 reject: { configurable: true, value: this.reject }
284 });
285 }
286 };
287 exports.DeferredPromise = DeferredPromise2;
288 }
289 });
290
291 // node_modules/.pnpm/@open-draft+deferred-promise@2.1.0/node_modules/@open-draft/deferred-promise/build/index.js
292 var require_build = __commonJS({
293 "node_modules/.pnpm/@open-draft+deferred-promise@2.1.0/node_modules/@open-draft/deferred-promise/build/index.js"(exports) {
294 "use strict";
295 var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
296 if (k2 === void 0)
297 k2 = k;
298 var desc = Object.getOwnPropertyDescriptor(m, k);
299 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
300 desc = { enumerable: true, get: function() {
301 return m[k];
302 } };
303 }
304 Object.defineProperty(o, k2, desc);
305 } : function(o, m, k, k2) {
306 if (k2 === void 0)
307 k2 = k;
308 o[k2] = m[k];
309 });
310 var __exportStar = exports && exports.__exportStar || function(m, exports2) {
311 for (var p in m)
312 if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports2, p))
313 __createBinding(exports2, m, p);
314 };
315 Object.defineProperty(exports, "__esModule", { value: true });
316 __exportStar(require_createDeferredExecutor(), exports);
317 __exportStar(require_DeferredPromise(), exports);
318 }
319 });
320
321 // src/lib/utils.ts
322 var counter = 0;
323 function generateRandomId() {
324 const now = Date.now();
325 const randomNumber = Math.round(Math.random() * 1e4);
326 const count = counter += 1;
327 return (+`${now}${randomNumber}${count}`).toString(16);
328 }
329
330 // src/preview/relay/service-worker.ts
331 var import_outvariant = __toESM(require_lib());
332 var import_deferred_promise = __toESM(require_build());
333
334 // src/preview/relay/constants.ts
335 var CHANNEL_NAME = "$CSB_RELAY";
336
337 // src/preview/relay/service-worker.ts
338 self.addEventListener("install", function() {
339 self.skipWaiting();
340 });
341 self.addEventListener("activate", async (event) => {
342 event.waitUntil(self.clients.claim());
343 });
344 var pendingRequests = /* @__PURE__ */ new Map();
345 function initRelayPort(relayPort) {
346 relayPort.onmessage = (event) => {
347 const { data } = event;
348 switch (data.$type) {
349 case "preview/response": {
350 const message = data;
351 const foundRequest = pendingRequests.get(message.id);
352 (0, import_outvariant.invariant)(
353 foundRequest,
354 'Failed to handle "PREVIEW_RESPONSE_TYPE" message from the relay: unknown request ID "%s"',
355 message.id
356 );
357 pendingRequests.delete(message.id);
358 foundRequest.resolve({
359 status: message.status,
360 headers: message.headers,
361 body: message.body
362 });
363 break;
364 }
365 }
366 };
367 }
368 function createRelayPortPromise() {
369 const promise = new import_deferred_promise.DeferredPromise();
370 promise.then((port) => {
371 initRelayPort(port);
372 return port;
373 });
374 return promise;
375 }
376 var relayPortPromise = createRelayPortPromise();
377 async function sendToRelay(message) {
378 const relayPort = await relayPortPromise;
379 (0, import_outvariant.invariant)(
380 relayPort,
381 "Failed to send message to the relay: relay message port is not defined",
382 message
383 );
384 relayPort.postMessage(message);
385 }
386 self.addEventListener("message", async (event) => {
387 if (typeof event.data !== "object" || event.data.$channel !== CHANNEL_NAME) {
388 return;
389 }
390 const message = event.data;
391 switch (message.$type) {
392 case "worker/init": {
393 const nextRelayPort = event.ports[0];
394 (0, import_outvariant.invariant)(
395 relayPortPromise.state === "pending",
396 "Failed to initialize relay: relay port promise already fulfilled from previous evaluation."
397 );
398 relayPortPromise.resolve(nextRelayPort);
399 break;
400 }
401 case "worker/ping": {
402 if (!(event.source instanceof Client)) {
403 return;
404 }
405 const client = await self.clients.get(event.source.id);
406 if (client) {
407 const pong = {
408 $channel: CHANNEL_NAME,
409 $type: "worker/pong"
410 };
411 client.postMessage(pong);
412 }
413 break;
414 }
415 }
416 });
417 function getResponse(request) {
418 const requestId = generateRandomId();
419 const requestPromise = new import_deferred_promise.DeferredPromise();
420 const timeout = setTimeout(() => {
421 pendingRequests.delete(requestId);
422 requestPromise.reject(
423 new Error(
424 `Failed to handle ${request.method} ${request.url} request: no response received from the BroadcastChannel within timeout. There's likely an issue with the relay/worker communication.`
425 )
426 );
427 }, 2e4);
428 const requestMessage = {
429 $channel: CHANNEL_NAME,
430 $type: "preview/request",
431 id: requestId,
432 url: request.url,
433 method: request.method
434 };
435 pendingRequests.set(requestId, requestPromise);
436 sendToRelay(requestMessage);
437 return requestPromise.finally(() => clearTimeout(timeout));
438 }
439 self.addEventListener("fetch", (event) => {
440 const req = event.request.clone();
441 const parsedUrl = new URL(req.url);
442 if (parsedUrl.origin !== self.location.origin || parsedUrl.pathname.startsWith("/__csb")) {
443 return;
444 }
445 const handleRequest = async () => {
446 const response = await getResponse(req);
447 const swResponse = new Response(response.body, {
448 headers: response.headers,
449 status: response.status
450 });
451 return swResponse;
452 };
453 return event.respondWith(handleRequest());
454 });
455})();