@toyz/loom 0.1.3 → 0.3.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/dist/decorators/create.d.ts +56 -0
- package/dist/decorators/create.d.ts.map +1 -0
- package/dist/decorators/create.js +72 -0
- package/dist/decorators/create.js.map +1 -0
- package/dist/decorators/events.d.ts +6 -9
- package/dist/decorators/events.d.ts.map +1 -1
- package/dist/decorators/events.js +27 -22
- package/dist/decorators/events.js.map +1 -1
- package/dist/decorators/index.d.ts +13 -13
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +20 -21
- package/dist/decorators/index.js.map +1 -1
- package/dist/{decorators/di.d.ts → di/decorators.d.ts} +10 -3
- package/dist/di/decorators.d.ts.map +1 -0
- package/dist/{decorators/di.js → di/decorators.js} +16 -10
- package/dist/di/decorators.js.map +1 -0
- package/dist/di/index.d.ts +8 -0
- package/dist/di/index.d.ts.map +1 -0
- package/dist/di/index.js +10 -0
- package/dist/di/index.js.map +1 -0
- package/dist/di/watch.d.ts +23 -0
- package/dist/di/watch.d.ts.map +1 -0
- package/dist/di/watch.js +41 -0
- package/dist/di/watch.js.map +1 -0
- package/dist/element/decorators.d.ts +32 -0
- package/dist/element/decorators.d.ts.map +1 -0
- package/dist/element/decorators.js +72 -0
- package/dist/element/decorators.js.map +1 -0
- package/dist/{element.d.ts → element/element.d.ts} +5 -11
- package/dist/element/element.d.ts.map +1 -0
- package/dist/{element.js → element/element.js} +8 -34
- package/dist/element/element.js.map +1 -0
- package/dist/element/icon.d.ts.map +1 -0
- package/dist/{icon.js → element/icon.js} +3 -2
- package/dist/element/icon.js.map +1 -0
- package/dist/element/index.d.ts +11 -0
- package/dist/element/index.d.ts.map +1 -0
- package/dist/element/index.js +14 -0
- package/dist/element/index.js.map +1 -0
- package/dist/{decorators → element}/lifecycle.d.ts +9 -1
- package/dist/element/lifecycle.d.ts.map +1 -0
- package/dist/{decorators → element}/lifecycle.js +50 -35
- package/dist/element/lifecycle.js.map +1 -0
- package/dist/element/timing.d.ts +65 -0
- package/dist/element/timing.d.ts.map +1 -0
- package/dist/element/timing.js +116 -0
- package/dist/element/timing.js.map +1 -0
- package/dist/element/virtual.d.ts.map +1 -0
- package/dist/{virtual.js → element/virtual.js} +1 -1
- package/dist/element/virtual.js.map +1 -0
- package/dist/index.d.ts +13 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/router/decorators.d.ts +86 -0
- package/dist/router/decorators.d.ts.map +1 -0
- package/dist/router/decorators.js +174 -0
- package/dist/router/decorators.js.map +1 -0
- package/dist/router/index.d.ts +7 -5
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +7 -4
- package/dist/router/index.js.map +1 -1
- package/dist/router/link.d.ts +6 -0
- package/dist/router/link.d.ts.map +1 -1
- package/dist/router/link.js +27 -3
- package/dist/router/link.js.map +1 -1
- package/dist/router/outlet.d.ts +1 -1
- package/dist/router/outlet.d.ts.map +1 -1
- package/dist/router/outlet.js +2 -2
- package/dist/router/outlet.js.map +1 -1
- package/dist/router/route.d.ts +32 -42
- package/dist/router/route.d.ts.map +1 -1
- package/dist/router/route.js +22 -96
- package/dist/router/route.js.map +1 -1
- package/dist/router/router.d.ts +13 -4
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +19 -7
- package/dist/router/router.js.map +1 -1
- package/dist/{decorators/state.d.ts → store/decorators.d.ts} +8 -1
- package/dist/store/decorators.d.ts.map +1 -0
- package/dist/{decorators/state.js → store/decorators.js} +13 -4
- package/dist/store/decorators.js.map +1 -0
- package/dist/store/index.d.ts +12 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +14 -0
- package/dist/store/index.js.map +1 -0
- package/dist/{reactive.d.ts → store/reactive.d.ts} +7 -5
- package/dist/store/reactive.d.ts.map +1 -0
- package/dist/{reactive.js → store/reactive.js} +9 -5
- package/dist/store/reactive.js.map +1 -0
- package/dist/store/storage.d.ts +53 -0
- package/dist/store/storage.d.ts.map +1 -0
- package/dist/store/storage.js +78 -0
- package/dist/store/storage.js.map +1 -0
- package/dist/store/watch.d.ts +27 -0
- package/dist/store/watch.d.ts.map +1 -0
- package/dist/store/watch.js +30 -0
- package/dist/store/watch.js.map +1 -0
- package/dist/transform/built-in.d.ts +36 -0
- package/dist/transform/built-in.d.ts.map +1 -0
- package/dist/transform/built-in.js +37 -0
- package/dist/transform/built-in.js.map +1 -0
- package/dist/transform/create.d.ts +19 -0
- package/dist/transform/create.d.ts.map +1 -0
- package/dist/transform/create.js +27 -0
- package/dist/transform/create.js.map +1 -0
- package/dist/transform/index.d.ts +11 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +14 -0
- package/dist/transform/index.js.map +1 -0
- package/dist/transform/transform.d.ts +14 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/transform.js +21 -0
- package/dist/transform/transform.js.map +1 -0
- package/dist/transform/typed.d.ts +40 -0
- package/dist/transform/typed.d.ts.map +1 -0
- package/dist/transform/typed.js +55 -0
- package/dist/transform/typed.js.map +1 -0
- package/package.json +35 -3
- package/dist/decorators/component.d.ts +0 -11
- package/dist/decorators/component.d.ts.map +0 -1
- package/dist/decorators/component.js +0 -38
- package/dist/decorators/component.js.map +0 -1
- package/dist/decorators/di.d.ts.map +0 -1
- package/dist/decorators/di.js.map +0 -1
- package/dist/decorators/dom.d.ts +0 -15
- package/dist/decorators/dom.d.ts.map +0 -1
- package/dist/decorators/dom.js +0 -33
- package/dist/decorators/dom.js.map +0 -1
- package/dist/decorators/lifecycle.d.ts.map +0 -1
- package/dist/decorators/lifecycle.js.map +0 -1
- package/dist/decorators/state.d.ts.map +0 -1
- package/dist/decorators/state.js.map +0 -1
- package/dist/decorators/timing.d.ts +0 -35
- package/dist/decorators/timing.d.ts.map +0 -1
- package/dist/decorators/timing.js +0 -57
- package/dist/decorators/timing.js.map +0 -1
- package/dist/decorators/transform.d.ts +0 -45
- package/dist/decorators/transform.d.ts.map +0 -1
- package/dist/decorators/transform.js +0 -48
- package/dist/decorators/transform.js.map +0 -1
- package/dist/element.d.ts.map +0 -1
- package/dist/element.js.map +0 -1
- package/dist/icon.d.ts.map +0 -1
- package/dist/icon.js.map +0 -1
- package/dist/reactive.d.ts.map +0 -1
- package/dist/reactive.js.map +0 -1
- package/dist/storage.d.ts +0 -55
- package/dist/storage.d.ts.map +0 -1
- package/dist/storage.js +0 -90
- package/dist/storage.js.map +0 -1
- package/dist/virtual.d.ts.map +0 -1
- package/dist/virtual.js.map +0 -1
- /package/dist/{icon.d.ts → element/icon.d.ts} +0 -0
- /package/dist/{virtual.d.ts → element/virtual.d.ts} +0 -0
package/dist/router/route.d.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Loom Router — Route table and
|
|
2
|
+
* Loom Router — Route table and matching
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Pure data: route entries, pattern compilation, and path matching.
|
|
5
|
+
* Decorators live in ./decorators.ts.
|
|
6
6
|
*/
|
|
7
|
-
export declare const ROUTE_PATH: unique symbol;
|
|
8
|
-
export declare const GUARD_HANDLERS: unique symbol;
|
|
9
7
|
export interface RouteEntry {
|
|
10
8
|
pattern: string;
|
|
11
9
|
regex: RegExp;
|
|
@@ -14,18 +12,41 @@ export interface RouteEntry {
|
|
|
14
12
|
ctor: any;
|
|
15
13
|
/** Named guards to check before rendering this route */
|
|
16
14
|
guards: string[];
|
|
15
|
+
/** Optional name for named-route navigation */
|
|
16
|
+
name?: string;
|
|
17
17
|
}
|
|
18
|
-
/**
|
|
18
|
+
/** Symbol for @group metadata on a constructor */
|
|
19
|
+
export declare const GROUP_META: unique symbol;
|
|
20
|
+
/** Symbol for storing a route's group parent constructor */
|
|
21
|
+
export declare const ROUTE_GROUP: unique symbol;
|
|
22
|
+
/** Metadata stored by @group on a constructor */
|
|
23
|
+
export interface GroupMeta {
|
|
24
|
+
prefix: string;
|
|
25
|
+
guards: string[];
|
|
26
|
+
}
|
|
27
|
+
/** Global route table — populated by @route decorator */
|
|
19
28
|
export declare const routes: RouteEntry[];
|
|
29
|
+
/** Named route lookup — populated by @route when name is provided */
|
|
30
|
+
export declare const routeByName: Map<string, RouteEntry>;
|
|
20
31
|
/**
|
|
21
|
-
* Global guard registry — populated by @guard
|
|
22
|
-
* Maps guard name → { proto, key
|
|
32
|
+
* Global guard registry — populated by @guard decorator.
|
|
33
|
+
* Maps guard name → { proto, key }
|
|
23
34
|
*/
|
|
24
35
|
export interface GuardRegistration {
|
|
25
36
|
proto: any;
|
|
26
37
|
key: string;
|
|
27
38
|
}
|
|
28
39
|
export declare const guardRegistry: Map<string, GuardRegistration>;
|
|
40
|
+
/**
|
|
41
|
+
* Compile a route pattern into a regex + param name list.
|
|
42
|
+
*
|
|
43
|
+
* `/docs/:slug` → { regex: /^\/docs\/([^/]+)$/, paramNames: ["slug"] }
|
|
44
|
+
* `*` → { regex: /^.*$/, paramNames: [] }
|
|
45
|
+
*/
|
|
46
|
+
export declare function compilePattern(pattern: string): {
|
|
47
|
+
regex: RegExp;
|
|
48
|
+
paramNames: string[];
|
|
49
|
+
};
|
|
29
50
|
/**
|
|
30
51
|
* Match a path against the route table.
|
|
31
52
|
* Returns the matched entry + extracted params, or null.
|
|
@@ -34,43 +55,12 @@ export declare function matchRoute(path: string): {
|
|
|
34
55
|
entry: RouteEntry;
|
|
35
56
|
params: Record<string, string>;
|
|
36
57
|
} | null;
|
|
37
|
-
interface RouteOptions {
|
|
38
|
-
/** Named guards to check before this route is rendered */
|
|
39
|
-
guards?: string[];
|
|
40
|
-
}
|
|
41
58
|
/**
|
|
42
|
-
*
|
|
59
|
+
* Build a path from a named route, substituting :param segments.
|
|
43
60
|
*
|
|
44
61
|
* ```ts
|
|
45
|
-
*
|
|
46
|
-
* @component("page-docs")
|
|
47
|
-
* class PageDocs extends LoomElement { ... }
|
|
48
|
-
*
|
|
49
|
-
* @route("/admin", { guards: ["auth", "role"] })
|
|
50
|
-
* @component("page-admin")
|
|
51
|
-
* class PageAdmin extends LoomElement { ... }
|
|
52
|
-
* ```
|
|
53
|
-
*/
|
|
54
|
-
export declare function route(pattern: string, opts?: RouteOptions): (ctor: any) => void;
|
|
55
|
-
/**
|
|
56
|
-
* Mark a method as a named route guard.
|
|
57
|
-
*
|
|
58
|
-
* Return `true` to allow, `false` to block, or a `string` to redirect.
|
|
59
|
-
* Async guards are awaited. Supports @inject on parameters.
|
|
60
|
-
*
|
|
61
|
-
* ```ts
|
|
62
|
-
* @guard("auth")
|
|
63
|
-
* checkAuth(@inject(AuthService) auth: AuthService) {
|
|
64
|
-
* return auth.isLoggedIn ? true : "/login";
|
|
65
|
-
* }
|
|
66
|
-
*
|
|
67
|
-
* // Derived name from method name:
|
|
68
|
-
* @guard
|
|
69
|
-
* checkRole(@inject(UserStore) users: UserStore) {
|
|
70
|
-
* return users.current?.role === "admin" ? true : "/forbidden";
|
|
71
|
-
* }
|
|
62
|
+
* buildPath("user-detail", { id: "42" }); // → "/user/42"
|
|
72
63
|
* ```
|
|
73
64
|
*/
|
|
74
|
-
export declare function
|
|
75
|
-
export {};
|
|
65
|
+
export declare function buildPath(name: string, params?: Record<string, string>): string;
|
|
76
66
|
//# sourceMappingURL=route.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC;IACV,wDAAwD;IACxD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,kDAAkD;AAClD,eAAO,MAAM,UAAU,eAA6B,CAAC;AAErD,4DAA4D;AAC5D,eAAO,MAAM,WAAW,eAAoC,CAAC;AAE7D,iDAAiD;AACjD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,yDAAyD;AACzD,eAAO,MAAM,MAAM,EAAE,UAAU,EAAO,CAAC;AAEvC,qEAAqE;AACrE,eAAO,MAAM,WAAW,yBAAgC,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,GAAG,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AACD,eAAO,MAAM,aAAa,gCAAuC,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBvF;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAYrG;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM,CAQnF"}
|
package/dist/router/route.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Loom Router — Route table and
|
|
2
|
+
* Loom Router — Route table and matching
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Pure data: route entries, pattern compilation, and path matching.
|
|
5
|
+
* Decorators live in ./decorators.ts.
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
export const
|
|
9
|
-
/**
|
|
7
|
+
/** Symbol for @group metadata on a constructor */
|
|
8
|
+
export const GROUP_META = Symbol("loom:route:group");
|
|
9
|
+
/** Symbol for storing a route's group parent constructor */
|
|
10
|
+
export const ROUTE_GROUP = Symbol("loom:route:group-parent");
|
|
11
|
+
/** Global route table — populated by @route decorator */
|
|
10
12
|
export const routes = [];
|
|
13
|
+
/** Named route lookup — populated by @route when name is provided */
|
|
14
|
+
export const routeByName = new Map();
|
|
11
15
|
export const guardRegistry = new Map();
|
|
12
16
|
/**
|
|
13
17
|
* Compile a route pattern into a regex + param name list.
|
|
@@ -15,7 +19,7 @@ export const guardRegistry = new Map();
|
|
|
15
19
|
* `/docs/:slug` → { regex: /^\/docs\/([^/]+)$/, paramNames: ["slug"] }
|
|
16
20
|
* `*` → { regex: /^.*$/, paramNames: [] }
|
|
17
21
|
*/
|
|
18
|
-
function compilePattern(pattern) {
|
|
22
|
+
export function compilePattern(pattern) {
|
|
19
23
|
if (pattern === "*") {
|
|
20
24
|
return { regex: /^.*$/, paramNames: [] };
|
|
21
25
|
}
|
|
@@ -50,98 +54,20 @@ export function matchRoute(path) {
|
|
|
50
54
|
return null;
|
|
51
55
|
}
|
|
52
56
|
/**
|
|
53
|
-
*
|
|
57
|
+
* Build a path from a named route, substituting :param segments.
|
|
54
58
|
*
|
|
55
59
|
* ```ts
|
|
56
|
-
*
|
|
57
|
-
* @component("page-docs")
|
|
58
|
-
* class PageDocs extends LoomElement { ... }
|
|
59
|
-
*
|
|
60
|
-
* @route("/admin", { guards: ["auth", "role"] })
|
|
61
|
-
* @component("page-admin")
|
|
62
|
-
* class PageAdmin extends LoomElement { ... }
|
|
60
|
+
* buildPath("user-detail", { id: "42" }); // → "/user/42"
|
|
63
61
|
* ```
|
|
64
62
|
*/
|
|
65
|
-
export function
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
paramNames,
|
|
75
|
-
get tag() {
|
|
76
|
-
// Find the tag registered for this constructor
|
|
77
|
-
return _tagForCtor(ctor);
|
|
78
|
-
},
|
|
79
|
-
ctor,
|
|
80
|
-
guards: opts?.guards ?? [],
|
|
81
|
-
};
|
|
82
|
-
// Wildcard goes last
|
|
83
|
-
if (pattern === "*") {
|
|
84
|
-
routes.push(entry);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
// Insert before wildcards
|
|
88
|
-
const wildcardIdx = routes.findIndex((r) => r.pattern === "*");
|
|
89
|
-
if (wildcardIdx === -1)
|
|
90
|
-
routes.push(entry);
|
|
91
|
-
else
|
|
92
|
-
routes.splice(wildcardIdx, 0, entry);
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
/** Resolve the custom element tag for a constructor */
|
|
97
|
-
function _tagForCtor(ctor) {
|
|
98
|
-
// Search customElements registry
|
|
99
|
-
const name = customElements.getName?.(ctor);
|
|
100
|
-
if (name)
|
|
101
|
-
return name;
|
|
102
|
-
// Fallback: scan internal app registry (custom elements v1 doesn't have getName everywhere)
|
|
103
|
-
// We store the tag on the constructor via @component
|
|
104
|
-
return ctor.__loom_tag ?? ctor.name.toLowerCase();
|
|
105
|
-
}
|
|
106
|
-
// ── @guard decorator ──
|
|
107
|
-
/**
|
|
108
|
-
* Mark a method as a named route guard.
|
|
109
|
-
*
|
|
110
|
-
* Return `true` to allow, `false` to block, or a `string` to redirect.
|
|
111
|
-
* Async guards are awaited. Supports @inject on parameters.
|
|
112
|
-
*
|
|
113
|
-
* ```ts
|
|
114
|
-
* @guard("auth")
|
|
115
|
-
* checkAuth(@inject(AuthService) auth: AuthService) {
|
|
116
|
-
* return auth.isLoggedIn ? true : "/login";
|
|
117
|
-
* }
|
|
118
|
-
*
|
|
119
|
-
* // Derived name from method name:
|
|
120
|
-
* @guard
|
|
121
|
-
* checkRole(@inject(UserStore) users: UserStore) {
|
|
122
|
-
* return users.current?.role === "admin" ? true : "/forbidden";
|
|
123
|
-
* }
|
|
124
|
-
* ```
|
|
125
|
-
*/
|
|
126
|
-
export function guard(nameOrTarget, key) {
|
|
127
|
-
if (typeof key === "string") {
|
|
128
|
-
// Bare @guard (no name) — derive name from method name
|
|
129
|
-
_registerGuard(nameOrTarget, key, key);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (typeof nameOrTarget === "string") {
|
|
133
|
-
// @guard("auth") — factory form with explicit name
|
|
134
|
-
return (target, methodKey) => {
|
|
135
|
-
_registerGuard(target, methodKey, nameOrTarget);
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
function _registerGuard(proto, key, name) {
|
|
140
|
-
// Legacy: store on prototype for backward compat
|
|
141
|
-
if (!proto[GUARD_HANDLERS])
|
|
142
|
-
proto[GUARD_HANDLERS] = [];
|
|
143
|
-
proto[GUARD_HANDLERS].push(key);
|
|
144
|
-
// New: register in global registry by name
|
|
145
|
-
guardRegistry.set(name, { proto, key });
|
|
63
|
+
export function buildPath(name, params = {}) {
|
|
64
|
+
const entry = routeByName.get(name);
|
|
65
|
+
if (!entry)
|
|
66
|
+
throw new Error(`[Loom] Unknown route name: "${name}"`);
|
|
67
|
+
return entry.pattern.replace(/:([^/]+)/g, (_, key) => {
|
|
68
|
+
if (!(key in params))
|
|
69
|
+
throw new Error(`[Loom] Missing param "${key}" for route "${name}"`);
|
|
70
|
+
return params[key];
|
|
71
|
+
});
|
|
146
72
|
}
|
|
147
73
|
//# sourceMappingURL=route.js.map
|
package/dist/router/route.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/router/route.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH,kDAAkD;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAErD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAQ7D,yDAAyD;AACzD,MAAM,CAAC,MAAM,MAAM,GAAiB,EAAE,CAAC;AAEvC,qEAAqE;AACrE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAC;AAUzD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA6B,CAAC;AAElE;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,OAAO;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACX,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,CAAC;SACD,IAAI,CAAC,KAAK,CAAC,CAAC;IAEf,OAAO,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,MAAM,GAA2B,EAAE,CAAC;YAC1C,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,SAAiC,EAAE;IACzE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,GAAG,CAAC,CAAC;IAEpE,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;QACnD,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,gBAAgB,IAAI,GAAG,CAAC,CAAC;QAC3F,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/router/router.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ import { type RouterMode } from "./mode";
|
|
|
8
8
|
export interface RouterOptions {
|
|
9
9
|
mode?: "hash" | "history";
|
|
10
10
|
}
|
|
11
|
+
/** Target for programmatic navigation — raw path or named route */
|
|
12
|
+
export type RouteTarget = string | {
|
|
13
|
+
name: string;
|
|
14
|
+
params?: Record<string, string>;
|
|
15
|
+
};
|
|
11
16
|
export interface RouteInfo {
|
|
12
17
|
path: string;
|
|
13
18
|
params: Record<string, string>;
|
|
@@ -21,16 +26,20 @@ export declare class LoomRouter {
|
|
|
21
26
|
get current(): Readonly<RouteInfo>;
|
|
22
27
|
/** Start listening for URL changes and resolve the initial route */
|
|
23
28
|
start(): () => void;
|
|
24
|
-
/** Navigate to a path */
|
|
25
|
-
go(
|
|
29
|
+
/** Navigate to a path or named route */
|
|
30
|
+
go(target: RouteTarget): Promise<void>;
|
|
31
|
+
/** Alias for go() */
|
|
32
|
+
navigate(target: RouteTarget): Promise<void>;
|
|
26
33
|
/** Navigate without creating a history entry */
|
|
27
|
-
replace(
|
|
34
|
+
replace(target: RouteTarget): Promise<void>;
|
|
28
35
|
/** Go back in history */
|
|
29
36
|
back(): void;
|
|
30
37
|
/** Go forward in history */
|
|
31
38
|
forward(): void;
|
|
32
39
|
/** Build an href for the current mode */
|
|
33
|
-
href(
|
|
40
|
+
href(target: RouteTarget): string;
|
|
41
|
+
/** Resolve a RouteTarget to a path string */
|
|
42
|
+
private _resolvePath;
|
|
34
43
|
/** Resolve the current URL against the route table and emit RouteChanged */
|
|
35
44
|
private _resolve;
|
|
36
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,UAAU,EAAyB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,KAAK,UAAU,EAAyB,MAAM,QAAQ,CAAC;AAOhE,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,mEAAmE;AACnE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC;AAErF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAmD;gBAEvD,IAAI,GAAE,aAAkB;IAIpC,8CAA8C;IAC9C,IAAI,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,CAEjC;IAED,oEAAoE;IACpE,KAAK,IAAI,MAAM,IAAI;IAMnB,wCAAwC;IAClC,EAAE,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,qBAAqB;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,gDAAgD;IAC1C,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjD,yBAAyB;IACzB,IAAI,IAAI,IAAI;IAIZ,4BAA4B;IAC5B,OAAO,IAAI,IAAI;IAIf,yCAAyC;IACzC,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM;IAIjC,6CAA6C;IAC7C,OAAO,CAAC,YAAY;IAKpB,4EAA4E;IAC5E,OAAO,CAAC,QAAQ;IAchB;;;;;;OAMG;YACW,YAAY;IAwC1B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;CAe7B"}
|
package/dist/router/router.js
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { bus } from "../bus";
|
|
8
8
|
import { HashMode, HistoryMode } from "./mode";
|
|
9
|
-
import { matchRoute,
|
|
9
|
+
import { matchRoute, guardRegistry, buildPath } from "./route";
|
|
10
|
+
import { GUARD_HANDLERS } from "./decorators";
|
|
10
11
|
import { RouteChanged } from "./events";
|
|
11
12
|
import { INJECT_PARAMS } from "../decorators/symbols";
|
|
12
13
|
import { app } from "../app";
|
|
@@ -26,20 +27,25 @@ export class LoomRouter {
|
|
|
26
27
|
this._resolve();
|
|
27
28
|
return cleanup;
|
|
28
29
|
}
|
|
29
|
-
/** Navigate to a path */
|
|
30
|
-
async go(
|
|
30
|
+
/** Navigate to a path or named route */
|
|
31
|
+
async go(target) {
|
|
32
|
+
const path = this._resolvePath(target);
|
|
31
33
|
const allowed = await this._checkGuards(path);
|
|
32
34
|
if (allowed === false)
|
|
33
35
|
return;
|
|
34
36
|
if (typeof allowed === "string") {
|
|
35
|
-
// Redirect
|
|
36
37
|
return this.go(allowed);
|
|
37
38
|
}
|
|
38
39
|
this.mode.write(path);
|
|
39
40
|
this._resolve();
|
|
40
41
|
}
|
|
42
|
+
/** Alias for go() */
|
|
43
|
+
navigate(target) {
|
|
44
|
+
return this.go(target);
|
|
45
|
+
}
|
|
41
46
|
/** Navigate without creating a history entry */
|
|
42
|
-
async replace(
|
|
47
|
+
async replace(target) {
|
|
48
|
+
const path = this._resolvePath(target);
|
|
43
49
|
const allowed = await this._checkGuards(path);
|
|
44
50
|
if (allowed === false)
|
|
45
51
|
return;
|
|
@@ -58,8 +64,14 @@ export class LoomRouter {
|
|
|
58
64
|
history.forward();
|
|
59
65
|
}
|
|
60
66
|
/** Build an href for the current mode */
|
|
61
|
-
href(
|
|
62
|
-
return this.mode.href(
|
|
67
|
+
href(target) {
|
|
68
|
+
return this.mode.href(this._resolvePath(target));
|
|
69
|
+
}
|
|
70
|
+
/** Resolve a RouteTarget to a path string */
|
|
71
|
+
_resolvePath(target) {
|
|
72
|
+
if (typeof target === "string")
|
|
73
|
+
return target;
|
|
74
|
+
return buildPath(target.name, target.params);
|
|
63
75
|
}
|
|
64
76
|
/** Resolve the current URL against the route table and emit RouteChanged */
|
|
65
77
|
_resolve() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAC7B,OAAO,EAAmB,QAAQ,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/router/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom — Store decorators
|
|
3
|
+
*
|
|
4
|
+
* @reactive — Internal reactive state backed by Reactive<T>
|
|
5
|
+
* @prop — External attribute with optional route binding
|
|
6
|
+
* @computed — Cached derived getter
|
|
7
|
+
*/
|
|
1
8
|
/** Sentinel for full route-param decompose: `@prop({params}) p!: MyType` */
|
|
2
9
|
export declare const params: unique symbol;
|
|
3
10
|
/** Sentinel for full query-param decompose: `@prop({query}) q!: MyType` */
|
|
@@ -38,4 +45,4 @@ export declare function prop(targetOrOpts: any, key?: any): any;
|
|
|
38
45
|
* ```
|
|
39
46
|
*/
|
|
40
47
|
export declare function computed(target: any, key: string, desc: PropertyDescriptor): void;
|
|
41
|
-
//# sourceMappingURL=
|
|
48
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,4EAA4E;AAC5E,eAAO,MAAM,MAAM,eAAiC,CAAC;AAErD,2EAA2E;AAG3E,eAAO,MAAM,UAAU,eAAgC,CAAC;AAExD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAsCvD;AAiBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,IAAI,CAClB,YAAY,EAAE,GAAG,EACjB,GAAG,CAAC,EAAE,GAAG,GACR,GAAG,CAuBL;AASD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,GAAG,EACX,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,kBAAkB,GACvB,IAAI,CAiBN"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Loom — Store decorators
|
|
3
|
+
*
|
|
4
|
+
* @reactive — Internal reactive state backed by Reactive<T>
|
|
5
|
+
* @prop — External attribute with optional route binding
|
|
6
|
+
* @computed — Cached derived getter
|
|
7
|
+
*/
|
|
8
|
+
import { REACTIVES, PROPS, WATCHERS, EMITTERS, COMPUTED_DIRTY, ROUTE_PROPS } from "../decorators/symbols";
|
|
9
|
+
import { Reactive } from "./reactive";
|
|
3
10
|
import { bus } from "../bus";
|
|
4
11
|
// ── Route sentinels ──
|
|
5
12
|
// Used with @prop shorthand: @prop({params}) or @prop({query})
|
|
6
13
|
/** Sentinel for full route-param decompose: `@prop({params}) p!: MyType` */
|
|
7
14
|
export const params = Symbol("loom:sentinel:params");
|
|
8
15
|
/** Sentinel for full query-param decompose: `@prop({query}) q!: MyType` */
|
|
9
|
-
// NOTE: This is NOT the @query(".selector") DOM decorator — that's in
|
|
16
|
+
// NOTE: This is NOT the @query(".selector") DOM decorator — that's in element/decorators.
|
|
10
17
|
// This sentinel is re-exported from "@toyz/loom/router".
|
|
11
18
|
export const routeQuery = Symbol("loom:sentinel:query");
|
|
12
19
|
/**
|
|
@@ -18,6 +25,7 @@ export const routeQuery = Symbol("loom:sentinel:query");
|
|
|
18
25
|
* ```
|
|
19
26
|
*/
|
|
20
27
|
export function reactive(target, key) {
|
|
28
|
+
// Define-time: store field name and create getter/setter
|
|
21
29
|
if (!target[REACTIVES])
|
|
22
30
|
target[REACTIVES] = [];
|
|
23
31
|
target[REACTIVES].push(key);
|
|
@@ -107,6 +115,7 @@ function _registerProp(target, key) {
|
|
|
107
115
|
* ```
|
|
108
116
|
*/
|
|
109
117
|
export function computed(target, key, desc) {
|
|
118
|
+
// Define-time: wrap getter with caching
|
|
110
119
|
const getter = desc.get;
|
|
111
120
|
const cacheKey = Symbol(`computed:${key}`);
|
|
112
121
|
const dirtyKey = Symbol(`dirty:${key}`);
|
|
@@ -122,4 +131,4 @@ export function computed(target, key, desc) {
|
|
|
122
131
|
target[COMPUTED_DIRTY] = [];
|
|
123
132
|
target[COMPUTED_DIRTY].push(dirtyKey);
|
|
124
133
|
}
|
|
125
|
-
//# sourceMappingURL=
|
|
134
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/store/decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom Store — Barrel exports
|
|
3
|
+
*
|
|
4
|
+
* Reactive primitives, storage adapters, and store decorators.
|
|
5
|
+
*/
|
|
6
|
+
export { Reactive, CollectionStore } from "./reactive";
|
|
7
|
+
export type { Subscriber, Updater, Identifiable } from "./reactive";
|
|
8
|
+
export { MemoryStorage, LocalAdapter, SessionAdapter, LocalMedium, SessionMedium } from "./storage";
|
|
9
|
+
export type { StorageAdapter, StorageMedium, PersistOptions } from "./storage";
|
|
10
|
+
export { reactive, prop, computed, params, routeQuery } from "./decorators";
|
|
11
|
+
export { watch } from "./watch";
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACvD,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACpG,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG/E,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG5E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loom Store — Barrel exports
|
|
3
|
+
*
|
|
4
|
+
* Reactive primitives, storage adapters, and store decorators.
|
|
5
|
+
*/
|
|
6
|
+
// Reactive primitives
|
|
7
|
+
export { Reactive, CollectionStore } from "./reactive";
|
|
8
|
+
// Storage adapters
|
|
9
|
+
export { MemoryStorage, LocalAdapter, SessionAdapter, LocalMedium, SessionMedium } from "./storage";
|
|
10
|
+
// Decorators
|
|
11
|
+
export { reactive, prop, computed, params, routeQuery } from "./decorators";
|
|
12
|
+
// Watch
|
|
13
|
+
export { watch } from "./watch";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sBAAsB;AACtB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGvD,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGpG,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5E,QAAQ;AACR,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -4,21 +4,21 @@
|
|
|
4
4
|
* Reactive<T> — Observable value container for any shape
|
|
5
5
|
* CollectionStore<T> — CRUD over Reactive<T[]> for identifiable items
|
|
6
6
|
*
|
|
7
|
-
* Both support optional persistent storage via
|
|
7
|
+
* Both support optional persistent storage via StorageAdapter.
|
|
8
8
|
*/
|
|
9
9
|
import type { PersistOptions } from "./storage";
|
|
10
10
|
export type Subscriber<T> = (value: T, prev: T) => void;
|
|
11
11
|
export type Updater<T> = T | ((prev: T) => T);
|
|
12
12
|
/**
|
|
13
13
|
* Observable value container. Works with any data shape.
|
|
14
|
-
* Optionally backs to a
|
|
14
|
+
* Optionally backs to a StorageAdapter for auto-persistence.
|
|
15
15
|
*
|
|
16
16
|
* ```ts
|
|
17
17
|
* // In-memory (default)
|
|
18
18
|
* const count = new Reactive(0);
|
|
19
19
|
*
|
|
20
20
|
* // Auto-persisted to localStorage
|
|
21
|
-
* const count = new Reactive(0, { key: "app:count", storage: new
|
|
21
|
+
* const count = new Reactive(0, { key: "app:count", storage: new LocalAdapter() });
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
24
|
export declare class Reactive<T> {
|
|
@@ -46,7 +46,7 @@ export interface Identifiable {
|
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
48
48
|
* CRUD collection backed by Reactive<T[]>.
|
|
49
|
-
* Supports optional persistent storage via
|
|
49
|
+
* Supports optional persistent storage via StorageAdapter.
|
|
50
50
|
*
|
|
51
51
|
* ```ts
|
|
52
52
|
* // In-memory
|
|
@@ -55,7 +55,7 @@ export interface Identifiable {
|
|
|
55
55
|
* // Persisted to localStorage
|
|
56
56
|
* const items = new CollectionStore<Item>([], {
|
|
57
57
|
* key: "app:items",
|
|
58
|
-
* storage: new
|
|
58
|
+
* storage: new LocalAdapter(),
|
|
59
59
|
* });
|
|
60
60
|
* ```
|
|
61
61
|
*/
|
|
@@ -69,6 +69,8 @@ export declare class CollectionStore<T extends Identifiable> extends Reactive<T[
|
|
|
69
69
|
remove(id: string): void;
|
|
70
70
|
/** Patch an item by id */
|
|
71
71
|
update(id: string, patch: Partial<T>): T;
|
|
72
|
+
/** Clear all items (and persisted data if any) */
|
|
73
|
+
clear(): void;
|
|
72
74
|
/** Find an item by id */
|
|
73
75
|
find(id: string): T | undefined;
|
|
74
76
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../src/store/reactive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAkB,MAAM,WAAW,CAAC;AAEhE,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AACxD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,qBAAa,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,CAAiB;gBAEtB,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc;IAqBhD,IAAI,KAAK,IAAI,CAAC,CAEb;IAED,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAa3B,0DAA0D;IAC1D,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAKxC,wDAAwD;IACxD,KAAK,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAKpC,gDAAgD;IAChD,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI;IAOvB,6EAA6E;IAC7E,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CAM3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAe,CAC1B,CAAC,SAAS,YAAY,CACtB,SAAQ,QAAQ,CAAC,CAAC,EAAE,CAAC;gBACT,OAAO,GAAE,CAAC,EAAO,EAAE,OAAO,CAAC,EAAE,cAAc;IAIvD,+DAA+D;IAC/D,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC;IAM7C,2BAA2B;IAC3B,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIxB,0BAA0B;IAC1B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAYxC,kDAAkD;IAClD,KAAK,IAAI,IAAI;IAIb,yBAAyB;IACzB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;CAGhC"}
|
|
@@ -4,18 +4,18 @@
|
|
|
4
4
|
* Reactive<T> — Observable value container for any shape
|
|
5
5
|
* CollectionStore<T> — CRUD over Reactive<T[]> for identifiable items
|
|
6
6
|
*
|
|
7
|
-
* Both support optional persistent storage via
|
|
7
|
+
* Both support optional persistent storage via StorageAdapter.
|
|
8
8
|
*/
|
|
9
9
|
/**
|
|
10
10
|
* Observable value container. Works with any data shape.
|
|
11
|
-
* Optionally backs to a
|
|
11
|
+
* Optionally backs to a StorageAdapter for auto-persistence.
|
|
12
12
|
*
|
|
13
13
|
* ```ts
|
|
14
14
|
* // In-memory (default)
|
|
15
15
|
* const count = new Reactive(0);
|
|
16
16
|
*
|
|
17
17
|
* // Auto-persisted to localStorage
|
|
18
|
-
* const count = new Reactive(0, { key: "app:count", storage: new
|
|
18
|
+
* const count = new Reactive(0, { key: "app:count", storage: new LocalAdapter() });
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export class Reactive {
|
|
@@ -87,7 +87,7 @@ export class Reactive {
|
|
|
87
87
|
}
|
|
88
88
|
/**
|
|
89
89
|
* CRUD collection backed by Reactive<T[]>.
|
|
90
|
-
* Supports optional persistent storage via
|
|
90
|
+
* Supports optional persistent storage via StorageAdapter.
|
|
91
91
|
*
|
|
92
92
|
* ```ts
|
|
93
93
|
* // In-memory
|
|
@@ -96,7 +96,7 @@ export class Reactive {
|
|
|
96
96
|
* // Persisted to localStorage
|
|
97
97
|
* const items = new CollectionStore<Item>([], {
|
|
98
98
|
* key: "app:items",
|
|
99
|
-
* storage: new
|
|
99
|
+
* storage: new LocalAdapter(),
|
|
100
100
|
* });
|
|
101
101
|
* ```
|
|
102
102
|
*/
|
|
@@ -125,6 +125,10 @@ export class CollectionStore extends Reactive {
|
|
|
125
125
|
}));
|
|
126
126
|
return updated;
|
|
127
127
|
}
|
|
128
|
+
/** Clear all items (and persisted data if any) */
|
|
129
|
+
clear() {
|
|
130
|
+
super.clear([]);
|
|
131
|
+
}
|
|
128
132
|
/** Find an item by id */
|
|
129
133
|
find(id) {
|
|
130
134
|
return this.value.find((i) => i.id === id);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.js","sourceRoot":"","sources":["../../src/store/reactive.ts"],"names":[],"mappings":"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"}
|