mvc-kit 2.12.5 → 2.13.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/agent-config/bin/postinstall.mjs +4 -3
- package/agent-config/bin/setup.mjs +5 -1
- package/agent-config/claude-code/agents/mvc-kit-architect.md +11 -8
- package/agent-config/claude-code/skills/guide/SKILL.md +20 -7
- package/agent-config/claude-code/skills/guide/patterns.md +12 -0
- package/agent-config/claude-code/skills/guide/recipes.md +510 -0
- package/agent-config/claude-code/skills/guide/testing.md +297 -0
- package/agent-config/claude-code/skills/review/SKILL.md +3 -13
- package/agent-config/claude-code/skills/review/checklist.md +30 -5
- package/agent-config/claude-code/skills/scaffold/SKILL.md +4 -13
- package/agent-config/lib/install-claude.mjs +84 -25
- package/dist/Channel.cjs +276 -300
- package/dist/Channel.cjs.map +1 -1
- package/dist/Channel.js +275 -299
- package/dist/Channel.js.map +1 -1
- package/dist/Collection.cjs +424 -504
- package/dist/Collection.cjs.map +1 -1
- package/dist/Collection.js +423 -503
- package/dist/Collection.js.map +1 -1
- package/dist/Controller.cjs +70 -67
- package/dist/Controller.cjs.map +1 -1
- package/dist/Controller.js +69 -66
- package/dist/Controller.js.map +1 -1
- package/dist/EventBus.cjs +77 -88
- package/dist/EventBus.cjs.map +1 -1
- package/dist/EventBus.js +76 -87
- package/dist/EventBus.js.map +1 -1
- package/dist/Feed.cjs +81 -77
- package/dist/Feed.cjs.map +1 -1
- package/dist/Feed.js +80 -76
- package/dist/Feed.js.map +1 -1
- package/dist/Model.cjs +181 -207
- package/dist/Model.cjs.map +1 -1
- package/dist/Model.js +179 -205
- package/dist/Model.js.map +1 -1
- package/dist/Pagination.cjs +75 -73
- package/dist/Pagination.cjs.map +1 -1
- package/dist/Pagination.js +74 -72
- package/dist/Pagination.js.map +1 -1
- package/dist/Pending.cjs +255 -287
- package/dist/Pending.cjs.map +1 -1
- package/dist/Pending.js +253 -285
- package/dist/Pending.js.map +1 -1
- package/dist/PersistentCollection.cjs +242 -285
- package/dist/PersistentCollection.cjs.map +1 -1
- package/dist/PersistentCollection.js +241 -284
- package/dist/PersistentCollection.js.map +1 -1
- package/dist/Resource.cjs +166 -174
- package/dist/Resource.cjs.map +1 -1
- package/dist/Resource.js +164 -172
- package/dist/Resource.js.map +1 -1
- package/dist/Selection.cjs +84 -94
- package/dist/Selection.cjs.map +1 -1
- package/dist/Selection.js +83 -93
- package/dist/Selection.js.map +1 -1
- package/dist/Service.cjs +54 -55
- package/dist/Service.cjs.map +1 -1
- package/dist/Service.js +53 -54
- package/dist/Service.js.map +1 -1
- package/dist/Sorting.cjs +102 -101
- package/dist/Sorting.cjs.map +1 -1
- package/dist/Sorting.js +102 -101
- package/dist/Sorting.js.map +1 -1
- package/dist/Trackable.cjs +112 -80
- package/dist/Trackable.cjs.map +1 -1
- package/dist/Trackable.js +111 -79
- package/dist/Trackable.js.map +1 -1
- package/dist/ViewModel.cjs +528 -576
- package/dist/ViewModel.cjs.map +1 -1
- package/dist/ViewModel.js +525 -573
- package/dist/ViewModel.js.map +1 -1
- package/dist/bindPublicMethods.cjs +43 -24
- package/dist/bindPublicMethods.cjs.map +1 -1
- package/dist/bindPublicMethods.js +43 -24
- package/dist/bindPublicMethods.js.map +1 -1
- package/dist/errors.cjs +67 -68
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.js +68 -71
- package/dist/errors.js.map +1 -1
- package/dist/mvc-kit.cjs +44 -46
- package/dist/mvc-kit.js +5 -32
- package/dist/produceDraft.cjs +105 -95
- package/dist/produceDraft.cjs.map +1 -1
- package/dist/produceDraft.js +106 -97
- package/dist/produceDraft.js.map +1 -1
- package/dist/react/components/CardList.cjs +30 -40
- package/dist/react/components/CardList.cjs.map +1 -1
- package/dist/react/components/CardList.js +31 -41
- package/dist/react/components/CardList.js.map +1 -1
- package/dist/react/components/DataTable.cjs +146 -169
- package/dist/react/components/DataTable.cjs.map +1 -1
- package/dist/react/components/DataTable.js +147 -170
- package/dist/react/components/DataTable.js.map +1 -1
- package/dist/react/components/InfiniteScroll.cjs +51 -42
- package/dist/react/components/InfiniteScroll.cjs.map +1 -1
- package/dist/react/components/InfiniteScroll.js +52 -43
- package/dist/react/components/InfiniteScroll.js.map +1 -1
- package/dist/react/components/types.cjs +10 -6
- package/dist/react/components/types.cjs.map +1 -1
- package/dist/react/components/types.js +11 -9
- package/dist/react/components/types.js.map +1 -1
- package/dist/react/guards.cjs +10 -6
- package/dist/react/guards.cjs.map +1 -1
- package/dist/react/guards.js +11 -9
- package/dist/react/guards.js.map +1 -1
- package/dist/react/provider.cjs +23 -20
- package/dist/react/provider.cjs.map +1 -1
- package/dist/react/provider.js +23 -21
- package/dist/react/provider.js.map +1 -1
- package/dist/react/use-event-bus.cjs +24 -20
- package/dist/react/use-event-bus.cjs.map +1 -1
- package/dist/react/use-event-bus.js +24 -21
- package/dist/react/use-event-bus.js.map +1 -1
- package/dist/react/use-instance.cjs +43 -36
- package/dist/react/use-instance.cjs.map +1 -1
- package/dist/react/use-instance.js +43 -36
- package/dist/react/use-instance.js.map +1 -1
- package/dist/react/use-local.cjs +48 -64
- package/dist/react/use-local.cjs.map +1 -1
- package/dist/react/use-local.js +47 -63
- package/dist/react/use-local.js.map +1 -1
- package/dist/react/use-model.cjs +84 -98
- package/dist/react/use-model.cjs.map +1 -1
- package/dist/react/use-model.js +84 -100
- package/dist/react/use-model.js.map +1 -1
- package/dist/react/use-singleton.cjs +19 -23
- package/dist/react/use-singleton.cjs.map +1 -1
- package/dist/react/use-singleton.js +16 -20
- package/dist/react/use-singleton.js.map +1 -1
- package/dist/react/use-subscribe-only.cjs +28 -22
- package/dist/react/use-subscribe-only.cjs.map +1 -1
- package/dist/react/use-subscribe-only.js +28 -22
- package/dist/react/use-subscribe-only.js.map +1 -1
- package/dist/react/use-teardown.cjs +20 -19
- package/dist/react/use-teardown.cjs.map +1 -1
- package/dist/react/use-teardown.js +20 -19
- package/dist/react/use-teardown.js.map +1 -1
- package/dist/react-native/NativeCollection.cjs +98 -78
- package/dist/react-native/NativeCollection.cjs.map +1 -1
- package/dist/react-native/NativeCollection.js +97 -77
- package/dist/react-native/NativeCollection.js.map +1 -1
- package/dist/react-native.cjs +2 -4
- package/dist/react-native.js +1 -4
- package/dist/react.cjs +24 -26
- package/dist/react.js +1 -17
- package/dist/singleton.cjs +28 -22
- package/dist/singleton.cjs.map +1 -1
- package/dist/singleton.js +29 -26
- package/dist/singleton.js.map +1 -1
- package/dist/walkPrototypeChain.cjs +20 -12
- package/dist/walkPrototypeChain.cjs.map +1 -1
- package/dist/walkPrototypeChain.js +21 -13
- package/dist/walkPrototypeChain.js.map +1 -1
- package/dist/web/IndexedDBCollection.cjs +53 -36
- package/dist/web/IndexedDBCollection.cjs.map +1 -1
- package/dist/web/IndexedDBCollection.js +52 -35
- package/dist/web/IndexedDBCollection.js.map +1 -1
- package/dist/web/WebStorageCollection.cjs +82 -84
- package/dist/web/WebStorageCollection.cjs.map +1 -1
- package/dist/web/WebStorageCollection.js +81 -83
- package/dist/web/WebStorageCollection.js.map +1 -1
- package/dist/web/idb.cjs +107 -99
- package/dist/web/idb.cjs.map +1 -1
- package/dist/web/idb.js +108 -105
- package/dist/web/idb.js.map +1 -1
- package/dist/web.cjs +4 -6
- package/dist/web.js +1 -5
- package/dist/wrapAsyncMethods.cjs +141 -168
- package/dist/wrapAsyncMethods.cjs.map +1 -1
- package/dist/wrapAsyncMethods.js +141 -168
- package/dist/wrapAsyncMethods.js.map +1 -1
- package/package.json +8 -8
- package/src/Pending.test.ts +1 -2
- package/src/Sorting.test.ts +1 -1
- package/src/produceDraft.test.ts +3 -3
- package/src/react/components/CardList.test.tsx +1 -1
- package/src/react/components/DataTable.test.tsx +1 -1
- package/src/react/components/InfiniteScroll.test.tsx +5 -5
- package/dist/mvc-kit.cjs.map +0 -1
- package/dist/mvc-kit.js.map +0 -1
- package/dist/react-native.cjs.map +0 -1
- package/dist/react-native.js.map +0 -1
- package/dist/react.cjs.map +0 -1
- package/dist/react.js.map +0 -1
- package/dist/web.cjs.map +0 -1
- package/dist/web.js.map +0 -1
package/dist/Selection.js
CHANGED
|
@@ -1,95 +1,85 @@
|
|
|
1
1
|
import { Trackable } from "./Trackable.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
// ── Utility ──
|
|
82
|
-
/** Filter an array to only items whose key is in the selection. */
|
|
83
|
-
selectedFrom(items, keyOf) {
|
|
84
|
-
return items.filter((item) => this._selected.has(keyOf(item)));
|
|
85
|
-
}
|
|
86
|
-
// ── Internal ──
|
|
87
|
-
_publish() {
|
|
88
|
-
this._readonlyView = new Set(this._selected);
|
|
89
|
-
this.notify();
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
export {
|
|
93
|
-
Selection
|
|
2
|
+
//#region src/Selection.ts
|
|
3
|
+
/**
|
|
4
|
+
* Key-based selection set with toggle and select-all support.
|
|
5
|
+
* Tracks which items are selected by their key (id).
|
|
6
|
+
* Subscribable — auto-tracked when used as a ViewModel property.
|
|
7
|
+
*/
|
|
8
|
+
var Selection = class extends Trackable {
|
|
9
|
+
_selected = /* @__PURE__ */ new Set();
|
|
10
|
+
_readonlyView = this._selected;
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
}
|
|
14
|
+
/** Read-only view of currently selected keys. */
|
|
15
|
+
get selected() {
|
|
16
|
+
return this._readonlyView;
|
|
17
|
+
}
|
|
18
|
+
/** Number of currently selected items. */
|
|
19
|
+
get count() {
|
|
20
|
+
return this._selected.size;
|
|
21
|
+
}
|
|
22
|
+
/** Whether any items are currently selected. */
|
|
23
|
+
get hasSelection() {
|
|
24
|
+
return this._selected.size > 0;
|
|
25
|
+
}
|
|
26
|
+
/** Check whether a specific key is selected. */
|
|
27
|
+
isSelected(key) {
|
|
28
|
+
return this._selected.has(key);
|
|
29
|
+
}
|
|
30
|
+
/** Toggle a key's selection state (select if unselected, deselect if selected). */
|
|
31
|
+
toggle(key) {
|
|
32
|
+
if (this._selected.has(key)) this._selected.delete(key);
|
|
33
|
+
else this._selected.add(key);
|
|
34
|
+
this._publish();
|
|
35
|
+
}
|
|
36
|
+
/** Add one or more keys to the selection. */
|
|
37
|
+
select(...keys) {
|
|
38
|
+
let changed = false;
|
|
39
|
+
for (const key of keys) if (!this._selected.has(key)) {
|
|
40
|
+
this._selected.add(key);
|
|
41
|
+
changed = true;
|
|
42
|
+
}
|
|
43
|
+
if (changed) this._publish();
|
|
44
|
+
}
|
|
45
|
+
/** Remove one or more keys from the selection. */
|
|
46
|
+
deselect(...keys) {
|
|
47
|
+
let changed = false;
|
|
48
|
+
for (const key of keys) if (this._selected.has(key)) {
|
|
49
|
+
this._selected.delete(key);
|
|
50
|
+
changed = true;
|
|
51
|
+
}
|
|
52
|
+
if (changed) this._publish();
|
|
53
|
+
}
|
|
54
|
+
/** If all selected → deselect all, else select all. */
|
|
55
|
+
toggleAll(allKeys) {
|
|
56
|
+
if (allKeys.length > 0 && allKeys.every((k) => this._selected.has(k))) this._selected.clear();
|
|
57
|
+
else for (const key of allKeys) this._selected.add(key);
|
|
58
|
+
this._publish();
|
|
59
|
+
}
|
|
60
|
+
/** Replace the entire selection atomically. Single notification. */
|
|
61
|
+
set(...keys) {
|
|
62
|
+
if (keys.length === this._selected.size && keys.every((k) => this._selected.has(k))) return;
|
|
63
|
+
this._selected.clear();
|
|
64
|
+
for (const key of keys) this._selected.add(key);
|
|
65
|
+
this._publish();
|
|
66
|
+
}
|
|
67
|
+
/** Remove all items from the selection. */
|
|
68
|
+
clear() {
|
|
69
|
+
if (this._selected.size === 0) return;
|
|
70
|
+
this._selected.clear();
|
|
71
|
+
this._publish();
|
|
72
|
+
}
|
|
73
|
+
/** Filter an array to only items whose key is in the selection. */
|
|
74
|
+
selectedFrom(items, keyOf) {
|
|
75
|
+
return items.filter((item) => this._selected.has(keyOf(item)));
|
|
76
|
+
}
|
|
77
|
+
_publish() {
|
|
78
|
+
this._readonlyView = new Set(this._selected);
|
|
79
|
+
this.notify();
|
|
80
|
+
}
|
|
94
81
|
};
|
|
95
|
-
//#
|
|
82
|
+
//#endregion
|
|
83
|
+
export { Selection };
|
|
84
|
+
|
|
85
|
+
//# sourceMappingURL=Selection.js.map
|
package/dist/Selection.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Selection.js","sources":["../src/Selection.ts"],"sourcesContent":["import { Trackable } from './Trackable';\n\n/**\n * Key-based selection set with toggle and select-all support.\n * Tracks which items are selected by their key (id).\n * Subscribable — auto-tracked when used as a ViewModel property.\n */\nexport class Selection<K extends string | number = string | number> extends Trackable {\n private _selected: Set<K> = new Set();\n private _readonlyView: ReadonlySet<K> = this._selected;\n\n constructor() {\n super();\n }\n\n // ── Readable state ──\n\n /** Read-only view of currently selected keys. */\n get selected(): ReadonlySet<K> {\n return this._readonlyView;\n }\n\n /** Number of currently selected items. */\n get count(): number {\n return this._selected.size;\n }\n\n /** Whether any items are currently selected. */\n get hasSelection(): boolean {\n return this._selected.size > 0;\n }\n\n // ── Query ──\n\n /** Check whether a specific key is selected. */\n isSelected(key: K): boolean {\n return this._selected.has(key);\n }\n\n // ── Actions ──\n\n /** Toggle a key's selection state (select if unselected, deselect if selected). */\n toggle(key: K): void {\n if (this._selected.has(key)) {\n this._selected.delete(key);\n } else {\n this._selected.add(key);\n }\n this._publish();\n }\n\n /** Add one or more keys to the selection. */\n select(...keys: K[]): void {\n let changed = false;\n for (const key of keys) {\n if (!this._selected.has(key)) {\n this._selected.add(key);\n changed = true;\n }\n }\n if (changed) this._publish();\n }\n\n /** Remove one or more keys from the selection. */\n deselect(...keys: K[]): void {\n let changed = false;\n for (const key of keys) {\n if (this._selected.has(key)) {\n this._selected.delete(key);\n changed = true;\n }\n }\n if (changed) this._publish();\n }\n\n /** If all selected → deselect all, else select all. */\n toggleAll(allKeys: K[]): void {\n const allSelected = allKeys.length > 0 && allKeys.every(k => this._selected.has(k));\n if (allSelected) {\n this._selected.clear();\n } else {\n for (const key of allKeys) this._selected.add(key);\n }\n this._publish();\n }\n\n /** Replace the entire selection atomically. Single notification. */\n set(...keys: K[]): void {\n // Check if anything actually changed\n if (keys.length === this._selected.size && keys.every(k => this._selected.has(k))) return;\n this._selected.clear();\n for (const key of keys) this._selected.add(key);\n this._publish();\n }\n\n /** Remove all items from the selection. */\n clear(): void {\n if (this._selected.size === 0) return;\n this._selected.clear();\n this._publish();\n }\n\n // ── Utility ──\n\n /** Filter an array to only items whose key is in the selection. */\n selectedFrom<T>(items: T[], keyOf: (item: T) => K): T[] {\n return items.filter(item => this._selected.has(keyOf(item)));\n }\n\n // ── Internal ──\n\n private _publish(): void {\n // Replace readonlyView so reference equality changes (needed for React)\n this._readonlyView = new Set(this._selected);\n this.notify();\n }\n}\n"],"
|
|
1
|
+
{"version":3,"file":"Selection.js","names":[],"sources":["../src/Selection.ts"],"sourcesContent":["import { Trackable } from './Trackable';\n\n/**\n * Key-based selection set with toggle and select-all support.\n * Tracks which items are selected by their key (id).\n * Subscribable — auto-tracked when used as a ViewModel property.\n */\nexport class Selection<K extends string | number = string | number> extends Trackable {\n private _selected: Set<K> = new Set();\n private _readonlyView: ReadonlySet<K> = this._selected;\n\n constructor() {\n super();\n }\n\n // ── Readable state ──\n\n /** Read-only view of currently selected keys. */\n get selected(): ReadonlySet<K> {\n return this._readonlyView;\n }\n\n /** Number of currently selected items. */\n get count(): number {\n return this._selected.size;\n }\n\n /** Whether any items are currently selected. */\n get hasSelection(): boolean {\n return this._selected.size > 0;\n }\n\n // ── Query ──\n\n /** Check whether a specific key is selected. */\n isSelected(key: K): boolean {\n return this._selected.has(key);\n }\n\n // ── Actions ──\n\n /** Toggle a key's selection state (select if unselected, deselect if selected). */\n toggle(key: K): void {\n if (this._selected.has(key)) {\n this._selected.delete(key);\n } else {\n this._selected.add(key);\n }\n this._publish();\n }\n\n /** Add one or more keys to the selection. */\n select(...keys: K[]): void {\n let changed = false;\n for (const key of keys) {\n if (!this._selected.has(key)) {\n this._selected.add(key);\n changed = true;\n }\n }\n if (changed) this._publish();\n }\n\n /** Remove one or more keys from the selection. */\n deselect(...keys: K[]): void {\n let changed = false;\n for (const key of keys) {\n if (this._selected.has(key)) {\n this._selected.delete(key);\n changed = true;\n }\n }\n if (changed) this._publish();\n }\n\n /** If all selected → deselect all, else select all. */\n toggleAll(allKeys: K[]): void {\n const allSelected = allKeys.length > 0 && allKeys.every(k => this._selected.has(k));\n if (allSelected) {\n this._selected.clear();\n } else {\n for (const key of allKeys) this._selected.add(key);\n }\n this._publish();\n }\n\n /** Replace the entire selection atomically. Single notification. */\n set(...keys: K[]): void {\n // Check if anything actually changed\n if (keys.length === this._selected.size && keys.every(k => this._selected.has(k))) return;\n this._selected.clear();\n for (const key of keys) this._selected.add(key);\n this._publish();\n }\n\n /** Remove all items from the selection. */\n clear(): void {\n if (this._selected.size === 0) return;\n this._selected.clear();\n this._publish();\n }\n\n // ── Utility ──\n\n /** Filter an array to only items whose key is in the selection. */\n selectedFrom<T>(items: T[], keyOf: (item: T) => K): T[] {\n return items.filter(item => this._selected.has(keyOf(item)));\n }\n\n // ── Internal ──\n\n private _publish(): void {\n // Replace readonlyView so reference equality changes (needed for React)\n this._readonlyView = new Set(this._selected);\n this.notify();\n }\n}\n"],"mappings":";;;;;;;AAOA,IAAa,YAAb,cAA4E,UAAU;CACpF,4BAA4B,IAAI,KAAK;CACrC,gBAAwC,KAAK;CAE7C,cAAc;AACZ,SAAO;;;CAMT,IAAI,WAA2B;AAC7B,SAAO,KAAK;;;CAId,IAAI,QAAgB;AAClB,SAAO,KAAK,UAAU;;;CAIxB,IAAI,eAAwB;AAC1B,SAAO,KAAK,UAAU,OAAO;;;CAM/B,WAAW,KAAiB;AAC1B,SAAO,KAAK,UAAU,IAAI,IAAI;;;CAMhC,OAAO,KAAc;AACnB,MAAI,KAAK,UAAU,IAAI,IAAI,CACzB,MAAK,UAAU,OAAO,IAAI;MAE1B,MAAK,UAAU,IAAI,IAAI;AAEzB,OAAK,UAAU;;;CAIjB,OAAO,GAAG,MAAiB;EACzB,IAAI,UAAU;AACd,OAAK,MAAM,OAAO,KAChB,KAAI,CAAC,KAAK,UAAU,IAAI,IAAI,EAAE;AAC5B,QAAK,UAAU,IAAI,IAAI;AACvB,aAAU;;AAGd,MAAI,QAAS,MAAK,UAAU;;;CAI9B,SAAS,GAAG,MAAiB;EAC3B,IAAI,UAAU;AACd,OAAK,MAAM,OAAO,KAChB,KAAI,KAAK,UAAU,IAAI,IAAI,EAAE;AAC3B,QAAK,UAAU,OAAO,IAAI;AAC1B,aAAU;;AAGd,MAAI,QAAS,MAAK,UAAU;;;CAI9B,UAAU,SAAoB;AAE5B,MADoB,QAAQ,SAAS,KAAK,QAAQ,OAAM,MAAK,KAAK,UAAU,IAAI,EAAE,CAAC,CAEjF,MAAK,UAAU,OAAO;MAEtB,MAAK,MAAM,OAAO,QAAS,MAAK,UAAU,IAAI,IAAI;AAEpD,OAAK,UAAU;;;CAIjB,IAAI,GAAG,MAAiB;AAEtB,MAAI,KAAK,WAAW,KAAK,UAAU,QAAQ,KAAK,OAAM,MAAK,KAAK,UAAU,IAAI,EAAE,CAAC,CAAE;AACnF,OAAK,UAAU,OAAO;AACtB,OAAK,MAAM,OAAO,KAAM,MAAK,UAAU,IAAI,IAAI;AAC/C,OAAK,UAAU;;;CAIjB,QAAc;AACZ,MAAI,KAAK,UAAU,SAAS,EAAG;AAC/B,OAAK,UAAU,OAAO;AACtB,OAAK,UAAU;;;CAMjB,aAAgB,OAAY,OAA4B;AACtD,SAAO,MAAM,QAAO,SAAQ,KAAK,UAAU,IAAI,MAAM,KAAK,CAAC,CAAC;;CAK9D,WAAyB;AAEvB,OAAK,gBAAgB,IAAI,IAAI,KAAK,UAAU;AAC5C,OAAK,QAAQ"}
|
package/dist/Service.cjs
CHANGED
|
@@ -1,56 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
}
|
|
1
|
+
const require_bindPublicMethods = require("./bindPublicMethods.cjs");
|
|
2
|
+
//#region src/Service.ts
|
|
3
|
+
var PROTECTED_KEYS = new Set(["addCleanup"]);
|
|
4
|
+
/**
|
|
5
|
+
* Base class for non-reactive infrastructure services.
|
|
6
|
+
* Services encapsulate external dependencies like APIs, storage, etc.
|
|
7
|
+
*/
|
|
8
|
+
var Service = class {
|
|
9
|
+
_disposed = false;
|
|
10
|
+
_initialized = false;
|
|
11
|
+
_abortController = null;
|
|
12
|
+
_cleanups = null;
|
|
13
|
+
constructor() {
|
|
14
|
+
require_bindPublicMethods.bindPublicMethods(this, Object.prototype, PROTECTED_KEYS);
|
|
15
|
+
}
|
|
16
|
+
/** Whether this instance has been disposed. */
|
|
17
|
+
get disposed() {
|
|
18
|
+
return this._disposed;
|
|
19
|
+
}
|
|
20
|
+
/** Whether init() has been called. */
|
|
21
|
+
get initialized() {
|
|
22
|
+
return this._initialized;
|
|
23
|
+
}
|
|
24
|
+
/** AbortSignal that fires when this instance is disposed. Lazily created. */
|
|
25
|
+
get disposeSignal() {
|
|
26
|
+
if (!this._abortController) this._abortController = new AbortController();
|
|
27
|
+
return this._abortController.signal;
|
|
28
|
+
}
|
|
29
|
+
/** Initializes the instance. Called automatically by React hooks after mount. */
|
|
30
|
+
init() {
|
|
31
|
+
if (this._initialized || this._disposed) return;
|
|
32
|
+
this._initialized = true;
|
|
33
|
+
return this.onInit?.();
|
|
34
|
+
}
|
|
35
|
+
/** Tears down the instance, releasing all subscriptions and resources. */
|
|
36
|
+
dispose() {
|
|
37
|
+
if (this._disposed) return;
|
|
38
|
+
this._disposed = true;
|
|
39
|
+
this._abortController?.abort();
|
|
40
|
+
if (this._cleanups) {
|
|
41
|
+
for (const fn of this._cleanups) fn();
|
|
42
|
+
this._cleanups = null;
|
|
43
|
+
}
|
|
44
|
+
this.onDispose?.();
|
|
45
|
+
}
|
|
46
|
+
/** Registers a cleanup function to be called on dispose. @protected */
|
|
47
|
+
addCleanup(fn) {
|
|
48
|
+
if (!this._cleanups) this._cleanups = [];
|
|
49
|
+
this._cleanups.push(fn);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
//#endregion
|
|
55
53
|
exports.Service = Service;
|
|
56
|
-
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=Service.cjs.map
|
package/dist/Service.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.cjs","sources":["../src/Service.ts"],"sourcesContent":["import type { Disposable } from './types';\nimport { bindPublicMethods } from './bindPublicMethods';\n\nconst PROTECTED_KEYS = new Set(['addCleanup']);\n\n/**\n * Base class for non-reactive infrastructure services.\n * Services encapsulate external dependencies like APIs, storage, etc.\n */\nexport abstract class Service implements Disposable {\n private _disposed = false;\n private _initialized = false;\n private _abortController: AbortController | null = null;\n private _cleanups: (() => void)[] | null = null;\n\n constructor() {\n bindPublicMethods(this, Object.prototype, PROTECTED_KEYS);\n }\n\n /** Whether this instance has been disposed. */\n get disposed(): boolean {\n return this._disposed;\n }\n\n /** Whether init() has been called. */\n get initialized(): boolean {\n return this._initialized;\n }\n\n /** AbortSignal that fires when this instance is disposed. Lazily created. */\n get disposeSignal(): AbortSignal {\n if (!this._abortController) {\n this._abortController = new AbortController();\n }\n return this._abortController.signal;\n }\n\n /** Initializes the instance. Called automatically by React hooks after mount. */\n init(): void | Promise<void> {\n if (this._initialized || this._disposed) return;\n this._initialized = true;\n return this.onInit?.();\n }\n\n /** Tears down the instance, releasing all subscriptions and resources. */\n dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n this._abortController?.abort();\n if (this._cleanups) {\n for (const fn of this._cleanups) fn();\n this._cleanups = null;\n }\n this.onDispose?.();\n }\n\n /** Registers a cleanup function to be called on dispose. @protected */\n protected addCleanup(fn: () => void): void {\n if (!this._cleanups) {\n this._cleanups = [];\n }\n this._cleanups.push(fn);\n }\n\n /** Lifecycle hook called at the end of init(). Override to load initial data. @protected */\n protected onInit?(): void | Promise<void>;\n /** Lifecycle hook called during dispose(). Override for custom teardown. @protected */\n protected onDispose?(): void;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"Service.cjs","names":[],"sources":["../src/Service.ts"],"sourcesContent":["import type { Disposable } from './types';\nimport { bindPublicMethods } from './bindPublicMethods';\n\nconst PROTECTED_KEYS = new Set(['addCleanup']);\n\n/**\n * Base class for non-reactive infrastructure services.\n * Services encapsulate external dependencies like APIs, storage, etc.\n */\nexport abstract class Service implements Disposable {\n private _disposed = false;\n private _initialized = false;\n private _abortController: AbortController | null = null;\n private _cleanups: (() => void)[] | null = null;\n\n constructor() {\n bindPublicMethods(this, Object.prototype, PROTECTED_KEYS);\n }\n\n /** Whether this instance has been disposed. */\n get disposed(): boolean {\n return this._disposed;\n }\n\n /** Whether init() has been called. */\n get initialized(): boolean {\n return this._initialized;\n }\n\n /** AbortSignal that fires when this instance is disposed. Lazily created. */\n get disposeSignal(): AbortSignal {\n if (!this._abortController) {\n this._abortController = new AbortController();\n }\n return this._abortController.signal;\n }\n\n /** Initializes the instance. Called automatically by React hooks after mount. */\n init(): void | Promise<void> {\n if (this._initialized || this._disposed) return;\n this._initialized = true;\n return this.onInit?.();\n }\n\n /** Tears down the instance, releasing all subscriptions and resources. */\n dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n this._abortController?.abort();\n if (this._cleanups) {\n for (const fn of this._cleanups) fn();\n this._cleanups = null;\n }\n this.onDispose?.();\n }\n\n /** Registers a cleanup function to be called on dispose. @protected */\n protected addCleanup(fn: () => void): void {\n if (!this._cleanups) {\n this._cleanups = [];\n }\n this._cleanups.push(fn);\n }\n\n /** Lifecycle hook called at the end of init(). Override to load initial data. @protected */\n protected onInit?(): void | Promise<void>;\n /** Lifecycle hook called during dispose(). Override for custom teardown. @protected */\n protected onDispose?(): void;\n}\n"],"mappings":";;AAGA,IAAM,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC;;;;;AAM9C,IAAsB,UAAtB,MAAoD;CAClD,YAAoB;CACpB,eAAuB;CACvB,mBAAmD;CACnD,YAA2C;CAE3C,cAAc;AACZ,4BAAA,kBAAkB,MAAM,OAAO,WAAW,eAAe;;;CAI3D,IAAI,WAAoB;AACtB,SAAO,KAAK;;;CAId,IAAI,cAAuB;AACzB,SAAO,KAAK;;;CAId,IAAI,gBAA6B;AAC/B,MAAI,CAAC,KAAK,iBACR,MAAK,mBAAmB,IAAI,iBAAiB;AAE/C,SAAO,KAAK,iBAAiB;;;CAI/B,OAA6B;AAC3B,MAAI,KAAK,gBAAgB,KAAK,UAAW;AACzC,OAAK,eAAe;AACpB,SAAO,KAAK,UAAU;;;CAIxB,UAAgB;AACd,MAAI,KAAK,UACP;AAGF,OAAK,YAAY;AACjB,OAAK,kBAAkB,OAAO;AAC9B,MAAI,KAAK,WAAW;AAClB,QAAK,MAAM,MAAM,KAAK,UAAW,KAAI;AACrC,QAAK,YAAY;;AAEnB,OAAK,aAAa;;;CAIpB,WAAqB,IAAsB;AACzC,MAAI,CAAC,KAAK,UACR,MAAK,YAAY,EAAE;AAErB,OAAK,UAAU,KAAK,GAAG"}
|
package/dist/Service.js
CHANGED
|
@@ -1,56 +1,55 @@
|
|
|
1
1
|
import { bindPublicMethods } from "./bindPublicMethods.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
export {
|
|
54
|
-
Service
|
|
2
|
+
//#region src/Service.ts
|
|
3
|
+
var PROTECTED_KEYS = new Set(["addCleanup"]);
|
|
4
|
+
/**
|
|
5
|
+
* Base class for non-reactive infrastructure services.
|
|
6
|
+
* Services encapsulate external dependencies like APIs, storage, etc.
|
|
7
|
+
*/
|
|
8
|
+
var Service = class {
|
|
9
|
+
_disposed = false;
|
|
10
|
+
_initialized = false;
|
|
11
|
+
_abortController = null;
|
|
12
|
+
_cleanups = null;
|
|
13
|
+
constructor() {
|
|
14
|
+
bindPublicMethods(this, Object.prototype, PROTECTED_KEYS);
|
|
15
|
+
}
|
|
16
|
+
/** Whether this instance has been disposed. */
|
|
17
|
+
get disposed() {
|
|
18
|
+
return this._disposed;
|
|
19
|
+
}
|
|
20
|
+
/** Whether init() has been called. */
|
|
21
|
+
get initialized() {
|
|
22
|
+
return this._initialized;
|
|
23
|
+
}
|
|
24
|
+
/** AbortSignal that fires when this instance is disposed. Lazily created. */
|
|
25
|
+
get disposeSignal() {
|
|
26
|
+
if (!this._abortController) this._abortController = new AbortController();
|
|
27
|
+
return this._abortController.signal;
|
|
28
|
+
}
|
|
29
|
+
/** Initializes the instance. Called automatically by React hooks after mount. */
|
|
30
|
+
init() {
|
|
31
|
+
if (this._initialized || this._disposed) return;
|
|
32
|
+
this._initialized = true;
|
|
33
|
+
return this.onInit?.();
|
|
34
|
+
}
|
|
35
|
+
/** Tears down the instance, releasing all subscriptions and resources. */
|
|
36
|
+
dispose() {
|
|
37
|
+
if (this._disposed) return;
|
|
38
|
+
this._disposed = true;
|
|
39
|
+
this._abortController?.abort();
|
|
40
|
+
if (this._cleanups) {
|
|
41
|
+
for (const fn of this._cleanups) fn();
|
|
42
|
+
this._cleanups = null;
|
|
43
|
+
}
|
|
44
|
+
this.onDispose?.();
|
|
45
|
+
}
|
|
46
|
+
/** Registers a cleanup function to be called on dispose. @protected */
|
|
47
|
+
addCleanup(fn) {
|
|
48
|
+
if (!this._cleanups) this._cleanups = [];
|
|
49
|
+
this._cleanups.push(fn);
|
|
50
|
+
}
|
|
55
51
|
};
|
|
56
|
-
//#
|
|
52
|
+
//#endregion
|
|
53
|
+
export { Service };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=Service.js.map
|
package/dist/Service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.js","sources":["../src/Service.ts"],"sourcesContent":["import type { Disposable } from './types';\nimport { bindPublicMethods } from './bindPublicMethods';\n\nconst PROTECTED_KEYS = new Set(['addCleanup']);\n\n/**\n * Base class for non-reactive infrastructure services.\n * Services encapsulate external dependencies like APIs, storage, etc.\n */\nexport abstract class Service implements Disposable {\n private _disposed = false;\n private _initialized = false;\n private _abortController: AbortController | null = null;\n private _cleanups: (() => void)[] | null = null;\n\n constructor() {\n bindPublicMethods(this, Object.prototype, PROTECTED_KEYS);\n }\n\n /** Whether this instance has been disposed. */\n get disposed(): boolean {\n return this._disposed;\n }\n\n /** Whether init() has been called. */\n get initialized(): boolean {\n return this._initialized;\n }\n\n /** AbortSignal that fires when this instance is disposed. Lazily created. */\n get disposeSignal(): AbortSignal {\n if (!this._abortController) {\n this._abortController = new AbortController();\n }\n return this._abortController.signal;\n }\n\n /** Initializes the instance. Called automatically by React hooks after mount. */\n init(): void | Promise<void> {\n if (this._initialized || this._disposed) return;\n this._initialized = true;\n return this.onInit?.();\n }\n\n /** Tears down the instance, releasing all subscriptions and resources. */\n dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n this._abortController?.abort();\n if (this._cleanups) {\n for (const fn of this._cleanups) fn();\n this._cleanups = null;\n }\n this.onDispose?.();\n }\n\n /** Registers a cleanup function to be called on dispose. @protected */\n protected addCleanup(fn: () => void): void {\n if (!this._cleanups) {\n this._cleanups = [];\n }\n this._cleanups.push(fn);\n }\n\n /** Lifecycle hook called at the end of init(). Override to load initial data. @protected */\n protected onInit?(): void | Promise<void>;\n /** Lifecycle hook called during dispose(). Override for custom teardown. @protected */\n protected onDispose?(): void;\n}\n"],"
|
|
1
|
+
{"version":3,"file":"Service.js","names":[],"sources":["../src/Service.ts"],"sourcesContent":["import type { Disposable } from './types';\nimport { bindPublicMethods } from './bindPublicMethods';\n\nconst PROTECTED_KEYS = new Set(['addCleanup']);\n\n/**\n * Base class for non-reactive infrastructure services.\n * Services encapsulate external dependencies like APIs, storage, etc.\n */\nexport abstract class Service implements Disposable {\n private _disposed = false;\n private _initialized = false;\n private _abortController: AbortController | null = null;\n private _cleanups: (() => void)[] | null = null;\n\n constructor() {\n bindPublicMethods(this, Object.prototype, PROTECTED_KEYS);\n }\n\n /** Whether this instance has been disposed. */\n get disposed(): boolean {\n return this._disposed;\n }\n\n /** Whether init() has been called. */\n get initialized(): boolean {\n return this._initialized;\n }\n\n /** AbortSignal that fires when this instance is disposed. Lazily created. */\n get disposeSignal(): AbortSignal {\n if (!this._abortController) {\n this._abortController = new AbortController();\n }\n return this._abortController.signal;\n }\n\n /** Initializes the instance. Called automatically by React hooks after mount. */\n init(): void | Promise<void> {\n if (this._initialized || this._disposed) return;\n this._initialized = true;\n return this.onInit?.();\n }\n\n /** Tears down the instance, releasing all subscriptions and resources. */\n dispose(): void {\n if (this._disposed) {\n return;\n }\n\n this._disposed = true;\n this._abortController?.abort();\n if (this._cleanups) {\n for (const fn of this._cleanups) fn();\n this._cleanups = null;\n }\n this.onDispose?.();\n }\n\n /** Registers a cleanup function to be called on dispose. @protected */\n protected addCleanup(fn: () => void): void {\n if (!this._cleanups) {\n this._cleanups = [];\n }\n this._cleanups.push(fn);\n }\n\n /** Lifecycle hook called at the end of init(). Override to load initial data. @protected */\n protected onInit?(): void | Promise<void>;\n /** Lifecycle hook called during dispose(). Override for custom teardown. @protected */\n protected onDispose?(): void;\n}\n"],"mappings":";;AAGA,IAAM,iBAAiB,IAAI,IAAI,CAAC,aAAa,CAAC;;;;;AAM9C,IAAsB,UAAtB,MAAoD;CAClD,YAAoB;CACpB,eAAuB;CACvB,mBAAmD;CACnD,YAA2C;CAE3C,cAAc;AACZ,oBAAkB,MAAM,OAAO,WAAW,eAAe;;;CAI3D,IAAI,WAAoB;AACtB,SAAO,KAAK;;;CAId,IAAI,cAAuB;AACzB,SAAO,KAAK;;;CAId,IAAI,gBAA6B;AAC/B,MAAI,CAAC,KAAK,iBACR,MAAK,mBAAmB,IAAI,iBAAiB;AAE/C,SAAO,KAAK,iBAAiB;;;CAI/B,OAA6B;AAC3B,MAAI,KAAK,gBAAgB,KAAK,UAAW;AACzC,OAAK,eAAe;AACpB,SAAO,KAAK,UAAU;;;CAIxB,UAAgB;AACd,MAAI,KAAK,UACP;AAGF,OAAK,YAAY;AACjB,OAAK,kBAAkB,OAAO;AAC9B,MAAI,KAAK,WAAW;AAClB,QAAK,MAAM,MAAM,KAAK,UAAW,KAAI;AACrC,QAAK,YAAY;;AAEnB,OAAK,aAAa;;;CAIpB,WAAqB,IAAsB;AACzC,MAAI,CAAC,KAAK,UACR,MAAK,YAAY,EAAE;AAErB,OAAK,UAAU,KAAK,GAAG"}
|