@jucie.io/reactive-jucie-state 1.0.13 → 1.0.16

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/main.js CHANGED
@@ -1,2 +1,2 @@
1
- var u=Object.defineProperty;var h=(o,e)=>u(o,"name",{value:e,configurable:!0});import{dispatch as v}from"@jucie.io/state/lib/marker.js";import{Plugin as R}from"@jucie.io/state/Plugin";import{Reactive as m,createComputed as p,createSubscriber as g}from"@jucie.io/reactive";import{nextIdleTick as E}from"@jucie.io/state/utils/nextIdleTick.js";var n=class o{static{h(this,"Node")}static create(){return new o}constructor(){this.reactives=new Set,this.reactiveIds=new Set,this.childReactives=new Set,this.childReactiveIds=new Set,this.children=new Map,this.hasChildReactives=!1}},f=class o extends R{static name="reactive";static roots=new WeakMap;static states=new Set;#e=!1;#t=new Set;initialize(e){o.states.add(new WeakRef(e)),o.roots.set(e,n.create())}actions(e){return{createComputed:h((s,t={})=>p(s,{...t,context:h(()=>e,"context")}),"createComputed"),createSubscriber:h((s,t,r={})=>g(()=>s(e),t,r),"createSubscriber")}}onBatchStart(){this.#e=!0}onBatchEnd(){this.#e=!1,this.#t.forEach(e=>{this.propagateChange(this.state,e)}),this.#t.clear()}onStateChange(e){if(!this.#e){this.propagateChange(this.state,e);return}this.#t.add(e)}onStateAccess(e){v(e,{global:h(()=>{this.addReactive(this.state,null)},"global"),path:h(({path:s})=>{this.addReactive(this.state,s)},"path")})}propagateChange(e,s){v(s,{global:h(()=>{this.walkMarkerPath(this.getRoot(e),null)},"global"),path:h(({path:t})=>{this.walkMarkerPath(this.getRoot(e),t)},"path")})}walkMarkerPath(e,s,t=new Set){if(this.processReactives(e.reactives,e.reactiveIds,t),!s||s==="*")return this.processReactives(e.childReactives,e.childReactiveIds,t),t;let r=s.length-1,i=0;for(;i<=r;){let a=s[i];if(!e.children.has(a))break;e=e.children.get(a),this.processReactives(e.reactives,e.reactiveIds,t),i===r&&this.processReactives(e.childReactives,e.childReactiveIds,t),i++}return t}processReactives(e,s,t){let r=[],i=new Set;e.forEach(a=>{let c=a.deref();c?(t.has(c)||(t.add(c),c.markAsDirty()),i.add(c._id)):r.push(a)}),r.forEach(a=>e.delete(a)),s&&(s.clear(),i.forEach(a=>s.add(a)))}addWeakRefIfNotExists(e,s,t){s.has(t._id)||(s.add(t._id),e.add(new WeakRef(t)))}addReactive(e,s){let t=m.system.currentlyComputing;if(!t)return;let r=this.getRoot(e),i=r,a=Array.isArray(s)?s:[];(a.length===0||s==="*"||!s)&&this.addWeakRefIfNotExists(i.reactives,i.reactiveIds,t),this.addWeakRefIfNotExists(i.childReactives,i.childReactiveIds,t);let c=a.length;for(let l=0;l<c;l++){let d=a[l];i.children.has(d)||i.children.set(d,n.create()),i=i.children.get(d),l!==c-1?this.addWeakRefIfNotExists(i.childReactives,i.childReactiveIds,t):this.addWeakRefIfNotExists(i.reactives,i.reactiveIds,t)}this.updateHasChildReactives(r,a)}removeReactive(e){o.states.forEach(s=>{let t=this.getRoot(s.deref());t&&this.removeReactiveFromNode(t,e)}),E(()=>{o.states.forEach(s=>{let t=this.getRoot(s.deref());t&&(this.cleanupEmptyNodes(t),this.updateHasChildReactives(t))})})}removeReactiveFromNode(e,s){let t=h(r=>{let i=[];r.forEach(a=>{let c=a.deref();(c===s||!c)&&i.push(a)}),i.forEach(a=>r.delete(a))},"removeFromSet");if(t(e.reactives),t(e.childReactives),e.children.size>0)for(let r of e.children.values())this.removeReactiveFromNode(r,s)}getRoot(e){let s=o.roots.get(e);return s||(s=n.create(),o.roots.set(e,s)),s}cleanupEmptyNodes(e){let s=h(t=>{let r=0,i=[];return t.forEach(a=>{a.deref()?r++:i.push(a)}),i.forEach(a=>t.delete(a)),r},"countAlive");for(let[t,r]of e.children){this.cleanupEmptyNodes(r);let i=s(r.reactives)>0,a=s(r.childReactives)>0;!i&&!a&&r.children.size===0&&e.children.delete(t)}}updateHasChildReactives(e,s=null){let t=h(i=>{for(let a of i)if(a.deref())return!0;return!1},"hasAlive");if(!s){let i=h(a=>{a.hasChildReactives=Array.from(a.children.values()).some(c=>t(c.reactives)||t(c.childReactives)||c.hasChildReactives);for(let c of a.children.values())i(c)},"updateNode");return i(e)}let r=[];for(let i of s){if(!e.children.has(i))return;r.push(e),e=e.children.get(i)}for(let i=r.length-1;i>=0;i--){let a=r[i],c=Array.from(a.children.values()).some(l=>t(l.reactives)||t(l.childReactives)||l.hasChildReactives);if(a.hasChildReactives!==c)a.hasChildReactives=c;else break}}};export{f as JucieState};
1
+ var u=Object.defineProperty;var h=(o,e)=>u(o,"name",{value:e,configurable:!0});import{dispatch as v}from"@jucie.io/state/lib/marker.js";import{Plugin as R}from"@jucie.io/state/Plugin";import{Reactive as m,createComputed as p,createSubscriber as g}from"@jucie.io/reactive";import{nextIdleTick as E}from"@jucie.io/state/utils/nextIdleTick.js";var n=class o{static{h(this,"Node")}static create(){return new o}constructor(){this.reactives=new Set,this.reactiveIds=new Set,this.childReactives=new Set,this.childReactiveIds=new Set,this.children=new Map,this.hasChildReactives=!1}},f=class o extends R{static name="reactive";static roots=new WeakMap;static states=new Set;#e=!1;#t=new Set;initialize(e){o.states.add(new WeakRef(e)),o.roots.set(e,n.create())}actions(e){return{createComputed:h((s,t={})=>p(s,{...t,context:h(()=>e,"context")}),"createComputed"),createSubscriber:h((s,t,r={})=>g(()=>s(e),t,r),"createSubscriber")}}onBatchStart(){this.#e=!0}onBatchEnd(){this.#e=!1,this.#t.forEach(e=>{this.propagateChange(this.state,e)}),this.#t.clear()}onStateChange(e){if(!this.#e){this.propagateChange(this.state,e);return}this.#t.add(e)}onStateAccess(e){v(e,{global:h(()=>{this.addReactive(this.state,null)},"global"),path:h(({path:s})=>{this.addReactive(this.state,s)},"path")})}propagateChange(e,s){v(s,{global:h(()=>{this.walkMarkerPath(this.getRoot(e),null)},"global"),path:h(({path:t})=>{this.walkMarkerPath(this.getRoot(e),t)},"path")})}walkMarkerPath(e,s,t=new Set){if(this.processReactives(e.reactives,e.reactiveIds,t),!s||s==="*")return this.processReactives(e.childReactives,e.childReactiveIds,t),t;let r=s.length-1,i=0;for(;i<=r;){let a=s[i];if(!e.children.has(a))break;e=e.children.get(a),this.processReactives(e.reactives,e.reactiveIds,t),i===r&&this.processReactives(e.childReactives,e.childReactiveIds,t),i++}return t}processReactives(e,s,t){let r=[],i=new Set;e.forEach(a=>{let c=a.deref();c?(t.has(c)||(t.add(c),c.markAsDirty()),i.add(c.id)):r.push(a)}),r.forEach(a=>e.delete(a)),s&&(s.clear(),i.forEach(a=>s.add(a)))}addWeakRefIfNotExists(e,s,t){s.has(t.id)||(s.add(t.id),e.add(new WeakRef(t)))}addReactive(e,s){let t=m.system.currentlyComputing;if(!t)return;let r=this.getRoot(e),i=r,a=Array.isArray(s)?s:[];(a.length===0||s==="*"||!s)&&this.addWeakRefIfNotExists(i.reactives,i.reactiveIds,t),this.addWeakRefIfNotExists(i.childReactives,i.childReactiveIds,t);let c=a.length;for(let l=0;l<c;l++){let d=a[l];i.children.has(d)||i.children.set(d,n.create()),i=i.children.get(d),l!==c-1?this.addWeakRefIfNotExists(i.childReactives,i.childReactiveIds,t):this.addWeakRefIfNotExists(i.reactives,i.reactiveIds,t)}this.updateHasChildReactives(r,a)}removeReactive(e){o.states.forEach(s=>{let t=this.getRoot(s.deref());t&&this.removeReactiveFromNode(t,e)}),E(()=>{o.states.forEach(s=>{let t=this.getRoot(s.deref());t&&(this.cleanupEmptyNodes(t),this.updateHasChildReactives(t))})})}removeReactiveFromNode(e,s){let t=h(r=>{let i=[];r.forEach(a=>{let c=a.deref();(c===s||!c)&&i.push(a)}),i.forEach(a=>r.delete(a))},"removeFromSet");if(t(e.reactives),t(e.childReactives),e.children.size>0)for(let r of e.children.values())this.removeReactiveFromNode(r,s)}getRoot(e){let s=o.roots.get(e);return s||(s=n.create(),o.roots.set(e,s)),s}cleanupEmptyNodes(e){let s=h(t=>{let r=0,i=[];return t.forEach(a=>{a.deref()?r++:i.push(a)}),i.forEach(a=>t.delete(a)),r},"countAlive");for(let[t,r]of e.children){this.cleanupEmptyNodes(r);let i=s(r.reactives)>0,a=s(r.childReactives)>0;!i&&!a&&r.children.size===0&&e.children.delete(t)}}updateHasChildReactives(e,s=null){let t=h(i=>{for(let a of i)if(a.deref())return!0;return!1},"hasAlive");if(!s){let i=h(a=>{a.hasChildReactives=Array.from(a.children.values()).some(c=>t(c.reactives)||t(c.childReactives)||c.hasChildReactives);for(let c of a.children.values())i(c)},"updateNode");return i(e)}let r=[];for(let i of s){if(!e.children.has(i))return;r.push(e),e=e.children.get(i)}for(let i=r.length-1;i>=0;i--){let a=r[i],c=Array.from(a.children.values()).some(l=>t(l.reactives)||t(l.childReactives)||l.hasChildReactives);if(a.hasChildReactives!==c)a.hasChildReactives=c;else break}}};export{f as JucieState};
2
2
  //# sourceMappingURL=main.js.map
package/dist/main.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/JucieState.js"],
4
- "sourcesContent": ["import { dispatch } from '@jucie.io/state/lib/marker.js';\nimport { Plugin } from '@jucie.io/state/Plugin';\nimport { Reactive, createComputed, createSubscriber } from '@jucie.io/reactive';\nimport { nextIdleTick } from '@jucie.io/state/utils/nextIdleTick.js';\n\nclass Node {\n static create() {\n return new Node();\n }\n\n constructor() {\n this.reactives = new Set();\n this.reactiveIds = new Set();\n this.childReactives = new Set();\n this.childReactiveIds = new Set();\n this.children = new Map();\n this.hasChildReactives = false;\n }\n}\n\nexport class JucieState extends Plugin {\n static name = 'reactive';\n static roots = new WeakMap();\n static states = new Set();\n\n #batching = false;\n #markers = new Set();\n\n initialize(state) {\n JucieState.states.add(new WeakRef(state));\n JucieState.roots.set(state, Node.create());\n }\n\n actions(state) {\n return {\n createComputed: (fn, config = {}) => {\n return createComputed(fn, { ...config, context: () => state });\n },\n createSubscriber: (getter, callback, config = {}) => {\n return createSubscriber(() => getter(state), callback, config);\n }\n }\n }\n\n onBatchStart() {\n this.#batching = true;\n }\n\n onBatchEnd() {\n this.#batching = false;\n // Propagate all accumulated markers\n this.#markers.forEach(marker => {\n this.propagateChange(this.state, marker);\n });\n this.#markers.clear();\n }\n\n onStateChange(marker) {\n if (!this.#batching) {\n this.propagateChange(this.state, marker);\n return;\n }\n this.#markers.add(marker);\n }\n\n onStateAccess(marker) {\n dispatch(marker, {\n global: () => {\n this.addReactive(this.state, null);\n },\n path: ({ path }) => {\n this.addReactive(this.state, path);\n }\n });\n }\n\n propagateChange(stateInstance, marker) {\n dispatch(marker, {\n global: () => {\n this.walkMarkerPath(this.getRoot(stateInstance), null);\n },\n path: ({ path }) => {\n this.walkMarkerPath(this.getRoot(stateInstance), path);\n }\n });\n }\n\n walkMarkerPath(node, path, visitedReactives = new Set()) {\n this.processReactives(node.reactives, node.reactiveIds, visitedReactives);\n\n // Global update?\n if (!path || path === '*') {\n this.processReactives(node.childReactives, node.childReactiveIds, visitedReactives);\n return visitedReactives;\n }\n \n // Path update\n const lastIndex = path.length - 1;\n let i = 0;\n\n while (i <= lastIndex) {\n const segment = path[i];\n if (!node.children.has(segment)) break;\n \n node = node.children.get(segment);\n \n // Get reactives\n this.processReactives(node.reactives, node.reactiveIds, visitedReactives);\n\n // Last node? Get childReactives\n if (i === lastIndex) {\n this.processReactives(node.childReactives, node.childReactiveIds, visitedReactives);\n }\n \n i++;\n }\n\n return visitedReactives;\n }\n\n processReactives(reactiveSet, idSet, visitedReactives) {\n const deadRefs = [];\n const ids = new Set();\n reactiveSet.forEach(weakRef => {\n const reactive = weakRef.deref();\n if (reactive) {\n if (!visitedReactives.has(reactive)) {\n visitedReactives.add(reactive);\n reactive.markAsDirty(); // Call instance method directly\n }\n ids.add(reactive._id);\n } else {\n deadRefs.push(weakRef);\n }\n });\n deadRefs.forEach(ref => reactiveSet.delete(ref));\n if (idSet) {\n idSet.clear();\n ids.forEach(id => idSet.add(id));\n }\n }\n\n addWeakRefIfNotExists(weakRefSet, idSet, reactive) {\n if (!idSet.has(reactive._id)) {\n idSet.add(reactive._id);\n weakRefSet.add(new WeakRef(reactive));\n }\n }\n\n addReactive(stateInstance, path) {\n const reactive = Reactive.system.currentlyComputing;\n if (!reactive) return;\n \n const root = this.getRoot(stateInstance);\n let node = root;\n \n // Normalize path\n const normalizedPath = Array.isArray(path) ? path : [];\n \n // Add computed to root level (using WeakRef)\n if (normalizedPath.length === 0 || path === '*' || !path) {\n this.addWeakRefIfNotExists(node.reactives, node.reactiveIds, reactive);\n }\n\n this.addWeakRefIfNotExists(node.childReactives, node.childReactiveIds, reactive);\n \n // Add computed at each level as we move down\n const length = normalizedPath.length;\n for (let i = 0; i < length; i++) {\n const segment = normalizedPath[i];\n if (!node.children.has(segment)) {\n node.children.set(segment, Node.create());\n }\n node = node.children.get(segment);\n if (i !== length - 1) {\n this.addWeakRefIfNotExists(node.childReactives, node.childReactiveIds, reactive);\n } else {\n this.addWeakRefIfNotExists(node.reactives, node.reactiveIds, reactive);\n }\n }\n \n this.updateHasChildReactives(root, normalizedPath);\n }\n\n removeReactive(reactive) {\n JucieState.states.forEach(state => {\n const root = this.getRoot(state.deref());\n if (!root) return;\n this.removeReactiveFromNode(root, reactive);\n });\n \n nextIdleTick(() => {\n JucieState.states.forEach(state => {\n const root = this.getRoot(state.deref());\n if (!root) return;\n this.cleanupEmptyNodes(root);\n this.updateHasChildReactives(root);\n });\n });\n }\n\n removeReactiveFromNode(node, reactive) {\n // Need to find and remove the WeakRef that points to this reactive\n const removeFromSet = (set) => {\n const toDelete = [];\n set.forEach(weakRef => {\n const ref = weakRef.deref();\n if (ref === reactive || !ref) {\n toDelete.push(weakRef);\n }\n });\n toDelete.forEach(ref => set.delete(ref));\n };\n\n removeFromSet(node.reactives);\n removeFromSet(node.childReactives);\n\n if (node.children.size > 0) {\n for (const child of node.children.values()) {\n this.removeReactiveFromNode(child, reactive);\n }\n }\n }\n\n getRoot(stateInstance) {\n let root = JucieState.roots.get(stateInstance);\n if (!root) {\n root = Node.create();\n JucieState.roots.set(stateInstance, root);\n }\n return root;\n }\n\n cleanupEmptyNodes(node) {\n // Helper to count alive WeakRefs\n const countAlive = (set) => {\n let count = 0;\n const deadRefs = [];\n set.forEach(weakRef => {\n if (weakRef.deref()) {\n count++;\n } else {\n deadRefs.push(weakRef);\n }\n });\n deadRefs.forEach(ref => set.delete(ref));\n return count;\n };\n\n // Clean up empty child nodes\n for (const [segment, child] of node.children) {\n this.cleanupEmptyNodes(child);\n \n // If child has no live reactors and no children, remove it\n const hasReactives = countAlive(child.reactives) > 0;\n const hasChildReactives = countAlive(child.childReactives) > 0;\n \n if (!hasReactives && !hasChildReactives && child.children.size === 0) {\n node.children.delete(segment);\n }\n }\n }\n\n updateHasChildReactives(node, path = null) {\n // Helper to check if set has any alive WeakRefs\n const hasAlive = (set) => {\n for (const weakRef of set) {\n if (weakRef.deref()) return true;\n }\n return false;\n };\n\n // If no path provided, update entire trie\n if (!path) {\n const updateNode = (node) => {\n node.hasChildReactives = Array.from(node.children.values()).some(child => \n hasAlive(child.reactives) || \n hasAlive(child.childReactives) || \n child.hasChildReactives\n );\n \n for (const child of node.children.values()) {\n updateNode(child);\n }\n };\n return updateNode(node);\n }\n\n // If path provided, only update that path\n const visited = [];\n\n // Walk down and collect nodes\n for (const segment of path) {\n if (!node.children.has(segment)) return;\n visited.push(node);\n node = node.children.get(segment);\n }\n\n // Walk up and update flags only if needed\n for (let i = visited.length - 1; i >= 0; i--) {\n const parent = visited[i];\n const newValue = Array.from(parent.children.values()).some(child =>\n hasAlive(child.reactives) || \n hasAlive(child.childReactives) || \n child.hasChildReactives\n );\n\n if (parent.hasChildReactives !== newValue) {\n parent.hasChildReactives = newValue;\n } else {\n break; // Early exit if no change\n }\n }\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { dispatch } from '@jucie.io/state/lib/marker.js';\nimport { Plugin } from '@jucie.io/state/Plugin';\nimport { Reactive, createComputed, createSubscriber } from '@jucie.io/reactive';\nimport { nextIdleTick } from '@jucie.io/state/utils/nextIdleTick.js';\n\nclass Node {\n static create() {\n return new Node();\n }\n\n constructor() {\n this.reactives = new Set();\n this.reactiveIds = new Set();\n this.childReactives = new Set();\n this.childReactiveIds = new Set();\n this.children = new Map();\n this.hasChildReactives = false;\n }\n}\n\nexport class JucieState extends Plugin {\n static name = 'reactive';\n static roots = new WeakMap();\n static states = new Set();\n\n #batching = false;\n #markers = new Set();\n\n initialize(state) {\n JucieState.states.add(new WeakRef(state));\n JucieState.roots.set(state, Node.create());\n }\n\n actions(state) {\n return {\n createComputed: (fn, config = {}) => {\n return createComputed(fn, { ...config, context: () => state });\n },\n createSubscriber: (getter, callback, config = {}) => {\n return createSubscriber(() => getter(state), callback, config);\n }\n }\n }\n\n onBatchStart() {\n this.#batching = true;\n }\n\n onBatchEnd() {\n this.#batching = false;\n // Propagate all accumulated markers\n this.#markers.forEach(marker => {\n this.propagateChange(this.state, marker);\n });\n this.#markers.clear();\n }\n\n onStateChange(marker) {\n if (!this.#batching) {\n this.propagateChange(this.state, marker);\n return;\n }\n this.#markers.add(marker);\n }\n\n onStateAccess(marker) {\n dispatch(marker, {\n global: () => {\n this.addReactive(this.state, null);\n },\n path: ({ path }) => {\n this.addReactive(this.state, path);\n }\n });\n }\n\n propagateChange(stateInstance, marker) {\n dispatch(marker, {\n global: () => {\n this.walkMarkerPath(this.getRoot(stateInstance), null);\n },\n path: ({ path }) => {\n this.walkMarkerPath(this.getRoot(stateInstance), path);\n }\n });\n }\n\n walkMarkerPath(node, path, visitedReactives = new Set()) {\n this.processReactives(node.reactives, node.reactiveIds, visitedReactives);\n\n // Global update?\n if (!path || path === '*') {\n this.processReactives(node.childReactives, node.childReactiveIds, visitedReactives);\n return visitedReactives;\n }\n \n // Path update\n const lastIndex = path.length - 1;\n let i = 0;\n\n while (i <= lastIndex) {\n const segment = path[i];\n if (!node.children.has(segment)) break;\n \n node = node.children.get(segment);\n \n // Get reactives\n this.processReactives(node.reactives, node.reactiveIds, visitedReactives);\n\n // Last node? Get childReactives\n if (i === lastIndex) {\n this.processReactives(node.childReactives, node.childReactiveIds, visitedReactives);\n }\n \n i++;\n }\n\n return visitedReactives;\n }\n\n processReactives(reactiveSet, idSet, visitedReactives) {\n const deadRefs = [];\n const ids = new Set();\n reactiveSet.forEach(weakRef => {\n const reactive = weakRef.deref();\n if (reactive) {\n if (!visitedReactives.has(reactive)) {\n visitedReactives.add(reactive);\n reactive.markAsDirty(); // Call instance method directly\n }\n ids.add(reactive.id);\n } else {\n deadRefs.push(weakRef);\n }\n });\n deadRefs.forEach(ref => reactiveSet.delete(ref));\n if (idSet) {\n idSet.clear();\n ids.forEach(id => idSet.add(id));\n }\n }\n\n addWeakRefIfNotExists(weakRefSet, idSet, reactive) {\n if (!idSet.has(reactive.id)) {\n idSet.add(reactive.id);\n weakRefSet.add(new WeakRef(reactive));\n }\n }\n\n addReactive(stateInstance, path) {\n const reactive = Reactive.system.currentlyComputing;\n if (!reactive) return;\n \n const root = this.getRoot(stateInstance);\n let node = root;\n \n // Normalize path\n const normalizedPath = Array.isArray(path) ? path : [];\n \n // Add computed to root level (using WeakRef)\n if (normalizedPath.length === 0 || path === '*' || !path) {\n this.addWeakRefIfNotExists(node.reactives, node.reactiveIds, reactive);\n }\n\n this.addWeakRefIfNotExists(node.childReactives, node.childReactiveIds, reactive);\n \n // Add computed at each level as we move down\n const length = normalizedPath.length;\n for (let i = 0; i < length; i++) {\n const segment = normalizedPath[i];\n if (!node.children.has(segment)) {\n node.children.set(segment, Node.create());\n }\n node = node.children.get(segment);\n if (i !== length - 1) {\n this.addWeakRefIfNotExists(node.childReactives, node.childReactiveIds, reactive);\n } else {\n this.addWeakRefIfNotExists(node.reactives, node.reactiveIds, reactive);\n }\n }\n \n this.updateHasChildReactives(root, normalizedPath);\n }\n\n removeReactive(reactive) {\n JucieState.states.forEach(state => {\n const root = this.getRoot(state.deref());\n if (!root) return;\n this.removeReactiveFromNode(root, reactive);\n });\n \n nextIdleTick(() => {\n JucieState.states.forEach(state => {\n const root = this.getRoot(state.deref());\n if (!root) return;\n this.cleanupEmptyNodes(root);\n this.updateHasChildReactives(root);\n });\n });\n }\n\n removeReactiveFromNode(node, reactive) {\n // Need to find and remove the WeakRef that points to this reactive\n const removeFromSet = (set) => {\n const toDelete = [];\n set.forEach(weakRef => {\n const ref = weakRef.deref();\n if (ref === reactive || !ref) {\n toDelete.push(weakRef);\n }\n });\n toDelete.forEach(ref => set.delete(ref));\n };\n\n removeFromSet(node.reactives);\n removeFromSet(node.childReactives);\n\n if (node.children.size > 0) {\n for (const child of node.children.values()) {\n this.removeReactiveFromNode(child, reactive);\n }\n }\n }\n\n getRoot(stateInstance) {\n let root = JucieState.roots.get(stateInstance);\n if (!root) {\n root = Node.create();\n JucieState.roots.set(stateInstance, root);\n }\n return root;\n }\n\n cleanupEmptyNodes(node) {\n // Helper to count alive WeakRefs\n const countAlive = (set) => {\n let count = 0;\n const deadRefs = [];\n set.forEach(weakRef => {\n if (weakRef.deref()) {\n count++;\n } else {\n deadRefs.push(weakRef);\n }\n });\n deadRefs.forEach(ref => set.delete(ref));\n return count;\n };\n\n // Clean up empty child nodes\n for (const [segment, child] of node.children) {\n this.cleanupEmptyNodes(child);\n \n // If child has no live reactors and no children, remove it\n const hasReactives = countAlive(child.reactives) > 0;\n const hasChildReactives = countAlive(child.childReactives) > 0;\n \n if (!hasReactives && !hasChildReactives && child.children.size === 0) {\n node.children.delete(segment);\n }\n }\n }\n\n updateHasChildReactives(node, path = null) {\n // Helper to check if set has any alive WeakRefs\n const hasAlive = (set) => {\n for (const weakRef of set) {\n if (weakRef.deref()) return true;\n }\n return false;\n };\n\n // If no path provided, update entire trie\n if (!path) {\n const updateNode = (node) => {\n node.hasChildReactives = Array.from(node.children.values()).some(child => \n hasAlive(child.reactives) || \n hasAlive(child.childReactives) || \n child.hasChildReactives\n );\n \n for (const child of node.children.values()) {\n updateNode(child);\n }\n };\n return updateNode(node);\n }\n\n // If path provided, only update that path\n const visited = [];\n\n // Walk down and collect nodes\n for (const segment of path) {\n if (!node.children.has(segment)) return;\n visited.push(node);\n node = node.children.get(segment);\n }\n\n // Walk up and update flags only if needed\n for (let i = visited.length - 1; i >= 0; i--) {\n const parent = visited[i];\n const newValue = Array.from(parent.children.values()).some(child =>\n hasAlive(child.reactives) || \n hasAlive(child.childReactives) || \n child.hasChildReactives\n );\n\n if (parent.hasChildReactives !== newValue) {\n parent.hasChildReactives = newValue;\n } else {\n break; // Early exit if no change\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["dispatch", "Plugin", "Reactive", "createComputed", "createSubscriber", "nextIdleTick", "Node", "_Node", "__name", "JucieState", "_JucieState", "#batching", "#markers", "state", "fn", "config", "getter", "callback", "marker", "path", "stateInstance", "node", "visitedReactives", "lastIndex", "segment", "reactiveSet", "idSet", "deadRefs", "ids", "weakRef", "reactive", "ref", "id", "weakRefSet", "root", "normalizedPath", "length", "i", "removeFromSet", "set", "toDelete", "child", "countAlive", "count", "hasReactives", "hasChildReactives", "hasAlive", "updateNode", "visited", "parent", "newValue"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jucie.io/reactive-jucie-state",
3
- "version": "1.0.13",
3
+ "version": "1.0.16",
4
4
  "description": "JucieState extension for @jucie.io/reactive - integrates State with Reactive",
5
5
  "type": "module",
6
6
  "main": "./dist/main.js",