flexium 0.12.13 → 0.12.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -92
- package/dist/canvas.d.cts +14 -13
- package/dist/canvas.d.ts +14 -13
- package/dist/canvas.js +1 -1
- package/dist/canvas.js.map +1 -1
- package/dist/canvas.mjs +1 -1
- package/dist/canvas.mjs.map +1 -1
- package/dist/chunk-3DKZ2J4D.mjs +2 -0
- package/dist/chunk-3DKZ2J4D.mjs.map +1 -0
- package/dist/chunk-5PNH2ARD.mjs +2 -0
- package/dist/chunk-5PNH2ARD.mjs.map +1 -0
- package/dist/{chunk-7BXR4ZFD.js → chunk-6VIRXD2Y.js} +2 -2
- package/dist/chunk-6VIRXD2Y.js.map +1 -0
- package/dist/chunk-6Z33DLMI.js +2 -0
- package/dist/chunk-6Z33DLMI.js.map +1 -0
- package/dist/chunk-E75BJDOQ.mjs +2 -0
- package/dist/chunk-E75BJDOQ.mjs.map +1 -0
- package/dist/chunk-IWFEXW4F.mjs +2 -0
- package/dist/chunk-IWFEXW4F.mjs.map +1 -0
- package/dist/chunk-JY6CE6RN.mjs +2 -0
- package/dist/chunk-JY6CE6RN.mjs.map +1 -0
- package/dist/chunk-LTT43APF.js +2 -0
- package/dist/chunk-LTT43APF.js.map +1 -0
- package/dist/chunk-PSKDIB7J.js +2 -0
- package/dist/chunk-PSKDIB7J.js.map +1 -0
- package/dist/chunk-UWFVCKRU.js +2 -0
- package/dist/chunk-UWFVCKRU.js.map +1 -0
- package/dist/chunk-WGKD63GN.mjs +2 -0
- package/dist/chunk-WGKD63GN.mjs.map +1 -0
- package/dist/chunk-YWTD32NA.js +2 -0
- package/dist/chunk-YWTD32NA.js.map +1 -0
- package/dist/core.d.cts +91 -15
- package/dist/core.d.ts +91 -15
- package/dist/core.js +1 -1
- package/dist/core.js.map +1 -1
- package/dist/core.mjs +1 -1
- package/dist/core.mjs.map +1 -1
- package/dist/dom.d.cts +154 -9
- package/dist/dom.d.ts +154 -9
- package/dist/dom.js +1 -1
- package/dist/dom.js.map +1 -1
- package/dist/dom.mjs +1 -1
- package/dist/dom.mjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/interactive.d.cts +17 -16
- package/dist/interactive.d.ts +17 -16
- package/dist/interactive.js +1 -1
- package/dist/interactive.js.map +1 -1
- package/dist/interactive.mjs +1 -1
- package/dist/interactive.mjs.map +1 -1
- package/dist/jsx-dev-runtime.d.cts +1 -1
- package/dist/jsx-dev-runtime.d.ts +1 -1
- package/dist/jsx-runtime.d.cts +1 -1
- package/dist/jsx-runtime.d.ts +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/render-QZAFAGIM.js +2 -0
- package/dist/render-QZAFAGIM.js.map +1 -0
- package/dist/render-UIWHIMS2.mjs +2 -0
- package/dist/render-UIWHIMS2.mjs.map +1 -0
- package/dist/router.d.cts +1 -1
- package/dist/router.d.ts +1 -1
- package/dist/router.js +1 -1
- package/dist/router.js.map +1 -1
- package/dist/router.mjs +1 -1
- package/dist/router.mjs.map +1 -1
- package/dist/server.d.cts +17 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +2 -0
- package/dist/server.js.map +1 -0
- package/dist/server.mjs +2 -0
- package/dist/server.mjs.map +1 -0
- package/dist/types-CxlS2F2j.d.cts +19 -0
- package/dist/types-CxlS2F2j.d.ts +19 -0
- package/dist/types-y2GGaXXk.d.cts +9 -0
- package/dist/types-y2GGaXXk.d.ts +9 -0
- package/package.json +6 -1
- package/dist/chunk-44RZHCII.mjs +0 -2
- package/dist/chunk-44RZHCII.mjs.map +0 -1
- package/dist/chunk-7BXR4ZFD.js.map +0 -1
- package/dist/chunk-APAMPY43.js +0 -2
- package/dist/chunk-APAMPY43.js.map +0 -1
- package/dist/chunk-CPJRQL2C.mjs +0 -2
- package/dist/chunk-CPJRQL2C.mjs.map +0 -1
- package/dist/chunk-ECB5HZOQ.mjs +0 -2
- package/dist/chunk-ECB5HZOQ.mjs.map +0 -1
- package/dist/chunk-ENWGYQNU.js +0 -2
- package/dist/chunk-ENWGYQNU.js.map +0 -1
- package/dist/chunk-IA4FEBFE.js +0 -2
- package/dist/chunk-IA4FEBFE.js.map +0 -1
- package/dist/chunk-LUREDEUB.mjs +0 -2
- package/dist/chunk-LUREDEUB.mjs.map +0 -1
- package/dist/chunk-LUW7DIEW.js +0 -2
- package/dist/chunk-LUW7DIEW.js.map +0 -1
- package/dist/chunk-S6WF3XNF.mjs +0 -2
- package/dist/chunk-S6WF3XNF.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/lifecycle.ts"],"names":["effect","fn","deps","state","hook","hasChanged","d","i","cleanup","sync","setBatching","flush","batch"],"mappings":"iEAGO,SAASA,CAAAA,CAAOC,EAAiCC,CAAAA,CAAc,CAElE,IAAMC,CAAAA,CAAQC,kBAAAA,CAAK,KAER,CACH,OAAA,CAAS,OACT,IAAA,CAAM,MAAA,CACN,OAAQ,MAAA,CACR,MAAA,CAAQ,KACZ,CAAA,CACH,CAAA,CAKGC,CAAAA,CAAa,IAAA,CAMjB,GALIF,CAAAA,CAAM,QAAUD,CAAAA,EAAQC,CAAAA,CAAM,OAC9BE,CAAAA,CAAaH,CAAAA,CAAK,KAAK,CAACI,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,GAAMH,CAAAA,CAAM,IAAA,CAAMI,CAAC,CAAC,CAAA,CAAA,CAIrDF,EAAY,CAERF,CAAAA,CAAM,UACNA,CAAAA,CAAM,OAAA,EAAQ,CACdA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAA,CAIpB,IAAMK,CAAAA,CAAUP,CAAAA,GACZ,OAAOO,CAAAA,EAAY,aACnBL,CAAAA,CAAM,OAAA,CAAUK,CAAAA,CAAAA,CAGpBL,CAAAA,CAAM,IAAA,CAAOD,CAAAA,CACbC,EAAM,MAAA,CAAS,KACnB,CAGJ,CAOO,SAASM,EAAKR,CAAAA,CAAiB,CAClC,GAAIA,CAAAA,CAAI,CACJS,kBAAAA,CAAY,IAAI,CAAA,CAChB,GAAI,CACAT,CAAAA,GACJ,QAAE,CACES,kBAAAA,CAAY,KAAK,CAAA,CACjBC,kBAAAA,GACJ,CACJ,CAAA,KACIA,kBAAAA,GAER,CAEO,SAASC,EAAMX,CAAAA,CAAgB,CAClCQ,CAAAA,CAAKR,CAAE,EACX","file":"chunk-IA4FEBFE.js","sourcesContent":["import { hook } from './hook'\nimport { ReactiveEffect, flush, setBatching } from './effect'\n\nexport function effect(fn: () => (void | (() => void)), deps?: any[]) {\n // Use hook to store state across renders\n const state = hook(() => {\n // Initial State of the Hook (Runs once)\n return {\n cleanup: undefined as undefined | (() => void),\n deps: undefined as undefined | any[],\n effect: undefined as undefined | ReactiveEffect,\n hasRun: false\n }\n })\n\n // This runs on every render (update)\n\n // 1. Check dependencies\n let hasChanged = true\n if (state.hasRun && deps && state.deps) {\n hasChanged = deps.some((d, i) => d !== state.deps![i])\n }\n\n // 2. If changed, run effect\n if (hasChanged) {\n // Cleanup previous run\n if (state.cleanup) {\n state.cleanup()\n state.cleanup = undefined\n }\n\n // Run effect\n const cleanup = fn()\n if (typeof cleanup === 'function') {\n state.cleanup = cleanup\n }\n\n state.deps = deps\n state.hasRun = true\n }\n\n // Cleanup on component unmount logic is handled by the renderer via ComponentInstance context\n}\n\n/**\n * Unified sync API\n * - sync(): Force refresh (flush pending effects)\n * - sync(fn): Batch updates (run fn then flush)\n */\nexport function sync(fn?: () => void) {\n if (fn) {\n setBatching(true)\n try {\n fn()\n } finally {\n setBatching(false)\n flush()\n }\n } else {\n flush()\n }\n}\n\nexport function batch(fn: () => void) {\n sync(fn)\n}\n"]}
|
package/dist/chunk-LUREDEUB.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var e=new Map;function c(t){let n=Symbol("context"),o=r=>r.children;return o._contextId=n,{Provider:o,id:n,defaultValue:t}}function s(t){return e.has(t.id)?e.get(t.id):t.defaultValue}function l(t,n){let o=e.get(t);return e.set(t,n),o}function p(t,n){n===void 0?e.delete(t):e.set(t,n);}function u(){return new Map(e)}function i(t,n){let o=new Map(e);e.clear(),t.forEach((r,a)=>e.set(a,r));try{return n()}finally{e.clear(),o.forEach((r,a)=>e.set(a,r));}}export{c as a,s as b,l as c,p as d,u as e,i as f};//# sourceMappingURL=chunk-LUREDEUB.mjs.map
|
|
2
|
-
//# sourceMappingURL=chunk-LUREDEUB.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/context.ts"],"names":["contextMap","createContext","defaultValue","id","Provider","props","context","ctx","pushContext","value","prev","popContext","prevValue","snapshotContext","runWithContext","snapshot","fn","prevContext","key"],"mappings":"AAMA,IAAMA,CAAAA,CAAa,IAAI,GAAA,CAEhB,SAASC,CAAAA,CAAiBC,CAAAA,CAA6B,CAC1D,IAAMC,CAAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CACrBC,EAAYC,CAAAA,EAAuCA,CAAAA,CAAM,QAAA,CAC/D,OAACD,CAAAA,CAAiB,UAAA,CAAaD,CAAAA,CACxB,CAAE,SAAAC,CAAAA,CAAU,EAAA,CAAAD,CAAAA,CAAI,YAAA,CAAAD,CAAa,CACxC,CAEO,SAASI,EAAWC,CAAAA,CAAoB,CAC3C,OAAOP,CAAAA,CAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIP,EAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIA,CAAAA,CAAI,YACjE,CAGO,SAASC,EAAYL,CAAAA,CAAYM,CAAAA,CAAY,CAChD,IAAMC,CAAAA,CAAOV,CAAAA,CAAW,GAAA,CAAIG,CAAE,EAC9B,OAAAH,CAAAA,CAAW,GAAA,CAAIG,CAAAA,CAAIM,CAAK,CAAA,CACjBC,CACX,CAGO,SAASC,CAAAA,CAAWR,CAAAA,CAAYS,CAAAA,CAAgB,CAC/CA,CAAAA,GAAc,MAAA,CACdZ,CAAAA,CAAW,MAAA,CAAOG,CAAE,CAAA,CAEpBH,CAAAA,CAAW,GAAA,CAAIG,CAAAA,CAAIS,CAAS,EAEpC,CAEO,SAASC,CAAAA,EAAoC,CAChD,OAAO,IAAI,GAAA,CAAIb,CAAU,CAC7B,CAEO,SAASc,CAAAA,CAAkBC,CAAAA,CAA4BC,CAAAA,CAAgB,CAE1E,IAAMC,CAAAA,CAAc,IAAI,GAAA,CAAIjB,CAAU,CAAA,CAGtCA,CAAAA,CAAW,KAAA,EAAM,CACjBe,CAAAA,CAAS,OAAA,CAAQ,CAACN,CAAAA,CAAOS,IAAQlB,CAAAA,CAAW,GAAA,CAAIkB,CAAAA,CAAKT,CAAK,CAAC,CAAA,CAE3D,GAAI,CACA,OAAOO,CAAAA,EACX,CAAA,OAAE,CAEEhB,CAAAA,CAAW,KAAA,EAAM,CACjBiB,CAAAA,CAAY,QAAQ,CAACR,CAAAA,CAAOS,CAAAA,GAAQlB,CAAAA,CAAW,GAAA,CAAIkB,CAAAA,CAAKT,CAAK,CAAC,EAClE,CACJ","file":"chunk-LUREDEUB.mjs","sourcesContent":["export interface Context<T> {\n Provider: (props: { value: T; children: any }) => any\n id: symbol\n defaultValue: T\n}\n\nconst contextMap = new Map<symbol, any>()\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n const id = Symbol('context')\n const Provider = (props: { value: T; children: any }) => props.children;\n (Provider as any)._contextId = id\n return { Provider, id, defaultValue }\n}\n\nexport function context<T>(ctx: Context<T>): T {\n return contextMap.has(ctx.id) ? contextMap.get(ctx.id) : ctx.defaultValue\n}\n\n// Internal helpers for renderer\nexport function pushContext(id: symbol, value: any) {\n const prev = contextMap.get(id)\n contextMap.set(id, value)\n return prev\n}\n\n\nexport function popContext(id: symbol, prevValue: any) {\n if (prevValue === undefined) {\n contextMap.delete(id)\n } else {\n contextMap.set(id, prevValue)\n }\n}\n\nexport function snapshotContext(): Map<symbol, any> {\n return new Map(contextMap)\n}\n\nexport function runWithContext<R>(snapshot: Map<symbol, any>, fn: () => R): R {\n // 1. Save current context\n const prevContext = new Map(contextMap)\n\n // 2. Apply snapshot\n contextMap.clear()\n snapshot.forEach((value, key) => contextMap.set(key, value))\n\n try {\n return fn()\n } finally {\n // 3. Restore previous context\n contextMap.clear()\n prevContext.forEach((value, key) => contextMap.set(key, value))\n }\n}\n"]}
|
package/dist/chunk-LUW7DIEW.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
'use strict';var e=new Map;function c(t){let n=Symbol("context"),o=r=>r.children;return o._contextId=n,{Provider:o,id:n,defaultValue:t}}function s(t){return e.has(t.id)?e.get(t.id):t.defaultValue}function l(t,n){let o=e.get(t);return e.set(t,n),o}function p(t,n){n===void 0?e.delete(t):e.set(t,n);}function u(){return new Map(e)}function i(t,n){let o=new Map(e);e.clear(),t.forEach((r,a)=>e.set(a,r));try{return n()}finally{e.clear(),o.forEach((r,a)=>e.set(a,r));}}exports.a=c;exports.b=s;exports.c=l;exports.d=p;exports.e=u;exports.f=i;//# sourceMappingURL=chunk-LUW7DIEW.js.map
|
|
2
|
-
//# sourceMappingURL=chunk-LUW7DIEW.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/context.ts"],"names":["contextMap","createContext","defaultValue","id","Provider","props","context","ctx","pushContext","value","prev","popContext","prevValue","snapshotContext","runWithContext","snapshot","fn","prevContext","key"],"mappings":"aAMA,IAAMA,CAAAA,CAAa,IAAI,GAAA,CAEhB,SAASC,CAAAA,CAAiBC,CAAAA,CAA6B,CAC1D,IAAMC,CAAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CACrBC,EAAYC,CAAAA,EAAuCA,CAAAA,CAAM,QAAA,CAC/D,OAACD,CAAAA,CAAiB,UAAA,CAAaD,CAAAA,CACxB,CAAE,SAAAC,CAAAA,CAAU,EAAA,CAAAD,CAAAA,CAAI,YAAA,CAAAD,CAAa,CACxC,CAEO,SAASI,EAAWC,CAAAA,CAAoB,CAC3C,OAAOP,CAAAA,CAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIP,EAAW,GAAA,CAAIO,CAAAA,CAAI,EAAE,CAAA,CAAIA,CAAAA,CAAI,YACjE,CAGO,SAASC,EAAYL,CAAAA,CAAYM,CAAAA,CAAY,CAChD,IAAMC,CAAAA,CAAOV,CAAAA,CAAW,GAAA,CAAIG,CAAE,EAC9B,OAAAH,CAAAA,CAAW,GAAA,CAAIG,CAAAA,CAAIM,CAAK,CAAA,CACjBC,CACX,CAGO,SAASC,CAAAA,CAAWR,CAAAA,CAAYS,CAAAA,CAAgB,CAC/CA,CAAAA,GAAc,MAAA,CACdZ,CAAAA,CAAW,MAAA,CAAOG,CAAE,CAAA,CAEpBH,CAAAA,CAAW,GAAA,CAAIG,CAAAA,CAAIS,CAAS,EAEpC,CAEO,SAASC,CAAAA,EAAoC,CAChD,OAAO,IAAI,GAAA,CAAIb,CAAU,CAC7B,CAEO,SAASc,CAAAA,CAAkBC,CAAAA,CAA4BC,CAAAA,CAAgB,CAE1E,IAAMC,CAAAA,CAAc,IAAI,GAAA,CAAIjB,CAAU,CAAA,CAGtCA,CAAAA,CAAW,KAAA,EAAM,CACjBe,CAAAA,CAAS,OAAA,CAAQ,CAACN,CAAAA,CAAOS,IAAQlB,CAAAA,CAAW,GAAA,CAAIkB,CAAAA,CAAKT,CAAK,CAAC,CAAA,CAE3D,GAAI,CACA,OAAOO,CAAAA,EACX,CAAA,OAAE,CAEEhB,CAAAA,CAAW,KAAA,EAAM,CACjBiB,CAAAA,CAAY,QAAQ,CAACR,CAAAA,CAAOS,CAAAA,GAAQlB,CAAAA,CAAW,GAAA,CAAIkB,CAAAA,CAAKT,CAAK,CAAC,EAClE,CACJ","file":"chunk-LUW7DIEW.js","sourcesContent":["export interface Context<T> {\n Provider: (props: { value: T; children: any }) => any\n id: symbol\n defaultValue: T\n}\n\nconst contextMap = new Map<symbol, any>()\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n const id = Symbol('context')\n const Provider = (props: { value: T; children: any }) => props.children;\n (Provider as any)._contextId = id\n return { Provider, id, defaultValue }\n}\n\nexport function context<T>(ctx: Context<T>): T {\n return contextMap.has(ctx.id) ? contextMap.get(ctx.id) : ctx.defaultValue\n}\n\n// Internal helpers for renderer\nexport function pushContext(id: symbol, value: any) {\n const prev = contextMap.get(id)\n contextMap.set(id, value)\n return prev\n}\n\n\nexport function popContext(id: symbol, prevValue: any) {\n if (prevValue === undefined) {\n contextMap.delete(id)\n } else {\n contextMap.set(id, prevValue)\n }\n}\n\nexport function snapshotContext(): Map<symbol, any> {\n return new Map(contextMap)\n}\n\nexport function runWithContext<R>(snapshot: Map<symbol, any>, fn: () => R): R {\n // 1. Save current context\n const prevContext = new Map(contextMap)\n\n // 2. Apply snapshot\n contextMap.clear()\n snapshot.forEach((value, key) => contextMap.set(key, value))\n\n try {\n return fn()\n } finally {\n // 3. Restore previous context\n contextMap.clear()\n prevContext.forEach((value, key) => contextMap.set(key, value))\n }\n}\n"]}
|
package/dist/chunk-S6WF3XNF.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {h as h$1,e,d}from'./chunk-44RZHCII.mjs';function r(n,t){let e=h$1(()=>({cleanup:void 0,deps:void 0,effect:void 0,hasRun:false})),a=true;if(e.hasRun&&t&&e.deps&&(a=t.some((f,o)=>f!==e.deps[o])),a){e.cleanup&&(e.cleanup(),e.cleanup=void 0);let f=n();typeof f=="function"&&(e.cleanup=f),e.deps=t,e.hasRun=true;}}function c(n){if(n){e(true);try{n();}finally{e(false),d();}}else d();}function h(n){c(n);}export{r as a,c as b,h as c};//# sourceMappingURL=chunk-S6WF3XNF.mjs.map
|
|
2
|
-
//# sourceMappingURL=chunk-S6WF3XNF.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/lifecycle.ts"],"names":["effect","fn","deps","state","hook","hasChanged","d","i","cleanup","sync","setBatching","flush","batch"],"mappings":"gDAGO,SAASA,CAAAA,CAAOC,EAAiCC,CAAAA,CAAc,CAElE,IAAMC,CAAAA,CAAQC,GAAAA,CAAK,KAER,CACH,OAAA,CAAS,OACT,IAAA,CAAM,MAAA,CACN,OAAQ,MAAA,CACR,MAAA,CAAQ,KACZ,CAAA,CACH,CAAA,CAKGC,CAAAA,CAAa,IAAA,CAMjB,GALIF,CAAAA,CAAM,QAAUD,CAAAA,EAAQC,CAAAA,CAAM,OAC9BE,CAAAA,CAAaH,CAAAA,CAAK,KAAK,CAACI,CAAAA,CAAGC,CAAAA,GAAMD,CAAAA,GAAMH,CAAAA,CAAM,IAAA,CAAMI,CAAC,CAAC,CAAA,CAAA,CAIrDF,EAAY,CAERF,CAAAA,CAAM,UACNA,CAAAA,CAAM,OAAA,EAAQ,CACdA,CAAAA,CAAM,OAAA,CAAU,MAAA,CAAA,CAIpB,IAAMK,CAAAA,CAAUP,CAAAA,GACZ,OAAOO,CAAAA,EAAY,aACnBL,CAAAA,CAAM,OAAA,CAAUK,CAAAA,CAAAA,CAGpBL,CAAAA,CAAM,IAAA,CAAOD,CAAAA,CACbC,EAAM,MAAA,CAAS,KACnB,CAGJ,CAOO,SAASM,EAAKR,CAAAA,CAAiB,CAClC,GAAIA,CAAAA,CAAI,CACJS,CAAAA,CAAY,IAAI,CAAA,CAChB,GAAI,CACAT,CAAAA,GACJ,QAAE,CACES,CAAAA,CAAY,KAAK,CAAA,CACjBC,CAAAA,GACJ,CACJ,CAAA,KACIA,CAAAA,GAER,CAEO,SAASC,EAAMX,CAAAA,CAAgB,CAClCQ,CAAAA,CAAKR,CAAE,EACX","file":"chunk-S6WF3XNF.mjs","sourcesContent":["import { hook } from './hook'\nimport { ReactiveEffect, flush, setBatching } from './effect'\n\nexport function effect(fn: () => (void | (() => void)), deps?: any[]) {\n // Use hook to store state across renders\n const state = hook(() => {\n // Initial State of the Hook (Runs once)\n return {\n cleanup: undefined as undefined | (() => void),\n deps: undefined as undefined | any[],\n effect: undefined as undefined | ReactiveEffect,\n hasRun: false\n }\n })\n\n // This runs on every render (update)\n\n // 1. Check dependencies\n let hasChanged = true\n if (state.hasRun && deps && state.deps) {\n hasChanged = deps.some((d, i) => d !== state.deps![i])\n }\n\n // 2. If changed, run effect\n if (hasChanged) {\n // Cleanup previous run\n if (state.cleanup) {\n state.cleanup()\n state.cleanup = undefined\n }\n\n // Run effect\n const cleanup = fn()\n if (typeof cleanup === 'function') {\n state.cleanup = cleanup\n }\n\n state.deps = deps\n state.hasRun = true\n }\n\n // Cleanup on component unmount logic is handled by the renderer via ComponentInstance context\n}\n\n/**\n * Unified sync API\n * - sync(): Force refresh (flush pending effects)\n * - sync(fn): Batch updates (run fn then flush)\n */\nexport function sync(fn?: () => void) {\n if (fn) {\n setBatching(true)\n try {\n fn()\n } finally {\n setBatching(false)\n flush()\n }\n } else {\n flush()\n }\n}\n\nexport function batch(fn: () => void) {\n sync(fn)\n}\n"]}
|