@bquery/bquery 1.5.0 → 1.6.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.
- package/README.md +586 -546
- package/dist/component/component.d.ts +13 -5
- package/dist/component/component.d.ts.map +1 -1
- package/dist/component/html.d.ts +40 -3
- package/dist/component/html.d.ts.map +1 -1
- package/dist/component/index.d.ts +2 -2
- package/dist/component/index.d.ts.map +1 -1
- package/dist/component/library.d.ts.map +1 -1
- package/dist/component/types.d.ts +131 -16
- package/dist/component/types.d.ts.map +1 -1
- package/dist/component-BEQgt5hl.js +600 -0
- package/dist/component-BEQgt5hl.js.map +1 -0
- package/dist/component.es.mjs +7 -6
- package/dist/config-DRmZZno3.js.map +1 -1
- package/dist/core-BGQJVw0-.js +35 -0
- package/dist/core-BGQJVw0-.js.map +1 -0
- package/dist/{core-CK2Mfpf4.js → core-CCEabVHl.js} +2 -2
- package/dist/{core-CK2Mfpf4.js.map → core-CCEabVHl.js.map} +1 -1
- package/dist/core.es.mjs +1 -1
- package/dist/effect-AFRW_Plg.js +84 -0
- package/dist/effect-AFRW_Plg.js.map +1 -0
- package/dist/full.d.ts +4 -4
- package/dist/full.d.ts.map +1 -1
- package/dist/full.es.mjs +98 -94
- package/dist/full.iife.js +14 -14
- package/dist/full.iife.js.map +1 -1
- package/dist/full.umd.js +14 -14
- package/dist/full.umd.js.map +1 -1
- package/dist/index.es.mjs +143 -139
- package/dist/{motion-C5DRdPnO.js → motion-D9TcHxOF.js} +1 -1
- package/dist/{motion-C5DRdPnO.js.map → motion-D9TcHxOF.js.map} +1 -1
- package/dist/motion.es.mjs +1 -1
- package/dist/{platform-B7JhGBc7.js → platform-Dr9b6fsq.js} +21 -20
- package/dist/platform-Dr9b6fsq.js.map +1 -0
- package/dist/platform.es.mjs +1 -1
- package/dist/{reactive-BDya-ia8.js → reactive-DSkct0dO.js} +51 -50
- package/dist/reactive-DSkct0dO.js.map +1 -0
- package/dist/reactive.es.mjs +19 -17
- package/dist/{router-CijiICxt.js → router-CbDhl8rS.js} +3 -3
- package/dist/{router-CijiICxt.js.map → router-CbDhl8rS.js.map} +1 -1
- package/dist/router.es.mjs +1 -1
- package/dist/{sanitize-jyJ2ryE2.js → sanitize-Bs2dkMby.js} +94 -83
- package/dist/sanitize-Bs2dkMby.js.map +1 -0
- package/dist/security/index.d.ts +4 -2
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/sanitize.d.ts +4 -1
- package/dist/security/sanitize.d.ts.map +1 -1
- package/dist/security/trusted-html.d.ts +53 -0
- package/dist/security/trusted-html.d.ts.map +1 -0
- package/dist/security.es.mjs +10 -9
- package/dist/store/define-store.d.ts +1 -1
- package/dist/store/define-store.d.ts.map +1 -1
- package/dist/store/mapping.d.ts +1 -1
- package/dist/store/mapping.d.ts.map +1 -1
- package/dist/store/persisted.d.ts +1 -1
- package/dist/store/persisted.d.ts.map +1 -1
- package/dist/store/types.d.ts +2 -2
- package/dist/store/types.d.ts.map +1 -1
- package/dist/store/watch.d.ts +1 -1
- package/dist/store/watch.d.ts.map +1 -1
- package/dist/{store-CPK9E62U.js → store-BwDvI45q.js} +49 -48
- package/dist/{store-CPK9E62U.js.map → store-BwDvI45q.js.map} +1 -1
- package/dist/store.es.mjs +1 -1
- package/dist/storybook/index.d.ts +37 -0
- package/dist/storybook/index.d.ts.map +1 -0
- package/dist/storybook.es.mjs +151 -0
- package/dist/storybook.es.mjs.map +1 -0
- package/dist/untrack-B0rVscTc.js +7 -0
- package/dist/untrack-B0rVscTc.js.map +1 -0
- package/dist/{view-Cdi0g-qo.js → view-C70lA3vf.js} +29 -28
- package/dist/{view-Cdi0g-qo.js.map → view-C70lA3vf.js.map} +1 -1
- package/dist/view.es.mjs +9 -8
- package/package.json +141 -136
- package/src/component/component.ts +259 -54
- package/src/component/html.ts +153 -53
- package/src/component/index.ts +10 -2
- package/src/component/library.ts +42 -28
- package/src/component/types.ts +184 -19
- package/src/full.ts +8 -2
- package/src/motion/transition.ts +97 -97
- package/src/motion/types.ts +208 -208
- package/src/platform/announcer.ts +208 -208
- package/src/platform/config.ts +163 -163
- package/src/platform/cookies.ts +165 -165
- package/src/platform/index.ts +39 -39
- package/src/platform/meta.ts +168 -168
- package/src/reactive/async-data.ts +486 -486
- package/src/reactive/index.ts +37 -37
- package/src/reactive/signal.ts +29 -29
- package/src/security/constants.ts +211 -211
- package/src/security/index.ts +17 -10
- package/src/security/sanitize.ts +70 -66
- package/src/security/trusted-html.ts +71 -0
- package/src/store/define-store.ts +49 -48
- package/src/store/mapping.ts +74 -73
- package/src/store/persisted.ts +62 -61
- package/src/store/types.ts +92 -94
- package/src/store/watch.ts +53 -52
- package/src/storybook/index.ts +479 -0
- package/dist/component-CY5MVoYN.js +0 -531
- package/dist/component-CY5MVoYN.js.map +0 -1
- package/dist/core-DPdbItcq.js +0 -112
- package/dist/core-DPdbItcq.js.map +0 -1
- package/dist/platform-B7JhGBc7.js.map +0 -1
- package/dist/reactive-BDya-ia8.js.map +0 -1
- package/dist/sanitize-jyJ2ryE2.js.map +0 -1
package/dist/security.es.mjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { a as e, c as a, i as
|
|
1
|
+
import { a as e, c as t, d as a, i as r, n as i, o as p, r as o, s as c, t as d } from "./sanitize-Bs2dkMby.js";
|
|
2
2
|
export {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
r as createTrustedHtml,
|
|
4
|
+
d as escapeHtml,
|
|
5
|
+
c as generateNonce,
|
|
6
6
|
e as getTrustedTypesPolicy,
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
t as hasCSPDirective,
|
|
8
|
+
p as isTrustedTypesSupported,
|
|
9
|
+
i as sanitize,
|
|
10
|
+
i as sanitizeHtml,
|
|
11
|
+
o as stripTags,
|
|
12
|
+
a as trusted
|
|
12
13
|
};
|
|
@@ -24,5 +24,5 @@ import type { Store, StoreDefinition } from './types';
|
|
|
24
24
|
* counter.increment();
|
|
25
25
|
* ```
|
|
26
26
|
*/
|
|
27
|
-
export declare const defineStore: <S extends Record<string, unknown>, G extends Record<string, unknown> = Record<string, never>, A extends Record<string, (...args:
|
|
27
|
+
export declare const defineStore: <S extends Record<string, unknown>, G extends Record<string, unknown> = Record<string, never>, A extends Record<string, (...args: any[]) => any> = Record<string, never>>(id: string, definition: Omit<StoreDefinition<S, G, A>, "id">) => (() => Store<S, G, A>);
|
|
28
28
|
//# sourceMappingURL=define-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"define-store.d.ts","sourceRoot":"","sources":["../../src/store/define-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,GACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"define-store.d.ts","sourceRoot":"","sources":["../../src/store/define-store.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEtD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,GACtB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAEzD,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAEzE,IAAI,MAAM,EACV,YAAY,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,KAC/C,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAUvB,CAAC"}
|
package/dist/store/mapping.d.ts
CHANGED
|
@@ -24,5 +24,5 @@ export declare const mapGetters: <G extends Record<string, unknown>, K extends k
|
|
|
24
24
|
* @param keys - Action keys to map
|
|
25
25
|
* @returns Object with mapped actions
|
|
26
26
|
*/
|
|
27
|
-
export declare const mapActions: <A extends Record<string, (...args:
|
|
27
|
+
export declare const mapActions: <A extends Record<string, (...args: any[]) => any>, K extends keyof A>(store: A, keys: K[]) => Pick<A, K>;
|
|
28
28
|
//# sourceMappingURL=mapping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/store/mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAC3E,OAAO,CAAC,EACR,MAAM,CAAC,EAAE,KACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAWX,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAC7E,OAAO,CAAC,EACR,MAAM,CAAC,EAAE,KACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAWX,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/store/mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAC3E,OAAO,CAAC,EACR,MAAM,CAAC,EAAE,KACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAWX,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAC7E,OAAO,CAAC,EACR,MAAM,CAAC,EAAE,KACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAWX,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAErB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EACjD,CAAC,SAAS,MAAM,CAAC,EAEjB,OAAO,CAAC,EACR,MAAM,CAAC,EAAE,KACR,IAAI,CAAC,CAAC,EAAE,CAAC,CASX,CAAC"}
|
|
@@ -9,5 +9,5 @@ import type { Store, StoreDefinition } from './types';
|
|
|
9
9
|
* @param storageKey - Optional custom storage key
|
|
10
10
|
* @returns The reactive store instance
|
|
11
11
|
*/
|
|
12
|
-
export declare const createPersistedStore: <S extends Record<string, unknown>, G extends Record<string, unknown> = Record<string, never>, A extends Record<string, (...args:
|
|
12
|
+
export declare const createPersistedStore: <S extends Record<string, unknown>, G extends Record<string, unknown> = Record<string, never>, A extends Record<string, (...args: any[]) => any> = Record<string, never>>(definition: StoreDefinition<S, G, A>, storageKey?: string) => Store<S, G, A>;
|
|
13
13
|
//# sourceMappingURL=persisted.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persisted.d.ts","sourceRoot":"","sources":["../../src/store/persisted.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"persisted.d.ts","sourceRoot":"","sources":["../../src/store/persisted.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAEtD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAEzD,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAEzE,YAAY,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACpC,aAAa,MAAM,KAClB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAuCf,CAAC"}
|
package/dist/store/types.d.ts
CHANGED
|
@@ -17,8 +17,8 @@ export type Getters<S, G> = {
|
|
|
17
17
|
* The `this` context includes state, getters, and other actions.
|
|
18
18
|
*/
|
|
19
19
|
export type Actions<S, G, A> = {
|
|
20
|
-
[K in keyof A]: A[K]
|
|
21
|
-
}
|
|
20
|
+
[K in keyof A]: A[K];
|
|
21
|
+
} & ThisType<S & G & A>;
|
|
22
22
|
/**
|
|
23
23
|
* Store definition for createStore.
|
|
24
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI;KAC5B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/store/types.ts"],"names":[],"mappings":"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"}
|
package/dist/store/watch.d.ts
CHANGED
|
@@ -19,5 +19,5 @@ export type WatchStoreOptions<T> = {
|
|
|
19
19
|
* @param options - Watch options
|
|
20
20
|
* @returns Unsubscribe function
|
|
21
21
|
*/
|
|
22
|
-
export declare const watchStore: <S extends Record<string, unknown>, G extends Record<string, unknown>, A extends Record<string, (...args:
|
|
22
|
+
export declare const watchStore: <S extends Record<string, unknown>, G extends Record<string, unknown>, A extends Record<string, (...args: any[]) => any>, T>(store: Store<S, G, A>, selector: (state: S) => T, callback: (value: T, previous: T | undefined) => void, options?: WatchStoreOptions<T>) => (() => void);
|
|
23
23
|
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/store/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;CAClC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACrB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/store/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;CAClC,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GACrB,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEjC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EACjD,CAAC,EAED,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EACrB,UAAU,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EACzB,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,SAAS,KAAK,IAAI,EACrD,UAAS,iBAAiB,CAAC,CAAC,CAAM,KACjC,CAAC,MAAM,IAAI,CAgBb,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { d as $, f as S } from "./reactive-DSkct0dO.js";
|
|
2
|
+
import { n as x } from "./core-BGQJVw0-.js";
|
|
3
|
+
import { t as T } from "./untrack-B0rVscTc.js";
|
|
3
4
|
var R = () => {
|
|
4
5
|
if (!(typeof window > "u"))
|
|
5
6
|
return window.__BQUERY_DEVTOOLS__ || (window.__BQUERY_DEVTOOLS__ = { stores: /* @__PURE__ */ new Map() }), window.__BQUERY_DEVTOOLS__;
|
|
@@ -10,7 +11,7 @@ var R = () => {
|
|
|
10
11
|
typeof window > "u" || !window.__BQUERY_DEVTOOLS__ || window.__BQUERY_DEVTOOLS__.stores.delete(e);
|
|
11
12
|
}, M = (e, t) => {
|
|
12
13
|
typeof window > "u" || window.__BQUERY_DEVTOOLS__?.onStateChange?.(e, t);
|
|
13
|
-
}, j = [],
|
|
14
|
+
}, j = [], q = (e) => {
|
|
14
15
|
j.push(e);
|
|
15
16
|
}, Q = (e, t) => {
|
|
16
17
|
for (const r of j) {
|
|
@@ -22,7 +23,7 @@ var R = () => {
|
|
|
22
23
|
}
|
|
23
24
|
}, h = /* @__PURE__ */ new Map(), A = (e) => h.has(e), N = (e, t) => {
|
|
24
25
|
h.set(e, t);
|
|
25
|
-
}, E = (e) => h.get(e),
|
|
26
|
+
}, E = (e) => h.get(e), z = () => Array.from(h.keys()), F = (e) => {
|
|
26
27
|
h.delete(e), B(e);
|
|
27
28
|
}, D = (e) => e !== null && typeof e == "object" && Object.getPrototypeOf(e) === Object.prototype, v = (e) => {
|
|
28
29
|
if (e === null || typeof e != "object") return e;
|
|
@@ -33,20 +34,20 @@ var R = () => {
|
|
|
33
34
|
const t = {};
|
|
34
35
|
for (const r of Object.keys(e)) t[r] = v(e[r]);
|
|
35
36
|
return t;
|
|
36
|
-
},
|
|
37
|
+
}, m = (e, t) => {
|
|
37
38
|
if (e === t) return !0;
|
|
38
39
|
if (e === null || t === null || typeof e != "object" || typeof t != "object") return !1;
|
|
39
40
|
if (e instanceof Date && t instanceof Date) return e.getTime() === t.getTime();
|
|
40
41
|
if (e instanceof Map && t instanceof Map) {
|
|
41
42
|
if (e.size !== t.size) return !1;
|
|
42
|
-
for (const [i, f] of e.entries()) if (!t.has(i) || !
|
|
43
|
+
for (const [i, f] of e.entries()) if (!t.has(i) || !m(f, t.get(i))) return !1;
|
|
43
44
|
return !0;
|
|
44
45
|
}
|
|
45
46
|
if (e instanceof Set && t instanceof Set) {
|
|
46
47
|
if (e.size !== t.size) return !1;
|
|
47
48
|
for (const i of e.values()) {
|
|
48
49
|
let f = !1;
|
|
49
|
-
for (const n of t.values()) if (
|
|
50
|
+
for (const n of t.values()) if (m(i, n)) {
|
|
50
51
|
f = !0;
|
|
51
52
|
break;
|
|
52
53
|
}
|
|
@@ -55,15 +56,15 @@ var R = () => {
|
|
|
55
56
|
return !0;
|
|
56
57
|
}
|
|
57
58
|
if (Array.isArray(e) && Array.isArray(t))
|
|
58
|
-
return e.length !== t.length ? !1 : e.every((i, f) =>
|
|
59
|
+
return e.length !== t.length ? !1 : e.every((i, f) => m(i, t[f]));
|
|
59
60
|
if (Array.isArray(e) !== Array.isArray(t)) return !1;
|
|
60
61
|
const r = Object.keys(e), a = Object.keys(t);
|
|
61
|
-
return r.length !== a.length ? !1 : r.every((i) =>
|
|
62
|
+
return r.length !== a.length ? !1 : r.every((i) => m(e[i], t[i]));
|
|
62
63
|
}, U = (e, t, r) => {
|
|
63
64
|
const a = [];
|
|
64
65
|
for (const i of Object.keys(t)) {
|
|
65
66
|
const f = e[i], n = t[i];
|
|
66
|
-
r.get(i) === n && D(f) && D(n) && !
|
|
67
|
+
r.get(i) === n && D(f) && D(n) && !m(f, n) && a.push(i);
|
|
67
68
|
}
|
|
68
69
|
return a;
|
|
69
70
|
}, _ = (() => {
|
|
@@ -78,8 +79,8 @@ var R = () => {
|
|
|
78
79
|
if (A(t))
|
|
79
80
|
return console.warn(`bQuery store: Store "${t}" already exists. Returning existing instance.`), E(t);
|
|
80
81
|
const f = r(), n = /* @__PURE__ */ new Map();
|
|
81
|
-
for (const s of Object.keys(f)) n.set(s,
|
|
82
|
-
const y = [], p = () => T(() => ({ ...b })),
|
|
82
|
+
for (const s of Object.keys(f)) n.set(s, x(f[s]));
|
|
83
|
+
const y = [], p = () => T(() => ({ ...b })), w = () => {
|
|
83
84
|
const s = typeof window < "u" && typeof window.__BQUERY_DEVTOOLS__?.onStateChange == "function";
|
|
84
85
|
if (y.length === 0 && !s) return;
|
|
85
86
|
const o = p();
|
|
@@ -98,21 +99,21 @@ var R = () => {
|
|
|
98
99
|
};
|
|
99
100
|
},
|
|
100
101
|
has: (s, o) => n.has(o)
|
|
101
|
-
}), O = /* @__PURE__ */ new Map(),
|
|
102
|
-
for (const s of Object.keys(f)) Object.defineProperty(
|
|
102
|
+
}), O = /* @__PURE__ */ new Map(), d = {};
|
|
103
|
+
for (const s of Object.keys(f)) Object.defineProperty(d, s, {
|
|
103
104
|
get: () => n.get(s).value,
|
|
104
105
|
set: (o) => {
|
|
105
|
-
n.get(s).value = o,
|
|
106
|
+
n.get(s).value = o, w();
|
|
106
107
|
},
|
|
107
108
|
enumerable: !0,
|
|
108
109
|
configurable: !1
|
|
109
110
|
});
|
|
110
111
|
for (const s of Object.keys(a)) {
|
|
111
|
-
const o = a[s], u =
|
|
112
|
+
const o = a[s], u = $(() => o(b, new Proxy({}, { get: (g, l) => {
|
|
112
113
|
const c = l;
|
|
113
114
|
if (O.has(c)) return O.get(c).value;
|
|
114
115
|
} })));
|
|
115
|
-
O.set(s, u), Object.defineProperty(
|
|
116
|
+
O.set(s, u), Object.defineProperty(d, s, {
|
|
116
117
|
get: () => u.value,
|
|
117
118
|
enumerable: !0,
|
|
118
119
|
configurable: !1
|
|
@@ -120,15 +121,15 @@ var R = () => {
|
|
|
120
121
|
}
|
|
121
122
|
for (const s of Object.keys(i)) {
|
|
122
123
|
const o = i[s];
|
|
123
|
-
|
|
124
|
-
const
|
|
124
|
+
d[s] = function(...u) {
|
|
125
|
+
const g = new Proxy(d, {
|
|
125
126
|
get: (l, c) => typeof c == "string" && n.has(c) ? n.get(c).value : l[c],
|
|
126
|
-
set: (l, c, k) => typeof c == "string" && n.has(c) ? (n.get(c).value = k,
|
|
127
|
+
set: (l, c, k) => typeof c == "string" && n.has(c) ? (n.get(c).value = k, w(), !0) : Reflect.set(l, c, k)
|
|
127
128
|
});
|
|
128
|
-
return o.apply(
|
|
129
|
+
return o.apply(g, u);
|
|
129
130
|
};
|
|
130
131
|
}
|
|
131
|
-
return Object.defineProperties(
|
|
132
|
+
return Object.defineProperties(d, {
|
|
132
133
|
$id: {
|
|
133
134
|
value: t,
|
|
134
135
|
writable: !1,
|
|
@@ -139,7 +140,7 @@ var R = () => {
|
|
|
139
140
|
const s = r();
|
|
140
141
|
S(() => {
|
|
141
142
|
for (const [o, u] of n) u.value = s[o];
|
|
142
|
-
}),
|
|
143
|
+
}), w();
|
|
143
144
|
},
|
|
144
145
|
writable: !1,
|
|
145
146
|
enumerable: !1
|
|
@@ -156,9 +157,9 @@ var R = () => {
|
|
|
156
157
|
value: (s) => {
|
|
157
158
|
S(() => {
|
|
158
159
|
if (typeof s == "function") {
|
|
159
|
-
const o = _ ? v(p()) : null, u = _ ? new Map(Array.from(n.entries()).map(([l, c]) => [l, c.value])) : null,
|
|
160
|
-
if (s(
|
|
161
|
-
const l = U(o,
|
|
160
|
+
const o = _ ? v(p()) : null, u = _ ? new Map(Array.from(n.entries()).map(([l, c]) => [l, c.value])) : null, g = p();
|
|
161
|
+
if (s(g), _ && o && u) {
|
|
162
|
+
const l = U(o, g, u);
|
|
162
163
|
l.length > 0 && console.warn(`[bQuery store "${t}"] Nested mutation detected in $patch() for keys: ${l.map(String).join(", ")}.
|
|
163
164
|
Nested object mutations do not trigger reactive updates because the store uses shallow reactivity.
|
|
164
165
|
To fix this, either:
|
|
@@ -166,9 +167,9 @@ To fix this, either:
|
|
|
166
167
|
2. Use $patchDeep() for automatic deep cloning
|
|
167
168
|
See: https://bquery.dev/guide/store#deep-reactivity`);
|
|
168
169
|
}
|
|
169
|
-
for (const [l, c] of Object.entries(
|
|
170
|
+
for (const [l, c] of Object.entries(g)) n.has(l) && (n.get(l).value = c);
|
|
170
171
|
} else for (const [o, u] of Object.entries(s)) n.has(o) && (n.get(o).value = u);
|
|
171
|
-
}),
|
|
172
|
+
}), w();
|
|
172
173
|
},
|
|
173
174
|
writable: !1,
|
|
174
175
|
enumerable: !1
|
|
@@ -179,9 +180,9 @@ See: https://bquery.dev/guide/store#deep-reactivity`);
|
|
|
179
180
|
if (typeof s == "function") {
|
|
180
181
|
const o = v(p());
|
|
181
182
|
s(o);
|
|
182
|
-
for (const [u,
|
|
183
|
+
for (const [u, g] of Object.entries(o)) n.has(u) && (n.get(u).value = g);
|
|
183
184
|
} else for (const [o, u] of Object.entries(s)) n.has(o) && (n.get(o).value = v(u));
|
|
184
|
-
}),
|
|
185
|
+
}), w();
|
|
185
186
|
},
|
|
186
187
|
writable: !1,
|
|
187
188
|
enumerable: !1
|
|
@@ -190,29 +191,29 @@ See: https://bquery.dev/guide/store#deep-reactivity`);
|
|
|
190
191
|
get: () => p(),
|
|
191
192
|
enumerable: !1
|
|
192
193
|
}
|
|
193
|
-
}), N(t,
|
|
194
|
-
},
|
|
194
|
+
}), N(t, d), Q(d, e), V(t, d), d;
|
|
195
|
+
}, K = (e, t) => () => A(e) ? E(e) : P({
|
|
195
196
|
id: e,
|
|
196
197
|
...t
|
|
197
|
-
}),
|
|
198
|
+
}), G = (e, t) => {
|
|
198
199
|
const r = {};
|
|
199
200
|
for (const a of t) Object.defineProperty(r, a, {
|
|
200
201
|
get: () => e[a],
|
|
201
202
|
enumerable: !0
|
|
202
203
|
});
|
|
203
204
|
return r;
|
|
204
|
-
},
|
|
205
|
+
}, I = (e, t) => {
|
|
205
206
|
const r = {};
|
|
206
207
|
for (const a of t) Object.defineProperty(r, a, {
|
|
207
208
|
get: () => e[a],
|
|
208
209
|
enumerable: !0
|
|
209
210
|
});
|
|
210
211
|
return r;
|
|
211
|
-
},
|
|
212
|
+
}, J = (e, t) => {
|
|
212
213
|
const r = {};
|
|
213
214
|
for (const a of t) r[a] = (...i) => e[a](...i);
|
|
214
215
|
return r;
|
|
215
|
-
},
|
|
216
|
+
}, H = (e, t) => {
|
|
216
217
|
const r = t ?? `bquery-store-${e.id}`, a = e.state, i = P({
|
|
217
218
|
...e,
|
|
218
219
|
state: () => {
|
|
@@ -234,8 +235,8 @@ See: https://bquery.dev/guide/store#deep-reactivity`);
|
|
|
234
235
|
} catch {
|
|
235
236
|
}
|
|
236
237
|
}), i;
|
|
237
|
-
},
|
|
238
|
-
const i = a.equals ?? (a.deep ?
|
|
238
|
+
}, W = (e, t, r, a = {}) => {
|
|
239
|
+
const i = a.equals ?? (a.deep ? m : Object.is);
|
|
239
240
|
let f = t(e.$state);
|
|
240
241
|
return a.immediate && r(f, void 0), e.$subscribe((n) => {
|
|
241
242
|
const y = t(n);
|
|
@@ -246,17 +247,17 @@ See: https://bquery.dev/guide/store#deep-reactivity`);
|
|
|
246
247
|
});
|
|
247
248
|
};
|
|
248
249
|
export {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
250
|
+
G as a,
|
|
251
|
+
F as c,
|
|
252
|
+
q as d,
|
|
253
|
+
I as i,
|
|
253
254
|
E as l,
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
255
|
+
H as n,
|
|
256
|
+
K as o,
|
|
257
|
+
J as r,
|
|
257
258
|
P as s,
|
|
258
|
-
|
|
259
|
-
|
|
259
|
+
W as t,
|
|
260
|
+
z as u
|
|
260
261
|
};
|
|
261
262
|
|
|
262
|
-
//# sourceMappingURL=store-
|
|
263
|
+
//# sourceMappingURL=store-BwDvI45q.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store-CPK9E62U.js","names":[],"sources":["../src/store/devtools.ts","../src/store/plugins.ts","../src/store/registry.ts","../src/store/utils.ts","../src/store/create-store.ts","../src/store/define-store.ts","../src/store/mapping.ts","../src/store/persisted.ts","../src/store/watch.ts"],"sourcesContent":["/**\n * Devtools integration for stores.\n * @internal\n */\n\ndeclare global {\n interface Window {\n __BQUERY_DEVTOOLS__?: {\n stores: Map<string, unknown>;\n onStoreCreated?: (id: string, store: unknown) => void;\n onStateChange?: (id: string, state: unknown) => void;\n };\n }\n}\n\nexport type DevtoolsHook = {\n stores: Map<string, unknown>;\n onStoreCreated?: (id: string, store: unknown) => void;\n onStateChange?: (id: string, state: unknown) => void;\n};\n\nconst ensureDevtools = (): DevtoolsHook | undefined => {\n if (typeof window === 'undefined') return undefined;\n if (!window.__BQUERY_DEVTOOLS__) {\n window.__BQUERY_DEVTOOLS__ = { stores: new Map() };\n }\n return window.__BQUERY_DEVTOOLS__;\n};\n\nexport const registerDevtoolsStore = (id: string, store: unknown): void => {\n const devtools = ensureDevtools();\n if (!devtools) return;\n devtools.stores.set(id, store);\n devtools.onStoreCreated?.(id, store);\n};\n\nexport const unregisterDevtoolsStore = (id: string): void => {\n if (typeof window === 'undefined' || !window.__BQUERY_DEVTOOLS__) return;\n window.__BQUERY_DEVTOOLS__.stores.delete(id);\n};\n\nexport const notifyDevtoolsStateChange = (id: string, state: unknown): void => {\n if (typeof window === 'undefined') return;\n window.__BQUERY_DEVTOOLS__?.onStateChange?.(id, state);\n};\n","/**\n * Store plugins API.\n */\n\nimport type { Store, StoreDefinition, StorePlugin } from './types';\n\n/** @internal Registered plugins */\nconst plugins: StorePlugin[] = [];\n\n/**\n * Registers a plugin that extends all stores.\n *\n * @param plugin - The plugin function\n */\nexport const registerPlugin = (plugin: StorePlugin): void => {\n plugins.push(plugin);\n};\n\n/** @internal */\nexport const applyPlugins = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n store: Store<any, any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: StoreDefinition<any, any, any>\n): void => {\n for (const plugin of plugins) {\n const extension = plugin({ store, options });\n if (extension) {\n Object.assign(store, extension);\n }\n }\n};\n","/**\n * Store registry utilities.\n */\n\nimport { unregisterDevtoolsStore } from './devtools';\nimport type { Store } from './types';\n\n/** @internal Registry of all stores for devtools */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst storeRegistry = new Map<string, Store<any, any, any>>();\n\n/** @internal */\nexport const hasStore = (id: string): boolean => storeRegistry.has(id);\n\n/** @internal */\nexport const registerStore = (\n id: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n store: Store<any, any, any>\n): void => {\n storeRegistry.set(id, store);\n};\n\n/**\n * Retrieves an existing store by its ID.\n *\n * @param id - The store identifier\n * @returns The store instance or undefined if not found\n */\nexport const getStore = <T = unknown>(id: string): T | undefined => {\n return storeRegistry.get(id) as T | undefined;\n};\n\n/**\n * Lists all registered store IDs.\n *\n * @returns Array of store IDs\n */\nexport const listStores = (): string[] => {\n return Array.from(storeRegistry.keys());\n};\n\n/**\n * Removes a store from the registry.\n *\n * @param id - The store identifier\n */\nexport const destroyStore = (id: string): void => {\n storeRegistry.delete(id);\n unregisterDevtoolsStore(id);\n};\n","/**\n * Internal utilities for the store module.\n * @internal\n */\n\n/**\n * Check if a value is a plain object (not array, null, Date, etc.).\n * @internal\n */\nexport const isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return (\n value !== null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype\n );\n};\n\n/**\n * Deep clones an object. Used for deep reactivity support.\n * @internal\n */\nexport const deepClone = <T>(obj: T): T => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(deepClone) as T;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as T;\n }\n\n if (obj instanceof Map) {\n return new Map(Array.from(obj.entries()).map(([k, v]) => [k, deepClone(v)])) as T;\n }\n\n if (obj instanceof Set) {\n return new Set(Array.from(obj).map(deepClone)) as T;\n }\n\n const cloned = {} as T;\n for (const key of Object.keys(obj)) {\n (cloned as Record<string, unknown>)[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return cloned;\n};\n\n/**\n * Compares two values for deep equality.\n * @internal\n */\nexport const deepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !deepEqual(value, b.get(key))) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a.values()) {\n let found = false;\n for (const candidate of b.values()) {\n if (deepEqual(value, candidate)) {\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, i) => deepEqual(item, b[i]));\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) return false;\n\n return keysA.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n};\n\n/**\n * Detects if nested objects were mutated but the reference stayed the same.\n * Returns the keys where nested mutations were detected.\n * @internal\n */\nexport const detectNestedMutations = <S extends Record<string, unknown>>(\n before: S,\n after: S,\n signalValues: Map<keyof S, unknown>\n): Array<keyof S> => {\n const mutatedKeys: Array<keyof S> = [];\n\n for (const key of Object.keys(after) as Array<keyof S>) {\n const beforeValue = before[key];\n const afterValue = after[key];\n const signalValue = signalValues.get(key);\n\n // Check if it's the same reference but content changed\n if (\n signalValue === afterValue &&\n isPlainObject(beforeValue) &&\n isPlainObject(afterValue) &&\n !deepEqual(beforeValue, afterValue)\n ) {\n mutatedKeys.push(key);\n }\n }\n\n return mutatedKeys;\n};\n\n/** @internal Flag to enable/disable development warnings */\nexport const isDev = (() => {\n try {\n const globalProcess = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process;\n // Default to dev mode unless explicitly set to production\n return !(typeof globalProcess !== 'undefined' && globalProcess.env?.NODE_ENV === 'production');\n } catch {\n return true;\n }\n})();\n","/**\n * Store creation logic.\n */\n\nimport {\n batch,\n computed,\n signal,\n untrack,\n type ReadonlySignal,\n type Signal,\n} from '../reactive/index';\nimport { notifyDevtoolsStateChange, registerDevtoolsStore } from './devtools';\nimport { applyPlugins } from './plugins';\nimport { getStore, hasStore, registerStore } from './registry';\nimport type { Getters, Store, StoreDefinition, StoreSubscriber } from './types';\nimport { deepClone, detectNestedMutations, isDev } from './utils';\n\n/**\n * Creates a reactive store with state, getters, and actions.\n *\n * @template S - State type\n * @template G - Getters type\n * @template A - Actions type\n * @param definition - Store definition\n * @returns The reactive store instance\n */\nexport const createStore = <\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = Record<string, never>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n A extends Record<string, (...args: any[]) => any> = Record<string, never>,\n>(\n definition: StoreDefinition<S, G, A>\n): Store<S, G, A> => {\n const { id, state: stateFactory, getters = {} as Getters<S, G>, actions = {} as A } = definition;\n\n // Check for duplicate store IDs\n if (hasStore(id)) {\n console.warn(`bQuery store: Store \"${id}\" already exists. Returning existing instance.`);\n return getStore(id) as Store<S, G, A>;\n }\n\n // Create initial state\n const initialState = stateFactory();\n\n // Create signals for each state property\n const stateSignals = new Map<keyof S, Signal<unknown>>();\n for (const key of Object.keys(initialState) as Array<keyof S>) {\n stateSignals.set(key, signal(initialState[key]));\n }\n\n // Subscribers for $subscribe\n const subscribers: Array<StoreSubscriber<S>> = [];\n\n /**\n * Gets the current state.\n *\n * For subscriber notifications (where a plain object snapshot is needed),\n * this creates a shallow copy. For internal reads, use stateProxy directly.\n *\n * **Note:** Returns a shallow snapshot. Nested object mutations will NOT\n * trigger reactive updates. This differs from frameworks like Pinia that\n * use deep reactivity. To update nested state, replace the entire object.\n *\n * Uses `untrack()` to prevent accidental dependency tracking when called\n * from within reactive contexts (e.g., `effect()` or `computed()`).\n *\n * @internal\n */\n const getCurrentState = (): S =>\n untrack(() => {\n return { ...stateProxy };\n });\n\n /**\n * Notifies subscribers of state changes.\n * Short-circuits if there are no subscribers and devtools aren't active\n * to avoid unnecessary snapshot overhead.\n * @internal\n */\n const notifySubscribers = (): void => {\n // Early return if no subscribers and no devtools hook\n const hasDevtools =\n typeof window !== 'undefined' &&\n typeof window.__BQUERY_DEVTOOLS__?.onStateChange === 'function';\n if (subscribers.length === 0 && !hasDevtools) {\n return;\n }\n\n const currentState = getCurrentState();\n for (const callback of subscribers) {\n callback(currentState);\n }\n\n notifyDevtoolsStateChange(id, currentState);\n };\n\n /**\n * Cached state proxy that lazily reads signal values.\n * Uses a Proxy to avoid creating new objects on each access.\n *\n * **Note:** This returns a shallow snapshot of the state. Nested object\n * mutations will NOT trigger reactive updates. For nested reactivity,\n * replace the entire object or use signals for nested properties.\n *\n * @internal\n */\n const stateProxy = new Proxy({} as S, {\n get: (_, prop: string | symbol) => {\n const key = prop as keyof S;\n if (stateSignals.has(key)) {\n return stateSignals.get(key)!.value;\n }\n return undefined;\n },\n ownKeys: () => Array.from(stateSignals.keys()) as string[],\n getOwnPropertyDescriptor: (_, prop) => {\n if (stateSignals.has(prop as keyof S)) {\n return { enumerable: true, configurable: true };\n }\n return undefined;\n },\n has: (_, prop) => stateSignals.has(prop as keyof S),\n });\n\n // Create computed getters\n const getterComputed = new Map<keyof G, ReadonlySignal<unknown>>();\n\n // Build the store proxy\n const store = {} as Store<S, G, A>;\n\n // Define state properties with getters/setters\n for (const key of Object.keys(initialState) as Array<keyof S>) {\n Object.defineProperty(store, key, {\n get: () => stateSignals.get(key)!.value,\n set: (value: unknown) => {\n stateSignals.get(key)!.value = value;\n notifySubscribers();\n },\n enumerable: true,\n configurable: false,\n });\n }\n\n // Define getters as computed properties\n for (const key of Object.keys(getters) as Array<keyof G>) {\n const getterFn = getters[key];\n\n // Create computed that reads from state signals via proxy (more efficient)\n const computedGetter = computed(() => {\n const state = stateProxy;\n // For getter dependencies, pass a proxy that reads from computed getters\n const getterProxy = new Proxy({} as G, {\n get: (_, prop: string | symbol) => {\n const propKey = prop as keyof G;\n if (getterComputed.has(propKey)) {\n return getterComputed.get(propKey)!.value;\n }\n return undefined;\n },\n });\n return getterFn(state, getterProxy);\n });\n\n getterComputed.set(key, computedGetter as unknown as ReadonlySignal<unknown>);\n\n Object.defineProperty(store, key, {\n get: () => computedGetter.value,\n enumerable: true,\n configurable: false,\n });\n }\n\n // Bind actions to the store context\n for (const key of Object.keys(actions) as Array<keyof A>) {\n const actionFn = actions[key];\n\n // Wrap action to enable 'this' binding\n (store as Record<string, unknown>)[key as string] = function (...args: unknown[]) {\n // Create a context that allows 'this.property' access\n const context = new Proxy(store, {\n get: (target, prop) => {\n if (typeof prop === 'string' && stateSignals.has(prop as keyof S)) {\n return stateSignals.get(prop as keyof S)!.value;\n }\n return (target as Record<string, unknown>)[prop as string];\n },\n set: (target, prop, value) => {\n if (typeof prop === 'string' && stateSignals.has(prop as keyof S)) {\n stateSignals.get(prop as keyof S)!.value = value;\n notifySubscribers();\n return true;\n }\n // Allow non-state property assignments (e.g., temporary variables in actions)\n // by delegating to the target object rather than returning false\n return Reflect.set(target, prop, value);\n },\n });\n\n return actionFn.apply(context, args);\n };\n }\n\n // Add store utility methods\n Object.defineProperties(store, {\n $id: {\n value: id,\n writable: false,\n enumerable: false,\n },\n $reset: {\n value: () => {\n const fresh = stateFactory();\n batch(() => {\n for (const [key, sig] of stateSignals) {\n sig.value = fresh[key];\n }\n });\n notifySubscribers();\n },\n writable: false,\n enumerable: false,\n },\n $subscribe: {\n value: (callback: StoreSubscriber<S>) => {\n subscribers.push(callback);\n return () => {\n const index = subscribers.indexOf(callback);\n if (index > -1) subscribers.splice(index, 1);\n };\n },\n writable: false,\n enumerable: false,\n },\n $patch: {\n value: (partial: Partial<S> | ((state: S) => void)) => {\n batch(() => {\n if (typeof partial === 'function') {\n // Capture state before mutation for nested mutation detection\n const stateBefore = isDev ? deepClone(getCurrentState()) : null;\n const signalValuesBefore = isDev\n ? new Map(Array.from(stateSignals.entries()).map(([k, s]) => [k, s.value]))\n : null;\n\n // Mutation function\n const state = getCurrentState();\n partial(state);\n\n // Detect nested mutations in development mode\n if (isDev && stateBefore && signalValuesBefore) {\n const mutatedKeys = detectNestedMutations(stateBefore, state, signalValuesBefore);\n if (mutatedKeys.length > 0) {\n console.warn(\n `[bQuery store \"${id}\"] Nested mutation detected in $patch() for keys: ${mutatedKeys\n .map(String)\n .join(', ')}.\\n` +\n 'Nested object mutations do not trigger reactive updates because the store uses shallow reactivity.\\n' +\n 'To fix this, either:\\n' +\n ' 1. Replace the entire object: state.user = { ...state.user, name: \"New\" }\\n' +\n ' 2. Use $patchDeep() for automatic deep cloning\\n' +\n 'See: https://bquery.dev/guide/store#deep-reactivity'\n );\n }\n }\n\n for (const [key, value] of Object.entries(state) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = value;\n }\n }\n } else {\n // Partial object\n for (const [key, value] of Object.entries(partial) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = value;\n }\n }\n }\n });\n notifySubscribers();\n },\n writable: false,\n enumerable: false,\n },\n $patchDeep: {\n value: (partial: Partial<S> | ((state: S) => void)) => {\n batch(() => {\n if (typeof partial === 'function') {\n // Deep clone state before mutation to ensure new references\n const state = deepClone(getCurrentState());\n partial(state);\n\n for (const [key, value] of Object.entries(state) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = value;\n }\n }\n } else {\n // Deep clone each value in partial to ensure new references\n for (const [key, value] of Object.entries(partial) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = deepClone(value);\n }\n }\n }\n });\n notifySubscribers();\n },\n writable: false,\n enumerable: false,\n },\n $state: {\n get: () => getCurrentState(),\n enumerable: false,\n },\n });\n\n // Register store\n registerStore(id, store);\n\n // Apply plugins\n applyPlugins(store, definition);\n\n // Notify devtools\n registerDevtoolsStore(id, store);\n\n return store;\n};\n","/**\n * Store factory helpers.\n */\n\nimport { createStore } from './create-store';\nimport { getStore, hasStore } from './registry';\nimport type { Store, StoreDefinition } from './types';\n\n/**\n * Creates a store factory that returns the store instance.\n *\n * The store is lazily created on first call and cached in the global store\n * registry. Subsequent calls return the same instance. After calling\n * `destroyStore(id)`, the next factory call will create a fresh store.\n *\n * @param id - Store identifier\n * @param definition - Store definition without id\n * @returns A function that returns the store instance\n *\n * @example\n * ```ts\n * const useCounter = defineStore('counter', {\n * state: () => ({ count: 0 }),\n * actions: { increment() { this.count++; } },\n * });\n *\n * const counter = useCounter();\n * counter.increment();\n * ```\n */\nexport const defineStore = <\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = Record<string, never>,\n A extends Record<string, (...args: unknown[]) => unknown> = Record<string, never>,\n>(\n id: string,\n definition: Omit<StoreDefinition<S, G, A>, 'id'>\n): (() => Store<S, G, A>) => {\n // Check registry first to avoid noisy warnings from createStore()\n // when the factory is called multiple times (intended usage pattern).\n // createStore() only called when store doesn't exist or was destroyed.\n return () => {\n if (hasStore(id)) {\n return getStore(id) as Store<S, G, A>;\n }\n return createStore({ id, ...definition });\n };\n};\n","/**\n * Mapping helpers for store state and actions.\n */\n\n/**\n * Maps store state properties to a reactive object for use in components.\n *\n * @param store - The store instance\n * @param keys - State keys to map\n * @returns Object with mapped properties\n */\nexport const mapState = <S extends Record<string, unknown>, K extends keyof S>(\n store: S,\n keys: K[]\n): Pick<S, K> => {\n const mapped = {} as Pick<S, K>;\n\n for (const key of keys) {\n Object.defineProperty(mapped, key, {\n get: () => store[key],\n enumerable: true,\n });\n }\n\n return mapped;\n};\n\n/**\n * Maps store getters to a reactive object for use in components.\n *\n * @param store - The store instance\n * @param keys - Getter keys to map\n * @returns Object with mapped getters\n */\nexport const mapGetters = <G extends Record<string, unknown>, K extends keyof G>(\n store: G,\n keys: K[]\n): Pick<G, K> => {\n const mapped = {} as Pick<G, K>;\n\n for (const key of keys) {\n Object.defineProperty(mapped, key, {\n get: () => store[key],\n enumerable: true,\n });\n }\n\n return mapped;\n};\n\n/**\n * Maps store actions to an object for easier destructuring.\n *\n * @param store - The store instance\n * @param keys - Action keys to map\n * @returns Object with mapped actions\n */\nexport const mapActions = <\n A extends Record<string, (...args: unknown[]) => unknown>,\n K extends keyof A,\n>(\n store: A,\n keys: K[]\n): Pick<A, K> => {\n const mapped = {} as Pick<A, K>;\n\n for (const key of keys) {\n (mapped as Record<string, unknown>)[key as string] = (...args: unknown[]) =>\n (store[key] as (...args: unknown[]) => unknown)(...args);\n }\n\n return mapped;\n};\n","/**\n * Store persistence helpers.\n */\n\nimport { createStore } from './create-store';\nimport type { Store, StoreDefinition } from './types';\n\n/**\n * Creates a store with automatic persistence to localStorage.\n *\n * @param definition - Store definition\n * @param storageKey - Optional custom storage key\n * @returns The reactive store instance\n */\nexport const createPersistedStore = <\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = Record<string, never>,\n A extends Record<string, (...args: unknown[]) => unknown> = Record<string, never>,\n>(\n definition: StoreDefinition<S, G, A>,\n storageKey?: string\n): Store<S, G, A> => {\n const key = storageKey ?? `bquery-store-${definition.id}`;\n\n const originalStateFactory = definition.state;\n\n const wrappedDefinition: StoreDefinition<S, G, A> = {\n ...definition,\n state: () => {\n const defaultState = originalStateFactory();\n\n if (typeof window !== 'undefined') {\n try {\n const saved = localStorage.getItem(key);\n if (saved) {\n return { ...defaultState, ...JSON.parse(saved) } as S;\n }\n } catch {\n // Ignore parse errors\n }\n }\n\n return defaultState;\n },\n };\n\n const store = createStore(wrappedDefinition);\n\n // Subscribe to save changes\n store.$subscribe((state) => {\n if (typeof window !== 'undefined') {\n try {\n localStorage.setItem(key, JSON.stringify(state));\n } catch {\n // Ignore quota errors\n }\n }\n });\n\n return store;\n};\n","/**\n * Store watch helpers.\n */\n\nimport type { Store } from './types';\nimport { deepEqual } from './utils';\n\nexport type WatchStoreOptions<T> = {\n /** Call the callback immediately with the current value. */\n immediate?: boolean;\n /** Use deep comparison when determining changes. */\n deep?: boolean;\n /** Custom equality check for selected values. */\n equals?: (a: T, b: T) => boolean;\n};\n\n/**\n * Watch a selected slice of store state.\n *\n * @param store - The store instance\n * @param selector - Function to select the watched value\n * @param callback - Called when the selected value changes\n * @param options - Watch options\n * @returns Unsubscribe function\n */\nexport const watchStore = <\n S extends Record<string, unknown>,\n G extends Record<string, unknown>,\n A extends Record<string, (...args: unknown[]) => unknown>,\n T,\n>(\n store: Store<S, G, A>,\n selector: (state: S) => T,\n callback: (value: T, previous: T | undefined) => void,\n options: WatchStoreOptions<T> = {}\n): (() => void) => {\n const equals = options.equals ?? (options.deep ? deepEqual : Object.is);\n let previous = selector(store.$state);\n\n if (options.immediate) {\n callback(previous, undefined);\n }\n\n return store.$subscribe((state) => {\n const current = selector(state);\n if (!equals(current, previous)) {\n const prev = previous;\n previous = current;\n callback(current, prev);\n }\n });\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"store-BwDvI45q.js","names":[],"sources":["../src/store/devtools.ts","../src/store/plugins.ts","../src/store/registry.ts","../src/store/utils.ts","../src/store/create-store.ts","../src/store/define-store.ts","../src/store/mapping.ts","../src/store/persisted.ts","../src/store/watch.ts"],"sourcesContent":["/**\n * Devtools integration for stores.\n * @internal\n */\n\ndeclare global {\n interface Window {\n __BQUERY_DEVTOOLS__?: {\n stores: Map<string, unknown>;\n onStoreCreated?: (id: string, store: unknown) => void;\n onStateChange?: (id: string, state: unknown) => void;\n };\n }\n}\n\nexport type DevtoolsHook = {\n stores: Map<string, unknown>;\n onStoreCreated?: (id: string, store: unknown) => void;\n onStateChange?: (id: string, state: unknown) => void;\n};\n\nconst ensureDevtools = (): DevtoolsHook | undefined => {\n if (typeof window === 'undefined') return undefined;\n if (!window.__BQUERY_DEVTOOLS__) {\n window.__BQUERY_DEVTOOLS__ = { stores: new Map() };\n }\n return window.__BQUERY_DEVTOOLS__;\n};\n\nexport const registerDevtoolsStore = (id: string, store: unknown): void => {\n const devtools = ensureDevtools();\n if (!devtools) return;\n devtools.stores.set(id, store);\n devtools.onStoreCreated?.(id, store);\n};\n\nexport const unregisterDevtoolsStore = (id: string): void => {\n if (typeof window === 'undefined' || !window.__BQUERY_DEVTOOLS__) return;\n window.__BQUERY_DEVTOOLS__.stores.delete(id);\n};\n\nexport const notifyDevtoolsStateChange = (id: string, state: unknown): void => {\n if (typeof window === 'undefined') return;\n window.__BQUERY_DEVTOOLS__?.onStateChange?.(id, state);\n};\n","/**\n * Store plugins API.\n */\n\nimport type { Store, StoreDefinition, StorePlugin } from './types';\n\n/** @internal Registered plugins */\nconst plugins: StorePlugin[] = [];\n\n/**\n * Registers a plugin that extends all stores.\n *\n * @param plugin - The plugin function\n */\nexport const registerPlugin = (plugin: StorePlugin): void => {\n plugins.push(plugin);\n};\n\n/** @internal */\nexport const applyPlugins = (\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n store: Store<any, any, any>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n options: StoreDefinition<any, any, any>\n): void => {\n for (const plugin of plugins) {\n const extension = plugin({ store, options });\n if (extension) {\n Object.assign(store, extension);\n }\n }\n};\n","/**\n * Store registry utilities.\n */\n\nimport { unregisterDevtoolsStore } from './devtools';\nimport type { Store } from './types';\n\n/** @internal Registry of all stores for devtools */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst storeRegistry = new Map<string, Store<any, any, any>>();\n\n/** @internal */\nexport const hasStore = (id: string): boolean => storeRegistry.has(id);\n\n/** @internal */\nexport const registerStore = (\n id: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n store: Store<any, any, any>\n): void => {\n storeRegistry.set(id, store);\n};\n\n/**\n * Retrieves an existing store by its ID.\n *\n * @param id - The store identifier\n * @returns The store instance or undefined if not found\n */\nexport const getStore = <T = unknown>(id: string): T | undefined => {\n return storeRegistry.get(id) as T | undefined;\n};\n\n/**\n * Lists all registered store IDs.\n *\n * @returns Array of store IDs\n */\nexport const listStores = (): string[] => {\n return Array.from(storeRegistry.keys());\n};\n\n/**\n * Removes a store from the registry.\n *\n * @param id - The store identifier\n */\nexport const destroyStore = (id: string): void => {\n storeRegistry.delete(id);\n unregisterDevtoolsStore(id);\n};\n","/**\n * Internal utilities for the store module.\n * @internal\n */\n\n/**\n * Check if a value is a plain object (not array, null, Date, etc.).\n * @internal\n */\nexport const isPlainObject = (value: unknown): value is Record<string, unknown> => {\n return (\n value !== null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype\n );\n};\n\n/**\n * Deep clones an object. Used for deep reactivity support.\n * @internal\n */\nexport const deepClone = <T>(obj: T): T => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n if (Array.isArray(obj)) {\n return obj.map(deepClone) as T;\n }\n\n if (obj instanceof Date) {\n return new Date(obj.getTime()) as T;\n }\n\n if (obj instanceof Map) {\n return new Map(Array.from(obj.entries()).map(([k, v]) => [k, deepClone(v)])) as T;\n }\n\n if (obj instanceof Set) {\n return new Set(Array.from(obj).map(deepClone)) as T;\n }\n\n const cloned = {} as T;\n for (const key of Object.keys(obj)) {\n (cloned as Record<string, unknown>)[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return cloned;\n};\n\n/**\n * Compares two values for deep equality.\n * @internal\n */\nexport const deepEqual = (a: unknown, b: unknown): boolean => {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== 'object' || typeof b !== 'object') return false;\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !deepEqual(value, b.get(key))) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a.values()) {\n let found = false;\n for (const candidate of b.values()) {\n if (deepEqual(value, candidate)) {\n found = true;\n break;\n }\n }\n if (!found) return false;\n }\n return true;\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((item, i) => deepEqual(item, b[i]));\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n const keysA = Object.keys(a as object);\n const keysB = Object.keys(b as object);\n\n if (keysA.length !== keysB.length) return false;\n\n return keysA.every((key) =>\n deepEqual((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key])\n );\n};\n\n/**\n * Detects if nested objects were mutated but the reference stayed the same.\n * Returns the keys where nested mutations were detected.\n * @internal\n */\nexport const detectNestedMutations = <S extends Record<string, unknown>>(\n before: S,\n after: S,\n signalValues: Map<keyof S, unknown>\n): Array<keyof S> => {\n const mutatedKeys: Array<keyof S> = [];\n\n for (const key of Object.keys(after) as Array<keyof S>) {\n const beforeValue = before[key];\n const afterValue = after[key];\n const signalValue = signalValues.get(key);\n\n // Check if it's the same reference but content changed\n if (\n signalValue === afterValue &&\n isPlainObject(beforeValue) &&\n isPlainObject(afterValue) &&\n !deepEqual(beforeValue, afterValue)\n ) {\n mutatedKeys.push(key);\n }\n }\n\n return mutatedKeys;\n};\n\n/** @internal Flag to enable/disable development warnings */\nexport const isDev = (() => {\n try {\n const globalProcess = (globalThis as { process?: { env?: { NODE_ENV?: string } } }).process;\n // Default to dev mode unless explicitly set to production\n return !(typeof globalProcess !== 'undefined' && globalProcess.env?.NODE_ENV === 'production');\n } catch {\n return true;\n }\n})();\n","/**\n * Store creation logic.\n */\n\nimport {\n batch,\n computed,\n signal,\n untrack,\n type ReadonlySignal,\n type Signal,\n} from '../reactive/index';\nimport { notifyDevtoolsStateChange, registerDevtoolsStore } from './devtools';\nimport { applyPlugins } from './plugins';\nimport { getStore, hasStore, registerStore } from './registry';\nimport type { Getters, Store, StoreDefinition, StoreSubscriber } from './types';\nimport { deepClone, detectNestedMutations, isDev } from './utils';\n\n/**\n * Creates a reactive store with state, getters, and actions.\n *\n * @template S - State type\n * @template G - Getters type\n * @template A - Actions type\n * @param definition - Store definition\n * @returns The reactive store instance\n */\nexport const createStore = <\n S extends Record<string, unknown>,\n G extends Record<string, unknown> = Record<string, never>,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n A extends Record<string, (...args: any[]) => any> = Record<string, never>,\n>(\n definition: StoreDefinition<S, G, A>\n): Store<S, G, A> => {\n const { id, state: stateFactory, getters = {} as Getters<S, G>, actions = {} as A } = definition;\n\n // Check for duplicate store IDs\n if (hasStore(id)) {\n console.warn(`bQuery store: Store \"${id}\" already exists. Returning existing instance.`);\n return getStore(id) as Store<S, G, A>;\n }\n\n // Create initial state\n const initialState = stateFactory();\n\n // Create signals for each state property\n const stateSignals = new Map<keyof S, Signal<unknown>>();\n for (const key of Object.keys(initialState) as Array<keyof S>) {\n stateSignals.set(key, signal(initialState[key]));\n }\n\n // Subscribers for $subscribe\n const subscribers: Array<StoreSubscriber<S>> = [];\n\n /**\n * Gets the current state.\n *\n * For subscriber notifications (where a plain object snapshot is needed),\n * this creates a shallow copy. For internal reads, use stateProxy directly.\n *\n * **Note:** Returns a shallow snapshot. Nested object mutations will NOT\n * trigger reactive updates. This differs from frameworks like Pinia that\n * use deep reactivity. To update nested state, replace the entire object.\n *\n * Uses `untrack()` to prevent accidental dependency tracking when called\n * from within reactive contexts (e.g., `effect()` or `computed()`).\n *\n * @internal\n */\n const getCurrentState = (): S =>\n untrack(() => {\n return { ...stateProxy };\n });\n\n /**\n * Notifies subscribers of state changes.\n * Short-circuits if there are no subscribers and devtools aren't active\n * to avoid unnecessary snapshot overhead.\n * @internal\n */\n const notifySubscribers = (): void => {\n // Early return if no subscribers and no devtools hook\n const hasDevtools =\n typeof window !== 'undefined' &&\n typeof window.__BQUERY_DEVTOOLS__?.onStateChange === 'function';\n if (subscribers.length === 0 && !hasDevtools) {\n return;\n }\n\n const currentState = getCurrentState();\n for (const callback of subscribers) {\n callback(currentState);\n }\n\n notifyDevtoolsStateChange(id, currentState);\n };\n\n /**\n * Cached state proxy that lazily reads signal values.\n * Uses a Proxy to avoid creating new objects on each access.\n *\n * **Note:** This returns a shallow snapshot of the state. Nested object\n * mutations will NOT trigger reactive updates. For nested reactivity,\n * replace the entire object or use signals for nested properties.\n *\n * @internal\n */\n const stateProxy = new Proxy({} as S, {\n get: (_, prop: string | symbol) => {\n const key = prop as keyof S;\n if (stateSignals.has(key)) {\n return stateSignals.get(key)!.value;\n }\n return undefined;\n },\n ownKeys: () => Array.from(stateSignals.keys()) as string[],\n getOwnPropertyDescriptor: (_, prop) => {\n if (stateSignals.has(prop as keyof S)) {\n return { enumerable: true, configurable: true };\n }\n return undefined;\n },\n has: (_, prop) => stateSignals.has(prop as keyof S),\n });\n\n // Create computed getters\n const getterComputed = new Map<keyof G, ReadonlySignal<unknown>>();\n\n // Build the store proxy\n const store = {} as Store<S, G, A>;\n\n // Define state properties with getters/setters\n for (const key of Object.keys(initialState) as Array<keyof S>) {\n Object.defineProperty(store, key, {\n get: () => stateSignals.get(key)!.value,\n set: (value: unknown) => {\n stateSignals.get(key)!.value = value;\n notifySubscribers();\n },\n enumerable: true,\n configurable: false,\n });\n }\n\n // Define getters as computed properties\n for (const key of Object.keys(getters) as Array<keyof G>) {\n const getterFn = getters[key];\n\n // Create computed that reads from state signals via proxy (more efficient)\n const computedGetter = computed(() => {\n const state = stateProxy;\n // For getter dependencies, pass a proxy that reads from computed getters\n const getterProxy = new Proxy({} as G, {\n get: (_, prop: string | symbol) => {\n const propKey = prop as keyof G;\n if (getterComputed.has(propKey)) {\n return getterComputed.get(propKey)!.value;\n }\n return undefined;\n },\n });\n return getterFn(state, getterProxy);\n });\n\n getterComputed.set(key, computedGetter as unknown as ReadonlySignal<unknown>);\n\n Object.defineProperty(store, key, {\n get: () => computedGetter.value,\n enumerable: true,\n configurable: false,\n });\n }\n\n // Bind actions to the store context\n for (const key of Object.keys(actions) as Array<keyof A>) {\n const actionFn = actions[key];\n\n // Wrap action to enable 'this' binding\n (store as Record<string, unknown>)[key as string] = function (...args: unknown[]) {\n // Create a context that allows 'this.property' access\n const context = new Proxy(store, {\n get: (target, prop) => {\n if (typeof prop === 'string' && stateSignals.has(prop as keyof S)) {\n return stateSignals.get(prop as keyof S)!.value;\n }\n return (target as Record<string, unknown>)[prop as string];\n },\n set: (target, prop, value) => {\n if (typeof prop === 'string' && stateSignals.has(prop as keyof S)) {\n stateSignals.get(prop as keyof S)!.value = value;\n notifySubscribers();\n return true;\n }\n // Allow non-state property assignments (e.g., temporary variables in actions)\n // by delegating to the target object rather than returning false\n return Reflect.set(target, prop, value);\n },\n });\n\n return actionFn.apply(context, args);\n };\n }\n\n // Add store utility methods\n Object.defineProperties(store, {\n $id: {\n value: id,\n writable: false,\n enumerable: false,\n },\n $reset: {\n value: () => {\n const fresh = stateFactory();\n batch(() => {\n for (const [key, sig] of stateSignals) {\n sig.value = fresh[key];\n }\n });\n notifySubscribers();\n },\n writable: false,\n enumerable: false,\n },\n $subscribe: {\n value: (callback: StoreSubscriber<S>) => {\n subscribers.push(callback);\n return () => {\n const index = subscribers.indexOf(callback);\n if (index > -1) subscribers.splice(index, 1);\n };\n },\n writable: false,\n enumerable: false,\n },\n $patch: {\n value: (partial: Partial<S> | ((state: S) => void)) => {\n batch(() => {\n if (typeof partial === 'function') {\n // Capture state before mutation for nested mutation detection\n const stateBefore = isDev ? deepClone(getCurrentState()) : null;\n const signalValuesBefore = isDev\n ? new Map(Array.from(stateSignals.entries()).map(([k, s]) => [k, s.value]))\n : null;\n\n // Mutation function\n const state = getCurrentState();\n partial(state);\n\n // Detect nested mutations in development mode\n if (isDev && stateBefore && signalValuesBefore) {\n const mutatedKeys = detectNestedMutations(stateBefore, state, signalValuesBefore);\n if (mutatedKeys.length > 0) {\n console.warn(\n `[bQuery store \"${id}\"] Nested mutation detected in $patch() for keys: ${mutatedKeys\n .map(String)\n .join(', ')}.\\n` +\n 'Nested object mutations do not trigger reactive updates because the store uses shallow reactivity.\\n' +\n 'To fix this, either:\\n' +\n ' 1. Replace the entire object: state.user = { ...state.user, name: \"New\" }\\n' +\n ' 2. Use $patchDeep() for automatic deep cloning\\n' +\n 'See: https://bquery.dev/guide/store#deep-reactivity'\n );\n }\n }\n\n for (const [key, value] of Object.entries(state) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = value;\n }\n }\n } else {\n // Partial object\n for (const [key, value] of Object.entries(partial) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = value;\n }\n }\n }\n });\n notifySubscribers();\n },\n writable: false,\n enumerable: false,\n },\n $patchDeep: {\n value: (partial: Partial<S> | ((state: S) => void)) => {\n batch(() => {\n if (typeof partial === 'function') {\n // Deep clone state before mutation to ensure new references\n const state = deepClone(getCurrentState());\n partial(state);\n\n for (const [key, value] of Object.entries(state) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = value;\n }\n }\n } else {\n // Deep clone each value in partial to ensure new references\n for (const [key, value] of Object.entries(partial) as Array<[keyof S, unknown]>) {\n if (stateSignals.has(key)) {\n stateSignals.get(key)!.value = deepClone(value);\n }\n }\n }\n });\n notifySubscribers();\n },\n writable: false,\n enumerable: false,\n },\n $state: {\n get: () => getCurrentState(),\n enumerable: false,\n },\n });\n\n // Register store\n registerStore(id, store);\n\n // Apply plugins\n applyPlugins(store, definition);\n\n // Notify devtools\n registerDevtoolsStore(id, store);\n\n return store;\n};\n","/**\r\n * Store factory helpers.\r\n */\r\n\r\nimport { createStore } from './create-store';\r\nimport { getStore, hasStore } from './registry';\r\nimport type { Store, StoreDefinition } from './types';\r\n\r\n/**\r\n * Creates a store factory that returns the store instance.\r\n *\r\n * The store is lazily created on first call and cached in the global store\r\n * registry. Subsequent calls return the same instance. After calling\r\n * `destroyStore(id)`, the next factory call will create a fresh store.\r\n *\r\n * @param id - Store identifier\r\n * @param definition - Store definition without id\r\n * @returns A function that returns the store instance\r\n *\r\n * @example\r\n * ```ts\r\n * const useCounter = defineStore('counter', {\r\n * state: () => ({ count: 0 }),\r\n * actions: { increment() { this.count++; } },\r\n * });\r\n *\r\n * const counter = useCounter();\r\n * counter.increment();\r\n * ```\r\n */\r\nexport const defineStore = <\r\n S extends Record<string, unknown>,\r\n G extends Record<string, unknown> = Record<string, never>,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- actions may declare specific parameter types\r\n A extends Record<string, (...args: any[]) => any> = Record<string, never>,\r\n>(\r\n id: string,\r\n definition: Omit<StoreDefinition<S, G, A>, 'id'>\r\n): (() => Store<S, G, A>) => {\r\n // Check registry first to avoid noisy warnings from createStore()\r\n // when the factory is called multiple times (intended usage pattern).\r\n // createStore() only called when store doesn't exist or was destroyed.\r\n return () => {\r\n if (hasStore(id)) {\r\n return getStore(id) as Store<S, G, A>;\r\n }\r\n return createStore({ id, ...definition });\r\n };\r\n};\r\n","/**\r\n * Mapping helpers for store state and actions.\r\n */\r\n\r\n/**\r\n * Maps store state properties to a reactive object for use in components.\r\n *\r\n * @param store - The store instance\r\n * @param keys - State keys to map\r\n * @returns Object with mapped properties\r\n */\r\nexport const mapState = <S extends Record<string, unknown>, K extends keyof S>(\r\n store: S,\r\n keys: K[]\r\n): Pick<S, K> => {\r\n const mapped = {} as Pick<S, K>;\r\n\r\n for (const key of keys) {\r\n Object.defineProperty(mapped, key, {\r\n get: () => store[key],\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return mapped;\r\n};\r\n\r\n/**\r\n * Maps store getters to a reactive object for use in components.\r\n *\r\n * @param store - The store instance\r\n * @param keys - Getter keys to map\r\n * @returns Object with mapped getters\r\n */\r\nexport const mapGetters = <G extends Record<string, unknown>, K extends keyof G>(\r\n store: G,\r\n keys: K[]\r\n): Pick<G, K> => {\r\n const mapped = {} as Pick<G, K>;\r\n\r\n for (const key of keys) {\r\n Object.defineProperty(mapped, key, {\r\n get: () => store[key],\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return mapped;\r\n};\r\n\r\n/**\r\n * Maps store actions to an object for easier destructuring.\r\n *\r\n * @param store - The store instance\r\n * @param keys - Action keys to map\r\n * @returns Object with mapped actions\r\n */\r\nexport const mapActions = <\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- actions may declare specific parameter types\r\n A extends Record<string, (...args: any[]) => any>,\r\n K extends keyof A,\r\n>(\r\n store: A,\r\n keys: K[]\r\n): Pick<A, K> => {\r\n const mapped = {} as Pick<A, K>;\r\n\r\n for (const key of keys) {\r\n (mapped as Record<string, unknown>)[key as string] = (...args: unknown[]) =>\r\n (store[key] as (...args: unknown[]) => unknown)(...args);\r\n }\r\n\r\n return mapped;\r\n};\r\n","/**\r\n * Store persistence helpers.\r\n */\r\n\r\nimport { createStore } from './create-store';\r\nimport type { Store, StoreDefinition } from './types';\r\n\r\n/**\r\n * Creates a store with automatic persistence to localStorage.\r\n *\r\n * @param definition - Store definition\r\n * @param storageKey - Optional custom storage key\r\n * @returns The reactive store instance\r\n */\r\nexport const createPersistedStore = <\r\n S extends Record<string, unknown>,\r\n G extends Record<string, unknown> = Record<string, never>,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- actions may declare specific parameter types\r\n A extends Record<string, (...args: any[]) => any> = Record<string, never>,\r\n>(\r\n definition: StoreDefinition<S, G, A>,\r\n storageKey?: string\r\n): Store<S, G, A> => {\r\n const key = storageKey ?? `bquery-store-${definition.id}`;\r\n\r\n const originalStateFactory = definition.state;\r\n\r\n const wrappedDefinition: StoreDefinition<S, G, A> = {\r\n ...definition,\r\n state: () => {\r\n const defaultState = originalStateFactory();\r\n\r\n if (typeof window !== 'undefined') {\r\n try {\r\n const saved = localStorage.getItem(key);\r\n if (saved) {\r\n return { ...defaultState, ...JSON.parse(saved) } as S;\r\n }\r\n } catch {\r\n // Ignore parse errors\r\n }\r\n }\r\n\r\n return defaultState;\r\n },\r\n };\r\n\r\n const store = createStore(wrappedDefinition);\r\n\r\n // Subscribe to save changes\r\n store.$subscribe((state) => {\r\n if (typeof window !== 'undefined') {\r\n try {\r\n localStorage.setItem(key, JSON.stringify(state));\r\n } catch {\r\n // Ignore quota errors\r\n }\r\n }\r\n });\r\n\r\n return store;\r\n};\r\n","/**\r\n * Store watch helpers.\r\n */\r\n\r\nimport type { Store } from './types';\r\nimport { deepEqual } from './utils';\r\n\r\nexport type WatchStoreOptions<T> = {\r\n /** Call the callback immediately with the current value. */\r\n immediate?: boolean;\r\n /** Use deep comparison when determining changes. */\r\n deep?: boolean;\r\n /** Custom equality check for selected values. */\r\n equals?: (a: T, b: T) => boolean;\r\n};\r\n\r\n/**\r\n * Watch a selected slice of store state.\r\n *\r\n * @param store - The store instance\r\n * @param selector - Function to select the watched value\r\n * @param callback - Called when the selected value changes\r\n * @param options - Watch options\r\n * @returns Unsubscribe function\r\n */\r\nexport const watchStore = <\r\n S extends Record<string, unknown>,\r\n G extends Record<string, unknown>,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- actions may declare specific parameter types\r\n A extends Record<string, (...args: any[]) => any>,\r\n T,\r\n>(\r\n store: Store<S, G, A>,\r\n selector: (state: S) => T,\r\n callback: (value: T, previous: T | undefined) => void,\r\n options: WatchStoreOptions<T> = {}\r\n): (() => void) => {\r\n const equals = options.equals ?? (options.deep ? deepEqual : Object.is);\r\n let previous = selector(store.$state);\r\n\r\n if (options.immediate) {\r\n callback(previous, undefined);\r\n }\r\n\r\n return store.$subscribe((state) => {\r\n const current = selector(state);\r\n if (!equals(current, previous)) {\r\n const prev = previous;\r\n previous = current;\r\n callback(current, prev);\r\n }\r\n });\r\n};\r\n"],"mappings":"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"}
|
package/dist/store.es.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as t, c as s, d as a, i as r, l as o, n as i, o as S, r as c, s as m, t as p, u as d } from "./store-
|
|
1
|
+
import { a as t, c as s, d as a, i as r, l as o, n as i, o as S, r as c, s as m, t as p, u as d } from "./store-BwDvI45q.js";
|
|
2
2
|
export {
|
|
3
3
|
i as createPersistedStore,
|
|
4
4
|
m as createStore,
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storybook template helpers for authoring bQuery component stories.
|
|
3
|
+
*
|
|
4
|
+
* `storyHtml` mirrors bQuery's string-based `html` tag while adding support for
|
|
5
|
+
* Storybook-friendly boolean attribute shorthand (`?disabled=${true}`).
|
|
6
|
+
*
|
|
7
|
+
* @module bquery/storybook
|
|
8
|
+
*/
|
|
9
|
+
type StoryValue = string | number | boolean | null | undefined | StoryValue[] | (() => StoryValue);
|
|
10
|
+
/**
|
|
11
|
+
* Tagged template literal for Storybook render functions.
|
|
12
|
+
*
|
|
13
|
+
* Supports boolean attribute shorthand compatible with Storybook's string
|
|
14
|
+
* renderer:
|
|
15
|
+
*
|
|
16
|
+
* ```ts
|
|
17
|
+
* storyHtml`<bq-button ?disabled=${true}>Save</bq-button>`;
|
|
18
|
+
* // => '<bq-button disabled="">Save</bq-button>'
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @param strings - Template literal string parts
|
|
22
|
+
* @param values - Interpolated values
|
|
23
|
+
* @returns HTML string compatible with `@storybook/web-components`
|
|
24
|
+
*/
|
|
25
|
+
export declare const storyHtml: (strings: TemplateStringsArray, ...values: StoryValue[]) => string;
|
|
26
|
+
/**
|
|
27
|
+
* Conditionally render a value or template fragment.
|
|
28
|
+
*
|
|
29
|
+
* @param condition - Condition that controls rendering
|
|
30
|
+
* @param truthyValue - Value or callback rendered when the condition is truthy
|
|
31
|
+
* @param falsyValue - Optional value or callback rendered when the condition is falsy
|
|
32
|
+
* @returns Rendered string fragment, or an empty string when the condition is
|
|
33
|
+
* falsy and no fallback is provided
|
|
34
|
+
*/
|
|
35
|
+
export declare const when: (condition: unknown, truthyValue: StoryValue, falsyValue?: StoryValue) => string;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storybook/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,EAAE,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC;AA+ZnG;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,GAAI,SAAS,oBAAoB,EAAE,GAAG,QAAQ,UAAU,EAAE,KAAG,MAoBlF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,IAAI,GACf,WAAW,OAAO,EAClB,aAAa,UAAU,EACvB,aAAa,UAAU,KACtB,MAEF,CAAC"}
|