@deijose/nix-js 2.5.1 → 2.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/async.cjs +1 -1
- package/dist/lib/async.js +3 -3
- package/dist/lib/nix/async.d.ts +9 -5
- package/dist/lib/nix/plugins.d.ts +1 -5
- package/dist/lib/nix/reactivity.d.ts +1 -2
- package/dist/lib/nix/store.d.ts +5 -0
- package/dist/lib/plugins.cjs +1 -1
- package/dist/lib/plugins.js +1 -1
- package/dist/lib/signals.cjs +1 -1
- package/dist/lib/signals.js +1 -1
- package/dist/lib/store.cjs +1 -1
- package/dist/lib/store.js +1 -1
- package/package.json +1 -1
package/dist/lib/async.cjs
CHANGED
|
@@ -12,4 +12,4 @@ Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=requi
|
|
|
12
12
|
<span style="color:#f87171;font-size:13px">
|
|
13
13
|
⚠ ${e instanceof Error?e.message:String(e)}
|
|
14
14
|
</span>
|
|
15
|
-
`}var a=new Map,o=3e5,s=null,c=o;function l(){null===s&&(s=setInterval(()=>{let e=Date.now();for(let[t,s]of a)s.subscribers<=0&&e-s.fetchedAt>c&&a.delete(t);0===a.size&&null!==s&&(clearInterval(s),s=null)},6e4))}function u(e){let t=a.get(e);if(t&&t.fetchedAt>0)return t}function d(e,t){let s=a.get(e);a.set(e,{data:t,fetchedAt:Date.now(),subscribers:s?.subscribers??0}),l()}function f(e){let t=a.get(e);t?t.subscribers++:a.set(e,{fetchedAt:0,subscribers:1})}function p(e){let t=a.get(e);t&&(t.subscribers=Math.max(0,t.subscribers-1))}function m(e,t){let s=a.get(e);return!!s&&Date.now()-s.fetchedAt<t}function h(s,l,o={}){let{fallback:c,errorFallback:h,resetOnRefresh:b=!1,invalidate:g,cacheKey:v,staleTime:x=0}=o,
|
|
15
|
+
`}var a=new Map,o=3e5,s=null,c=o;function l(){null===s&&(s=setInterval(()=>{let e=Date.now();for(let[t,s]of a)s.subscribers<=0&&e-s.fetchedAt>c&&a.delete(t);0===a.size&&null!==s&&(clearInterval(s),s=null)},6e4))}function u(e){let t=a.get(e);if(t&&t.fetchedAt>0)return t}function d(e,t){let s=a.get(e);a.set(e,{data:t,fetchedAt:Date.now(),subscribers:s?.subscribers??0}),l()}function f(e){let t=a.get(e);t?t.subscribers++:a.set(e,{fetchedAt:0,subscribers:1})}function p(e){let t=a.get(e);t&&(t.subscribers=Math.max(0,t.subscribers-1))}function m(e,t){let s=a.get(e);return!!s&&Date.now()-s.fetchedAt<t}function h(s,l,o={}){let{fallback:c,errorFallback:h,resetOnRefresh:b=!1,invalidate:g,cacheKey:v,staleTime:x=0}=o,_=c??r(),y=h??i;class w extends n.NixComponent{_state;_disposeWatcher;constructor(){super();let t=v?u(v):void 0;this._state=e.signal(t&&void 0!==t.data?{status:"resolved",data:t.data}:{status:"pending"})}onMount(){v&&f(v);let t=v?u(v):void 0;if(t&&m(v,x)||(t?this._fetch():this._run()),g){let t=!0;this._disposeWatcher=e.effect(()=>{g.value,t?t=!1:(v&&a.delete(v),this._run())})}return()=>{this._disposeWatcher?.(),v&&p(v)}}_run(){(b||"pending"===this._state.peek().status)&&(this._state.value={status:"pending"}),this._fetch()}_fetch(){s().then(e=>{v&&d(v,e),this._state.value={status:"resolved",data:e}},e=>{this._state.value={status:"error",error:e}})}render(){return t.l`<div class="nix-suspense" style="display:contents">${()=>{let e=this._state.value;return"pending"===e.status?_:"error"===e.status?y(e.error):l(e.data)}}</div>`}}return new w}function g(e,s){let n=void 0===s||t._(s)?{fallback:s}:s,a=n.selector??(e=>e.default),r=null;return()=>r?new r:h(async()=>(r=a(await e()),r),e=>new e,{fallback:n.fallback})}exports.lazy=g,exports.suspend=h;
|
package/dist/lib/async.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{effect as e,signal as t}from"./signals.js";import{l as
|
|
1
|
+
import{effect as e,signal as t}from"./signals.js";import{_ as n,l as r}from"./template2.js";import{NixComponent as i}from"./lifecycle.js";function a(){return r`
|
|
2
2
|
<span style="color:#52525b;font-size:13px;display:inline-flex;align-items:center;gap:6px">
|
|
3
3
|
<span class="nix-spinner" style="
|
|
4
4
|
display:inline-block;width:14px;height:14px;border-radius:50%;
|
|
@@ -8,8 +8,8 @@ import{effect as e,signal as t}from"./signals.js";import{l as n}from"./template2
|
|
|
8
8
|
Loading…
|
|
9
9
|
</span>
|
|
10
10
|
<style>@keyframes nix-spin{to{transform:rotate(360deg)}}</style>
|
|
11
|
-
`}function
|
|
11
|
+
`}function o(e){return r`
|
|
12
12
|
<span style="color:#f87171;font-size:13px">
|
|
13
13
|
⚠ ${e instanceof Error?e.message:String(e)}
|
|
14
14
|
</span>
|
|
15
|
-
`}var
|
|
15
|
+
`}var s=new Map,c=3e5,l=null,u=c;function d(){null===l&&(l=setInterval(()=>{let e=Date.now();for(let[t,n]of s)n.subscribers<=0&&e-n.fetchedAt>u&&s.delete(t);0===s.size&&null!==l&&(clearInterval(l),l=null)},6e4))}function f(e){let t=s.get(e);if(t&&t.fetchedAt>0)return t}function p(e,t){let n=s.get(e);s.set(e,{data:t,fetchedAt:Date.now(),subscribers:n?.subscribers??0}),d()}function m(e){let t=s.get(e);t?t.subscribers++:s.set(e,{fetchedAt:0,subscribers:1})}function h(e){let t=s.get(e);t&&(t.subscribers=Math.max(0,t.subscribers-1))}function g(e,t){let n=s.get(e);return!!n&&Date.now()-n.fetchedAt<t}function _(n,l,u={}){let{fallback:c,errorFallback:d,resetOnRefresh:b=!1,invalidate:_,cacheKey:v,staleTime:x=0}=u,y=c??a(),w=d??o;return new class extends i{_state;_disposeWatcher;constructor(){super();let e=v?f(v):void 0;this._state=t(e&&void 0!==e.data?{status:"resolved",data:e.data}:{status:"pending"})}onMount(){v&&m(v);let t=v?f(v):void 0;if(t&&g(v,x)||(t?this._fetch():this._run()),_){let t=!0;this._disposeWatcher=e(()=>{_.value,t?t=!1:(v&&s.delete(v),this._run())})}return()=>{this._disposeWatcher?.(),v&&h(v)}}_run(){(b||"pending"===this._state.peek().status)&&(this._state.value={status:"pending"}),this._fetch()}_fetch(){n().then(e=>{v&&p(v,e),this._state.value={status:"resolved",data:e}},e=>{this._state.value={status:"error",error:e}})}render(){return r`<div class="nix-suspense" style="display:contents">${()=>{let e=this._state.value;return"pending"===e.status?y:"error"===e.status?w(e.error):l(e.data)}}</div>`}}}function v(e,t){let s=void 0===t||n(t)?{fallback:t}:t,a=s.selector??(e=>e.default),r=null;return()=>r?new r:_(async()=>(r=a(await e()),r),e=>new e,{fallback:s.fallback})}export{v as lazy,_ as suspend};
|
package/dist/lib/nix/async.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Signal } from "./reactivity";
|
|
2
2
|
import { NixComponent } from "./lifecycle";
|
|
3
|
-
import type
|
|
3
|
+
import { type NixTemplate } from "./template";
|
|
4
4
|
export interface SuspenseOptions {
|
|
5
5
|
fallback?: NixTemplate;
|
|
6
6
|
errorFallback?: (err: unknown) => NixTemplate;
|
|
@@ -19,10 +19,14 @@ export interface SuspenseOptions {
|
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export declare function suspend<T>(asyncFn: () => Promise<T>, renderFn: (data: T) => NixTemplate | NixComponent, options?: SuspenseOptions): NixComponent;
|
|
22
|
+
export interface LazyOptions {
|
|
23
|
+
/** Component selector when the module uses a named export. Defaults to `mod.default`. */
|
|
24
|
+
selector?: (mod: Record<string, unknown>) => new () => NixComponent;
|
|
25
|
+
/** Template shown while the component is loading. */
|
|
26
|
+
fallback?: NixTemplate;
|
|
27
|
+
}
|
|
22
28
|
/**
|
|
23
29
|
* Wraps a dynamic import for lazy-loading route components.
|
|
24
|
-
* The module is loaded once and cached.
|
|
30
|
+
* The module is loaded once and cached. Supports both default and named exports.
|
|
25
31
|
*/
|
|
26
|
-
export declare function lazy(importFn: () => Promise<
|
|
27
|
-
default: new () => NixComponent;
|
|
28
|
-
}>, fallback?: NixTemplate): () => NixComponent;
|
|
32
|
+
export declare function lazy(importFn: () => Promise<Record<string, unknown>>, options?: NixTemplate | LazyOptions): () => NixComponent;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type NixPlugin, type Store } from "./store";
|
|
1
|
+
import { type NixPlugin, type Store, type GuardFn } from "./store";
|
|
2
2
|
/**
|
|
3
3
|
* Minimal interface that any storage adapter must implement.
|
|
4
4
|
* Compatible with localStorage, sessionStorage, AsyncStorage, IndexedDB, etc.
|
|
@@ -37,10 +37,6 @@ export declare function loggerPlugin<T extends Record<string, unknown>>(opts?: {
|
|
|
37
37
|
/** Optional filter to skip logging for specific changes. */
|
|
38
38
|
filter?: (diff: Partial<T>) => boolean;
|
|
39
39
|
}): NixPlugin<T>;
|
|
40
|
-
/**
|
|
41
|
-
* Function type for mutation guards.
|
|
42
|
-
*/
|
|
43
|
-
type GuardFn<T extends Record<string, unknown>> = (next: Partial<T>, current: T) => Partial<T> | void;
|
|
44
40
|
/**
|
|
45
41
|
* Intercepts $patch and $reset calls to validate or transform state before it is applied.
|
|
46
42
|
*/
|
|
@@ -38,8 +38,7 @@ export declare function signal<T>(initialValue: T): Signal<T>;
|
|
|
38
38
|
* and on disposal.
|
|
39
39
|
*/
|
|
40
40
|
export declare function effect(fn: () => void | (() => void)): () => void;
|
|
41
|
-
|
|
42
|
-
export declare function computed<T>(fn: () => T): Signal<T> & {
|
|
41
|
+
export declare function computed<T>(fn: () => T, equals?: (a: T, b: T) => boolean): Signal<T> & {
|
|
43
42
|
dispose(): void;
|
|
44
43
|
};
|
|
45
44
|
/** Groups multiple signal writes so effects flush once at the end. */
|
package/dist/lib/nix/store.d.ts
CHANGED
|
@@ -71,6 +71,11 @@ export type GettersFactory<T extends object, G extends Record<string, Signal<unk
|
|
|
71
71
|
* computed(() => store.someSignal.value) — derive new nodes
|
|
72
72
|
* store.$snapshot() — passive read for logging/persistence
|
|
73
73
|
*/
|
|
74
|
+
/**
|
|
75
|
+
* Function type for mutation guards.
|
|
76
|
+
* Intercepts $patch and $reset to validate or transform state before it is applied.
|
|
77
|
+
*/
|
|
78
|
+
export type GuardFn<T extends object> = (next: Partial<T>, current: T) => Partial<T> | void;
|
|
74
79
|
export type NixPlugin<T extends object, A extends object = Record<never, never>, G extends Record<string, Signal<unknown>> = Record<never, never>> = (store: Store<T, A, G>) => (() => void) | void;
|
|
75
80
|
/**
|
|
76
81
|
* Options object for createStore. NoInfer<T> on factory parameters ensures
|
package/dist/lib/plugins.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./signals.cjs");function t(t,r={}){let{storage:n=localStorage,exclude:o=[],serialize:l=JSON.stringify,deserialize:i=JSON.parse,debounce:
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./signals.cjs");function t(t,r={}){let{storage:n=localStorage,exclude:o=[],serialize:l=JSON.stringify,deserialize:i=JSON.parse,debounce:s=0}=r;return r=>{let c;return e.untrack(async()=>{try{let e=await n.getItem(t);if(!e)return;let l=i(e),s={};for(let e of Object.keys(l))e in r.$state&&!o.includes(e)&&(s[e]=l[e]);Object.keys(s).length>0&&r.$patch(s)}catch{}}),e.watch(r.$stateSignal,e=>{let r=()=>{try{let r=0===o.length?e:Object.fromEntries(Object.entries(e).filter(([e])=>!o.includes(e)));n.setItem(t,l(r))}catch{}};s>0?(clearTimeout(c),c=setTimeout(r,s)):r()})}}function n(t={}){let{collapsed:r=!0,filter:n}=t;return t=>{let o=r?console.groupCollapsed:console.group;return e.watch(t.$stateSignal,(e,r)=>{if(!r)return;let l={};for(let t of Object.keys(e))Object.is(e[t],r[t])||(l[t]=e[t]);0!==Object.keys(l).length&&(n&&!n(l)||(o(`%c[nix:${t.$id}]%c ${Object.keys(l).join(", ")}`,"color:#7F77DD;font-weight:500","color:inherit;font-weight:400"),console.log("prev →",r),console.log("next →",e),console.log("diff →",l),console.groupEnd()))},{immediate:!0})}}function r(e){return t=>{let r=t._guardFns;for(let t of e)r.push(t);return()=>{for(let t of e){let e=r.indexOf(t);e>=0&&r.splice(e,1)}}}}function i(t,r){return n=>e.watch(t.$stateSignal,e=>{r(e,n)})}exports.bridgePlugin=i,exports.guardPlugin=r,exports.loggerPlugin=n,exports.persistPlugin=t;
|
package/dist/lib/plugins.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{untrack as e,watch as t}from"./signals.js";function n(n,r={}){let{storage:l=localStorage,exclude:o=[],serialize:i=JSON.stringify,deserialize:s=JSON.parse,debounce:c=0}=r;return r=>{let a;return e(async()=>{try{let e=await l.getItem(n);if(!e)return;let t=s(e),i={};for(let e of Object.keys(t))e in r.$state&&!o.includes(e)&&(i[e]=t[e]);Object.keys(i).length>0&&r.$patch(i)}catch{}}),t(r.$stateSignal,e=>{let t=()=>{try{let t=0===o.length?e:Object.fromEntries(Object.entries(e).filter(([e])=>!o.includes(e)));l.setItem(n,i(t))}catch{}};c>0?(clearTimeout(a),a=setTimeout(t,c)):t()})}}function r(e={}){let{collapsed:n=!0,filter:r}=e;return e=>{let l=n?console.groupCollapsed:console.group;return t(e.$stateSignal,(t,n)=>{if(!n)return;let o={};for(let e of Object.keys(t))Object.is(t[e],n[e])||(o[e]=t[e]);0!==Object.keys(o).length&&(r&&!r(o)||(l(`%c[nix:${e.$id}]%c ${Object.keys(o).join(", ")}`,"color:#7F77DD;font-weight:500","color:inherit;font-weight:400"),console.log("prev →",n),console.log("next →",t),console.log("diff →",o),console.groupEnd()))},{immediate:!0})}}function i(
|
|
1
|
+
import{untrack as e,watch as t}from"./signals.js";function n(n,r={}){let{storage:l=localStorage,exclude:o=[],serialize:i=JSON.stringify,deserialize:s=JSON.parse,debounce:c=0}=r;return r=>{let a;return e(async()=>{try{let e=await l.getItem(n);if(!e)return;let t=s(e),i={};for(let e of Object.keys(t))e in r.$state&&!o.includes(e)&&(i[e]=t[e]);Object.keys(i).length>0&&r.$patch(i)}catch{}}),t(r.$stateSignal,e=>{let t=()=>{try{let t=0===o.length?e:Object.fromEntries(Object.entries(e).filter(([e])=>!o.includes(e)));l.setItem(n,i(t))}catch{}};c>0?(clearTimeout(a),a=setTimeout(t,c)):t()})}}function r(e={}){let{collapsed:n=!0,filter:r}=e;return e=>{let l=n?console.groupCollapsed:console.group;return t(e.$stateSignal,(t,n)=>{if(!n)return;let o={};for(let e of Object.keys(t))Object.is(t[e],n[e])||(o[e]=t[e]);0!==Object.keys(o).length&&(r&&!r(o)||(l(`%c[nix:${e.$id}]%c ${Object.keys(o).join(", ")}`,"color:#7F77DD;font-weight:500","color:inherit;font-weight:400"),console.log("prev →",n),console.log("next →",t),console.log("diff →",o),console.groupEnd()))},{immediate:!0})}}function i(e){return t=>{let n=t._guardFns;for(let t of e)n.push(t);return()=>{for(let t of e){let e=n.indexOf(t);e>=0&&n.splice(e,1)}}}}function a(e,n){return r=>t(e.$stateSignal,e=>{n(e,r)})}export{a as bridgePlugin,i as guardPlugin,r as loggerPlugin,n as persistPlugin};
|
package/dist/lib/signals.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(){return{ctxPool:[],ctxStack:[],activeEffect:null,activeDeps:null,activeErrorHandler:null,errorHandlerStack:[],batchLevel:0,pendingEffectsSet:new Set,pendingEffectsArr:[],effectDepth:0,notifyBuf:[],notifyBase:0,signalDebugHooks:null}}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var t=Symbol.for("@deijose/nix-js/reactivity-state"),n=globalThis,r=(()=>{let r=n[t];if(r)return r;let l=e();return n[t]=l,l})();function i(e){r.errorHandlerStack.push(r.activeErrorHandler),r.activeErrorHandler=e}function a(){r.activeErrorHandler=r.errorHandlerStack.pop()??null}var o=100,s=64,c=16,l=32;function u(e){r.signalDebugHooks=e}function d(){return r.notifyBuf.length}var f=class{_value;_subs=new Set;constructor(e){this._value=e,r.signalDebugHooks?.onCreate?.(this,e)}get value(){return r.activeEffect&&(this._subs.add(r.activeEffect),r.activeDeps?.add(this)),this._value}set value(e){Object.is(this._value,e)||(this._value=e,r.signalDebugHooks?.onWrite?.(this,e),this._notify())}update(e){this.value=e(this._value)}peek(){return this._value}_removeSub(e){this._subs.delete(e)}_notify(){if(r.batchLevel>0){for(let e of this._subs)r.pendingEffectsSet.has(e)||(r.pendingEffectsSet.add(e),r.pendingEffectsArr.push(e));return}let e=r.notifyBase,t=0;for(let n of this._subs)r.notifyBuf[e+t++]=n;r.notifyBase=e+t;try{for(let n=0;n<t;n++){let t=r.notifyBuf[e+n];r.notifyBuf[e+n]=null,t?.()}}finally{r.notifyBase=e,0===e&&r.notifyBuf.length>s&&t<c&&(r.notifyBuf.length=l)}}dispose(){this._subs.clear()}};function p(e){return new f(e)}function m(e){let t,n=!1,l=new Set,
|
|
1
|
+
function e(){return{ctxPool:[],ctxStack:[],activeEffect:null,activeDeps:null,activeErrorHandler:null,errorHandlerStack:[],batchLevel:0,pendingEffectsSet:new Set,pendingEffectsArr:[],effectDepth:0,notifyBuf:[],notifyBase:0,signalDebugHooks:null}}Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});var t=Symbol.for("@deijose/nix-js/reactivity-state"),n=globalThis,r=(()=>{let r=n[t];if(r)return r;let l=e();return n[t]=l,l})();function i(e){r.errorHandlerStack.push(r.activeErrorHandler),r.activeErrorHandler=e}function a(){r.activeErrorHandler=r.errorHandlerStack.pop()??null}var o=100,s=64,c=16,l=32;function u(e){r.signalDebugHooks=e}function d(){return r.notifyBuf.length}var f=class{_value;_subs=new Set;constructor(e){this._value=e,r.signalDebugHooks?.onCreate?.(this,e)}get value(){return r.activeEffect&&(this._subs.add(r.activeEffect),r.activeDeps?.add(this)),this._value}set value(e){Object.is(this._value,e)||(this._value=e,r.signalDebugHooks?.onWrite?.(this,e),this._notify())}update(e){this.value=e(this._value)}peek(){return this._value}_removeSub(e){this._subs.delete(e)}_notify(){if(r.batchLevel>0){for(let e of this._subs)r.pendingEffectsSet.has(e)||(r.pendingEffectsSet.add(e),r.pendingEffectsArr.push(e));return}let e=r.notifyBase,t=0;for(let n of this._subs)r.notifyBuf[e+t++]=n;r.notifyBase=e+t;try{for(let n=0;n<t;n++){let t=r.notifyBuf[e+n];r.notifyBuf[e+n]=null,t?.()}}finally{r.notifyBase=e,0===e&&r.notifyBuf.length>s&&t<c&&(r.notifyBuf.length=l)}}dispose(){this._subs.clear()}};function p(e){return new f(e)}function m(e){let t,n=!1,l=new Set,i=new Set,f=r.activeErrorHandler,c=()=>{if(n)return;"function"==typeof t&&t();let s=l;l=i,i=s,i.clear();let a=r.ctxPool.length>0?r.ctxPool.pop():{effect:null,deps:null};if(a.effect=r.activeEffect,a.deps=r.activeDeps,r.ctxStack.push(a),r.activeEffect=c,r.activeDeps=i,r.effectDepth++,r.effectDepth>o){r.effectDepth=0;let e=r.ctxStack.pop();throw r.activeEffect=e.effect,r.activeDeps=e.deps,e.effect=null,e.deps=null,r.ctxPool.push(e),Error("[Nix] Maximum effect re-execution depth exceeded (possible infinite loop).")}try{t=e()}catch(e){if(!f)throw e;f(e)}finally{r.effectDepth--;let e=r.ctxStack.pop();r.activeEffect=e.effect,r.activeDeps=e.deps,e.effect=null,e.deps=null,r.ctxPool.push(e);for(let e of l)i.has(e)||e._removeSub(c)}};return c(),()=>{n=!0,"function"==typeof t&&t();for(let e of i)e._removeSub(c);i.clear(),l.clear()}}var h=Symbol("nix-computed-uninitialized");function g(e,t=Object.is){let r=new f(h),n=null,l=!1,i=!1,o=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(r),"value");if(!o?.get||!o?.set)throw Error("[Nix] Internal error: Signal.value descriptor not found.");Object.defineProperty(r,"value",{get(){return l||i||(l=!0,v(()=>{n=m(()=>{let n=e(),l=r.peek();(l===h||!t(n,l))&&(r.value=n)})})),o.get.call(this)},set(e){o.set.call(this,e)},configurable:!0});let c=r.dispose;return r.dispose=()=>{i=!0,n?.(),n=null,c.call(r)},r}function _(e){r.batchLevel++;try{e()}finally{if(r.batchLevel--,0===r.batchLevel&&r.pendingEffectsArr.length>0){let e=r.pendingEffectsArr.length;for(let t=0;t<e;t++)r.pendingEffectsArr[t]();r.pendingEffectsArr.length=0,r.pendingEffectsSet.clear()}}}function v(e){let t=r.activeEffect,n=r.activeDeps;r.activeEffect=null,r.activeDeps=null;try{return e()}finally{r.activeEffect=t,r.activeDeps=n}}function y(e,t,r={}){let n,{immediate:l=!1,once:i=!1}=r,o=e instanceof f?()=>e.value:e,c=!0,s=!1,a=m(()=>{let e=o();if(c){if(c=!1,l&&!s){let r=e;v(()=>t(r,void 0)),i&&(s=!0,Promise.resolve().then(a))}n=e}else if(!s){let r=e,l=n;n=e,v(()=>t(r,l)),i&&(s=!0,Promise.resolve().then(a))}});return()=>{s=!0,a()}}function b(e){return e?Promise.resolve().then(e):Promise.resolve()}exports.Signal=f,exports._getNotifyBufSize=d,exports._popErrorHandler=a,exports._pushErrorHandler=i,exports._setSignalDebugHooks=u,exports.batch=_,exports.computed=g,exports.effect=m,exports.nextTick=b,exports.signal=p,exports.untrack=v,exports.watch=y;
|
package/dist/lib/signals.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(){return{ctxPool:[],ctxStack:[],activeEffect:null,activeDeps:null,activeErrorHandler:null,errorHandlerStack:[],batchLevel:0,pendingEffectsSet:new Set,pendingEffectsArr:[],effectDepth:0,notifyBuf:[],notifyBase:0,signalDebugHooks:null}}var t=Symbol.for("@deijose/nix-js/reactivity-state"),n=globalThis,r=(()=>{let r=n[t];if(r)return r;let
|
|
1
|
+
function e(){return{ctxPool:[],ctxStack:[],activeEffect:null,activeDeps:null,activeErrorHandler:null,errorHandlerStack:[],batchLevel:0,pendingEffectsSet:new Set,pendingEffectsArr:[],effectDepth:0,notifyBuf:[],notifyBase:0,signalDebugHooks:null}}var t=Symbol.for("@deijose/nix-js/reactivity-state"),n=globalThis,r=(()=>{let r=n[t];if(r)return r;let l=e();return n[t]=l,l})();function i(e){r.errorHandlerStack.push(r.activeErrorHandler),r.activeErrorHandler=e}function a(){r.activeErrorHandler=r.errorHandlerStack.pop()??null}var o=100,s=64,c=16,l=32;function u(e){r.signalDebugHooks=e}function d(){return r.notifyBuf.length}var f=class{_value;_subs=new Set;constructor(e){this._value=e,r.signalDebugHooks?.onCreate?.(this,e)}get value(){return r.activeEffect&&(this._subs.add(r.activeEffect),r.activeDeps?.add(this)),this._value}set value(e){Object.is(this._value,e)||(this._value=e,r.signalDebugHooks?.onWrite?.(this,e),this._notify())}update(e){this.value=e(this._value)}peek(){return this._value}_removeSub(e){this._subs.delete(e)}_notify(){if(r.batchLevel>0){for(let e of this._subs)r.pendingEffectsSet.has(e)||(r.pendingEffectsSet.add(e),r.pendingEffectsArr.push(e));return}let e=r.notifyBase,t=0;for(let n of this._subs)r.notifyBuf[e+t++]=n;r.notifyBase=e+t;try{for(let n=0;n<t;n++){let t=r.notifyBuf[e+n];r.notifyBuf[e+n]=null,t?.()}}finally{r.notifyBase=e,0===e&&r.notifyBuf.length>s&&t<c&&(r.notifyBuf.length=l)}}dispose(){this._subs.clear()}};function p(e){return new f(e)}function m(e){let t,n=!1,l=new Set,i=new Set,f=r.activeErrorHandler,c=()=>{if(n)return;"function"==typeof t&&t();let s=l;l=i,i=s,i.clear();let a=r.ctxPool.length>0?r.ctxPool.pop():{effect:null,deps:null};if(a.effect=r.activeEffect,a.deps=r.activeDeps,r.ctxStack.push(a),r.activeEffect=c,r.activeDeps=i,r.effectDepth++,r.effectDepth>o){r.effectDepth=0;let e=r.ctxStack.pop();throw r.activeEffect=e.effect,r.activeDeps=e.deps,e.effect=null,e.deps=null,r.ctxPool.push(e),Error("[Nix] Maximum effect re-execution depth exceeded (possible infinite loop).")}try{t=e()}catch(e){if(!f)throw e;f(e)}finally{r.effectDepth--;let e=r.ctxStack.pop();r.activeEffect=e.effect,r.activeDeps=e.deps,e.effect=null,e.deps=null,r.ctxPool.push(e);for(let e of l)i.has(e)||e._removeSub(c)}};return c(),()=>{n=!0,"function"==typeof t&&t();for(let e of i)e._removeSub(c);i.clear(),l.clear()}}var h=Symbol("nix-computed-uninitialized");function g(e,t=Object.is){let r=new f(h),n=null,l=!1,i=!1,c=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(r),"value");if(!c?.get||!c?.set)throw Error("[Nix] Internal error: Signal.value descriptor not found.");Object.defineProperty(r,"value",{get(){return l||i||(l=!0,v(()=>{n=m(()=>{let n=e(),l=r.peek();(l===h||!t(n,l))&&(r.value=n)})})),c.get.call(this)},set(e){c.set.call(this,e)},configurable:!0});let o=r.dispose;return r.dispose=()=>{i=!0,n?.(),n=null,o.call(r)},r}function _(e){r.batchLevel++;try{e()}finally{if(r.batchLevel--,0===r.batchLevel&&r.pendingEffectsArr.length>0){let e=r.pendingEffectsArr.length;for(let t=0;t<e;t++)r.pendingEffectsArr[t]();r.pendingEffectsArr.length=0,r.pendingEffectsSet.clear()}}}function v(e){let t=r.activeEffect,n=r.activeDeps;r.activeEffect=null,r.activeDeps=null;try{return e()}finally{r.activeEffect=t,r.activeDeps=n}}function y(e,t,r={}){let n,{immediate:l=!1,once:i=!1}=r,c=e instanceof f?()=>e.value:e,o=!0,s=!1,a=m(()=>{let e=c();if(o){if(o=!1,l&&!s){let r=e;v(()=>t(r,void 0)),i&&(s=!0,Promise.resolve().then(a))}n=e}else if(!s){let r=e,l=n;n=e,v(()=>t(r,l)),i&&(s=!0,Promise.resolve().then(a))}});return()=>{s=!0,a()}}function b(e){return e?Promise.resolve().then(e):Promise.resolve()}export{f as Signal,d as _getNotifyBufSize,a as _popErrorHandler,i as _pushErrorHandler,u as _setSignalDebugHooks,_ as batch,g as computed,m as effect,b as nextTick,p as signal,v as untrack,y as watch};
|
package/dist/lib/store.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./signals.cjs");var t=class extends e.Signal{label;constructor(e,t="ReadonlySignal"){super(e.peek()),this.label=t,Object.defineProperty(this,"value",{get:()=>e.value,set:()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},configurable:!1}),this.update=()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},this.dispose=()=>{throw Error(`[Nix] Cannot dispose "${this.label}" directly.`)}}},n=new Set(["$id","$state","$stateSignal","$snapshot","$reset","$patch","$watch","$dispose"]);function r(e){if("__proto__"===e||"constructor"===e||"prototype"===e)throw Error(`[Nix] Store key "${e}" is not allowed for security reasons.`);if(n.has(e))throw Error(`[Nix] Store key "${e}" is reserved.`)}function i(e,t){return!n.has(e)||(console.warn(`[Nix] Store ${t} "${e}" is reserved and will be ignored.`),!1)}function a(e,r){return new t(e,r)}function o(t,o){let{name:l="store",actions:s,getters:c,plugins:f=[]}=o??{},u=Object.keys(t),d={};for(let o of u)r(o),d[o]=e.signal(t[o]);let
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./signals.cjs");var t=class extends e.Signal{label;constructor(e,t="ReadonlySignal"){super(e.peek()),this.label=t,Object.defineProperty(this,"value",{get:()=>e.value,set:()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},configurable:!1}),this.update=()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},this.dispose=()=>{throw Error(`[Nix] Cannot dispose "${this.label}" directly.`)}}},n=new Set(["$id","$state","$stateSignal","$snapshot","$reset","$patch","$watch","$dispose"]);function r(e){if("__proto__"===e||"constructor"===e||"prototype"===e)throw Error(`[Nix] Store key "${e}" is not allowed for security reasons.`);if(n.has(e))throw Error(`[Nix] Store key "${e}" is reserved.`)}function i(e,t){return!n.has(e)||(console.warn(`[Nix] Store ${t} "${e}" is reserved and will be ignored.`),!1)}function a(e,r){return new t(e,r)}function o(t,o){let{name:l="store",actions:s,getters:c,plugins:f=[]}=o??{},u=Object.keys(t),d={};for(let o of u)r(o),d[o]=e.signal(t[o]);let b,g=d,$=e.computed(()=>{let e={};for(let t of u)e[t]=d[t].value;return e}),h=a($,`store "${l}".$stateSignal`);try{b=structuredClone(t)}catch(e){throw Error(`[Nix] Store "${l}" initialState contains non-serializable data (functions, DOM nodes, Symbols, or WeakRefs). Remove these before creating the store. Original error: ${e}`)}let p=[];function y(){let e={};for(let t of u)e[t]=d[t].peek();return e}let w=Object.assign(Object.create(null),g,{$reset:function(){let t=y();for(let e of p)e(t,t);e.batch(()=>{for(let e of u)d[e].value=b[e]})},$patch:function(t){let r=t,o=y();for(let e of p){let t=e(r,o);void 0!==t&&(r=t)}e.batch(()=>{for(let e of Object.keys(r))Object.prototype.hasOwnProperty.call(d,e)&&(d[e].value=r[e])})},$watch:function(t,r){return e.watch($,t,r)},$snapshot:y});Object.defineProperty(w,"$id",{value:l,writable:!1,enumerable:!1,configurable:!1}),Object.defineProperty(w,"$state",{get:()=>$.value,enumerable:!0,configurable:!1}),Object.defineProperty(w,"$stateSignal",{value:h,writable:!1,enumerable:!1,configurable:!1}),Object.defineProperty(w,"_guardFns",{value:p,writable:!1,enumerable:!1,configurable:!1});let S=new Set([...u,...Array.from(n)]);if(s){let e=s(g);for(let t of Object.keys(e))if(i(t,"action")){if(S.has(t)){console.warn(`[Nix] Store "${l}": action "${t}" collides with an existing signal or getter and will be ignored.`);continue}S.add(t),w[t]=e[t]}}if(c){let t=c(g);for(let r of Object.keys(t)){if(!i(r,"getter"))continue;if(S.has(r)){console.warn(`[Nix] Store "${l}": getter "${r}" collides with an existing signal or action and will be ignored.`);continue}let o=t[r];if(!(o instanceof e.Signal))throw TypeError(`[Nix] Store "${l}": getter "${r}" must return a Signal (wrap it with computed()). Got: ${typeof o}`);S.add(r),w[r]=a(o,`getter "${r}" in store "${l}"`)}}let x=[()=>$.dispose()];for(let e of f)try{let t=e(w);"function"==typeof t&&x.push(t)}catch(e){console.error(`[Nix] Plugin initialization failed for store "${l}":`,e)}return w.$dispose=()=>{for(let e of x)e()},w}exports.ReadonlySignal=t,exports.createStore=o;
|
package/dist/lib/store.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Signal as e,batch as t,computed as n,signal as r,watch as i}from"./signals.js";var a=class extends e{label;constructor(e,t="ReadonlySignal"){super(e.peek()),this.label=t,Object.defineProperty(this,"value",{get:()=>e.value,set:()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},configurable:!1}),this.update=()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},this.dispose=()=>{throw Error(`[Nix] Cannot dispose "${this.label}" directly.`)}}},o=new Set(["$id","$state","$stateSignal","$snapshot","$reset","$patch","$watch","$dispose"]);function s(e){if("__proto__"===e||"constructor"===e||"prototype"===e)throw Error(`[Nix] Store key "${e}" is not allowed for security reasons.`);if(o.has(e))throw Error(`[Nix] Store key "${e}" is reserved.`)}function c(e,t){return!o.has(e)||(console.warn(`[Nix] Store ${t} "${e}" is reserved and will be ignored.`),!1)}function l(e,t){return new a(e,t)}function u(a,f){let{name:u="store",actions:d,getters:$,plugins:
|
|
1
|
+
import{Signal as e,batch as t,computed as n,signal as r,watch as i}from"./signals.js";var a=class extends e{label;constructor(e,t="ReadonlySignal"){super(e.peek()),this.label=t,Object.defineProperty(this,"value",{get:()=>e.value,set:()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},configurable:!1}),this.update=()=>{throw Error(`[Nix] "${this.label}" is read-only.`)},this.dispose=()=>{throw Error(`[Nix] Cannot dispose "${this.label}" directly.`)}}},o=new Set(["$id","$state","$stateSignal","$snapshot","$reset","$patch","$watch","$dispose"]);function s(e){if("__proto__"===e||"constructor"===e||"prototype"===e)throw Error(`[Nix] Store key "${e}" is not allowed for security reasons.`);if(o.has(e))throw Error(`[Nix] Store key "${e}" is reserved.`)}function c(e,t){return!o.has(e)||(console.warn(`[Nix] Store ${t} "${e}" is reserved and will be ignored.`),!1)}function l(e,t){return new a(e,t)}function u(a,f){let{name:u="store",actions:d,getters:$,plugins:b=[]}=f??{},g=Object.keys(a),h={};for(let e of g)s(e),h[e]=r(a[e]);let p,w=h,y=n(()=>{let e={};for(let t of g)e[t]=h[t].value;return e}),S=l(y,`store "${u}".$stateSignal`);try{p=structuredClone(a)}catch(e){throw Error(`[Nix] Store "${u}" initialState contains non-serializable data (functions, DOM nodes, Symbols, or WeakRefs). Remove these before creating the store. Original error: ${e}`)}let x=[];function O(){let e={};for(let t of g)e[t]=h[t].peek();return e}let v=Object.assign(Object.create(null),w,{$reset:function(){let e=O();for(let t of x)t(e,e);t(()=>{for(let e of g)h[e].value=p[e]})},$patch:function(e){let r=e,o=O();for(let e of x){let t=e(r,o);void 0!==t&&(r=t)}t(()=>{for(let e of Object.keys(r))Object.prototype.hasOwnProperty.call(h,e)&&(h[e].value=r[e])})},$watch:function(e,t){return i(y,e,t)},$snapshot:O});Object.defineProperty(v,"$id",{value:u,writable:!1,enumerable:!1,configurable:!1}),Object.defineProperty(v,"$state",{get:()=>y.value,enumerable:!0,configurable:!1}),Object.defineProperty(v,"$stateSignal",{value:S,writable:!1,enumerable:!1,configurable:!1}),Object.defineProperty(v,"_guardFns",{value:x,writable:!1,enumerable:!1,configurable:!1});let j=new Set([...g,...Array.from(o)]);if(d){let e=d(w);for(let t of Object.keys(e))if(c(t,"action")){if(j.has(t)){console.warn(`[Nix] Store "${u}": action "${t}" collides with an existing signal or getter and will be ignored.`);continue}j.add(t),v[t]=e[t]}}if($){let t=$(w);for(let r of Object.keys(t)){if(!c(r,"getter"))continue;if(j.has(r)){console.warn(`[Nix] Store "${u}": getter "${r}" collides with an existing signal or action and will be ignored.`);continue}let o=t[r];if(!(o instanceof e))throw TypeError(`[Nix] Store "${u}": getter "${r}" must return a Signal (wrap it with computed()). Got: ${typeof o}`);j.add(r),v[r]=l(o,`getter "${r}" in store "${u}"`)}}let m=[()=>y.dispose()];for(let e of b)try{let t=e(v);"function"==typeof t&&m.push(t)}catch(e){console.error(`[Nix] Plugin initialization failed for store "${u}":`,e)}return v.$dispose=()=>{for(let e of m)e()},v}export{a as ReadonlySignal,u as createStore};
|
package/package.json
CHANGED