cindel 1.0.3 → 1.0.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/README.md CHANGED
@@ -5,6 +5,7 @@
5
5
  [![npm version](https://img.shields.io/npm/v/cindel.svg)](https://www.npmjs.com/package/cindel)
6
6
  [![npm bundle size](https://img.shields.io/bundlephobia/minzip/cindel?style=round-square)](https://bundlephobia.com/package/cindel@latest)
7
7
  [![license](https://img.shields.io/npm/l/cindel.svg)](LICENSE)
8
+
8
9
  ---
9
10
 
10
11
  ## Features
@@ -31,6 +32,7 @@
31
32
  - No runtime dependencies, so it works in any modern browser
32
33
  - Event system with `on`, `once`, and `off` for connect, disconnect, reload, add, remove, etc.
33
34
  - IIFE build compatible with userscript managers (Tampermonkey, Greasemonkey) via `@require`
35
+ - Iframe injection via `postMessage` for Private Network Access restricted environments
34
36
 
35
37
  ---
36
38
 
@@ -387,25 +389,30 @@ process.on("SIGINT", () => server.stop().then(() => process.exit(0)));
387
389
  - **`string`** treated as a full WebSocket URL
388
390
  - **`object`** full config, see below
389
391
 
390
- | Option | Type | Default | Description |
391
- | ------------------- | ------------------------------------ | ------------------------- | ------------------------------------------------------------------------------------------------ |
392
- | `port` | `number` | | Port number |
393
- | `host` | `string` | `'localhost'` | Hostname |
394
- | `secure` | `boolean` | `false` | Use `wss://` and `https://` |
395
- | `wsUrl` | `string` | | Explicit WebSocket URL, overrides host/port |
396
- | `httpUrl` | `string` | | Explicit HTTP base URL for file fetching |
397
- | `wsPath` | `string` | `'/hmr'` | WebSocket path |
398
- | `autoReconnect` | `boolean` | `true` | Reconnect on disconnect with exponential backoff |
399
- | `reconnectDelay` | `number` | `2000` | Base reconnect delay in ms |
400
- | `maxReconnectDelay` | `number` | `30000` | Maximum reconnect delay cap in ms |
401
- | `skipOnReconnect` | `boolean` | `true` | Skip files already loaded in the page when the server reconnects |
402
- | `skip` | `string[]` | | Glob patterns for files to never load |
403
- | `filterSkip` | `(file, allFiles) => boolean` | | Custom skip logic, OR'd with `skip` |
404
- | `cold` | `string[]` | | Glob patterns that trigger a full page reload. Merged with the server's `cold` config on connect |
405
- | `filterCold` | `(file) => boolean` | | Custom cold logic, OR'd with `cold` |
406
- | `getOverrideTarget` | `(file, allFiles) => string \| null` | | Map an override file to the original it replaces |
407
- | `onFileLoaded` | `(file) => void` | | Called after each file is loaded or reloaded |
408
- | `sortFiles` | `(files) => string[]` | CSS before JS, cold first | Custom sort for the initial load order |
392
+ | Option | Type | Default | Description |
393
+ | ------------------- | ------------------------------------ | ------------- | ----------------------------------------------------------------- |
394
+ | `port` | `number` | | Port number |
395
+ | `host` | `string` | `'localhost'` | Hostname |
396
+ | `secure` | `boolean` | `false` | Use `wss://` and `https://` |
397
+ | `wsUrl` | `string` | | Explicit WebSocket URL, overrides host/port |
398
+ | `httpUrl` | `string` | | Explicit HTTP base URL for file fetching |
399
+ | `wsPath` | `string` | `'/hmr'` | WebSocket path |
400
+ | `autoReconnect` | `boolean` | `true` | Reconnect on disconnect with exponential backoff |
401
+ | `reconnectDelay` | `number` | `2000` | Base reconnect delay in ms |
402
+ | `maxReconnectDelay` | `number` | `30000` | Maximum reconnect delay cap in ms |
403
+ | `skipOnReconnect` | `boolean` | `true` | Skip files already loaded in the page when the server reconnects |
404
+ | `skip` | `string[]` | | Glob patterns for files to never load |
405
+ | `filterSkip` | `(file, allFiles) => boolean` | | Custom skip logic, OR'd with `skip` |
406
+ | `cold` | `string[]` | | Glob patterns that emit a `cold` event instead of reloading |
407
+ | `filterCold` | `(file) => boolean` | | Custom cold logic, OR'd with `cold` |
408
+ | `getOverrideTarget` | `(file, allFiles) => string \| null` | | Map an override file to the original it replaces |
409
+ | `onFileLoaded` | `(file) => void` | | Called after each file is loaded or reloaded |
410
+ | `loadOrder` | `Stage[]` | | Extra stages prepended before the built-in sorting |
411
+ | `sortFiles` | `(files) => string[]` | | Fully replaces the default sort. When set, `loadOrder` is ignored |
412
+ | `iframe` | `boolean \| Object` | | Forward files to an iframe via `postMessage` |
413
+ | `iframe.target` | `Window \| HTMLIFrameElement` | | Target a specific same-origin iframe, skips auto-discovery |
414
+ | `iframe.origin` | `string` | `'*'` | Validates incoming handshake responses |
415
+ | `iframe.css` | `'iframe' \| 'parent' \| 'both'` | `'iframe'` | Where CSS files are loaded when `iframe` is set |
409
416
 
410
417
  ### Methods
411
418
 
@@ -470,7 +477,7 @@ client
470
477
 
471
478
  ### Skip and Cold Filters
472
479
 
473
- `skip` prevents files from ever being loaded by the client. `cold` marks files that need a full page reload rather than a hot swap. Both options accept glob patterns, a custom filter function, or both combined via OR logic.
480
+ `skip` prevents files from ever being loaded by the client. `cold` marks files that emit a `cold` event instead of being hot-reloaded, what happens next is up to your `cold` event handler. Both options accept glob patterns, a custom filter function, or both combined via OR logic. Client and server `cold` patterns are merged on connect.
474
481
 
475
482
  > **Note:** Glob patterns are always relative to the project root, not the watched directory.
476
483
 
@@ -486,7 +493,7 @@ new HMRClient({
486
493
  return allFiles.includes(file.replace(".override.js", ".js"));
487
494
  },
488
495
 
489
- // These files can't be hot-swapped, they need a full reload
496
+ // These files emit a cold event instead of being hot-reloaded
490
497
  cold: ["**/*.cold.js", "src/bootstrap.js"],
491
498
 
492
499
  // Custom cold logic
@@ -496,6 +503,92 @@ new HMRClient({
496
503
 
497
504
  ---
498
505
 
506
+ ### Load Order
507
+
508
+ When the client receives the initial file list it sorts them before loading. The default order is:
509
+
510
+ 1. CSS before JS: stylesheets load first so scripts never run against an unstyled page
511
+ 2. Cold files first: files that require a full page reload are loaded before hot-swappable ones
512
+ 3. Alphabetical: stable tiebreaker within each group
513
+
514
+ `loadOrder` lets you prepend extra stages to the pipeline without giving up the built-in sorting. Each stage is detected by how many arguments it takes:
515
+
516
+ - **One argument** `f => boolean` return `true` to load that file earlier, `false` to leave it in its normal position
517
+ - **Two arguments** `(a, b) => number` works exactly like a standard `Array.sort` callback
518
+
519
+ The first stage to return a non-zero result wins; the built-in stages always follow as a fallback.
520
+
521
+ ```js
522
+ new HMRClient({
523
+ port: 1338,
524
+
525
+ loadOrder: [
526
+ // Load the bootstrap file before everything else
527
+ (f) => f === "src/bootstrap.js",
528
+
529
+ // Load files in the core/ directory before others
530
+ (f) => f.startsWith("core/"),
531
+
532
+ // Higher-level files first (fewer path segments)
533
+ (a, b) => a.split("/").length - b.split("/").length,
534
+ ],
535
+ });
536
+ ```
537
+
538
+ Each stage is tried in order. The first one that produces a difference between two files decides which loads first. If a stage sees no difference, the next one is tried. The built-in stages (CSS-first, cold-first, alphabetical) always follow as a final fallback.
539
+
540
+ When you need total control over the load order, pass `sortFiles` instead. It receives the full file list and must return a sorted copy. The built-in stages and any `loadOrder` are completely bypassed.
541
+
542
+ ```js
543
+ new HMRClient({
544
+ port: 1338,
545
+
546
+ sortFiles: (files) => {
547
+ const order = ["src/reset.css", "src/theme.css", "src/bootstrap.js"];
548
+ return [
549
+ // Pinned files in explicit order
550
+ ...order.filter((f) => files.includes(f)),
551
+ // Everything else, alphabetical
552
+ ...files.filter((f) => !order.includes(f)).sort(),
553
+ ];
554
+ },
555
+ });
556
+ ```
557
+
558
+ ---
559
+
560
+ ### Iframe Injection
561
+
562
+ When your project runs inside an `<iframe>` on a third-party domain, the browser's Private Network Access policy blocks the iframe from reaching `localhost` directly. The `iframe` option works around this by fetching files in the parent page and forwarding them to the iframe via `postMessage`.
563
+
564
+ Call `stub()` once inside the iframe via a userscript or existing inline script:
565
+
566
+ ```js
567
+ HMR.stub();
568
+ ```
569
+
570
+ Then configure the client in the parent:
571
+
572
+ ```js
573
+ new HMR.HMRClient({
574
+ port: 1338,
575
+ iframe: true,
576
+ });
577
+ ```
578
+
579
+ The client listens for the stub's ready signal and attaches automatically. Reattachment is automatic if the iframe reloads or is replaced. In the rare case of multiple same-origin iframes all running stub, pass `iframe.target` to target a specific one, but reattachment is then your responsibility.
580
+
581
+ ```js
582
+ iframe: {
583
+ target: document.querySelector('iframe#html5game'),
584
+ css: 'both', // 'iframe' (default) | 'parent' | 'both'
585
+ }
586
+ ```
587
+
588
+ > `.mjs` files are forwarded as `<script type="module">` blocks, preserving ES module semantics. Bare specifiers and relative imports will not resolve, only self-contained modules are supported.
589
+
590
+ ---
591
+
499
592
  ### Override Detection
500
593
 
501
594
  Override detection lets you maintain a parallel directory of replacement files that shadow originals without modifying them. When an override changes, the client unloads the original before loading the override.
@@ -536,7 +629,7 @@ new HMRClient({
536
629
  | Import path | Environment | Description |
537
630
  | ------------------------------------- | ----------- | -------------------- |
538
631
  | `cindel` or `cindel/server` | Node / Bun | `HMRServer` |
539
- | `cindel/client` | Browser ESM | `HMRClient` |
632
+ | `cindel/client` | Browser ESM | `HMRClient`, `stub` |
540
633
  | `https://cdn.jsdelivr.net/npm/cindel` | Browser CDN | Exposes `window.HMR` |
541
634
 
542
635
  ---
@@ -1,7 +1,28 @@
1
1
  /** Handles loading and hot reloading of JavaScript and CSS files via blob URLs. */
2
2
  export class FileLoader {
3
- constructor(httpUrl: any);
3
+ constructor(httpUrl: any, { iframeTarget, iframeOrigin, css }?: {
4
+ iframeTarget?: any;
5
+ iframeOrigin?: string;
6
+ css?: string;
7
+ });
4
8
  httpUrl: any;
9
+ /**
10
+ * When set, JS and module files are fetched in the parent context and forwarded
11
+ * to this window via postMessage instead of being injected as DOM elements.
12
+ * CSS routing is controlled separately by the `css` option.
13
+ * @type {Window | null}
14
+ */
15
+ iframeTarget: Window | null;
16
+ /** @type {string} */
17
+ iframeOrigin: string;
18
+ /**
19
+ * Controls where CSS files go when `iframeTarget` is set.
20
+ * - `'iframe'` -> forward only, skip parent injection (default)
21
+ * - `'parent'` -> load normally in parent, do not forward
22
+ * - `'both'` -> load in parent via `<link>` and forward to iframe
23
+ * @type {'iframe' | 'parent' | 'both'}
24
+ */
25
+ css: "iframe" | "parent" | "both";
5
26
  /**
6
27
  * Debounce state per file. Stores { timeout, resolvers[] } so that
7
28
  * when a rapid second change clears the first timeout, the first
@@ -20,12 +41,15 @@ export class FileLoader {
20
41
  */
21
42
  versions: Map<string, number>;
22
43
  loadFile(path: any): Promise<any>;
23
- loadCSS(path: any): Promise<any>;
44
+ loadCSS(path: any): Promise<boolean>;
45
+ _loadCSSInParent(path: any, url: any): Promise<any>;
24
46
  loadModule(path: any): Promise<boolean>;
25
47
  loadScript(path: any): Promise<any>;
26
48
  reloadFile(path: any): Promise<any>;
27
49
  _flushReload(path: any): Promise<void>;
28
50
  removeFile(path: any): Promise<void>;
29
51
  makeUrl(path: any): string;
52
+ _post(message: any): void;
53
+ _inject(kind: any, code: any, file: any): void;
30
54
  }
31
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,0BAgBC;IAfC,aAAsB;IACtB;;;;;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,iCAoBC;IAED,wCAIC;IAED,oCAeC;IAKD,oCAeC;IAED,uCAUC;IAED,qCAiBC;IAGD,2BAIC;CACF"}
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,qCAsBC;IAGD,2BAIC;IAGD,0BAEC;IAGD,+CAEC;CACF"}
@@ -46,7 +46,12 @@ export class HMRClient {
46
46
  * @param {function(string): boolean} [options.filterCold] - Custom cold file logic. Receives `(filePath)`. Combined with `cold` via OR.
47
47
  * @param {function(string, string[]): string|null} [options.getOverrideTarget] - Given a changed file, return the path of the original it replaces, or `null`. Receives `(filePath, allFiles)`. When matched, the original is unloaded before the override loads.
48
48
  * @param {function(string): void} [options.onFileLoaded] - Called after each file loads or reloads. Receives `(filePath)`.
49
- * @param {function(string[]): string[]} [options.sortFiles] - Custom sort for the initial file load order. Default sorts CSS before JS, cold files first.
49
+ * @param {function(string[]): string[]} [options.sortFiles] - Custom sort for the initial file load order. When provided, replaces `defaultSortFiles` entirely and `loadOrder` is ignored.
50
+ * @param {Array<Function>} [options.loadOrder] - Stages prepended before the built-in sort (CSS-first, cold-first, alphabetical). One argument: return true to load that file first. Two arguments: works like a normal sort callback.
51
+ * @param {boolean | Object} [options.iframe] - Forward files to an iframe via `postMessage` (for Private Network Access restricted environments). Pass `true` for defaults.
52
+ * @param {Window | HTMLIFrameElement} [options.iframe.target] - Target a specific same-origin iframe directly, skipping auto-discovery. Reattachment is not automatic.
53
+ * @param {string} [options.iframe.origin] - The iframe's origin used to validate incoming handshake responses. Defaults to `'*'`.
54
+ * @param {'iframe'|'parent'|'both'} [options.iframe.css='iframe'] - Where CSS files are loaded when `iframe` is set.
50
55
  */
51
56
  constructor(options: {
52
57
  wsUrl?: string;
@@ -66,6 +71,8 @@ export class HMRClient {
66
71
  getOverrideTarget?: (arg0: string, arg1: string[]) => string | null;
67
72
  onFileLoaded?: (arg0: string) => void;
68
73
  sortFiles?: (arg0: string[]) => string[];
74
+ loadOrder?: Array<Function>;
75
+ iframe?: boolean | any;
69
76
  });
70
77
  wsUrl: any;
71
78
  httpUrl: any;
@@ -82,6 +89,7 @@ export class HMRClient {
82
89
  allFiles: any[];
83
90
  getOverrideTarget: (arg0: string, arg1: string[]) => string | null;
84
91
  onFileLoaded: (arg0: string) => void;
92
+ loadOrder: Function[];
85
93
  sortFiles: any;
86
94
  socket: WebSocket;
87
95
  reconnectAttempts: number;
@@ -90,6 +98,10 @@ export class HMRClient {
90
98
  _reconnectTimer: NodeJS.Timeout;
91
99
  _messageQueue: any[];
92
100
  _processingMessages: boolean;
101
+ _iframeTarget: any;
102
+ _iframeOrigin: any;
103
+ _stubManaged: boolean;
104
+ _onReattach: (e: any) => Promise<void>;
93
105
  fileLoader: FileLoader;
94
106
  /** @type {Map<string, string>} - Maps override file -> original file */
95
107
  overrideMap: Map<string, string>;
@@ -174,6 +186,8 @@ export class HMRClient {
174
186
  emit(event: any, ...args: any[]): void;
175
187
  _enqueueMessage(data: any): void;
176
188
  _drainMessageQueue(): Promise<void>;
189
+ _waitForStub(): Promise<any>;
190
+ _listenForReattach(): void;
177
191
  /**
178
192
  * Connect to the HMR server
179
193
  * @returns {Promise<void>}
@@ -1 +1 @@
1
- {"version":3,"file":"hmr-client.d.ts","sourceRoot":"","sources":["../../src/client/hmr-client.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH;IACE;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,qBAlBG;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;KACtC,EA+DA;IAxDC,WAAkB;IAClB,aAAsB;IACtB,oBAAsB;IAEtB,+BAAyD;IACzD,uBAA+C;IAC/C,uBAAiD;IACjD,0BAAwD;IACxD,yBAAqD;IAGrD,wBAAsC;IACtC,oBAvBkB,MAAM,KAAG,OAAO,CAuBQ;IAG1C,oBAAiF;IACjF,gBAAuE;IAGvE,gBAAkB;IAElB,0BA/BkB,MAAM,QAAE,MAAM,EAAE,KAAG,MAAM,GAAC,IAAI,CA+BO;IACvD,qBA/BkB,MAAM,KAAG,IAAI,CA+Bc;IAC7C,eAAmE;IAEnE,kBAAkB;IAClB,0BAA0B;IAC1B,qBAAwB;IACxB,6BAA8B;IAC9B,gCAA2B;IAI3B,qBAAuB;IACvB,6BAAgC;IAEhC,uBAA8C;IAE9C,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,oCAmBC;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;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAuFzB;IAED;;OAEG;IACH,mBAUC;CACF;2BAtoB0B,kBAAkB"}
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,6BAsBC;IAKD,2BAoBC;IAED;;;OAGG;IACH,WAFa,OAAO,CAAC,IAAI,CAAC,CAwGzB;IAED;;OAEG;IACH,mBAgBC;CACF;2BA1uB0B,kBAAkB"}
@@ -0,0 +1,2 @@
1
+ export function stub(): void;
2
+ //# sourceMappingURL=stub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stub.d.ts","sourceRoot":"","sources":["../../src/client/stub.js"],"names":[],"mappings":"AAAA,6BAmCC"}
package/dist/client.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { FileLoader } from "./client/file-loader.js";
1
+ export { stub } from "./client/stub.js";
2
2
  export { HMRClient as default, HMRClient } from "./client/hmr-client.js";
3
3
  //# sourceMappingURL=client.d.ts.map