sigmx 0.1.1 → 0.2.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 (165) hide show
  1. package/README.md +10 -10
  2. package/dist/kernel/compile.d.ts +8 -9
  3. package/dist/kernel/compile.js +102 -67
  4. package/dist/kernel/compile.js.map +2 -2
  5. package/dist/kernel/contracts.d.ts +11 -5
  6. package/dist/kernel/index.d.ts +2 -2
  7. package/dist/kernel/index.js +5 -6
  8. package/dist/kernel/index.js.map +2 -2
  9. package/dist/kernel/precompile.d.ts +8 -10
  10. package/dist/kernel/precompile.js +25 -75
  11. package/dist/kernel/precompile.js.map +2 -2
  12. package/dist/kernel/precompiled.d.ts +7 -4
  13. package/dist/kernel/precompiled.js +5 -5
  14. package/dist/kernel/precompiled.js.map +2 -2
  15. package/dist/kernel/reactive.d.ts +8 -2
  16. package/dist/kernel/reactive.js +91 -62
  17. package/dist/kernel/reactive.js.map +3 -3
  18. package/dist/kernel/runtime.js +78 -68
  19. package/dist/kernel/runtime.js.map +3 -3
  20. package/dist/kernel/scan.d.ts +1 -1
  21. package/dist/kernel/scan.js +3 -3
  22. package/dist/kernel/scan.js.map +2 -2
  23. package/dist/kernel/state.d.ts +4 -3
  24. package/dist/kernel/state.js +91 -80
  25. package/dist/kernel/state.js.map +2 -2
  26. package/dist/kernel/strict-csp.d.ts +0 -5
  27. package/dist/kernel/strict-csp.js +2 -2
  28. package/dist/kernel/strict-csp.js.map +2 -2
  29. package/dist/lib/casing.d.ts +4 -1
  30. package/dist/lib/casing.js +8 -1
  31. package/dist/lib/casing.js.map +2 -2
  32. package/dist/lib/objects.d.ts +5 -3
  33. package/dist/lib/objects.js +10 -5
  34. package/dist/lib/objects.js.map +2 -2
  35. package/dist/lib/schedule.d.ts +3 -3
  36. package/dist/lib/schedule.js +12 -10
  37. package/dist/lib/schedule.js.map +2 -2
  38. package/dist/lib/sse.d.ts +10 -0
  39. package/dist/lib/sse.js +32 -29
  40. package/dist/lib/sse.js.map +2 -2
  41. package/dist/plugins/def.d.ts +5 -0
  42. package/dist/plugins/def.js +22 -0
  43. package/dist/plugins/def.js.map +7 -0
  44. package/dist/plugins/directives/attribute-sync.js +8 -12
  45. package/dist/plugins/directives/attribute-sync.js.map +2 -2
  46. package/dist/plugins/directives/boost.d.ts +1 -1
  47. package/dist/plugins/directives/boost.js +34 -31
  48. package/dist/plugins/directives/boost.js.map +2 -2
  49. package/dist/plugins/directives/busy-flag.js +13 -16
  50. package/dist/plugins/directives/busy-flag.js.map +2 -2
  51. package/dist/plugins/directives/class-toggle.js +17 -16
  52. package/dist/plugins/directives/class-toggle.js.map +2 -2
  53. package/dist/plugins/directives/cloak.js +2 -7
  54. package/dist/plugins/directives/cloak.js.map +2 -2
  55. package/dist/plugins/directives/collapse.js +36 -37
  56. package/dist/plugins/directives/collapse.js.map +2 -2
  57. package/dist/plugins/directives/declare.js +5 -8
  58. package/dist/plugins/directives/declare.js.map +2 -2
  59. package/dist/plugins/directives/derive.js +9 -18
  60. package/dist/plugins/directives/derive.js.map +2 -2
  61. package/dist/plugins/directives/element-ref.js +8 -8
  62. package/dist/plugins/directives/element-ref.js.map +2 -2
  63. package/dist/plugins/directives/event-listener.js +18 -26
  64. package/dist/plugins/directives/event-listener.js.map +2 -2
  65. package/dist/plugins/directives/frame-loop.js +9 -14
  66. package/dist/plugins/directives/frame-loop.js.map +2 -2
  67. package/dist/plugins/directives/html.js +6 -7
  68. package/dist/plugins/directives/html.js.map +2 -2
  69. package/dist/plugins/directives/inline-style.js +17 -20
  70. package/dist/plugins/directives/inline-style.js.map +2 -2
  71. package/dist/plugins/directives/mask.js +19 -23
  72. package/dist/plugins/directives/mask.js.map +2 -2
  73. package/dist/plugins/directives/media-query.d.ts +4 -1
  74. package/dist/plugins/directives/media-query.js +13 -13
  75. package/dist/plugins/directives/media-query.js.map +2 -2
  76. package/dist/plugins/directives/on-mount.js +4 -12
  77. package/dist/plugins/directives/on-mount.js.map +2 -2
  78. package/dist/plugins/directives/patch-listener.js +24 -19
  79. package/dist/plugins/directives/patch-listener.js.map +2 -2
  80. package/dist/plugins/directives/remove-me.js +7 -8
  81. package/dist/plugins/directives/remove-me.js.map +2 -2
  82. package/dist/plugins/directives/scroll-to.d.ts +4 -1
  83. package/dist/plugins/directives/scroll-to.js +8 -14
  84. package/dist/plugins/directives/scroll-to.js.map +2 -2
  85. package/dist/plugins/directives/size-watch.js +7 -12
  86. package/dist/plugins/directives/size-watch.js.map +2 -2
  87. package/dist/plugins/directives/state-dump.js +6 -10
  88. package/dist/plugins/directives/state-dump.js.map +2 -2
  89. package/dist/plugins/directives/storage-sync.js +13 -9
  90. package/dist/plugins/directives/storage-sync.js.map +2 -2
  91. package/dist/plugins/directives/teleport.js +8 -14
  92. package/dist/plugins/directives/teleport.js.map +2 -2
  93. package/dist/plugins/directives/text-content.js +6 -7
  94. package/dist/plugins/directives/text-content.js.map +2 -2
  95. package/dist/plugins/directives/timer.js +7 -13
  96. package/dist/plugins/directives/timer.js.map +2 -2
  97. package/dist/plugins/directives/transition.d.ts +1 -2
  98. package/dist/plugins/directives/transition.js +32 -34
  99. package/dist/plugins/directives/transition.js.map +2 -2
  100. package/dist/plugins/directives/tween.d.ts +2 -2
  101. package/dist/plugins/directives/tween.js +34 -50
  102. package/dist/plugins/directives/tween.js.map +2 -2
  103. package/dist/plugins/directives/two-way-bind.d.ts +1 -1
  104. package/dist/plugins/directives/two-way-bind.js +70 -97
  105. package/dist/plugins/directives/two-way-bind.js.map +2 -2
  106. package/dist/plugins/directives/url-params.js +35 -59
  107. package/dist/plugins/directives/url-params.js.map +3 -3
  108. package/dist/plugins/directives/url-replace.js +6 -7
  109. package/dist/plugins/directives/url-replace.js.map +2 -2
  110. package/dist/plugins/directives/validity.js +6 -9
  111. package/dist/plugins/directives/validity.js.map +2 -2
  112. package/dist/plugins/directives/viewport.js +18 -26
  113. package/dist/plugins/directives/viewport.js.map +2 -2
  114. package/dist/plugins/directives/visibility.js +9 -14
  115. package/dist/plugins/directives/visibility.js.map +2 -2
  116. package/dist/plugins/directives/watch.js +2 -8
  117. package/dist/plugins/directives/watch.js.map +2 -2
  118. package/dist/plugins/functions/bulk-set.js +7 -6
  119. package/dist/plugins/functions/bulk-set.js.map +2 -2
  120. package/dist/plugins/functions/bulk-toggle.js +7 -6
  121. package/dist/plugins/functions/bulk-toggle.js.map +2 -2
  122. package/dist/plugins/functions/confirm.js +2 -2
  123. package/dist/plugins/functions/confirm.js.map +2 -2
  124. package/dist/plugins/functions/copy-text.js +5 -5
  125. package/dist/plugins/functions/copy-text.js.map +2 -2
  126. package/dist/plugins/functions/dispatch.js +5 -5
  127. package/dist/plugins/functions/dispatch.js.map +2 -2
  128. package/dist/plugins/functions/locale-format.d.ts +4 -1
  129. package/dist/plugins/functions/locale-format.js +9 -16
  130. package/dist/plugins/functions/locale-format.js.map +2 -2
  131. package/dist/plugins/functions/range-map.js +6 -6
  132. package/dist/plugins/functions/range-map.js.map +2 -2
  133. package/dist/plugins/functions/request.d.ts +7 -3
  134. package/dist/plugins/functions/request.js +77 -86
  135. package/dist/plugins/functions/request.js.map +2 -2
  136. package/dist/plugins/functions/untracked-read.js +3 -2
  137. package/dist/plugins/functions/untracked-read.js.map +2 -2
  138. package/dist/plugins/functions/websocket.d.ts +3 -3
  139. package/dist/plugins/functions/websocket.js +13 -24
  140. package/dist/plugins/functions/websocket.js.map +2 -2
  141. package/dist/plugins/index.d.ts +0 -2
  142. package/dist/plugins/index.js +0 -4
  143. package/dist/plugins/index.js.map +2 -2
  144. package/dist/plugins/server-events/apply-elements.d.ts +1 -1
  145. package/dist/plugins/server-events/apply-elements.js +41 -43
  146. package/dist/plugins/server-events/apply-elements.js.map +2 -2
  147. package/dist/plugins/server-events/apply-state.js +9 -12
  148. package/dist/plugins/server-events/apply-state.js.map +2 -2
  149. package/dist/plugins/server-events/morph.js +46 -66
  150. package/dist/plugins/server-events/morph.js.map +3 -3
  151. package/dist/presets/all.js +0 -4
  152. package/dist/presets/all.js.map +2 -2
  153. package/dist/server.d.ts +10 -4
  154. package/dist/server.js +42 -14
  155. package/dist/server.js.map +2 -2
  156. package/dist/sigmx.standalone.js +1 -1
  157. package/dist/vite.js +17 -7
  158. package/dist/vite.js.map +2 -2
  159. package/package.json +4 -2
  160. package/dist/plugins/directives/transition-name.d.ts +0 -1
  161. package/dist/plugins/directives/transition-name.js +0 -11
  162. package/dist/plugins/directives/transition-name.js.map +0 -7
  163. package/dist/plugins/directives/trap.d.ts +0 -5
  164. package/dist/plugins/directives/trap.js +0 -54
  165. package/dist/plugins/directives/trap.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/kernel/precompile.ts"],
4
- "sourcesContent": ["// Build-time expression compiler. Not for the browser: import it from a Vite/Astro plugin.\nimport { rewriteActions, splitStatements } from './compile.js';\nimport { expressionKey } from './precompiled.js';\n\nconst ident = /[A-Za-z0-9_$]/;\n\n/**\n * Rewrite `$name` and `$a.b` into `$.name` / `$.a.b` so the expression runs in strict mode without\n * `with`. Skips strings and comments, recurses into template-literal interpolations, and leaves\n * `$` alone, `$[...]` alone, and `obj.$prop` alone.\n */\nexport const rewriteSignals = (src: string): string => {\n let out = '';\n let i = 0;\n const n = src.length;\n const prevCode = () => {\n for (let j = out.length - 1; j >= 0; j--) if (!/\\s/.test(out[j])) return out[j];\n return '';\n };\n while (i < n) {\n const c = src[i];\n const next = src[i + 1];\n if (c === '\"' || c === \"'\") {\n let j = i + 1;\n while (j < n && src[j] !== c) j += src[j] === '\\\\' ? 2 : 1;\n out += src.slice(i, j + 1);\n i = j + 1;\n } else if (c === '`') {\n out += c;\n i++;\n while (i < n && src[i] !== '`') {\n if (src[i] === '\\\\') {\n out += src.slice(i, i + 2);\n i += 2;\n } else if (src[i] === '$' && src[i + 1] === '{') {\n let depth = 1;\n let j = i + 2;\n while (j < n && depth) {\n if (src[j] === '{') depth++;\n else if (src[j] === '}') depth--;\n if (depth) j++;\n }\n out += `\\${${rewriteSignals(src.slice(i + 2, j))}}`;\n i = j + 1;\n } else out += src[i++];\n }\n out += '`';\n i++;\n } else if (c === '/' && next === '/') {\n const j = src.indexOf('\\n', i);\n i = j < 0 ? n : j;\n } else if (c === '/' && next === '*') {\n const j = src.indexOf('*/', i + 2);\n i = j < 0 ? n : j + 2;\n } else if (\n c === '$' &&\n next !== undefined &&\n ident.test(next) &&\n next !== '$' &&\n prevCode() !== '.' &&\n !ident.test(out[out.length - 1] ?? '')\n ) {\n let j = i + 1;\n while (j < n && ident.test(src[j])) j++;\n out += `$.${src.slice(i + 1, j)}`;\n i = j;\n } else {\n out += c;\n i++;\n }\n }\n return out;\n};\n\nexport const compileBody = (src: string, returns: boolean): string => {\n const code = rewriteSignals(rewriteActions(src.trim()));\n if (!returns) return code;\n const parts = splitStatements(code);\n const last = parts.pop() ?? '';\n return `${parts.length ? `${parts.join(';')};` : ''}return (${last}\\n)`;\n};\n\nexport type Extracted = { src: string; params: string[]; returns: boolean };\n\nexport const generateTable = (items: Extracted[]): string => {\n const seen = new Set<string>();\n const lines: string[] = [];\n for (const { src, params, returns } of items) {\n const key = expressionKey(src, params, returns);\n if (seen.has(key)) continue;\n seen.add(key);\n let body: string;\n try {\n body = compileBody(src, returns);\n Function('$', '__a', ...params, body); // syntax check at build time\n } catch {\n continue; // leave it to the runtime fallback (or fail there)\n }\n lines.push(` ${JSON.stringify(key)}: function($, __a, ${params.join(', ')}) { ${body} },`);\n }\n return `export const table = {\\n${lines.join('\\n')}\\n}\\n`;\n};\n\nconst entities: Record<string, string> = {\n '&quot;': '\"',\n '&#39;': \"'\",\n '&apos;': \"'\",\n '&lt;': '<',\n '&gt;': '>',\n '&amp;': '&',\n};\nconst decode = (s: string) => s.replace(/&(quot|#39|apos|lt|gt|amp);/g, (m) => entities[m]);\n\nexport type PluginMeta = { name: string; returns?: boolean; args?: string[] };\n\n/**\n * Find directive attributes with literal values in template source. Values must be plain quoted\n * strings; anything interpolated at render time is left to the runtime fallback.\n */\nexport const extractExpressions = (\n source: string,\n plugins: PluginMeta[],\n prefixes: string[] = ['data-'],\n): Extracted[] => {\n const byName = new Map(plugins.map((p) => [p.name, p]));\n const out: Extracted[] = [];\n const re = /([a-z][\\w-]*(?::[^\\s=\"'<>]+)?(?:__[^\\s=\"'<>]+)*)=(?:\"([^\"]*)\"|'([^']*)')/g;\n for (const m of source.matchAll(re)) {\n const attr = m[1];\n const value = decode(m[2] ?? m[3] ?? '');\n const prefix = prefixes.find((p) => attr.startsWith(p));\n if (!prefix || !value.trim()) continue;\n const plugin = byName.get(attr.slice(prefix.length).split('__')[0].split(':')[0]);\n if (!plugin) continue;\n out.push({ src: value, params: ['el', 'evt', ...(plugin.args ?? [])], returns: plugin.returns ?? true });\n }\n return out;\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// Build-time expression compiler. Not for the browser: import it from a Vite/Astro plugin.\n// It emits the very same strict-mode bodies the runtime compiles, keyed by source text.\nimport { compileBody, functionCompiler } from './compile.js';\nimport { expressionKey } from './precompiled.js';\n\nexport type Extracted = { src: string; params: string[] };\n\nexport const generateTable = (items: Extracted[]): string => {\n const seen = new Set<string>();\n const lines: string[] = [];\n for (const { src, params } of items) {\n const key = expressionKey(src);\n if (seen.has(key)) continue;\n seen.add(key);\n let body: string;\n try {\n [body] = compileBody(functionCompiler, src, params); // also the syntax check\n } catch {\n continue; // leave it to the runtime fallback (or fail there)\n }\n lines.push(` ${JSON.stringify(key)}: function($, __a, ${params.join(', ')}) { ${body} },`);\n }\n return `export const table = {\\n${lines.join('\\n')}\\n}\\n`;\n};\n\nconst entities: Record<string, string> = {\n '&quot;': '\"',\n '&#39;': \"'\",\n '&apos;': \"'\",\n '&lt;': '<',\n '&gt;': '>',\n '&amp;': '&',\n};\nconst decode = (s: string) =>\n s.replace(/&(?:quot|apos|lt|gt|amp|#\\d+|#x[\\da-f]+);/gi, (m) =>\n m[1] === '#'\n ? String.fromCodePoint(\n Number.parseInt(\n m[2] === 'x' || m[2] === 'X' ? m.slice(3, -1) : m.slice(2, -1),\n m[2] === 'x' || m[2] === 'X' ? 16 : 10,\n ),\n )\n : (entities[m.toLowerCase()] ?? m),\n );\n\nexport type PluginMeta = { name: string; args?: string[]; literal?: boolean };\n\n/**\n * Find directive attributes with literal values in template source. Values must be plain quoted\n * strings; anything interpolated at render time is left to the runtime fallback. Plugins whose value\n * is a literal (mask, teleport, \u2026) are skipped unless the attribute carries `__dynamic`.\n */\nexport const extractExpressions = (\n source: string,\n plugins: PluginMeta[],\n prefixes: string[] = ['data-'],\n): Extracted[] => {\n const byName = new Map(plugins.map((p) => [p.name, p]));\n const out: Extracted[] = [];\n const re = /([a-z][\\w-]*(?::[^\\s=\"'<>]+)?(?:__[^\\s=\"'<>]+)*)=(?:\"([^\"]*)\"|'([^']*)')/g;\n for (const m of source.matchAll(re)) {\n const attr = m[1];\n const value = decode(m[2] ?? m[3] ?? '');\n const prefix = prefixes.find((p) => attr.startsWith(p));\n if (!prefix || !value.trim()) continue;\n const [head, ...mods] = attr.slice(prefix.length).split('__');\n const plugin = byName.get(head.split(':')[0]);\n if (!plugin || (plugin.literal && !mods.some((x) => x.split('.')[0] === 'dynamic'))) continue;\n out.push({ src: value, params: ['el', 'evt', ...(plugin.args ?? [])] });\n }\n return out;\n};\n\n/**\n * Keyed directive attributes whose key contains an uppercase letter. HTML lowercases attribute names,\n * so `data-bind:firstName` reaches the runtime as `firstname`: write `data-bind:first-name`.\n */\nexport const lintSource = (source: string, prefixes: string[] = ['data-']): string[] => {\n const out: string[] = [];\n for (const p of prefixes)\n for (const m of source.matchAll(new RegExp(`(?<![\\\\w-])(${p}[a-z-]+:[^\\\\s=\"'<>]*[A-Z][^\\\\s=\"'<>]*)`, 'g')))\n out.push(`${m[1]}: attribute names are lowercased by HTML; write the key in kebab-case`);\n return out;\n};\n"],
5
+ "mappings": "AAEA,SAAS,aAAa,wBAAwB;AAC9C,SAAS,qBAAqB;AAIvB,MAAM,gBAAgB,CAAC,UAA+B;AAC3D,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,QAAkB,CAAC;AACzB,aAAW,EAAE,KAAK,OAAO,KAAK,OAAO;AACnC,UAAM,MAAM,cAAc,GAAG;AAC7B,QAAI,KAAK,IAAI,GAAG,EAAG;AACnB,SAAK,IAAI,GAAG;AACZ,QAAI;AACJ,QAAI;AACF,OAAC,IAAI,IAAI,YAAY,kBAAkB,KAAK,MAAM;AAAA,IACpD,QAAQ;AACN;AAAA,IACF;AACA,UAAM,KAAK,KAAK,KAAK,UAAU,GAAG,CAAC,sBAAsB,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,KAAK;AAAA,EAC5F;AACA,SAAO;AAAA,EAA2B,MAAM,KAAK,IAAI,CAAC;AAAA;AAAA;AACpD;AAEA,MAAM,WAAmC;AAAA,EACvC,UAAU;AAAA,EACV,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,SAAS;AACX;AACA,MAAM,SAAS,CAAC,MACd,EAAE;AAAA,EAAQ;AAAA,EAA+C,CAAC,MACxD,EAAE,CAAC,MAAM,MACL,OAAO;AAAA,IACL,OAAO;AAAA,MACL,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,MAAM,EAAE,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE;AAAA,MAC7D,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,MAAM,KAAK;AAAA,IACtC;AAAA,EACF,IACC,SAAS,EAAE,YAAY,CAAC,KAAK;AACpC;AASK,MAAM,qBAAqB,CAChC,QACA,SACA,WAAqB,CAAC,OAAO,MACb;AAChB,QAAM,SAAS,IAAI,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACtD,QAAM,MAAmB,CAAC;AAC1B,QAAM,KAAK;AACX,aAAW,KAAK,OAAO,SAAS,EAAE,GAAG;AACnC,UAAM,OAAO,EAAE,CAAC;AAChB,UAAM,QAAQ,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE;AACvC,UAAM,SAAS,SAAS,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;AACtD,QAAI,CAAC,UAAU,CAAC,MAAM,KAAK,EAAG;AAC9B,UAAM,CAAC,MAAM,GAAG,IAAI,IAAI,KAAK,MAAM,OAAO,MAAM,EAAE,MAAM,IAAI;AAC5D,UAAM,SAAS,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC,CAAC;AAC5C,QAAI,CAAC,UAAW,OAAO,WAAW,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,MAAM,SAAS,EAAI;AACrF,QAAI,KAAK,EAAE,KAAK,OAAO,QAAQ,CAAC,MAAM,OAAO,GAAI,OAAO,QAAQ,CAAC,CAAE,EAAE,CAAC;AAAA,EACxE;AACA,SAAO;AACT;AAMO,MAAM,aAAa,CAAC,QAAgB,WAAqB,CAAC,OAAO,MAAgB;AACtF,QAAM,MAAgB,CAAC;AACvB,aAAW,KAAK;AACd,eAAW,KAAK,OAAO,SAAS,IAAI,OAAO,eAAe,CAAC,0CAA0C,GAAG,CAAC;AACvG,UAAI,KAAK,GAAG,EAAE,CAAC,CAAC,uEAAuE;AAC3F,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,13 @@
1
1
  import type { ExpressionCompiler } from './contracts.js';
2
2
  export type ExpressionTable = Record<string, (root: any, actions: any, el: any, evt: any, ...args: any[]) => any>;
3
- /** Key used by the build plugin and the lookup: returns flag, parameter names, trimmed source. */
4
- export declare const expressionKey: (src: string, params: string[], returns: boolean) => string;
5
3
  /**
6
- * Look expressions up in a table generated at build time (see `sigmx/precompile`). Precompiled functions
7
- * receive the root store proxy as `$` instead of a `with` scope. Pass a `fallback` (for example
4
+ * Key used by the build plugin and the lookup: the trimmed source text. Parameter names are not part
5
+ * of it, so a plugin gaining an argument (arguments are only ever appended) keeps old tables valid.
6
+ */
7
+ export declare const expressionKey: (src: string) => string;
8
+ /**
9
+ * Look expressions up in a table generated at build time (see `sigmx/precompile`). Table functions
10
+ * take the root store proxy as `$`, exactly like runtime-compiled ones. Pass a `fallback` (for example
8
11
  * `runtimeExpressions(functionCompiler)`) for markup assembled at runtime; omit it and the runtime
9
12
  * compiler is not bundled at all.
10
13
  */
@@ -1,10 +1,10 @@
1
- const expressionKey = (src, params, returns) => `${+returns}|${params.join()}|${src.trim()}`;
2
- const precompiled = (table, fallback, onMiss) => (src, params, returns) => {
3
- const fn = table[expressionKey(src, params, returns)];
4
- if (fn) return ((store, actions, el, evt, ...args) => fn(store.$, actions, el, evt, ...args));
1
+ const expressionKey = (src) => src.trim();
2
+ const precompiled = (table, fallback, onMiss) => (src, params) => {
3
+ const fn = table[expressionKey(src)];
4
+ if (fn) return ((store, actions, ...rest) => fn(store.$, actions, ...rest));
5
5
  onMiss?.(src);
6
6
  if (!fallback) throw new Error(`expression not precompiled: ${src}`);
7
- return fallback(src, params, returns);
7
+ return fallback(src, params);
8
8
  };
9
9
  export {
10
10
  expressionKey,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/kernel/precompiled.ts"],
4
- "sourcesContent": ["import type { Evaluator, ExpressionCompiler } from './contracts.js';\n\nexport type ExpressionTable = Record<string, (root: any, actions: any, el: any, evt: any, ...args: any[]) => any>;\n\n/** Key used by the build plugin and the lookup: returns flag, parameter names, trimmed source. */\nexport const expressionKey = (src: string, params: string[], returns: boolean): string =>\n `${+returns}|${params.join()}|${src.trim()}`;\n\n/**\n * Look expressions up in a table generated at build time (see `sigmx/precompile`). Precompiled functions\n * receive the root store proxy as `$` instead of a `with` scope. Pass a `fallback` (for example\n * `runtimeExpressions(functionCompiler)`) for markup assembled at runtime; omit it and the runtime\n * compiler is not bundled at all.\n */\nexport const precompiled =\n (table: ExpressionTable, fallback?: ExpressionCompiler, onMiss?: (src: string) => void): ExpressionCompiler =>\n (src, params, returns) => {\n const fn = table[expressionKey(src, params, returns)];\n if (fn) return ((store, actions, el, evt, ...args) => fn(store.$, actions, el, evt, ...args)) as Evaluator;\n onMiss?.(src);\n if (!fallback) throw new Error(`expression not precompiled: ${src}`);\n return fallback(src, params, returns);\n };\n"],
5
- "mappings": "AAKO,MAAM,gBAAgB,CAAC,KAAa,QAAkB,YAC3D,GAAG,CAAC,OAAO,IAAI,OAAO,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;AAQrC,MAAM,cACX,CAAC,OAAwB,UAA+B,WACxD,CAAC,KAAK,QAAQ,YAAY;AACxB,QAAM,KAAK,MAAM,cAAc,KAAK,QAAQ,OAAO,CAAC;AACpD,MAAI,GAAI,SAAQ,CAAC,OAAO,SAAS,IAAI,QAAQ,SAAS,GAAG,MAAM,GAAG,SAAS,IAAI,KAAK,GAAG,IAAI;AAC3F,WAAS,GAAG;AACZ,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,+BAA+B,GAAG,EAAE;AACnE,SAAO,SAAS,KAAK,QAAQ,OAAO;AACtC;",
4
+ "sourcesContent": ["import type { Evaluator, ExpressionCompiler } from './contracts.js';\n\nexport type ExpressionTable = Record<string, (root: any, actions: any, el: any, evt: any, ...args: any[]) => any>;\n\n/**\n * Key used by the build plugin and the lookup: the trimmed source text. Parameter names are not part\n * of it, so a plugin gaining an argument (arguments are only ever appended) keeps old tables valid.\n */\nexport const expressionKey = (src: string): string => src.trim();\n\n/**\n * Look expressions up in a table generated at build time (see `sigmx/precompile`). Table functions\n * take the root store proxy as `$`, exactly like runtime-compiled ones. Pass a `fallback` (for example\n * `runtimeExpressions(functionCompiler)`) for markup assembled at runtime; omit it and the runtime\n * compiler is not bundled at all.\n */\nexport const precompiled =\n (table: ExpressionTable, fallback?: ExpressionCompiler, onMiss?: (src: string) => void): ExpressionCompiler =>\n (src, params) => {\n const fn = table[expressionKey(src)];\n if (fn) return ((store, actions, ...rest) => fn(store.$, actions, ...rest)) as Evaluator;\n onMiss?.(src);\n if (!fallback) throw new Error(`expression not precompiled: ${src}`);\n return fallback(src, params);\n };\n"],
5
+ "mappings": "AAQO,MAAM,gBAAgB,CAAC,QAAwB,IAAI,KAAK;AAQxD,MAAM,cACX,CAAC,OAAwB,UAA+B,WACxD,CAAC,KAAK,WAAW;AACf,QAAM,KAAK,MAAM,cAAc,GAAG,CAAC;AACnC,MAAI,GAAI,SAAQ,CAAC,OAAO,YAAY,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI;AACzE,WAAS,GAAG;AACZ,MAAI,CAAC,SAAU,OAAM,IAAI,MAAM,+BAA+B,GAAG,EAAE;AACnE,SAAO,SAAS,KAAK,MAAM;AAC7B;",
6
6
  "names": []
7
7
  }
@@ -14,15 +14,16 @@ export declare class Signal<T> {
14
14
  bump(): void;
15
15
  }
16
16
  export declare class Computed<T> extends Signal<T> implements Tracker {
17
+ _fn: () => T;
17
18
  _deps: Map<Signal<any>, number>;
18
19
  _dirty: boolean;
19
- _fn: () => T;
20
20
  constructor(fn: () => T);
21
21
  _refresh(): void;
22
22
  get value(): T;
23
23
  set value(_: T);
24
- peek(): T;
25
24
  _invalidate(): void;
25
+ /** Unsubscribe from every dependency; the computed is no longer recalculated. Public: the store calls it. */
26
+ dispose(): void;
26
27
  }
27
28
  export declare const signal: <T>(value: T) => Signal<T>;
28
29
  export declare const computed: <T>(fn: () => T) => Computed<T>;
@@ -31,6 +32,11 @@ export declare const computed: <T>(fn: () => T) => Computed<T>;
31
32
  * effect are disposed when the parent re-runs. Returns a disposer.
32
33
  */
33
34
  export declare const effect: (fn: () => void, onError?: (e: unknown) => void) => (() => void);
35
+ /**
36
+ * Like `effect`, but never owned by the effect that happens to be running: for long-lived effects
37
+ * such as mounted attributes, which must not die when an unrelated parent effect re-runs.
38
+ */
39
+ export declare const rootEffect: (fn: () => void, onError?: (e: unknown) => void) => (() => void);
34
40
  export declare const batch: <R>(fn: () => R) => R;
35
41
  export declare const untracked: <R>(fn: () => R) => R;
36
42
  export declare const onSettled: (fn: () => void) => (() => void);
@@ -5,16 +5,15 @@ let flushing = false;
5
5
  const queue = /* @__PURE__ */ new Set();
6
6
  const settled = /* @__PURE__ */ new Set();
7
7
  class Signal {
8
- a;
9
- e = 0;
10
- f = /* @__PURE__ */ new Set();
8
+ d = 0;
9
+ e = /* @__PURE__ */ new Set();
11
10
  constructor(v) {
12
11
  this.a = v;
13
12
  }
14
13
  get value() {
15
14
  if (active) {
16
- active.b.set(this, this.e);
17
- this.f.add(active);
15
+ active.b.set(this, this.d);
16
+ this.e.add(active);
18
17
  }
19
18
  return this.a;
20
19
  }
@@ -29,22 +28,15 @@ class Signal {
29
28
  }
30
29
  /** Notify subscribers without replacing the value (after mutating an array or object in place). */
31
30
  bump() {
32
- this.e++;
33
- for (const s of this.f) s.h();
34
- if (!depth) flush();
31
+ this.d++;
32
+ for (const s of this.e) s.g();
33
+ depth || flush();
35
34
  }
36
35
  }
37
36
  const release = (t) => {
38
- for (const d of t.b.keys()) d.f.delete(t);
37
+ for (const d of t.b.keys()) d.e.delete(t);
39
38
  t.b.clear();
40
39
  };
41
- const stale = (t) => {
42
- for (const [d, seen] of t.b) {
43
- if (d instanceof Computed) d.i();
44
- if (d.e !== seen) return true;
45
- }
46
- return false;
47
- };
48
40
  const capture = (t, fn) => {
49
41
  release(t);
50
42
  const prev = active;
@@ -55,82 +47,93 @@ const capture = (t, fn) => {
55
47
  active = prev;
56
48
  }
57
49
  };
50
+ const stale = (t) => {
51
+ if (!t.b.size) return true;
52
+ for (const [d, seen] of t.b) {
53
+ if (d instanceof Computed) d.l();
54
+ if (d.d !== seen) return true;
55
+ }
56
+ return false;
57
+ };
58
58
  class Computed extends Signal {
59
59
  b = /* @__PURE__ */ new Map();
60
- g = true;
61
- c;
60
+ c = true;
62
61
  constructor(fn) {
63
62
  super(void 0);
64
- this.c = fn;
63
+ this.h = fn;
65
64
  }
66
- i() {
67
- if (!this.g) return;
68
- this.g = false;
69
- if (this.b.size && !stale(this)) return;
70
- const x = capture(this, this.c);
65
+ l() {
66
+ if (!this.c) return;
67
+ this.c = false;
68
+ if (!stale(this)) return;
69
+ const x = capture(this, this.h);
71
70
  if (!Object.is(x, this.a)) {
72
71
  this.a = x;
73
- this.e++;
72
+ this.d++;
74
73
  }
75
74
  }
76
75
  get value() {
77
- this.i();
76
+ this.l();
78
77
  return super.value;
79
78
  }
80
79
  set value(_) {
81
- throw new Error("computed signals are read-only");
82
- }
83
- peek() {
84
- this.i();
85
- return this.a;
80
+ throw new Error("computed is read-only");
86
81
  }
87
- h() {
88
- if (!this.g) {
89
- this.g = true;
90
- for (const s of this.f) s.h();
82
+ g() {
83
+ if (!this.c) {
84
+ this.c = true;
85
+ for (const s of this.e) s.g();
91
86
  }
92
87
  }
88
+ /** Unsubscribe from every dependency; the computed is no longer recalculated. Public: the store calls it. */
89
+ dispose() {
90
+ release(this);
91
+ this.c = false;
92
+ }
93
93
  }
94
94
  class Effect {
95
95
  b = /* @__PURE__ */ new Map();
96
- j = false;
97
- k = false;
98
- d = /* @__PURE__ */ new Set();
99
- c;
100
- l;
96
+ f = false;
97
+ i = false;
98
+ j = /* @__PURE__ */ new Set();
101
99
  constructor(fn, onError) {
102
- this.c = fn;
103
- this.l = onError;
100
+ this.h = fn;
101
+ this.m = onError;
104
102
  }
105
- h() {
106
- if (!this.k && !this.j) {
107
- this.j = true;
103
+ g() {
104
+ if (!this.i && !this.f) {
105
+ this.f = true;
108
106
  queue.add(this);
109
107
  }
110
108
  }
111
109
  n() {
112
- this.j = false;
113
- if (this.k || this.b.size && !stale(this)) return;
114
- for (const c of this.d) c.m();
115
- this.d.clear();
110
+ this.f = false;
111
+ if (this.i) return;
116
112
  const prevOwner = owner;
117
113
  owner = this;
118
114
  depth++;
119
115
  try {
120
- capture(this, this.c);
116
+ if (stale(this)) {
117
+ this.o();
118
+ capture(this, this.h);
119
+ }
121
120
  } catch (e) {
122
- if (!this.l) throw e;
123
- this.l(e);
121
+ if (!this.m) throw e;
122
+ this.m(e);
124
123
  } finally {
125
124
  depth--;
126
125
  owner = prevOwner;
127
126
  }
128
127
  }
129
- m() {
130
- this.k = true;
128
+ o() {
129
+ for (const c of this.j) c.k();
130
+ this.j.clear();
131
+ }
132
+ k() {
133
+ this.i = true;
131
134
  release(this);
132
- for (const c of this.d) c.m();
133
- this.d.clear();
135
+ if (active === this) active = void 0;
136
+ this.o();
134
137
  queue.delete(this);
135
138
  }
136
139
  }
@@ -138,17 +141,31 @@ const signal = (value) => new Signal(value);
138
141
  const computed = (fn) => new Computed(fn);
139
142
  const effect = (fn, onError) => {
140
143
  const e = new Effect(fn, onError);
141
- owner?.d.add(e);
142
- e.n();
143
- if (!depth) flush();
144
- return () => e.m();
144
+ owner?.j.add(e);
145
+ try {
146
+ e.n();
147
+ depth || flush();
148
+ } catch (err) {
149
+ e.k();
150
+ throw err;
151
+ }
152
+ return () => e.k();
153
+ };
154
+ const rootEffect = (fn, onError) => {
155
+ const prev = owner;
156
+ owner = void 0;
157
+ try {
158
+ return effect(fn, onError);
159
+ } finally {
160
+ owner = prev;
161
+ }
145
162
  };
146
163
  const batch = (fn) => {
147
164
  depth++;
148
165
  try {
149
166
  return fn();
150
167
  } finally {
151
- if (!--depth) flush();
168
+ --depth || flush();
152
169
  }
153
170
  };
154
171
  const untracked = (fn) => {
@@ -167,21 +184,32 @@ const onSettled = (fn) => {
167
184
  const flush = () => {
168
185
  if (flushing || depth) return;
169
186
  flushing = true;
187
+ let thrown;
188
+ let failed = false;
170
189
  try {
171
190
  let guard = 0;
172
191
  while (queue.size) {
173
192
  if (++guard > 1e5) {
193
+ for (const e2 of queue) e2.f = false;
174
194
  queue.clear();
175
195
  throw new Error("effect loop");
176
196
  }
177
197
  const e = queue.values().next().value;
178
198
  queue.delete(e);
179
- e.n();
199
+ try {
200
+ e.n();
201
+ } catch (err) {
202
+ if (!failed) {
203
+ failed = true;
204
+ thrown = err;
205
+ }
206
+ }
180
207
  }
181
208
  } finally {
182
209
  flushing = false;
183
210
  }
184
211
  for (const fn of settled) fn();
212
+ if (failed) throw thrown;
185
213
  };
186
214
  export {
187
215
  Computed,
@@ -191,6 +219,7 @@ export {
191
219
  effect,
192
220
  flush,
193
221
  onSettled,
222
+ rootEffect,
194
223
  signal,
195
224
  untracked
196
225
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/kernel/reactive.ts"],
4
- "sourcesContent": ["// Members prefixed with `_` are internal and get mangled by the build.\n\ninterface Tracker {\n _deps: Map<Signal<any>, number>;\n _invalidate(): void;\n}\n\nlet active: Tracker | undefined;\nlet owner: Effect | undefined;\nlet depth = 0;\nlet flushing = false;\nconst queue = new Set<Effect>();\nconst settled = new Set<() => void>();\n\nexport class Signal<T> {\n _v: T;\n _ver = 0;\n _subs = new Set<Tracker>();\n constructor(v: T) {\n this._v = v;\n }\n get value(): T {\n if (active) {\n active._deps.set(this, this._ver);\n this._subs.add(active);\n }\n return this._v;\n }\n set value(x: T) {\n if (!Object.is(x, this._v)) {\n this._v = x;\n this.bump();\n }\n }\n peek(): T {\n return this._v;\n }\n /** Notify subscribers without replacing the value (after mutating an array or object in place). */\n bump(): void {\n this._ver++;\n for (const s of this._subs) s._invalidate();\n if (!depth) flush();\n }\n}\n\nconst release = (t: Tracker): void => {\n for (const d of t._deps.keys()) d._subs.delete(t);\n t._deps.clear();\n};\n\n/** True when any dependency's version moved since the tracker last ran. Refreshes computeds on the way. */\nconst stale = (t: Tracker): boolean => {\n for (const [d, seen] of t._deps) {\n if (d instanceof Computed) d._refresh();\n if (d._ver !== seen) return true;\n }\n return false;\n};\n\nconst capture = <R>(t: Tracker, fn: () => R): R => {\n release(t);\n const prev = active;\n active = t;\n try {\n return fn();\n } finally {\n active = prev;\n }\n};\n\nexport class Computed<T> extends Signal<T> implements Tracker {\n _deps = new Map<Signal<any>, number>();\n _dirty = true;\n _fn: () => T;\n constructor(fn: () => T) {\n super(undefined as T);\n this._fn = fn;\n }\n _refresh(): void {\n if (!this._dirty) return;\n this._dirty = false;\n if (this._deps.size && !stale(this)) return;\n const x = capture(this, this._fn);\n if (!Object.is(x, this._v)) {\n this._v = x;\n this._ver++;\n }\n }\n override get value(): T {\n this._refresh();\n return super.value;\n }\n override set value(_: T) {\n throw new Error('computed signals are read-only');\n }\n override peek(): T {\n this._refresh();\n return this._v;\n }\n _invalidate(): void {\n if (!this._dirty) {\n this._dirty = true;\n for (const s of this._subs) s._invalidate();\n }\n }\n}\n\nclass Effect implements Tracker {\n _deps = new Map<Signal<any>, number>();\n _queued = false;\n _dead = false;\n _kids = new Set<Effect>();\n _fn: () => void;\n _onError?: (e: unknown) => void;\n constructor(fn: () => void, onError?: (e: unknown) => void) {\n this._fn = fn;\n this._onError = onError;\n }\n _invalidate(): void {\n if (!this._dead && !this._queued) {\n this._queued = true;\n queue.add(this);\n }\n }\n _exec(): void {\n this._queued = false;\n if (this._dead || (this._deps.size && !stale(this))) return;\n for (const c of this._kids) c._dispose();\n this._kids.clear();\n const prevOwner = owner;\n owner = this;\n depth++;\n try {\n capture(this, this._fn);\n } catch (e) {\n if (!this._onError) throw e;\n this._onError(e);\n } finally {\n depth--;\n owner = prevOwner;\n }\n }\n _dispose(): void {\n this._dead = true;\n release(this);\n for (const c of this._kids) c._dispose();\n this._kids.clear();\n queue.delete(this);\n }\n}\n\nexport const signal = <T>(value: T): Signal<T> => new Signal(value);\nexport const computed = <T>(fn: () => T): Computed<T> => new Computed(fn);\n\n/**\n * Run `fn` now and again whenever a signal it read changes. Effects created inside another\n * effect are disposed when the parent re-runs. Returns a disposer.\n */\nexport const effect = (fn: () => void, onError?: (e: unknown) => void): (() => void) => {\n const e = new Effect(fn, onError);\n owner?._kids.add(e);\n e._exec();\n if (!depth) flush();\n return () => e._dispose();\n};\n\nexport const batch = <R>(fn: () => R): R => {\n depth++;\n try {\n return fn();\n } finally {\n if (!--depth) flush();\n }\n};\n\nexport const untracked = <R>(fn: () => R): R => {\n const prev = active;\n active = undefined;\n try {\n return fn();\n } finally {\n active = prev;\n }\n};\n\nexport const onSettled = (fn: () => void): (() => void) => {\n settled.add(fn);\n return () => settled.delete(fn);\n};\n\nexport const flush = (): void => {\n if (flushing || depth) return;\n flushing = true;\n try {\n let guard = 0;\n while (queue.size) {\n if (++guard > 1e5) {\n queue.clear(); // leave nothing behind, or every later flush would trip the same guard\n throw new Error('effect loop');\n }\n const e = queue.values().next().value as Effect;\n queue.delete(e);\n e._exec();\n }\n } finally {\n flushing = false;\n }\n for (const fn of settled) fn();\n};\n"],
5
- "mappings": "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",
6
- "names": ["_v", "_ver", "_subs", "_deps", "_invalidate", "_refresh", "_dirty", "_fn", "_queued", "_dead", "_kids", "_onError", "_exec", "_dispose"]
4
+ "sourcesContent": ["// Members prefixed with `_` are internal and get mangled by the build.\n\ninterface Tracker {\n _deps: Map<Signal<any>, number>;\n _invalidate(): void;\n}\n\nlet active: Tracker | undefined;\nlet owner: Effect | undefined;\nlet depth = 0;\nlet flushing = false;\nconst queue = new Set<Effect>();\nconst settled = new Set<() => void>();\n\nexport class Signal<T> {\n declare _v: T;\n _ver = 0;\n _subs = new Set<Tracker>();\n constructor(v: T) {\n this._v = v;\n }\n get value(): T {\n if (active) {\n active._deps.set(this, this._ver);\n this._subs.add(active);\n }\n return this._v;\n }\n set value(x: T) {\n if (!Object.is(x, this._v)) {\n this._v = x;\n this.bump();\n }\n }\n peek(): T {\n return this._v;\n }\n /** Notify subscribers without replacing the value (after mutating an array or object in place). */\n bump(): void {\n this._ver++;\n for (const s of this._subs) s._invalidate();\n depth || flush();\n }\n}\n\n/** Drop `t`'s subscriptions. */\nconst release = (t: Tracker): void => {\n for (const d of t._deps.keys()) d._subs.delete(t);\n t._deps.clear();\n};\n\n/** Drop `t`'s subscriptions, then run `fn` with `t` as the active tracker so its reads re-subscribe. */\nconst capture = <R>(t: Tracker, fn: () => R): R => {\n release(t);\n const prev = active;\n active = t;\n try {\n return fn();\n } finally {\n active = prev;\n }\n};\n\n/** True when `t` has never run or any dependency's version moved since. Refreshes computeds on the way. */\nconst stale = (t: Tracker): boolean => {\n if (!t._deps.size) return true;\n for (const [d, seen] of t._deps) {\n if (d instanceof Computed) d._refresh();\n if (d._ver !== seen) return true;\n }\n return false;\n};\n\nexport class Computed<T> extends Signal<T> implements Tracker {\n declare _fn: () => T;\n _deps = new Map<Signal<any>, number>();\n _dirty = true;\n constructor(fn: () => T) {\n super(undefined as T);\n this._fn = fn;\n }\n _refresh(): void {\n if (!this._dirty) return;\n this._dirty = false;\n if (!stale(this)) return;\n const x = capture(this, this._fn);\n if (!Object.is(x, this._v)) {\n this._v = x;\n this._ver++;\n }\n }\n override get value(): T {\n this._refresh();\n return super.value;\n }\n override set value(_: T) {\n throw new Error('computed is read-only');\n }\n _invalidate(): void {\n if (!this._dirty) {\n this._dirty = true;\n for (const s of this._subs) s._invalidate();\n }\n }\n /** Unsubscribe from every dependency; the computed is no longer recalculated. Public: the store calls it. */\n dispose(): void {\n release(this);\n this._dirty = false;\n }\n}\n\nclass Effect implements Tracker {\n _deps = new Map<Signal<any>, number>();\n _queued = false;\n _dead = false;\n _kids = new Set<Effect>();\n declare _fn: () => void;\n declare _onError?: (e: unknown) => void;\n constructor(fn: () => void, onError?: (e: unknown) => void) {\n this._fn = fn;\n this._onError = onError;\n }\n _invalidate(): void {\n if (!this._dead && !this._queued) {\n this._queued = true;\n queue.add(this);\n }\n }\n _exec(): void {\n this._queued = false;\n if (this._dead) return;\n const prevOwner = owner;\n owner = this;\n depth++;\n try {\n // `stale` refreshes computeds, which may throw: that belongs to this effect's error handling.\n if (stale(this)) {\n this._drop();\n capture(this, this._fn);\n }\n } catch (e) {\n if (!this._onError) throw e;\n this._onError(e);\n } finally {\n depth--;\n owner = prevOwner;\n }\n }\n _drop(): void {\n for (const c of this._kids) c._dispose();\n this._kids.clear();\n }\n _dispose(): void {\n this._dead = true;\n release(this);\n if (active === this) active = undefined; // disposed from inside its own run: stop subscribing\n this._drop();\n queue.delete(this);\n }\n}\n\nexport const signal = <T>(value: T): Signal<T> => new Signal(value);\nexport const computed = <T>(fn: () => T): Computed<T> => new Computed(fn);\n\n/**\n * Run `fn` now and again whenever a signal it read changes. Effects created inside another\n * effect are disposed when the parent re-runs. Returns a disposer.\n */\nexport const effect = (fn: () => void, onError?: (e: unknown) => void): (() => void) => {\n const e = new Effect(fn, onError);\n owner?._kids.add(e);\n try {\n e._exec();\n depth || flush();\n } catch (err) {\n e._dispose(); // a first run that throws (or loops) without a handler leaves nothing subscribed\n throw err;\n }\n return () => e._dispose();\n};\n\n/**\n * Like `effect`, but never owned by the effect that happens to be running: for long-lived effects\n * such as mounted attributes, which must not die when an unrelated parent effect re-runs.\n */\nexport const rootEffect = (fn: () => void, onError?: (e: unknown) => void): (() => void) => {\n const prev = owner;\n owner = undefined;\n try {\n return effect(fn, onError);\n } finally {\n owner = prev;\n }\n};\n\nexport const batch = <R>(fn: () => R): R => {\n depth++;\n try {\n return fn();\n } finally {\n --depth || flush();\n }\n};\n\nexport const untracked = <R>(fn: () => R): R => {\n const prev = active;\n active = undefined;\n try {\n return fn();\n } finally {\n active = prev;\n }\n};\n\nexport const onSettled = (fn: () => void): (() => void) => {\n settled.add(fn);\n return () => settled.delete(fn);\n};\n\nexport const flush = (): void => {\n if (flushing || depth) return;\n flushing = true;\n let thrown: unknown;\n let failed = false;\n try {\n let guard = 0;\n while (queue.size) {\n if (++guard > 1e5) {\n // Leave nothing behind, or every later flush would trip the same guard; the effects stay\n // subscribed and run again on their next change.\n for (const e of queue) e._queued = false;\n queue.clear();\n throw new Error('effect loop');\n }\n const e = queue.values().next().value as Effect;\n queue.delete(e);\n try {\n e._exec();\n } catch (err) {\n // One throwing effect (no onError) must not starve the others; rethrow after the flush.\n if (!failed) {\n failed = true;\n thrown = err;\n }\n }\n }\n } finally {\n flushing = false;\n }\n for (const fn of settled) fn();\n if (failed) throw thrown;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["_ver", "_subs", "_v", "_deps", "_invalidate", "_refresh", "_dirty", "_fn", "_queued", "_dead", "_kids", "_onError", "_exec", "_drop", "_dispose", "e"]
7
7
  }