elit 3.4.1 → 3.4.2

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/dist/cli.js CHANGED
@@ -59419,7 +59419,7 @@ var require_package3 = __commonJS({
59419
59419
  "package.json"(exports2, module2) {
59420
59420
  module2.exports = {
59421
59421
  name: "elit",
59422
- version: "3.4.1",
59422
+ version: "3.4.2",
59423
59423
  description: "Optimized lightweight library for creating DOM elements with reactive state",
59424
59424
  main: "dist/index.js",
59425
59425
  module: "dist/index.mjs",
@@ -61978,8 +61978,9 @@ ${error}`);
61978
61978
  }
61979
61979
  }
61980
61980
  const elitImportMap = await createElitImportMap(client.root, basePath, client.mode);
61981
- const headInjection = ssrStyles ? `${ssrStyles}
61982
- ${elitImportMap}` : elitImportMap;
61981
+ const modeScript = config.mode === "preview" ? "<script>window.__ELIT_MODE__='preview';</script>" : "";
61982
+ const headInjection = `${modeScript}${ssrStyles ? "\n" + ssrStyles : ""}
61983
+ ${elitImportMap}`;
61983
61984
  html = html.includes("</head>") ? html.replace("</head>", `${headInjection}</head>`) : html;
61984
61985
  html = html.includes("</body>") ? html.replace("</body>", `${hmrScript}</body>`) : html + hmrScript;
61985
61986
  content = Buffer.from(html);
@@ -62034,7 +62035,8 @@ ${elitImportMap}` : elitImportMap;
62034
62035
  html = rewriteRelativePaths(html, basePath);
62035
62036
  const hmrScript = config.mode !== "preview" ? createHMRScript(config.port, basePath) : "";
62036
62037
  const elitImportMap = await createElitImportMap(client.root, basePath, client.mode);
62037
- html = html.includes("</head>") ? html.replace("</head>", `${elitImportMap}</head>`) : html;
62038
+ const modeScript = config.mode === "preview" ? "<script>window.__ELIT_MODE__='preview';</script>\n" : "";
62039
+ html = html.includes("</head>") ? html.replace("</head>", `${modeScript}${elitImportMap}</head>`) : html;
62038
62040
  html = html.includes("</body>") ? html.replace("</body>", `${hmrScript}</body>`) : html + hmrScript;
62039
62041
  res.writeHead(200, {
62040
62042
  "Content-Type": "text/html",
package/dist/hmr.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../src/hmr.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,4CAA4C;IAC5C,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACxC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iDAAiD;IACjD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACzC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,EAAE,SAAS,CAAC;KACzB;CACF;AAED,cAAM,OAAQ,YAAW,SAAS;IAChC,OAAO,UAAS;IAChB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAS;;IAgBzB,OAAO,CAAC,OAAO;IAgCf,OAAO,CAAC,aAAa;IAsCrB,MAAM;IAIN,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI;IAO5B,OAAO;IAIP,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI;CAG7B;AAGD,QAAA,MAAM,GAAG,SAAgB,CAAC;AAO1B,eAAe,GAAG,CAAC"}
1
+ {"version":3,"file":"hmr.d.ts","sourceRoot":"","sources":["../src/hmr.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,4CAA4C;IAC5C,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACxC,+CAA+C;IAC/C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,iDAAiD;IACjD,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CACzC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,EAAE,SAAS,CAAC;KACzB;CACF;AAED,cAAM,OAAQ,YAAW,SAAS;IAChC,OAAO,UAAS;IAChB,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAS;;IAqBzB,OAAO,CAAC,OAAO;IAgCf,OAAO,CAAC,aAAa;IAsCrB,MAAM;IAIN,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI;IAO5B,OAAO;IAIP,OAAO,CAAC,QAAQ,EAAE,MAAM,IAAI;CAG7B;AAGD,QAAA,MAAM,GAAG,SAAgB,CAAC;AAO1B,eAAe,GAAG,CAAC"}
package/dist/hmr.js CHANGED
@@ -37,6 +37,9 @@ var ElitHMR = class {
37
37
  console.log("[Elit HMR] Disabled for file:// protocol");
38
38
  return;
39
39
  }
40
+ if (window.__ELIT_MODE__ === "preview") {
41
+ return;
42
+ }
40
43
  this.connect();
41
44
  }
42
45
  connect() {
package/dist/hmr.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hmr.ts"],"sourcesContent":["/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,IAAM,UAAN,MAAmC;AAAA,EAOjC,cAAc;AANd,mBAAU;AACV,SAAQ,KAAuB;AAC/B,SAAQ,kBAAkC,CAAC;AAC3C,SAAQ,mBAAmC,CAAC;AAC5C,SAAQ,WAAW;AAGjB,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,aAAa,SAAS;AACxC,cAAQ,IAAI,0CAA0C;AACtD;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAU;AAChB,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,SAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAEtD,SAAK,GAAG,SAAS,MAAM;AACrB,WAAK,UAAU;AACf,cAAQ,IAAI,6BAAwB;AAAA,IACtC;AAEA,SAAK,GAAG,YAAY,CAAC,UAAU;AAC7B,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAClC,aAAK,cAAc,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,qCAAqC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,SAAK,GAAG,UAAU,MAAM;AACtB,WAAK,UAAU;AACf,cAAQ,IAAI,6DAA6D;AAAA,IAE3E;AAEA,SAAK,GAAG,UAAU,CAAC,UAAU;AAC3B,cAAQ,MAAM,+BAA+B,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW;AAC/B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,gBAAQ,IAAI,kBAAkB;AAC9B;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AAEtD,YAAI,KAAK,UAAU;AACjB,eAAK,OAAO;AACZ;AAAA,QACF;AAGA,aAAK,iBAAiB,QAAQ,QAAM,GAAG,CAAC;AACxC,aAAK,mBAAmB,CAAC;AAGzB,YAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,eAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AACvC,kBAAQ,IAAI,yCAAyC;AAAA,QACvD,OAAO;AACL,kBAAQ,IAAI,8DAA8D;AAAA,QAC5E;AACA;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,oEAAoE;AAEhF;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,4BAA4B,KAAK,KAAK;AACpD;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,SAAS,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,UAAuB;AAC5B,QAAI,UAAU;AACZ,WAAK,gBAAgB,KAAK,QAAQ;AAAA,IACpC;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,UAAsB;AAC5B,SAAK,iBAAiB,KAAK,QAAQ;AAAA,EACrC;AACF;AAGA,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe;AACxB;AAEA,IAAO,cAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/hmr.ts"],"sourcesContent":["/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n // Skip HMR in preview mode (no WebSocket server is running)\n if ((window as any).__ELIT_MODE__ === 'preview') {\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAwBA,IAAM,UAAN,MAAmC;AAAA,EAOjC,cAAc;AANd,mBAAU;AACV,SAAQ,KAAuB;AAC/B,SAAQ,kBAAkC,CAAC;AAC3C,SAAQ,mBAAmC,CAAC;AAC5C,SAAQ,WAAW;AAGjB,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,aAAa,SAAS;AACxC,cAAQ,IAAI,0CAA0C;AACtD;AAAA,IACF;AAGA,QAAK,OAAe,kBAAkB,WAAW;AAC/C;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAU;AAChB,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,SAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAEtD,SAAK,GAAG,SAAS,MAAM;AACrB,WAAK,UAAU;AACf,cAAQ,IAAI,6BAAwB;AAAA,IACtC;AAEA,SAAK,GAAG,YAAY,CAAC,UAAU;AAC7B,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAClC,aAAK,cAAc,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,qCAAqC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,SAAK,GAAG,UAAU,MAAM;AACtB,WAAK,UAAU;AACf,cAAQ,IAAI,6DAA6D;AAAA,IAE3E;AAEA,SAAK,GAAG,UAAU,CAAC,UAAU;AAC3B,cAAQ,MAAM,+BAA+B,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW;AAC/B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,gBAAQ,IAAI,kBAAkB;AAC9B;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AAEtD,YAAI,KAAK,UAAU;AACjB,eAAK,OAAO;AACZ;AAAA,QACF;AAGA,aAAK,iBAAiB,QAAQ,QAAM,GAAG,CAAC;AACxC,aAAK,mBAAmB,CAAC;AAGzB,YAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,eAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AACvC,kBAAQ,IAAI,yCAAyC;AAAA,QACvD,OAAO;AACL,kBAAQ,IAAI,8DAA8D;AAAA,QAC5E;AACA;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,oEAAoE;AAEhF;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,4BAA4B,KAAK,KAAK;AACpD;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,SAAS,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,UAAuB;AAC5B,QAAI,UAAU;AACZ,WAAK,gBAAgB,KAAK,QAAQ;AAAA,IACpC;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,UAAsB;AAC5B,SAAK,iBAAiB,KAAK,QAAQ;AAAA,EACrC;AACF;AAGA,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe;AACxB;AAEA,IAAO,cAAQ;","names":[]}
package/dist/hmr.mjs CHANGED
@@ -13,6 +13,9 @@ var ElitHMR = class {
13
13
  console.log("[Elit HMR] Disabled for file:// protocol");
14
14
  return;
15
15
  }
16
+ if (window.__ELIT_MODE__ === "preview") {
17
+ return;
18
+ }
16
19
  this.connect();
17
20
  }
18
21
  connect() {
package/dist/hmr.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hmr.ts"],"sourcesContent":["/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":";AAwBA,IAAM,UAAN,MAAmC;AAAA,EAOjC,cAAc;AANd,mBAAU;AACV,SAAQ,KAAuB;AAC/B,SAAQ,kBAAkC,CAAC;AAC3C,SAAQ,mBAAmC,CAAC;AAC5C,SAAQ,WAAW;AAGjB,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,aAAa,SAAS;AACxC,cAAQ,IAAI,0CAA0C;AACtD;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAU;AAChB,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,SAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAEtD,SAAK,GAAG,SAAS,MAAM;AACrB,WAAK,UAAU;AACf,cAAQ,IAAI,6BAAwB;AAAA,IACtC;AAEA,SAAK,GAAG,YAAY,CAAC,UAAU;AAC7B,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAClC,aAAK,cAAc,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,qCAAqC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,SAAK,GAAG,UAAU,MAAM;AACtB,WAAK,UAAU;AACf,cAAQ,IAAI,6DAA6D;AAAA,IAE3E;AAEA,SAAK,GAAG,UAAU,CAAC,UAAU;AAC3B,cAAQ,MAAM,+BAA+B,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW;AAC/B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,gBAAQ,IAAI,kBAAkB;AAC9B;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AAEtD,YAAI,KAAK,UAAU;AACjB,eAAK,OAAO;AACZ;AAAA,QACF;AAGA,aAAK,iBAAiB,QAAQ,QAAM,GAAG,CAAC;AACxC,aAAK,mBAAmB,CAAC;AAGzB,YAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,eAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AACvC,kBAAQ,IAAI,yCAAyC;AAAA,QACvD,OAAO;AACL,kBAAQ,IAAI,8DAA8D;AAAA,QAC5E;AACA;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,oEAAoE;AAEhF;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,4BAA4B,KAAK,KAAK;AACpD;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,SAAS,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,UAAuB;AAC5B,QAAI,UAAU;AACZ,WAAK,gBAAgB,KAAK,QAAQ;AAAA,IACpC;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,UAAsB;AAC5B,SAAK,iBAAiB,KAAK,QAAQ;AAAA,EACrC;AACF;AAGA,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe;AACxB;AAEA,IAAO,cAAQ;","names":[]}
1
+ {"version":3,"sources":["../src/hmr.ts"],"sourcesContent":["/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n // Skip HMR in preview mode (no WebSocket server is running)\n if ((window as any).__ELIT_MODE__ === 'preview') {\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":";AAwBA,IAAM,UAAN,MAAmC;AAAA,EAOjC,cAAc;AANd,mBAAU;AACV,SAAQ,KAAuB;AAC/B,SAAQ,kBAAkC,CAAC;AAC3C,SAAQ,mBAAmC,CAAC;AAC5C,SAAQ,WAAW;AAGjB,QAAI,OAAO,WAAW,aAAa;AACjC;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,aAAa,SAAS;AACxC,cAAQ,IAAI,0CAA0C;AACtD;AAAA,IACF;AAGA,QAAK,OAAe,kBAAkB,WAAW;AAC/C;AAAA,IACF;AAEA,SAAK,QAAQ;AAAA,EACf;AAAA,EAEQ,UAAU;AAChB,UAAM,WAAW,OAAO,SAAS,aAAa,WAAW,SAAS;AAClE,UAAM,OAAO,OAAO,SAAS;AAC7B,UAAM,OAAO,OAAO,SAAS,QAAQ;AAErC,SAAK,KAAK,IAAI,UAAU,GAAG,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE;AAEtD,SAAK,GAAG,SAAS,MAAM;AACrB,WAAK,UAAU;AACf,cAAQ,IAAI,6BAAwB;AAAA,IACtC;AAEA,SAAK,GAAG,YAAY,CAAC,UAAU;AAC7B,UAAI;AACF,cAAM,OAAO,KAAK,MAAM,MAAM,IAAI;AAClC,aAAK,cAAc,IAAI;AAAA,MACzB,SAAS,OAAO;AACd,gBAAQ,MAAM,qCAAqC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,SAAK,GAAG,UAAU,MAAM;AACtB,WAAK,UAAU;AACf,cAAQ,IAAI,6DAA6D;AAAA,IAE3E;AAEA,SAAK,GAAG,UAAU,CAAC,UAAU;AAC3B,cAAQ,MAAM,+BAA+B,KAAK;AAAA,IACpD;AAAA,EACF;AAAA,EAEQ,cAAc,MAAW;AAC/B,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,gBAAQ,IAAI,kBAAkB;AAC9B;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,+BAA+B,KAAK,IAAI,EAAE;AAEtD,YAAI,KAAK,UAAU;AACjB,eAAK,OAAO;AACZ;AAAA,QACF;AAGA,aAAK,iBAAiB,QAAQ,QAAM,GAAG,CAAC;AACxC,aAAK,mBAAmB,CAAC;AAGzB,YAAI,KAAK,gBAAgB,SAAS,GAAG;AACnC,eAAK,gBAAgB,QAAQ,QAAM,GAAG,CAAC;AACvC,kBAAQ,IAAI,yCAAyC;AAAA,QACvD,OAAO;AACL,kBAAQ,IAAI,8DAA8D;AAAA,QAC5E;AACA;AAAA,MAEF,KAAK;AACH,gBAAQ,IAAI,oEAAoE;AAEhF;AAAA,MAEF,KAAK;AACH,gBAAQ,MAAM,4BAA4B,KAAK,KAAK;AACpD;AAAA,IACJ;AAAA,EACF;AAAA,EAEA,SAAS;AACP,WAAO,SAAS,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,UAAuB;AAC5B,QAAI,UAAU;AACZ,WAAK,gBAAgB,KAAK,QAAQ;AAAA,IACpC;AACA,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,UAAU;AACR,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,QAAQ,UAAsB;AAC5B,SAAK,iBAAiB,KAAK,QAAQ;AAAA,EACrC;AACF;AAGA,IAAM,MAAM,IAAI,QAAQ;AAGxB,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe;AACxB;AAEA,IAAO,cAAQ;","names":[]}
package/dist/index.js CHANGED
@@ -2317,6 +2317,9 @@ var ElitHMR = class {
2317
2317
  console.log("[Elit HMR] Disabled for file:// protocol");
2318
2318
  return;
2319
2319
  }
2320
+ if (window.__ELIT_MODE__ === "preview") {
2321
+ return;
2322
+ }
2320
2323
  this.connect();
2321
2324
  }
2322
2325
  connect() {