@fictjs/runtime 0.3.0 → 0.5.0

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 (70) hide show
  1. package/dist/advanced.cjs +10 -8
  2. package/dist/advanced.cjs.map +1 -1
  3. package/dist/advanced.d.cts +4 -3
  4. package/dist/advanced.d.ts +4 -3
  5. package/dist/advanced.js +10 -8
  6. package/dist/advanced.js.map +1 -1
  7. package/dist/{chunk-TWELIZRY.js → chunk-5AA7HP4S.js} +5 -3
  8. package/dist/{chunk-TWELIZRY.js.map → chunk-5AA7HP4S.js.map} +1 -1
  9. package/dist/chunk-6SOPF5LZ.cjs +2363 -0
  10. package/dist/chunk-6SOPF5LZ.cjs.map +1 -0
  11. package/dist/{chunk-SO6X7G5S.js → chunk-BQG7VEBY.js} +501 -1880
  12. package/dist/chunk-BQG7VEBY.js.map +1 -0
  13. package/dist/chunk-FKDMDAUR.js +2363 -0
  14. package/dist/chunk-FKDMDAUR.js.map +1 -0
  15. package/dist/{chunk-L4DIV3RC.cjs → chunk-GHUV2FLD.cjs} +9 -7
  16. package/dist/chunk-GHUV2FLD.cjs.map +1 -0
  17. package/dist/{chunk-XLIZJMMJ.js → chunk-KKKYW54Z.js} +8 -6
  18. package/dist/{chunk-XLIZJMMJ.js.map → chunk-KKKYW54Z.js.map} +1 -1
  19. package/dist/{chunk-M2TSXZ4C.cjs → chunk-KYLNC4CD.cjs} +18 -16
  20. package/dist/chunk-KYLNC4CD.cjs.map +1 -0
  21. package/dist/chunk-TKWN42TA.cjs +2259 -0
  22. package/dist/chunk-TKWN42TA.cjs.map +1 -0
  23. package/dist/{context-B25xyQrJ.d.cts → context-CTBE00S_.d.cts} +1 -1
  24. package/dist/{context-CGdP7_Jb.d.ts → context-lkLhbkFJ.d.ts} +1 -1
  25. package/dist/{effect-D6kaLM2-.d.cts → effect-BpSNEJJz.d.cts} +7 -67
  26. package/dist/{effect-D6kaLM2-.d.ts → effect-BpSNEJJz.d.ts} +7 -67
  27. package/dist/index.cjs +40 -38
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +5 -4
  30. package/dist/index.d.ts +5 -4
  31. package/dist/index.dev.js +92 -4
  32. package/dist/index.dev.js.map +1 -1
  33. package/dist/index.js +19 -17
  34. package/dist/index.js.map +1 -1
  35. package/dist/internal.cjs +189 -202
  36. package/dist/internal.cjs.map +1 -1
  37. package/dist/internal.d.cts +13 -23
  38. package/dist/internal.d.ts +13 -23
  39. package/dist/internal.js +195 -208
  40. package/dist/internal.js.map +1 -1
  41. package/dist/loader.cjs +280 -0
  42. package/dist/loader.cjs.map +1 -0
  43. package/dist/loader.d.cts +57 -0
  44. package/dist/loader.d.ts +57 -0
  45. package/dist/loader.js +280 -0
  46. package/dist/loader.js.map +1 -0
  47. package/dist/{props-BIfromL0.d.cts → props-XTHYD19o.d.cts} +13 -2
  48. package/dist/{props-BEgIVMRx.d.ts → props-x-HbI-jX.d.ts} +13 -2
  49. package/dist/resume-BrAkmSTY.d.cts +79 -0
  50. package/dist/resume-Dx8_l72o.d.ts +79 -0
  51. package/dist/{scope-CzNkn587.d.ts → scope-CdbGmsFf.d.ts} +1 -1
  52. package/dist/{scope-Cx_3CjIZ.d.cts → scope-DfcP9I-A.d.cts} +1 -1
  53. package/dist/signal-C4ISF17w.d.cts +66 -0
  54. package/dist/signal-C4ISF17w.d.ts +66 -0
  55. package/package.json +8 -3
  56. package/src/binding.ts +254 -5
  57. package/src/dom.ts +103 -5
  58. package/src/hooks.ts +15 -2
  59. package/src/hydration.ts +75 -0
  60. package/src/internal.ts +34 -2
  61. package/src/list-helpers.ts +113 -12
  62. package/src/loader.ts +437 -0
  63. package/src/node-ops.ts +65 -0
  64. package/src/resume.ts +517 -0
  65. package/src/store.ts +8 -0
  66. package/dist/chunk-ID3WBWNO.cjs +0 -3638
  67. package/dist/chunk-ID3WBWNO.cjs.map +0 -1
  68. package/dist/chunk-L4DIV3RC.cjs.map +0 -1
  69. package/dist/chunk-M2TSXZ4C.cjs.map +0 -1
  70. package/dist/chunk-SO6X7G5S.js.map +0 -1
package/dist/advanced.cjs CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
 
4
4
 
5
- var _chunkM2TSXZ4Ccjs = require('./chunk-M2TSXZ4C.cjs');
5
+ var _chunkKYLNC4CDcjs = require('./chunk-KYLNC4CD.cjs');
6
6
 
7
7
 
8
8
 
9
- var _chunkL4DIV3RCcjs = require('./chunk-L4DIV3RC.cjs');
9
+ var _chunkGHUV2FLDcjs = require('./chunk-GHUV2FLD.cjs');
10
10
 
11
11
 
12
12
 
@@ -16,6 +16,7 @@ var _chunkL4DIV3RCcjs = require('./chunk-L4DIV3RC.cjs');
16
16
 
17
17
 
18
18
 
19
+ var _chunkTKWN42TAcjs = require('./chunk-TKWN42TA.cjs');
19
20
 
20
21
 
21
22
 
@@ -24,13 +25,14 @@ var _chunkL4DIV3RCcjs = require('./chunk-L4DIV3RC.cjs');
24
25
 
25
26
 
26
27
 
27
- var _chunkID3WBWNOcjs = require('./chunk-ID3WBWNO.cjs');
28
+
29
+ var _chunk6SOPF5LZcjs = require('./chunk-6SOPF5LZ.cjs');
28
30
 
29
31
  // src/versioned-signal.ts
30
32
  function createVersionedSignal(initialValue, options) {
31
33
  const equals = _nullishCoalesce(_optionalChain([options, 'optionalAccess', _ => _.equals]), () => ( Object.is));
32
- const value = _chunkID3WBWNOcjs.signal.call(void 0, initialValue);
33
- const version = _chunkID3WBWNOcjs.signal.call(void 0, 0);
34
+ const value = _chunk6SOPF5LZcjs.signal.call(void 0, initialValue);
35
+ const version = _chunk6SOPF5LZcjs.signal.call(void 0, 0);
34
36
  const bumpVersion = () => {
35
37
  const next = version() + 1;
36
38
  version(next);
@@ -51,8 +53,8 @@ function createVersionedSignal(initialValue, options) {
51
53
  force: () => {
52
54
  bumpVersion();
53
55
  },
54
- peekVersion: () => _chunkID3WBWNOcjs.untrack.call(void 0, () => version()),
55
- peekValue: () => _chunkID3WBWNOcjs.untrack.call(void 0, () => value())
56
+ peekVersion: () => _chunk6SOPF5LZcjs.untrack.call(void 0, () => version()),
57
+ peekValue: () => _chunk6SOPF5LZcjs.untrack.call(void 0, () => value())
56
58
  };
57
59
  }
58
60
 
@@ -77,5 +79,5 @@ function createVersionedSignal(initialValue, options) {
77
79
 
78
80
 
79
81
 
80
- exports.createAttributeBinding = _chunkID3WBWNOcjs.createAttributeBinding; exports.createChildBinding = _chunkID3WBWNOcjs.createChildBinding; exports.createClassBinding = _chunkID3WBWNOcjs.createClassBinding; exports.createContext = _chunkM2TSXZ4Ccjs.createContext; exports.createRenderEffect = _chunkID3WBWNOcjs.createRenderEffect; exports.createScope = _chunkL4DIV3RCcjs.createScope; exports.createSelector = _chunkID3WBWNOcjs.createSelector; exports.createShow = _chunkID3WBWNOcjs.createShow; exports.createSignal = _chunkID3WBWNOcjs.signal; exports.createStyleBinding = _chunkID3WBWNOcjs.createStyleBinding; exports.createTextBinding = _chunkID3WBWNOcjs.createTextBinding; exports.createVersionedSignal = createVersionedSignal; exports.effectScope = _chunkID3WBWNOcjs.effectScope; exports.getDevtoolsHook = _chunkID3WBWNOcjs.getDevtoolsHook; exports.hasContext = _chunkM2TSXZ4Ccjs.hasContext; exports.isReactive = _chunkID3WBWNOcjs.isReactive; exports.registerErrorHandler = _chunkID3WBWNOcjs.registerErrorHandler; exports.runInScope = _chunkL4DIV3RCcjs.runInScope; exports.setCycleProtectionOptions = _chunkID3WBWNOcjs.setCycleProtectionOptions; exports.unwrap = _chunkID3WBWNOcjs.unwrap; exports.useContext = _chunkM2TSXZ4Ccjs.useContext;
82
+ exports.createAttributeBinding = _chunkTKWN42TAcjs.createAttributeBinding; exports.createChildBinding = _chunkTKWN42TAcjs.createChildBinding; exports.createClassBinding = _chunkTKWN42TAcjs.createClassBinding; exports.createContext = _chunkKYLNC4CDcjs.createContext; exports.createRenderEffect = _chunk6SOPF5LZcjs.createRenderEffect; exports.createScope = _chunkGHUV2FLDcjs.createScope; exports.createSelector = _chunk6SOPF5LZcjs.createSelector; exports.createShow = _chunkTKWN42TAcjs.createShow; exports.createSignal = _chunk6SOPF5LZcjs.signal; exports.createStyleBinding = _chunkTKWN42TAcjs.createStyleBinding; exports.createTextBinding = _chunkTKWN42TAcjs.createTextBinding; exports.createVersionedSignal = createVersionedSignal; exports.effectScope = _chunk6SOPF5LZcjs.effectScope; exports.getDevtoolsHook = _chunk6SOPF5LZcjs.getDevtoolsHook; exports.hasContext = _chunkKYLNC4CDcjs.hasContext; exports.isReactive = _chunkTKWN42TAcjs.isReactive; exports.registerErrorHandler = _chunk6SOPF5LZcjs.registerErrorHandler; exports.runInScope = _chunkGHUV2FLDcjs.runInScope; exports.setCycleProtectionOptions = _chunk6SOPF5LZcjs.setCycleProtectionOptions; exports.unwrap = _chunkTKWN42TAcjs.unwrap; exports.useContext = _chunkKYLNC4CDcjs.useContext;
81
83
  //# sourceMappingURL=advanced.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/fict/fict/packages/runtime/dist/advanced.cjs","../src/versioned-signal.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACJO,SAAS,qBAAA,CACd,YAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,OAAA,mCAAS,OAAA,2BAAS,QAAA,UAAU,MAAA,CAAO,IAAA;AACzC,EAAA,MAAM,MAAA,EAAQ,sCAAA,YAAyB,CAAA;AACvC,EAAA,MAAM,QAAA,EAAU,sCAAA,CAAc,CAAA;AAE9B,EAAA,MAAM,YAAA,EAAc,CAAA,EAAA,GAAM;AACxB,IAAA,MAAM,KAAA,EAAO,OAAA,CAAQ,EAAA,EAAI,CAAA;AACzB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA,EAAA,GAAM;AAEV,MAAA,OAAA,CAAQ,CAAA;AACR,MAAA,OAAO,KAAA,CAAM,CAAA;AAAA,IACf,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,IAAA,EAAA,GAAY;AAClB,MAAA,MAAM,KAAA,EAAO,KAAA,CAAM,CAAA;AACnB,MAAA,GAAA,CAAI,CAAC,MAAA,CAAO,IAAA,EAAM,IAAI,CAAA,EAAG;AACvB,QAAA,KAAA,CAAM,IAAI,CAAA;AACV,QAAA,MAAA;AAAA,MACF;AACA,MAAA,WAAA,CAAY,CAAA;AAAA,IACd,CAAA;AAAA,IACA,KAAA,EAAO,CAAA,EAAA,GAAM;AACX,MAAA,WAAA,CAAY,CAAA;AAAA,IACd,CAAA;AAAA,IACA,WAAA,EAAa,CAAA,EAAA,GAAM,uCAAA,CAAQ,EAAA,GAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC1C,SAAA,EAAW,CAAA,EAAA,GAAM,uCAAA,CAAQ,EAAA,GAAM,KAAA,CAAM,CAAC;AAAA,EACxC,CAAA;AACF;ADAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,4tCAAC","file":"/home/runner/work/fict/fict/packages/runtime/dist/advanced.cjs","sourcesContent":[null,"import { createSignal, untrack } from './signal'\n\nexport interface VersionedSignalOptions<T> {\n equals?: (prev: T, next: T) => boolean\n}\n\nexport interface VersionedSignal<T> {\n /** Reactive read that tracks both the value and version counter */\n read: () => T\n /** Write a new value, forcing a version bump when value is equal */\n write: (next: T) => void\n /** Force a version bump without changing the value */\n force: () => void\n /** Read the current version without creating a dependency */\n peekVersion: () => number\n /** Read the current value without tracking */\n peekValue: () => T\n}\n\n/**\n * Create a signal wrapper that forces subscribers to update when the same reference is written.\n *\n * Useful for compiler-generated keyed list items where updates may reuse the same object reference.\n */\nexport function createVersionedSignal<T>(\n initialValue: T,\n options?: VersionedSignalOptions<T>,\n): VersionedSignal<T> {\n const equals = options?.equals ?? Object.is\n const value = createSignal(initialValue)\n const version = createSignal(0)\n\n const bumpVersion = () => {\n const next = version() + 1\n version(next)\n }\n\n return {\n read: () => {\n // Track both version and value to ensure equal writes notify subscribers\n version()\n return value()\n },\n write: (next: T) => {\n const prev = value()\n if (!equals(prev, next)) {\n value(next)\n return\n }\n bumpVersion()\n },\n force: () => {\n bumpVersion()\n },\n peekVersion: () => untrack(() => version()),\n peekValue: () => untrack(() => value()),\n }\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/fict/fict/packages/runtime/dist/advanced.cjs","../src/versioned-signal.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B;AACA;ACNO,SAAS,qBAAA,CACd,YAAA,EACA,OAAA,EACoB;AACpB,EAAA,MAAM,OAAA,mCAAS,OAAA,2BAAS,QAAA,UAAU,MAAA,CAAO,IAAA;AACzC,EAAA,MAAM,MAAA,EAAQ,sCAAA,YAAyB,CAAA;AACvC,EAAA,MAAM,QAAA,EAAU,sCAAA,CAAc,CAAA;AAE9B,EAAA,MAAM,YAAA,EAAc,CAAA,EAAA,GAAM;AACxB,IAAA,MAAM,KAAA,EAAO,OAAA,CAAQ,EAAA,EAAI,CAAA;AACzB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA,EAAA,GAAM;AAEV,MAAA,OAAA,CAAQ,CAAA;AACR,MAAA,OAAO,KAAA,CAAM,CAAA;AAAA,IACf,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,IAAA,EAAA,GAAY;AAClB,MAAA,MAAM,KAAA,EAAO,KAAA,CAAM,CAAA;AACnB,MAAA,GAAA,CAAI,CAAC,MAAA,CAAO,IAAA,EAAM,IAAI,CAAA,EAAG;AACvB,QAAA,KAAA,CAAM,IAAI,CAAA;AACV,QAAA,MAAA;AAAA,MACF;AACA,MAAA,WAAA,CAAY,CAAA;AAAA,IACd,CAAA;AAAA,IACA,KAAA,EAAO,CAAA,EAAA,GAAM;AACX,MAAA,WAAA,CAAY,CAAA;AAAA,IACd,CAAA;AAAA,IACA,WAAA,EAAa,CAAA,EAAA,GAAM,uCAAA,CAAQ,EAAA,GAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC1C,SAAA,EAAW,CAAA,EAAA,GAAM,uCAAA,CAAQ,EAAA,GAAM,KAAA,CAAM,CAAC;AAAA,EACxC,CAAA;AACF;ADEA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,4tCAAC","file":"/home/runner/work/fict/fict/packages/runtime/dist/advanced.cjs","sourcesContent":[null,"import { createSignal, untrack } from './signal'\n\nexport interface VersionedSignalOptions<T> {\n equals?: (prev: T, next: T) => boolean\n}\n\nexport interface VersionedSignal<T> {\n /** Reactive read that tracks both the value and version counter */\n read: () => T\n /** Write a new value, forcing a version bump when value is equal */\n write: (next: T) => void\n /** Force a version bump without changing the value */\n force: () => void\n /** Read the current version without creating a dependency */\n peekVersion: () => number\n /** Read the current value without tracking */\n peekValue: () => T\n}\n\n/**\n * Create a signal wrapper that forces subscribers to update when the same reference is written.\n *\n * Useful for compiler-generated keyed list items where updates may reuse the same object reference.\n */\nexport function createVersionedSignal<T>(\n initialValue: T,\n options?: VersionedSignalOptions<T>,\n): VersionedSignal<T> {\n const equals = options?.equals ?? Object.is\n const value = createSignal(initialValue)\n const version = createSignal(0)\n\n const bumpVersion = () => {\n const next = version() + 1\n version(next)\n }\n\n return {\n read: () => {\n // Track both version and value to ensure equal writes notify subscribers\n version()\n return value()\n },\n write: (next: T) => {\n const prev = value()\n if (!equals(prev, next)) {\n value(next)\n return\n }\n bumpVersion()\n },\n force: () => {\n bumpVersion()\n },\n peekVersion: () => untrack(() => version()),\n peekValue: () => untrack(() => value()),\n }\n}\n"]}
@@ -1,6 +1,7 @@
1
- export { R as ReactiveScope, c as createScope, r as runInScope } from './scope-Cx_3CjIZ.cjs';
2
- export { S as Signal, d as createAttributeBinding, b as createChildBinding, g as createClassBinding, j as createRenderEffect, c as createSelector, h as createShow, s as createSignal, f as createStyleBinding, a as createTextBinding, e as effectScope, i as isReactive, r as registerErrorHandler, u as unwrap } from './effect-D6kaLM2-.cjs';
3
- export { C as Context, F as FictDevtoolsHook, P as ProviderProps, c as createContext, g as getDevtoolsHook, h as hasContext, u as useContext } from './context-B25xyQrJ.cjs';
1
+ export { R as ReactiveScope, c as createScope, r as runInScope } from './scope-DfcP9I-A.cjs';
2
+ export { S as Signal, c as createSelector, s as createSignal, e as effectScope } from './signal-C4ISF17w.cjs';
3
+ export { b as createAttributeBinding, a as createChildBinding, e as createClassBinding, g as createRenderEffect, f as createShow, d as createStyleBinding, c as createTextBinding, i as isReactive, r as registerErrorHandler, u as unwrap } from './effect-BpSNEJJz.cjs';
4
+ export { C as Context, F as FictDevtoolsHook, P as ProviderProps, c as createContext, g as getDevtoolsHook, h as hasContext, u as useContext } from './context-CTBE00S_.cjs';
4
5
 
5
6
  interface VersionedSignalOptions<T> {
6
7
  equals?: (prev: T, next: T) => boolean;
@@ -1,6 +1,7 @@
1
- export { R as ReactiveScope, c as createScope, r as runInScope } from './scope-CzNkn587.js';
2
- export { S as Signal, d as createAttributeBinding, b as createChildBinding, g as createClassBinding, j as createRenderEffect, c as createSelector, h as createShow, s as createSignal, f as createStyleBinding, a as createTextBinding, e as effectScope, i as isReactive, r as registerErrorHandler, u as unwrap } from './effect-D6kaLM2-.js';
3
- export { C as Context, F as FictDevtoolsHook, P as ProviderProps, c as createContext, g as getDevtoolsHook, h as hasContext, u as useContext } from './context-CGdP7_Jb.js';
1
+ export { R as ReactiveScope, c as createScope, r as runInScope } from './scope-CdbGmsFf.js';
2
+ export { S as Signal, c as createSelector, s as createSignal, e as effectScope } from './signal-C4ISF17w.js';
3
+ export { b as createAttributeBinding, a as createChildBinding, e as createClassBinding, g as createRenderEffect, f as createShow, d as createStyleBinding, c as createTextBinding, i as isReactive, r as registerErrorHandler, u as unwrap } from './effect-BpSNEJJz.js';
4
+ export { C as Context, F as FictDevtoolsHook, P as ProviderProps, c as createContext, g as getDevtoolsHook, h as hasContext, u as useContext } from './context-lkLhbkFJ.js';
4
5
 
5
6
  interface VersionedSignalOptions<T> {
6
7
  equals?: (prev: T, next: T) => boolean;
package/dist/advanced.js CHANGED
@@ -2,29 +2,31 @@ import {
2
2
  createContext,
3
3
  hasContext,
4
4
  useContext
5
- } from "./chunk-XLIZJMMJ.js";
5
+ } from "./chunk-KKKYW54Z.js";
6
6
  import {
7
7
  createScope,
8
8
  runInScope
9
- } from "./chunk-TWELIZRY.js";
9
+ } from "./chunk-5AA7HP4S.js";
10
10
  import {
11
11
  createAttributeBinding,
12
12
  createChildBinding,
13
13
  createClassBinding,
14
- createRenderEffect,
15
- createSelector,
16
14
  createShow,
17
15
  createStyleBinding,
18
16
  createTextBinding,
17
+ isReactive,
18
+ unwrap
19
+ } from "./chunk-BQG7VEBY.js";
20
+ import {
21
+ createRenderEffect,
22
+ createSelector,
19
23
  effectScope,
20
24
  getDevtoolsHook,
21
- isReactive,
22
25
  registerErrorHandler,
23
26
  setCycleProtectionOptions,
24
27
  signal,
25
- untrack,
26
- unwrap
27
- } from "./chunk-SO6X7G5S.js";
28
+ untrack
29
+ } from "./chunk-FKDMDAUR.js";
28
30
 
29
31
  // src/versioned-signal.ts
30
32
  function createVersionedSignal(initialValue, options) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/versioned-signal.ts"],"sourcesContent":["import { createSignal, untrack } from './signal'\n\nexport interface VersionedSignalOptions<T> {\n equals?: (prev: T, next: T) => boolean\n}\n\nexport interface VersionedSignal<T> {\n /** Reactive read that tracks both the value and version counter */\n read: () => T\n /** Write a new value, forcing a version bump when value is equal */\n write: (next: T) => void\n /** Force a version bump without changing the value */\n force: () => void\n /** Read the current version without creating a dependency */\n peekVersion: () => number\n /** Read the current value without tracking */\n peekValue: () => T\n}\n\n/**\n * Create a signal wrapper that forces subscribers to update when the same reference is written.\n *\n * Useful for compiler-generated keyed list items where updates may reuse the same object reference.\n */\nexport function createVersionedSignal<T>(\n initialValue: T,\n options?: VersionedSignalOptions<T>,\n): VersionedSignal<T> {\n const equals = options?.equals ?? Object.is\n const value = createSignal(initialValue)\n const version = createSignal(0)\n\n const bumpVersion = () => {\n const next = version() + 1\n version(next)\n }\n\n return {\n read: () => {\n // Track both version and value to ensure equal writes notify subscribers\n version()\n return value()\n },\n write: (next: T) => {\n const prev = value()\n if (!equals(prev, next)) {\n value(next)\n return\n }\n bumpVersion()\n },\n force: () => {\n bumpVersion()\n },\n peekVersion: () => untrack(() => version()),\n peekValue: () => untrack(() => value()),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,SAAS,sBACd,cACA,SACoB;AACpB,QAAM,SAAS,SAAS,UAAU,OAAO;AACzC,QAAM,QAAQ,OAAa,YAAY;AACvC,QAAM,UAAU,OAAa,CAAC;AAE9B,QAAM,cAAc,MAAM;AACxB,UAAM,OAAO,QAAQ,IAAI;AACzB,YAAQ,IAAI;AAAA,EACd;AAEA,SAAO;AAAA,IACL,MAAM,MAAM;AAEV,cAAQ;AACR,aAAO,MAAM;AAAA,IACf;AAAA,IACA,OAAO,CAAC,SAAY;AAClB,YAAM,OAAO,MAAM;AACnB,UAAI,CAAC,OAAO,MAAM,IAAI,GAAG;AACvB,cAAM,IAAI;AACV;AAAA,MACF;AACA,kBAAY;AAAA,IACd;AAAA,IACA,OAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,IACA,aAAa,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC1C,WAAW,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EACxC;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/versioned-signal.ts"],"sourcesContent":["import { createSignal, untrack } from './signal'\n\nexport interface VersionedSignalOptions<T> {\n equals?: (prev: T, next: T) => boolean\n}\n\nexport interface VersionedSignal<T> {\n /** Reactive read that tracks both the value and version counter */\n read: () => T\n /** Write a new value, forcing a version bump when value is equal */\n write: (next: T) => void\n /** Force a version bump without changing the value */\n force: () => void\n /** Read the current version without creating a dependency */\n peekVersion: () => number\n /** Read the current value without tracking */\n peekValue: () => T\n}\n\n/**\n * Create a signal wrapper that forces subscribers to update when the same reference is written.\n *\n * Useful for compiler-generated keyed list items where updates may reuse the same object reference.\n */\nexport function createVersionedSignal<T>(\n initialValue: T,\n options?: VersionedSignalOptions<T>,\n): VersionedSignal<T> {\n const equals = options?.equals ?? Object.is\n const value = createSignal(initialValue)\n const version = createSignal(0)\n\n const bumpVersion = () => {\n const next = version() + 1\n version(next)\n }\n\n return {\n read: () => {\n // Track both version and value to ensure equal writes notify subscribers\n version()\n return value()\n },\n write: (next: T) => {\n const prev = value()\n if (!equals(prev, next)) {\n value(next)\n return\n }\n bumpVersion()\n },\n force: () => {\n bumpVersion()\n },\n peekVersion: () => untrack(() => version()),\n peekValue: () => untrack(() => value()),\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,SAAS,sBACd,cACA,SACoB;AACpB,QAAM,SAAS,SAAS,UAAU,OAAO;AACzC,QAAM,QAAQ,OAAa,YAAY;AACvC,QAAM,UAAU,OAAa,CAAC;AAE9B,QAAM,cAAc,MAAM;AACxB,UAAM,OAAO,QAAQ,IAAI;AACzB,YAAQ,IAAI;AAAA,EACd;AAEA,SAAO;AAAA,IACL,MAAM,MAAM;AAEV,cAAQ;AACR,aAAO,MAAM;AAAA,IACf;AAAA,IACA,OAAO,CAAC,SAAY;AAClB,YAAM,OAAO,MAAM;AACnB,UAAI,CAAC,OAAO,MAAM,IAAI,GAAG;AACvB,cAAM,IAAI;AACV;AAAA,MACF;AACA,kBAAY;AAAA,IACd;AAAA,IACA,OAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,IACA,aAAa,MAAM,QAAQ,MAAM,QAAQ,CAAC;AAAA,IAC1C,WAAW,MAAM,QAAQ,MAAM,MAAM,CAAC;AAAA,EACxC;AACF;","names":[]}
@@ -1,10 +1,12 @@
1
+ import {
2
+ isReactive
3
+ } from "./chunk-BQG7VEBY.js";
1
4
  import {
2
5
  createEffect,
3
6
  createRoot,
4
- isReactive,
5
7
  onCleanup,
6
8
  registerRootCleanup
7
- } from "./chunk-SO6X7G5S.js";
9
+ } from "./chunk-FKDMDAUR.js";
8
10
 
9
11
  // src/scope.ts
10
12
  function createScope() {
@@ -42,4 +44,4 @@ export {
42
44
  createScope,
43
45
  runInScope
44
46
  };
45
- //# sourceMappingURL=chunk-TWELIZRY.js.map
47
+ //# sourceMappingURL=chunk-5AA7HP4S.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/scope.ts"],"sourcesContent":["import { isReactive, type MaybeReactive } from './binding'\nimport { createEffect } from './effect'\nimport { createRoot, onCleanup, registerRootCleanup } from './lifecycle'\n\nexport { effectScope } from './signal'\n\nexport interface ReactiveScope {\n run<T>(fn: () => T): T\n stop(): void\n}\n\n/**\n * Create an explicit reactive scope that can contain effects/memos and be stopped manually.\n * The scope registers with the current root for cleanup.\n */\nexport function createScope(): ReactiveScope {\n let dispose: (() => void) | null = null\n\n const stop = () => {\n if (dispose) {\n dispose()\n dispose = null\n }\n }\n\n const run = <T>(fn: () => T): T => {\n stop()\n const { dispose: rootDispose, value } = createRoot(fn, { inherit: true })\n dispose = rootDispose\n return value\n }\n\n registerRootCleanup(stop)\n return { run, stop }\n}\n\n/**\n * Run a block of reactive code inside a managed scope that follows a boolean flag.\n * When the flag turns false, the scope is disposed and all contained effects/memos are cleaned up.\n */\nexport function runInScope(flag: MaybeReactive<boolean>, fn: () => void): void {\n const scope = createScope()\n const evaluate = () => (isReactive(flag) ? (flag as () => boolean)() : !!flag)\n\n createEffect(() => {\n const enabled = evaluate()\n if (enabled) {\n scope.run(fn)\n } else {\n scope.stop()\n }\n })\n\n onCleanup(scope.stop)\n}\n"],"mappings":";;;;;;;;;AAeO,SAAS,cAA6B;AAC3C,MAAI,UAA+B;AAEnC,QAAM,OAAO,MAAM;AACjB,QAAI,SAAS;AACX,cAAQ;AACR,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,MAAM,CAAI,OAAmB;AACjC,SAAK;AACL,UAAM,EAAE,SAAS,aAAa,MAAM,IAAI,WAAW,IAAI,EAAE,SAAS,KAAK,CAAC;AACxE,cAAU;AACV,WAAO;AAAA,EACT;AAEA,sBAAoB,IAAI;AACxB,SAAO,EAAE,KAAK,KAAK;AACrB;AAMO,SAAS,WAAW,MAA8B,IAAsB;AAC7E,QAAM,QAAQ,YAAY;AAC1B,QAAM,WAAW,MAAO,WAAW,IAAI,IAAK,KAAuB,IAAI,CAAC,CAAC;AAEzE,eAAa,MAAM;AACjB,UAAM,UAAU,SAAS;AACzB,QAAI,SAAS;AACX,YAAM,IAAI,EAAE;AAAA,IACd,OAAO;AACL,YAAM,KAAK;AAAA,IACb;AAAA,EACF,CAAC;AAED,YAAU,MAAM,IAAI;AACtB;","names":[]}
1
+ {"version":3,"sources":["../src/scope.ts"],"sourcesContent":["import { isReactive, type MaybeReactive } from './binding'\nimport { createEffect } from './effect'\nimport { createRoot, onCleanup, registerRootCleanup } from './lifecycle'\n\nexport { effectScope } from './signal'\n\nexport interface ReactiveScope {\n run<T>(fn: () => T): T\n stop(): void\n}\n\n/**\n * Create an explicit reactive scope that can contain effects/memos and be stopped manually.\n * The scope registers with the current root for cleanup.\n */\nexport function createScope(): ReactiveScope {\n let dispose: (() => void) | null = null\n\n const stop = () => {\n if (dispose) {\n dispose()\n dispose = null\n }\n }\n\n const run = <T>(fn: () => T): T => {\n stop()\n const { dispose: rootDispose, value } = createRoot(fn, { inherit: true })\n dispose = rootDispose\n return value\n }\n\n registerRootCleanup(stop)\n return { run, stop }\n}\n\n/**\n * Run a block of reactive code inside a managed scope that follows a boolean flag.\n * When the flag turns false, the scope is disposed and all contained effects/memos are cleaned up.\n */\nexport function runInScope(flag: MaybeReactive<boolean>, fn: () => void): void {\n const scope = createScope()\n const evaluate = () => (isReactive(flag) ? (flag as () => boolean)() : !!flag)\n\n createEffect(() => {\n const enabled = evaluate()\n if (enabled) {\n scope.run(fn)\n } else {\n scope.stop()\n }\n })\n\n onCleanup(scope.stop)\n}\n"],"mappings":";;;;;;;;;;;AAeO,SAAS,cAA6B;AAC3C,MAAI,UAA+B;AAEnC,QAAM,OAAO,MAAM;AACjB,QAAI,SAAS;AACX,cAAQ;AACR,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,MAAM,CAAI,OAAmB;AACjC,SAAK;AACL,UAAM,EAAE,SAAS,aAAa,MAAM,IAAI,WAAW,IAAI,EAAE,SAAS,KAAK,CAAC;AACxE,cAAU;AACV,WAAO;AAAA,EACT;AAEA,sBAAoB,IAAI;AACxB,SAAO,EAAE,KAAK,KAAK;AACrB;AAMO,SAAS,WAAW,MAA8B,IAAsB;AAC7E,QAAM,QAAQ,YAAY;AAC1B,QAAM,WAAW,MAAO,WAAW,IAAI,IAAK,KAAuB,IAAI,CAAC,CAAC;AAEzE,eAAa,MAAM;AACjB,UAAM,UAAU,SAAS;AACzB,QAAI,SAAS;AACX,YAAM,IAAI,EAAE;AAAA,IACd,OAAO;AACL,YAAM,KAAK;AAAA,IACb;AAAA,EACF,CAAC;AAED,YAAU,MAAM,IAAI;AACtB;","names":[]}