cindel 1.0.5 → 1.0.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.
- package/README.md +2 -2
- package/dist/client/file-loader.d.ts +2 -2
- package/dist/client/file-loader.d.ts.map +1 -1
- package/dist/client/hmr-client.d.ts.map +1 -1
- package/dist/client/stub.d.ts.map +1 -1
- package/dist/client.iife.js +107 -48
- package/dist/client.iife.js.map +3 -3
- package/dist/client.iife.min.js +4 -1
- package/dist/client.iife.min.js.map +3 -3
- package/dist/client.js +107 -48
- package/dist/client.js.map +3 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -28,11 +28,11 @@
|
|
|
28
28
|
|
|
29
29
|
**Client**
|
|
30
30
|
|
|
31
|
+
- No runtime dependencies, works in any modern browser
|
|
31
32
|
- Exponential backoff with automatic reconnect
|
|
32
|
-
- No runtime dependencies, so it works in any modern browser
|
|
33
33
|
- Event system with `on`, `once`, and `off` for connect, disconnect, reload, add, remove, etc.
|
|
34
|
-
- IIFE build compatible with userscript managers (Tampermonkey, Greasemonkey) via `@require`
|
|
35
34
|
- Iframe injection via `postMessage` for Private Network Access restricted environments
|
|
35
|
+
- IIFE build compatible with userscript managers (Tampermonkey, Greasemonkey) via `@require`
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
@@ -49,7 +49,7 @@ export class FileLoader {
|
|
|
49
49
|
_flushReload(path: any): Promise<void>;
|
|
50
50
|
removeFile(path: any): Promise<void>;
|
|
51
51
|
makeUrl(path: any): string;
|
|
52
|
-
|
|
53
|
-
_inject(kind: any, code: any, file: any):
|
|
52
|
+
_postAndAwaitAck(message: any): Promise<any>;
|
|
53
|
+
_inject(kind: any, code: any, file: any): Promise<any>;
|
|
54
54
|
}
|
|
55
55
|
//# sourceMappingURL=file-loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-loader.d.ts","sourceRoot":"","sources":["../../src/client/file-loader.js"],"names":[],"mappings":"AAAA,mFAAmF;AACnF;IACE;;;;OAiCC;IAhCC,aAAsB;IACtB;;;;;OAKG;IACH,cAFU,MAAM,GAAG,IAAI,CAES;IAChC,qBAAqB;IACrB,cADW,MAAM,CACe;IAChC;;;;;;OAMG;IACH,KAFU,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAExB;IACd;;;;;OAKG;IACH,WAFU,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC,CAEvC;IAC1B;;;;;OAKG;IACH,UAFU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEJ;IAG3B,kCAOC;IAKD,qCAwBC;IAED,oDAmBC;IAED,wCAcC;IAED,oCAwBC;IAKD,oCAeC;IAED,uCAUC;IAED,
|
|
1
|
+
{"version":3,"file":"file-loader.d.ts","sourceRoot":"","sources":["../../src/client/file-loader.js"],"names":[],"mappings":"AAAA,mFAAmF;AACnF;IACE;;;;OAiCC;IAhCC,aAAsB;IACtB;;;;;OAKG;IACH,cAFU,MAAM,GAAG,IAAI,CAES;IAChC,qBAAqB;IACrB,cADW,MAAM,CACe;IAChC;;;;;;OAMG;IACH,KAFU,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAExB;IACd;;;;;OAKG;IACH,WAFU,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,CAAC,CAEvC;IAC1B;;;;;OAKG;IACH,UAFU,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAEJ;IAG3B,kCAOC;IAKD,qCAwBC;IAED,oDAmBC;IAED,wCAcC;IAED,oCAwBC;IAKD,oCAeC;IAED,uCAUC;IAED,qCAqBC;IAGD,2BAIC;IAED,6CAaC;IAED,uDAEC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hmr-client.d.ts","sourceRoot":"","sources":["../../src/client/hmr-client.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,qBAvBG;QAAyB,KAAK,GAAtB,MAAM;QACW,OAAO,GAAxB,MAAM;QACY,UAAU,GAA5B,OAAO;QACU,IAAI,GAArB,MAAM;QACW,IAAI,GAArB,MAAM;QACY,MAAM,GAAxB,OAAO;QACW,aAAa,GAA/B,OAAO;QACU,cAAc,GAA/B,MAAM;QACW,iBAAiB,GAAlC,MAAM;QACY,eAAe,GAAjC,OAAO;QACY,IAAI,GAAvB,MAAM,EAAE;QACsC,UAAU,GAAxD,CAAS,IAAM,EAAN,MAAM,EAAE,IAAQ,EAAR,MAAM,EAAE,KAAG,OAAO;QAChB,IAAI,GAAvB,MAAM,EAAE;QAC4B,UAAU,GAA9C,CAAS,IAAM,EAAN,MAAM,KAAG,OAAO;QACyB,iBAAiB,GAAnE,CAAS,IAAM,EAAN,MAAM,EAAE,IAAQ,EAAR,MAAM,EAAE,KAAG,MAAM,GAAC,IAAI;QACN,YAAY,GAA7C,CAAS,IAAM,EAAN,MAAM,KAAG,IAAI;QACiB,SAAS,GAAhD,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAG,MAAM,EAAE;QACF,SAAS,GAAnC,KAAK,UAAU;QACY,MAAM,GAAjC,OAAO,MAAS;KACxB,EAwFF;IA9EC,WAAkB;IAClB,aAAsB;IACtB,oBAAsB;IAEtB,+BAAyD;IACzD,uBAA+C;IAC/C,uBAAiD;IACjD,0BAAwD;IACxD,yBAAqD;IAGrD,wBAAsC;IACtC,oBA5BkB,MAAM,KAAG,OAAO,CA4BQ;IAG1C,oBAAiF;IACjF,gBAAuE;IAGvE,gBAAkB;IAElB,0BApCkB,MAAM,QAAE,MAAM,EAAE,KAAG,MAAM,GAAC,IAAI,CAoCO;IACvD,qBApCkB,MAAM,KAAG,IAAI,CAoCc;IAC7C,sBAAqC;IACrC,eAAmE;IAEnE,kBAAkB;IAClB,0BAA0B;IAC1B,qBAAwB;IACxB,6BAA8B;IAC9B,gCAA2B;IAI3B,qBAAuB;IACvB,6BAAgC;IAShC,mBAAiC;IACjC,mBAAiC;IAIjC,sBAAiD;IAGjD,uCAAuB;IAEvB,uBAIE;IAEF,wEAAwE;IACxE,aADW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CACF;IAC5B,uFAAuF;IACvF,qBADW,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CACC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYC;IAGH,oCAkBC;IAED,8CAcC;IAED,mCAIC;IAED,sEAoDC;IAED,kCA0BC;IAED,4CAgDC;IAED,8EAkEC;IAED,2CA4CC;IAED,wCA6CC;IAED;;;;;OAKG;IACH,UAJW,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAC,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,YAAY,GAAC,OAAO,sBAElE,SAAS,CAQrB;IAED;;;;;OAKG;IACH,YAJW,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAC,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,YAAY,GAAC,OAAO,sBAElE,SAAS,CASrB;IAED;;;;;OAKG;IACH,WAJW,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAC,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,YAAY,GAAC,OAAO,sBAElE,SAAS,CAoBrB;IAED,uCAQC;IAMD,iCAGC;IAED,oCAWC;IAID,
|
|
1
|
+
{"version":3,"file":"hmr-client.d.ts","sourceRoot":"","sources":["../../src/client/hmr-client.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,qBAvBG;QAAyB,KAAK,GAAtB,MAAM;QACW,OAAO,GAAxB,MAAM;QACY,UAAU,GAA5B,OAAO;QACU,IAAI,GAArB,MAAM;QACW,IAAI,GAArB,MAAM;QACY,MAAM,GAAxB,OAAO;QACW,aAAa,GAA/B,OAAO;QACU,cAAc,GAA/B,MAAM;QACW,iBAAiB,GAAlC,MAAM;QACY,eAAe,GAAjC,OAAO;QACY,IAAI,GAAvB,MAAM,EAAE;QACsC,UAAU,GAAxD,CAAS,IAAM,EAAN,MAAM,EAAE,IAAQ,EAAR,MAAM,EAAE,KAAG,OAAO;QAChB,IAAI,GAAvB,MAAM,EAAE;QAC4B,UAAU,GAA9C,CAAS,IAAM,EAAN,MAAM,KAAG,OAAO;QACyB,iBAAiB,GAAnE,CAAS,IAAM,EAAN,MAAM,EAAE,IAAQ,EAAR,MAAM,EAAE,KAAG,MAAM,GAAC,IAAI;QACN,YAAY,GAA7C,CAAS,IAAM,EAAN,MAAM,KAAG,IAAI;QACiB,SAAS,GAAhD,CAAS,IAAQ,EAAR,MAAM,EAAE,KAAG,MAAM,EAAE;QACF,SAAS,GAAnC,KAAK,UAAU;QACY,MAAM,GAAjC,OAAO,MAAS;KACxB,EAwFF;IA9EC,WAAkB;IAClB,aAAsB;IACtB,oBAAsB;IAEtB,+BAAyD;IACzD,uBAA+C;IAC/C,uBAAiD;IACjD,0BAAwD;IACxD,yBAAqD;IAGrD,wBAAsC;IACtC,oBA5BkB,MAAM,KAAG,OAAO,CA4BQ;IAG1C,oBAAiF;IACjF,gBAAuE;IAGvE,gBAAkB;IAElB,0BApCkB,MAAM,QAAE,MAAM,EAAE,KAAG,MAAM,GAAC,IAAI,CAoCO;IACvD,qBApCkB,MAAM,KAAG,IAAI,CAoCc;IAC7C,sBAAqC;IACrC,eAAmE;IAEnE,kBAAkB;IAClB,0BAA0B;IAC1B,qBAAwB;IACxB,6BAA8B;IAC9B,gCAA2B;IAI3B,qBAAuB;IACvB,6BAAgC;IAShC,mBAAiC;IACjC,mBAAiC;IAIjC,sBAAiD;IAGjD,uCAAuB;IAEvB,uBAIE;IAEF,wEAAwE;IACxE,aADW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CACF;IAC5B,uFAAuF;IACvF,qBADW,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CACC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAYC;IAGH,oCAkBC;IAED,8CAcC;IAED,mCAIC;IAED,sEAoDC;IAED,kCA0BC;IAED,4CAgDC;IAED,8EAkEC;IAED,2CA4CC;IAED,wCA6CC;IAED;;;;;OAKG;IACH,UAJW,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAC,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,YAAY,GAAC,OAAO,sBAElE,SAAS,CAQrB;IAED;;;;;OAKG;IACH,YAJW,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAC,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,YAAY,GAAC,OAAO,sBAElE,SAAS,CASrB;IAED;;;;;OAKG;IACH,WAJW,MAAM,GAAC,QAAQ,GAAC,KAAK,GAAC,QAAQ,GAAC,MAAM,GAAC,SAAS,GAAC,YAAY,GAAC,OAAO,sBAElE,SAAS,CAoBrB;IAED,uCAQC;IAMD,iCAGC;IAED,oCAWC;IAID,6BAyBC;IAKD,2BA0BC;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAiGzB;IAED;;OAEG;IACH,mBAgBC;CACF;2BA5uB0B,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../src/client/stub.js"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../src/client/stub.js"],"names":[],"mappings":"AAAA,6BAsEC"}
|
package/dist/client.iife.js
CHANGED
|
@@ -1586,15 +1586,15 @@ var HMR = (() => {
|
|
|
1586
1586
|
fetch(url).then((r) => {
|
|
1587
1587
|
if (!r.ok) throw new Error(`Failed to fetch CSS: ${path} (${r.status})`);
|
|
1588
1588
|
return r.text();
|
|
1589
|
-
}).then((code) =>
|
|
1590
|
-
this._inject("css", code, path);
|
|
1591
|
-
})
|
|
1589
|
+
}).then((code) => this._inject("css", code, path))
|
|
1592
1590
|
);
|
|
1593
1591
|
}
|
|
1594
1592
|
if (toParent) {
|
|
1595
1593
|
ops.push(this._loadCSSInParent(path, url));
|
|
1596
1594
|
}
|
|
1597
|
-
await Promise.
|
|
1595
|
+
const results = await Promise.allSettled(ops);
|
|
1596
|
+
const failed = results.find((r) => r.status === "rejected");
|
|
1597
|
+
if (failed) throw failed.reason;
|
|
1598
1598
|
return true;
|
|
1599
1599
|
}
|
|
1600
1600
|
_loadCSSInParent(path, url) {
|
|
@@ -1622,7 +1622,7 @@ var HMR = (() => {
|
|
|
1622
1622
|
if (!r.ok) throw new Error(`Failed to fetch module: ${path} (${r.status})`);
|
|
1623
1623
|
return r.text();
|
|
1624
1624
|
});
|
|
1625
|
-
this._inject("module", code, path);
|
|
1625
|
+
await this._inject("module", code, path);
|
|
1626
1626
|
return true;
|
|
1627
1627
|
}
|
|
1628
1628
|
await import(url);
|
|
@@ -1637,7 +1637,7 @@ var HMR = (() => {
|
|
|
1637
1637
|
if (!r.ok) throw new Error(`Failed to fetch script: ${path} (${r.status})`);
|
|
1638
1638
|
return r.text();
|
|
1639
1639
|
});
|
|
1640
|
-
this._inject("script", code, path);
|
|
1640
|
+
await this._inject("script", code, path);
|
|
1641
1641
|
return true;
|
|
1642
1642
|
}
|
|
1643
1643
|
const script = document.createElement("script");
|
|
@@ -1686,8 +1686,7 @@ var HMR = (() => {
|
|
|
1686
1686
|
this.loadQueue.delete(path);
|
|
1687
1687
|
}
|
|
1688
1688
|
if (this.iframeTarget) {
|
|
1689
|
-
this.
|
|
1690
|
-
await Promise.resolve();
|
|
1689
|
+
await this._postAndAwaitAck({ type: "hmr:remove", file: path });
|
|
1691
1690
|
} else {
|
|
1692
1691
|
const el = document.querySelector(`[data-file="${path}"]`);
|
|
1693
1692
|
if (el) {
|
|
@@ -1703,13 +1702,27 @@ var HMR = (() => {
|
|
|
1703
1702
|
this.versions.set(path, v);
|
|
1704
1703
|
return `${this.httpUrl}${path}?v=${v}`;
|
|
1705
1704
|
}
|
|
1706
|
-
//
|
|
1707
|
-
|
|
1708
|
-
|
|
1705
|
+
// Post a message and resolve once the stub sends back hmr:ack
|
|
1706
|
+
_postAndAwaitAck(message) {
|
|
1707
|
+
return new Promise((resolve) => {
|
|
1708
|
+
const onAck = (e) => {
|
|
1709
|
+
if (e.source !== this.iframeTarget) return;
|
|
1710
|
+
let data;
|
|
1711
|
+
try {
|
|
1712
|
+
data = JSON.parse(e.data);
|
|
1713
|
+
} catch {
|
|
1714
|
+
return;
|
|
1715
|
+
}
|
|
1716
|
+
if (data?.type !== "hmr:ack") return;
|
|
1717
|
+
window.removeEventListener("message", onAck);
|
|
1718
|
+
resolve();
|
|
1719
|
+
};
|
|
1720
|
+
window.addEventListener("message", onAck);
|
|
1721
|
+
this.iframeTarget.postMessage(JSON.stringify(message), this.iframeOrigin);
|
|
1722
|
+
});
|
|
1709
1723
|
}
|
|
1710
|
-
// Forward a file payload to the iframe target
|
|
1711
1724
|
_inject(kind, code, file) {
|
|
1712
|
-
this.
|
|
1725
|
+
return this._postAndAwaitAck({ type: "hmr:inject", kind, code, file });
|
|
1713
1726
|
}
|
|
1714
1727
|
};
|
|
1715
1728
|
|
|
@@ -2213,15 +2226,22 @@ var HMR = (() => {
|
|
|
2213
2226
|
this._processingMessages = false;
|
|
2214
2227
|
}
|
|
2215
2228
|
// Wait for stub's hmr:ready signal. Stub fires it proactively on run.
|
|
2216
|
-
// Times out after 5s
|
|
2229
|
+
// Times out after 5s and resolves anyway, a missing stub degrades gracefully.
|
|
2217
2230
|
_waitForStub() {
|
|
2218
|
-
return new Promise((resolve
|
|
2231
|
+
return new Promise((resolve) => {
|
|
2219
2232
|
const timer = setTimeout(() => {
|
|
2220
2233
|
window.removeEventListener("message", onReady);
|
|
2221
|
-
|
|
2234
|
+
this.log("warning", "Timed out waiting for hmr:ready. Was HMR.stub() called in the iframe?");
|
|
2235
|
+
resolve();
|
|
2222
2236
|
}, 5e3);
|
|
2223
2237
|
const onReady = (e) => {
|
|
2224
|
-
|
|
2238
|
+
let data;
|
|
2239
|
+
try {
|
|
2240
|
+
data = JSON.parse(e.data);
|
|
2241
|
+
} catch {
|
|
2242
|
+
return;
|
|
2243
|
+
}
|
|
2244
|
+
if (data?.type !== "hmr:ready") return;
|
|
2225
2245
|
const originOk = this._iframeOrigin === "*" || e.origin === this._iframeOrigin;
|
|
2226
2246
|
if (!originOk) return;
|
|
2227
2247
|
clearTimeout(timer);
|
|
@@ -2241,15 +2261,25 @@ var HMR = (() => {
|
|
|
2241
2261
|
_listenForReattach() {
|
|
2242
2262
|
if (this._onReattach) return;
|
|
2243
2263
|
this._onReattach = async (e) => {
|
|
2244
|
-
|
|
2264
|
+
let data;
|
|
2265
|
+
try {
|
|
2266
|
+
data = JSON.parse(e.data);
|
|
2267
|
+
} catch {
|
|
2268
|
+
return;
|
|
2269
|
+
}
|
|
2270
|
+
if (data?.type !== "hmr:ready") return;
|
|
2245
2271
|
const originOk = this._iframeOrigin === "*" || e.origin === this._iframeOrigin;
|
|
2246
2272
|
if (!originOk) return;
|
|
2247
2273
|
if (e.source === this._iframeTarget) return;
|
|
2248
2274
|
this._iframeTarget = e.source;
|
|
2249
2275
|
this.fileLoader.iframeTarget = e.source;
|
|
2250
2276
|
this.log("success", "HMR reattached to new iframe");
|
|
2251
|
-
for (const path of this.fileLoader.versions.keys()) {
|
|
2252
|
-
|
|
2277
|
+
for (const path of this.sortFiles([...this.fileLoader.versions.keys()])) {
|
|
2278
|
+
try {
|
|
2279
|
+
await this.fileLoader.loadFile(path);
|
|
2280
|
+
} catch (e2) {
|
|
2281
|
+
this.log("error", `Reattach failed to load ${path}: ${e2.message}`);
|
|
2282
|
+
}
|
|
2253
2283
|
}
|
|
2254
2284
|
};
|
|
2255
2285
|
window.addEventListener("message", this._onReattach);
|
|
@@ -2285,15 +2315,8 @@ var HMR = (() => {
|
|
|
2285
2315
|
this._messageQueue = [];
|
|
2286
2316
|
this._processingMessages = true;
|
|
2287
2317
|
if (this._iframeTarget || this._stubManaged) {
|
|
2288
|
-
|
|
2289
|
-
|
|
2290
|
-
if (this._stubManaged) this._listenForReattach();
|
|
2291
|
-
} catch (e) {
|
|
2292
|
-
this.log("error", e.message);
|
|
2293
|
-
this._processingMessages = false;
|
|
2294
|
-
reject(e);
|
|
2295
|
-
return;
|
|
2296
|
-
}
|
|
2318
|
+
await this._waitForStub();
|
|
2319
|
+
if (this._stubManaged) this._listenForReattach();
|
|
2297
2320
|
}
|
|
2298
2321
|
this._processingMessages = false;
|
|
2299
2322
|
if (this._messageQueue.length > 0) this._drainMessageQueue();
|
|
@@ -2369,36 +2392,72 @@ var HMR = (() => {
|
|
|
2369
2392
|
const removeIfExists = (el) => {
|
|
2370
2393
|
if (el) el.remove();
|
|
2371
2394
|
};
|
|
2372
|
-
const injectScript = (kind, code, file) => {
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2395
|
+
const injectScript = async (kind, code, file) => {
|
|
2396
|
+
const url = URL.createObjectURL(new Blob([code + `
|
|
2397
|
+
//# sourceURL=${file}`], { type: "text/javascript" }));
|
|
2398
|
+
try {
|
|
2399
|
+
if (kind === "module") {
|
|
2400
|
+
await import(url);
|
|
2401
|
+
} else {
|
|
2402
|
+
const script = document.createElement("script");
|
|
2403
|
+
script.src = url;
|
|
2404
|
+
await new Promise((resolve, reject) => {
|
|
2405
|
+
script.onload = resolve;
|
|
2406
|
+
script.onerror = () => reject(new Error(`Failed to execute script: ${file}`));
|
|
2407
|
+
document.documentElement.appendChild(script);
|
|
2408
|
+
});
|
|
2409
|
+
}
|
|
2410
|
+
} finally {
|
|
2411
|
+
URL.revokeObjectURL(url);
|
|
2412
|
+
}
|
|
2380
2413
|
};
|
|
2381
|
-
const injectStyle = (code, file) => {
|
|
2382
|
-
const existing = byFile("
|
|
2383
|
-
const
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2414
|
+
const injectStyle = async (code, file) => {
|
|
2415
|
+
const existing = byFile("link", file);
|
|
2416
|
+
const url = URL.createObjectURL(new Blob([code + `
|
|
2417
|
+
/*# sourceURL=${file} */`], { type: "text/css" }));
|
|
2418
|
+
const link = document.createElement("link");
|
|
2419
|
+
link.rel = "stylesheet";
|
|
2420
|
+
link.href = url;
|
|
2421
|
+
link.dataset.file = file;
|
|
2422
|
+
await new Promise((resolve, reject) => {
|
|
2423
|
+
link.onload = () => {
|
|
2424
|
+
URL.revokeObjectURL(url);
|
|
2425
|
+
resolve();
|
|
2426
|
+
};
|
|
2427
|
+
link.onerror = () => {
|
|
2428
|
+
URL.revokeObjectURL(url);
|
|
2429
|
+
reject(new Error(`Failed to load CSS: ${file}`));
|
|
2430
|
+
};
|
|
2431
|
+
document.head.appendChild(link);
|
|
2432
|
+
});
|
|
2387
2433
|
removeIfExists(existing);
|
|
2388
2434
|
};
|
|
2389
|
-
window.addEventListener("message", (e) => {
|
|
2390
|
-
|
|
2435
|
+
window.addEventListener("message", async (e) => {
|
|
2436
|
+
let data;
|
|
2437
|
+
try {
|
|
2438
|
+
data = JSON.parse(e.data);
|
|
2439
|
+
} catch {
|
|
2440
|
+
return;
|
|
2441
|
+
}
|
|
2391
2442
|
if (!data?.type) return;
|
|
2443
|
+
const ackOrigin = e.origin && e.origin !== "null" ? e.origin : "*";
|
|
2444
|
+
const ack = () => e.source?.postMessage(JSON.stringify({ type: "hmr:ack" }), ackOrigin);
|
|
2392
2445
|
if (data.type === "hmr:remove") {
|
|
2393
2446
|
removeIfExists(document.querySelector(`[data-file="${CSS.escape(data.file)}"]`));
|
|
2447
|
+
ack();
|
|
2394
2448
|
return;
|
|
2395
2449
|
}
|
|
2396
2450
|
if (data.type !== "hmr:inject") return;
|
|
2397
2451
|
const { kind, code, file } = data;
|
|
2398
|
-
|
|
2399
|
-
|
|
2452
|
+
try {
|
|
2453
|
+
if (kind === "script" || kind === "module") await injectScript(kind, code, file);
|
|
2454
|
+
else if (kind === "css") await injectStyle(code, file);
|
|
2455
|
+
} catch (err) {
|
|
2456
|
+
console.error(`Failed to inject ${file}:`, err.message ?? err, "\n" + err.stack);
|
|
2457
|
+
}
|
|
2458
|
+
ack();
|
|
2400
2459
|
});
|
|
2401
|
-
window.parent.postMessage({ type: "hmr:ready" }, "*");
|
|
2460
|
+
window.parent.postMessage(JSON.stringify({ type: "hmr:ready" }), "*");
|
|
2402
2461
|
}
|
|
2403
2462
|
return __toCommonJS(client_exports);
|
|
2404
2463
|
})();
|