@portel/photon-core 2.4.0 → 2.5.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/asset-discovery.d.ts.map +1 -1
- package/dist/asset-discovery.js +2 -1
- package/dist/asset-discovery.js.map +1 -1
- package/dist/base.d.ts +6 -0
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +11 -1
- package/dist/base.js.map +1 -1
- package/dist/collections/ReactiveArray.d.ts +97 -0
- package/dist/collections/ReactiveArray.d.ts.map +1 -0
- package/dist/collections/ReactiveArray.js +158 -0
- package/dist/collections/ReactiveArray.js.map +1 -0
- package/dist/collections/ReactiveMap.d.ts +50 -0
- package/dist/collections/ReactiveMap.d.ts.map +1 -0
- package/dist/collections/ReactiveMap.js +71 -0
- package/dist/collections/ReactiveMap.js.map +1 -0
- package/dist/collections/ReactiveSet.d.ts +50 -0
- package/dist/collections/ReactiveSet.d.ts.map +1 -0
- package/dist/collections/ReactiveSet.js +71 -0
- package/dist/collections/ReactiveSet.js.map +1 -0
- package/dist/collections/index.d.ts +44 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/collections/index.js +44 -0
- package/dist/collections/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui-types/Cards.d.ts +139 -0
- package/dist/ui-types/Cards.d.ts.map +1 -0
- package/dist/ui-types/Cards.js +235 -0
- package/dist/ui-types/Cards.js.map +1 -0
- package/dist/ui-types/Chart.d.ts +136 -0
- package/dist/ui-types/Chart.d.ts.map +1 -0
- package/dist/ui-types/Chart.js +188 -0
- package/dist/ui-types/Chart.js.map +1 -0
- package/dist/ui-types/Field.d.ts +342 -0
- package/dist/ui-types/Field.d.ts.map +1 -0
- package/dist/ui-types/Field.js +200 -0
- package/dist/ui-types/Field.js.map +1 -0
- package/dist/ui-types/FieldRenderer.d.ts +32 -0
- package/dist/ui-types/FieldRenderer.d.ts.map +1 -0
- package/dist/ui-types/FieldRenderer.js +277 -0
- package/dist/ui-types/FieldRenderer.js.map +1 -0
- package/dist/ui-types/Form.d.ts +212 -0
- package/dist/ui-types/Form.d.ts.map +1 -0
- package/dist/ui-types/Form.js +278 -0
- package/dist/ui-types/Form.js.map +1 -0
- package/dist/ui-types/Progress.d.ts +130 -0
- package/dist/ui-types/Progress.d.ts.map +1 -0
- package/dist/ui-types/Progress.js +191 -0
- package/dist/ui-types/Progress.js.map +1 -0
- package/dist/ui-types/Stats.d.ts +108 -0
- package/dist/ui-types/Stats.d.ts.map +1 -0
- package/dist/ui-types/Stats.js +162 -0
- package/dist/ui-types/Stats.js.map +1 -0
- package/dist/ui-types/Table.d.ts +206 -0
- package/dist/ui-types/Table.d.ts.map +1 -0
- package/dist/ui-types/Table.js +367 -0
- package/dist/ui-types/Table.js.map +1 -0
- package/dist/ui-types/base.d.ts +17 -0
- package/dist/ui-types/base.d.ts.map +1 -0
- package/dist/ui-types/base.js +18 -0
- package/dist/ui-types/base.js.map +1 -0
- package/dist/ui-types/index.d.ts +42 -0
- package/dist/ui-types/index.d.ts.map +1 -0
- package/dist/ui-types/index.js +50 -0
- package/dist/ui-types/index.js.map +1 -0
- package/package.json +2 -2
- package/src/asset-discovery.ts +2 -1
- package/src/base.ts +13 -1
- package/src/collections/ReactiveArray.ts +179 -0
- package/src/collections/ReactiveMap.ts +81 -0
- package/src/collections/ReactiveSet.ts +81 -0
- package/src/collections/index.ts +44 -0
- package/src/index.ts +75 -0
- package/src/types.ts +2 -0
- package/src/ui-types/Cards.ts +286 -0
- package/src/ui-types/Chart.ts +239 -0
- package/src/ui-types/Field.ts +594 -0
- package/src/ui-types/FieldRenderer.ts +364 -0
- package/src/ui-types/Form.ts +363 -0
- package/src/ui-types/Progress.ts +237 -0
- package/src/ui-types/Stats.ts +204 -0
- package/src/ui-types/Table.ts +438 -0
- package/src/ui-types/base.ts +25 -0
- package/src/ui-types/index.ts +96 -0
- package/src/ui-types/ui-types.test.ts +444 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-discovery.d.ts","sourceRoot":"","sources":["../src/asset-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA+CnC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"asset-discovery.d.ts","sourceRoot":"","sources":["../src/asset-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc/C;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA+CnC;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
package/dist/asset-discovery.js
CHANGED
|
@@ -88,7 +88,8 @@ export async function autoDiscoverAssets(assetFolder, assets) {
|
|
|
88
88
|
id,
|
|
89
89
|
path: `./ui/${file}`,
|
|
90
90
|
resolvedPath: path.join(uiDir, file),
|
|
91
|
-
mimeType
|
|
91
|
+
// Don't set mimeType for UI assets - let server decide based on client capabilities
|
|
92
|
+
// Server will use getUIMimeType() to return text/html;profile=mcp-app for MCP Apps clients
|
|
92
93
|
});
|
|
93
94
|
}
|
|
94
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-discovery.js","sourceRoot":"","sources":["../src/asset-discovery.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"asset-discovery.js","sourceRoot":"","sources":["../src/asset-discovery.ts"],"names":[],"mappings":"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"}
|
package/dist/base.d.ts
CHANGED
|
@@ -47,6 +47,12 @@ import { MCPClient, MCPClientFactory } from '@portel/mcp';
|
|
|
47
47
|
* - Return value = Tool result
|
|
48
48
|
*/
|
|
49
49
|
export declare class PhotonMCP {
|
|
50
|
+
/**
|
|
51
|
+
* Photon name (MCP name) - set by runtime loader
|
|
52
|
+
* Used to identify the source of emitted events for injected photon routing
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
_photonName?: string;
|
|
50
56
|
/**
|
|
51
57
|
* Emit an event/progress update
|
|
52
58
|
*
|
package/dist/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAK1E;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AAK1E;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI;IA+B/B;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAEzC;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAsF;IAEzG;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,MAAM;IAQ3B;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,MAAM,EAAE;IAiCjC;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAkBrH;;OAEG;IACG,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAC9B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;IAoBhF;;;;;OAKG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAM9C;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;;OAGG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOzC;;;;;;;;;;;;;;;;;;;;;OAqBG;cACa,QAAQ,CAAC,CAAC,EACxB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,CAAC,CAAC;CAGd"}
|
package/dist/base.js
CHANGED
|
@@ -50,6 +50,12 @@ import { withLock as withLockHelper } from './decorators.js';
|
|
|
50
50
|
* - Return value = Tool result
|
|
51
51
|
*/
|
|
52
52
|
export class PhotonMCP {
|
|
53
|
+
/**
|
|
54
|
+
* Photon name (MCP name) - set by runtime loader
|
|
55
|
+
* Used to identify the source of emitted events for injected photon routing
|
|
56
|
+
* @internal
|
|
57
|
+
*/
|
|
58
|
+
_photonName;
|
|
53
59
|
/**
|
|
54
60
|
* Emit an event/progress update
|
|
55
61
|
*
|
|
@@ -73,9 +79,13 @@ export class PhotonMCP {
|
|
|
73
79
|
*/
|
|
74
80
|
emit(data) {
|
|
75
81
|
const store = executionContext.getStore();
|
|
82
|
+
// Include source photon name for injected photon event routing
|
|
83
|
+
const emitData = this._photonName && typeof data === 'object' && data !== null
|
|
84
|
+
? { ...data, _source: this._photonName }
|
|
85
|
+
: data;
|
|
76
86
|
// Send to local output handler (current caller)
|
|
77
87
|
if (store?.outputHandler) {
|
|
78
|
-
store.outputHandler(
|
|
88
|
+
store.outputHandler(emitData);
|
|
79
89
|
}
|
|
80
90
|
// If channel is specified, also publish to broker for cross-process notification
|
|
81
91
|
if (data && typeof data.channel === 'string') {
|
package/dist/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AAEH,OAAO,EAA+B,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IACpB;;;;;;;;;;;;;;;;;;;;OAoBG;IACO,IAAI,CAAC,IAAS;QACtB,MAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAC;QAE1C,gDAAgD;QAChD,IAAI,KAAK,EAAE,aAAa,EAAE,CAAC;YACzB,KAAK,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../src/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveArray - A managed array that auto-emits events on mutations
|
|
3
|
+
*
|
|
4
|
+
* When used as a class property, automatically emits events when items are
|
|
5
|
+
* added, removed, or updated.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ReactiveArray } from '@portel/photon-core';
|
|
10
|
+
*
|
|
11
|
+
* export default class TodoList {
|
|
12
|
+
* items = ReactiveArray.create<Task>('items', (event, data) => this.emit(event, data));
|
|
13
|
+
*
|
|
14
|
+
* add(text: string) {
|
|
15
|
+
* this.items.push({ id: crypto.randomUUID(), text });
|
|
16
|
+
* // Auto-emits 'items:added' with the new item
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Event naming convention (inspired by Firebase):
|
|
22
|
+
* - `{prop}:added` - Item pushed/inserted
|
|
23
|
+
* - `{prop}:removed` - Item popped/spliced out
|
|
24
|
+
* - `{prop}:updated` - Item at index changed
|
|
25
|
+
* - `{prop}:changed` - Full array replaced
|
|
26
|
+
*/
|
|
27
|
+
export type Emitter = (event: string, data: unknown) => void;
|
|
28
|
+
export declare class ReactiveArray<T> extends Array<T> {
|
|
29
|
+
private _propertyName;
|
|
30
|
+
private _emitter;
|
|
31
|
+
/**
|
|
32
|
+
* Create a new ReactiveArray bound to a property name and emitter function.
|
|
33
|
+
* The emitter is called with event names like 'items:added', 'items:removed', etc.
|
|
34
|
+
*/
|
|
35
|
+
static create<T>(propertyName: string, emitter: Emitter, initialItems?: T[]): ReactiveArray<T>;
|
|
36
|
+
/**
|
|
37
|
+
* Add one or more elements to the end of the array.
|
|
38
|
+
* Emits `{prop}:added` for each item.
|
|
39
|
+
*/
|
|
40
|
+
push(...items: T[]): number;
|
|
41
|
+
/**
|
|
42
|
+
* Remove the last element from the array.
|
|
43
|
+
* Emits `{prop}:removed` with the removed item.
|
|
44
|
+
*/
|
|
45
|
+
pop(): T | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Remove the first element from the array.
|
|
48
|
+
* Emits `{prop}:removed` with the removed item.
|
|
49
|
+
*/
|
|
50
|
+
shift(): T | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Add one or more elements to the beginning of the array.
|
|
53
|
+
* Emits `{prop}:added` for each item.
|
|
54
|
+
*/
|
|
55
|
+
unshift(...items: T[]): number;
|
|
56
|
+
/**
|
|
57
|
+
* Remove/replace elements from the array.
|
|
58
|
+
* Emits `{prop}:removed` for deleted items and `{prop}:added` for inserted items.
|
|
59
|
+
*/
|
|
60
|
+
splice(start: number, deleteCount?: number, ...items: T[]): T[];
|
|
61
|
+
/**
|
|
62
|
+
* Set an element at a specific index.
|
|
63
|
+
* Emits `{prop}:updated` with `{ index, value, previous }`.
|
|
64
|
+
*/
|
|
65
|
+
set(index: number, value: T): void;
|
|
66
|
+
/**
|
|
67
|
+
* Replace all items in the array.
|
|
68
|
+
* Emits `{prop}:changed` with the full new array.
|
|
69
|
+
*/
|
|
70
|
+
replaceAll(items: T[]): void;
|
|
71
|
+
/**
|
|
72
|
+
* Clear all items from the array.
|
|
73
|
+
* Emits `{prop}:changed` with an empty array.
|
|
74
|
+
*/
|
|
75
|
+
clear(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Sort the array in place.
|
|
78
|
+
* Emits `{prop}:changed` with the sorted array.
|
|
79
|
+
*/
|
|
80
|
+
sort(compareFn?: (a: T, b: T) => number): this;
|
|
81
|
+
/**
|
|
82
|
+
* Reverse the array in place.
|
|
83
|
+
* Emits `{prop}:changed` with the reversed array.
|
|
84
|
+
*/
|
|
85
|
+
reverse(): this;
|
|
86
|
+
/**
|
|
87
|
+
* Fill the array with a value.
|
|
88
|
+
* Emits `{prop}:changed` with the filled array.
|
|
89
|
+
*/
|
|
90
|
+
fill(value: T, start?: number, end?: number): this;
|
|
91
|
+
/**
|
|
92
|
+
* Copy items within the array.
|
|
93
|
+
* Emits `{prop}:changed` with the modified array.
|
|
94
|
+
*/
|
|
95
|
+
copyWithin(target: number, start: number, end?: number): this;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=ReactiveArray.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactiveArray.d.ts","sourceRoot":"","sources":["../../src/collections/ReactiveArray.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;AAE7D,qBAAa,aAAa,CAAC,CAAC,CAAE,SAAQ,KAAK,CAAC,CAAC,CAAC;IAC5C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAqB;IAErC;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,YAAY,CAAC,EAAE,CAAC,EAAE,GACjB,aAAa,CAAC,CAAC,CAAC;IAWnB;;;OAGG;IACH,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM;IAM3B;;;OAGG;IACH,GAAG,IAAI,CAAC,GAAG,SAAS;IAQpB;;;OAGG;IACH,KAAK,IAAI,CAAC,GAAG,SAAS;IAQtB;;;OAGG;IACH,OAAO,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM;IAM9B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAS/D;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAMlC;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI;IAO5B;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;OAGG;IACH,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI;IAM9C;;;OAGG;IACH,OAAO,IAAI,IAAI;IAMf;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;IAMlD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI;CAK9D"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveArray - A managed array that auto-emits events on mutations
|
|
3
|
+
*
|
|
4
|
+
* When used as a class property, automatically emits events when items are
|
|
5
|
+
* added, removed, or updated.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ReactiveArray } from '@portel/photon-core';
|
|
10
|
+
*
|
|
11
|
+
* export default class TodoList {
|
|
12
|
+
* items = ReactiveArray.create<Task>('items', (event, data) => this.emit(event, data));
|
|
13
|
+
*
|
|
14
|
+
* add(text: string) {
|
|
15
|
+
* this.items.push({ id: crypto.randomUUID(), text });
|
|
16
|
+
* // Auto-emits 'items:added' with the new item
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Event naming convention (inspired by Firebase):
|
|
22
|
+
* - `{prop}:added` - Item pushed/inserted
|
|
23
|
+
* - `{prop}:removed` - Item popped/spliced out
|
|
24
|
+
* - `{prop}:updated` - Item at index changed
|
|
25
|
+
* - `{prop}:changed` - Full array replaced
|
|
26
|
+
*/
|
|
27
|
+
export class ReactiveArray extends Array {
|
|
28
|
+
_propertyName = '';
|
|
29
|
+
_emitter = () => { };
|
|
30
|
+
/**
|
|
31
|
+
* Create a new ReactiveArray bound to a property name and emitter function.
|
|
32
|
+
* The emitter is called with event names like 'items:added', 'items:removed', etc.
|
|
33
|
+
*/
|
|
34
|
+
static create(propertyName, emitter, initialItems) {
|
|
35
|
+
const arr = new ReactiveArray();
|
|
36
|
+
arr._propertyName = propertyName;
|
|
37
|
+
arr._emitter = emitter;
|
|
38
|
+
if (initialItems) {
|
|
39
|
+
// Use super.push to avoid triggering events during init
|
|
40
|
+
globalThis.Array.prototype.push.apply(arr, initialItems);
|
|
41
|
+
}
|
|
42
|
+
return arr;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Add one or more elements to the end of the array.
|
|
46
|
+
* Emits `{prop}:added` for each item.
|
|
47
|
+
*/
|
|
48
|
+
push(...items) {
|
|
49
|
+
const result = super.push(...items);
|
|
50
|
+
items.forEach((item) => this._emitter(`${this._propertyName}:added`, item));
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Remove the last element from the array.
|
|
55
|
+
* Emits `{prop}:removed` with the removed item.
|
|
56
|
+
*/
|
|
57
|
+
pop() {
|
|
58
|
+
const item = super.pop();
|
|
59
|
+
if (item !== undefined) {
|
|
60
|
+
this._emitter(`${this._propertyName}:removed`, item);
|
|
61
|
+
}
|
|
62
|
+
return item;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Remove the first element from the array.
|
|
66
|
+
* Emits `{prop}:removed` with the removed item.
|
|
67
|
+
*/
|
|
68
|
+
shift() {
|
|
69
|
+
const item = super.shift();
|
|
70
|
+
if (item !== undefined) {
|
|
71
|
+
this._emitter(`${this._propertyName}:removed`, item);
|
|
72
|
+
}
|
|
73
|
+
return item;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Add one or more elements to the beginning of the array.
|
|
77
|
+
* Emits `{prop}:added` for each item.
|
|
78
|
+
*/
|
|
79
|
+
unshift(...items) {
|
|
80
|
+
const result = super.unshift(...items);
|
|
81
|
+
items.forEach((item) => this._emitter(`${this._propertyName}:added`, item));
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Remove/replace elements from the array.
|
|
86
|
+
* Emits `{prop}:removed` for deleted items and `{prop}:added` for inserted items.
|
|
87
|
+
*/
|
|
88
|
+
splice(start, deleteCount, ...items) {
|
|
89
|
+
const removed = super.splice(start, deleteCount ?? 0, ...items);
|
|
90
|
+
removed.forEach((item) => this._emitter(`${this._propertyName}:removed`, item));
|
|
91
|
+
items.forEach((item) => this._emitter(`${this._propertyName}:added`, item));
|
|
92
|
+
return removed;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Set an element at a specific index.
|
|
96
|
+
* Emits `{prop}:updated` with `{ index, value, previous }`.
|
|
97
|
+
*/
|
|
98
|
+
set(index, value) {
|
|
99
|
+
const previous = this[index];
|
|
100
|
+
this[index] = value;
|
|
101
|
+
this._emitter(`${this._propertyName}:updated`, { index, value, previous });
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Replace all items in the array.
|
|
105
|
+
* Emits `{prop}:changed` with the full new array.
|
|
106
|
+
*/
|
|
107
|
+
replaceAll(items) {
|
|
108
|
+
// Clear and replace
|
|
109
|
+
this.length = 0;
|
|
110
|
+
globalThis.Array.prototype.push.apply(this, items);
|
|
111
|
+
this._emitter(`${this._propertyName}:changed`, [...items]);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Clear all items from the array.
|
|
115
|
+
* Emits `{prop}:changed` with an empty array.
|
|
116
|
+
*/
|
|
117
|
+
clear() {
|
|
118
|
+
this.length = 0;
|
|
119
|
+
this._emitter(`${this._propertyName}:changed`, []);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Sort the array in place.
|
|
123
|
+
* Emits `{prop}:changed` with the sorted array.
|
|
124
|
+
*/
|
|
125
|
+
sort(compareFn) {
|
|
126
|
+
super.sort(compareFn);
|
|
127
|
+
this._emitter(`${this._propertyName}:changed`, [...this]);
|
|
128
|
+
return this;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Reverse the array in place.
|
|
132
|
+
* Emits `{prop}:changed` with the reversed array.
|
|
133
|
+
*/
|
|
134
|
+
reverse() {
|
|
135
|
+
super.reverse();
|
|
136
|
+
this._emitter(`${this._propertyName}:changed`, [...this]);
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Fill the array with a value.
|
|
141
|
+
* Emits `{prop}:changed` with the filled array.
|
|
142
|
+
*/
|
|
143
|
+
fill(value, start, end) {
|
|
144
|
+
super.fill(value, start, end);
|
|
145
|
+
this._emitter(`${this._propertyName}:changed`, [...this]);
|
|
146
|
+
return this;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Copy items within the array.
|
|
150
|
+
* Emits `{prop}:changed` with the modified array.
|
|
151
|
+
*/
|
|
152
|
+
copyWithin(target, start, end) {
|
|
153
|
+
super.copyWithin(target, start, end);
|
|
154
|
+
this._emitter(`${this._propertyName}:changed`, [...this]);
|
|
155
|
+
return this;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
//# sourceMappingURL=ReactiveArray.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactiveArray.js","sourceRoot":"","sources":["../../src/collections/ReactiveArray.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveMap - A managed Map that auto-emits events on mutations
|
|
3
|
+
*
|
|
4
|
+
* When used as a class property, automatically emits events when entries are
|
|
5
|
+
* set, deleted, or the map is cleared.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ReactiveMap } from '@portel/photon-core';
|
|
10
|
+
*
|
|
11
|
+
* export default class Cache {
|
|
12
|
+
* data = ReactiveMap.create<string, any>('data', (event, data) => this.emit(event, data));
|
|
13
|
+
*
|
|
14
|
+
* set(key: string, value: any) {
|
|
15
|
+
* this.data.set(key, value);
|
|
16
|
+
* // Auto-emits 'data:set' with { key, value }
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Event naming convention:
|
|
22
|
+
* - `{prop}:set` - Entry set (new or updated)
|
|
23
|
+
* - `{prop}:deleted` - Entry deleted
|
|
24
|
+
* - `{prop}:cleared` - All entries cleared
|
|
25
|
+
*/
|
|
26
|
+
import { Emitter } from './ReactiveArray.js';
|
|
27
|
+
export declare class ReactiveMap<K, V> extends Map<K, V> {
|
|
28
|
+
private _propertyName;
|
|
29
|
+
private _emitter;
|
|
30
|
+
/**
|
|
31
|
+
* Create a new ReactiveMap bound to a property name and emitter function.
|
|
32
|
+
*/
|
|
33
|
+
static create<K, V>(propertyName: string, emitter: Emitter, initialEntries?: Iterable<[K, V]>): ReactiveMap<K, V>;
|
|
34
|
+
/**
|
|
35
|
+
* Set a value for a key.
|
|
36
|
+
* Emits `{prop}:set` with `{ key, value, isNew }`.
|
|
37
|
+
*/
|
|
38
|
+
set(key: K, value: V): this;
|
|
39
|
+
/**
|
|
40
|
+
* Delete an entry by key.
|
|
41
|
+
* Emits `{prop}:deleted` with `{ key, value }` if the key existed.
|
|
42
|
+
*/
|
|
43
|
+
delete(key: K): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Clear all entries from the map.
|
|
46
|
+
* Emits `{prop}:cleared` with the count of removed entries.
|
|
47
|
+
*/
|
|
48
|
+
clear(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ReactiveMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactiveMap.d.ts","sourceRoot":"","sources":["../../src/collections/ReactiveMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAqB;IAErC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAChC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IAOpB;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAQ3B;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IASvB;;;OAGG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveMap - A managed Map that auto-emits events on mutations
|
|
3
|
+
*
|
|
4
|
+
* When used as a class property, automatically emits events when entries are
|
|
5
|
+
* set, deleted, or the map is cleared.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ReactiveMap } from '@portel/photon-core';
|
|
10
|
+
*
|
|
11
|
+
* export default class Cache {
|
|
12
|
+
* data = ReactiveMap.create<string, any>('data', (event, data) => this.emit(event, data));
|
|
13
|
+
*
|
|
14
|
+
* set(key: string, value: any) {
|
|
15
|
+
* this.data.set(key, value);
|
|
16
|
+
* // Auto-emits 'data:set' with { key, value }
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Event naming convention:
|
|
22
|
+
* - `{prop}:set` - Entry set (new or updated)
|
|
23
|
+
* - `{prop}:deleted` - Entry deleted
|
|
24
|
+
* - `{prop}:cleared` - All entries cleared
|
|
25
|
+
*/
|
|
26
|
+
export class ReactiveMap extends Map {
|
|
27
|
+
_propertyName = '';
|
|
28
|
+
_emitter = () => { };
|
|
29
|
+
/**
|
|
30
|
+
* Create a new ReactiveMap bound to a property name and emitter function.
|
|
31
|
+
*/
|
|
32
|
+
static create(propertyName, emitter, initialEntries) {
|
|
33
|
+
const map = new ReactiveMap(initialEntries);
|
|
34
|
+
map._propertyName = propertyName;
|
|
35
|
+
map._emitter = emitter;
|
|
36
|
+
return map;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Set a value for a key.
|
|
40
|
+
* Emits `{prop}:set` with `{ key, value, isNew }`.
|
|
41
|
+
*/
|
|
42
|
+
set(key, value) {
|
|
43
|
+
const isNew = !super.has(key);
|
|
44
|
+
const previous = super.get(key);
|
|
45
|
+
super.set(key, value);
|
|
46
|
+
this._emitter(`${this._propertyName}:set`, { key, value, isNew, previous });
|
|
47
|
+
return this;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Delete an entry by key.
|
|
51
|
+
* Emits `{prop}:deleted` with `{ key, value }` if the key existed.
|
|
52
|
+
*/
|
|
53
|
+
delete(key) {
|
|
54
|
+
const value = super.get(key);
|
|
55
|
+
const existed = super.delete(key);
|
|
56
|
+
if (existed) {
|
|
57
|
+
this._emitter(`${this._propertyName}:deleted`, { key, value });
|
|
58
|
+
}
|
|
59
|
+
return existed;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clear all entries from the map.
|
|
63
|
+
* Emits `{prop}:cleared` with the count of removed entries.
|
|
64
|
+
*/
|
|
65
|
+
clear() {
|
|
66
|
+
const count = super.size;
|
|
67
|
+
super.clear();
|
|
68
|
+
this._emitter(`${this._propertyName}:cleared`, { count });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=ReactiveMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactiveMap.js","sourceRoot":"","sources":["../../src/collections/ReactiveMap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,MAAM,OAAO,WAAkB,SAAQ,GAAS;IACtC,aAAa,GAAW,EAAE,CAAC;IAC3B,QAAQ,GAAY,GAAG,EAAE,GAAE,CAAC,CAAC;IAErC;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,YAAoB,EACpB,OAAgB,EAChB,cAAiC;QAEjC,MAAM,GAAG,GAAG,IAAI,WAAW,CAAO,cAAc,CAAC,CAAC;QAClD,GAAG,CAAC,aAAa,GAAG,YAAY,CAAC;QACjC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,GAAM;QACX,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,UAAU,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveSet - A managed Set that auto-emits events on mutations
|
|
3
|
+
*
|
|
4
|
+
* When used as a class property, automatically emits events when values are
|
|
5
|
+
* added, deleted, or the set is cleared.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ReactiveSet } from '@portel/photon-core';
|
|
10
|
+
*
|
|
11
|
+
* export default class Tags {
|
|
12
|
+
* tags = ReactiveSet.create<string>('tags', (event, data) => this.emit(event, data));
|
|
13
|
+
*
|
|
14
|
+
* addTag(tag: string) {
|
|
15
|
+
* this.tags.add(tag);
|
|
16
|
+
* // Auto-emits 'tags:added' with the tag
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Event naming convention:
|
|
22
|
+
* - `{prop}:added` - Value added (if not already present)
|
|
23
|
+
* - `{prop}:deleted` - Value deleted
|
|
24
|
+
* - `{prop}:cleared` - All values cleared
|
|
25
|
+
*/
|
|
26
|
+
import { Emitter } from './ReactiveArray.js';
|
|
27
|
+
export declare class ReactiveSet<T> extends Set<T> {
|
|
28
|
+
private _propertyName;
|
|
29
|
+
private _emitter;
|
|
30
|
+
/**
|
|
31
|
+
* Create a new ReactiveSet bound to a property name and emitter function.
|
|
32
|
+
*/
|
|
33
|
+
static create<T>(propertyName: string, emitter: Emitter, initialValues?: Iterable<T>): ReactiveSet<T>;
|
|
34
|
+
/**
|
|
35
|
+
* Add a value to the set.
|
|
36
|
+
* Emits `{prop}:added` with the value if it wasn't already present.
|
|
37
|
+
*/
|
|
38
|
+
add(value: T): this;
|
|
39
|
+
/**
|
|
40
|
+
* Delete a value from the set.
|
|
41
|
+
* Emits `{prop}:deleted` with the value if it existed.
|
|
42
|
+
*/
|
|
43
|
+
delete(value: T): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Clear all values from the set.
|
|
46
|
+
* Emits `{prop}:cleared` with the count of removed values.
|
|
47
|
+
*/
|
|
48
|
+
clear(): void;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=ReactiveSet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactiveSet.d.ts","sourceRoot":"","sources":["../../src/collections/ReactiveSet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,qBAAa,WAAW,CAAC,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,QAAQ,CAAqB;IAErC;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,CAAC,EACb,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,EAChB,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAC1B,WAAW,CAAC,CAAC,CAAC;IAOjB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IASnB;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO;IAQzB;;;OAGG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReactiveSet - A managed Set that auto-emits events on mutations
|
|
3
|
+
*
|
|
4
|
+
* When used as a class property, automatically emits events when values are
|
|
5
|
+
* added, deleted, or the set is cleared.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { ReactiveSet } from '@portel/photon-core';
|
|
10
|
+
*
|
|
11
|
+
* export default class Tags {
|
|
12
|
+
* tags = ReactiveSet.create<string>('tags', (event, data) => this.emit(event, data));
|
|
13
|
+
*
|
|
14
|
+
* addTag(tag: string) {
|
|
15
|
+
* this.tags.add(tag);
|
|
16
|
+
* // Auto-emits 'tags:added' with the tag
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* Event naming convention:
|
|
22
|
+
* - `{prop}:added` - Value added (if not already present)
|
|
23
|
+
* - `{prop}:deleted` - Value deleted
|
|
24
|
+
* - `{prop}:cleared` - All values cleared
|
|
25
|
+
*/
|
|
26
|
+
export class ReactiveSet extends Set {
|
|
27
|
+
_propertyName = '';
|
|
28
|
+
_emitter = () => { };
|
|
29
|
+
/**
|
|
30
|
+
* Create a new ReactiveSet bound to a property name and emitter function.
|
|
31
|
+
*/
|
|
32
|
+
static create(propertyName, emitter, initialValues) {
|
|
33
|
+
const set = new ReactiveSet(initialValues);
|
|
34
|
+
set._propertyName = propertyName;
|
|
35
|
+
set._emitter = emitter;
|
|
36
|
+
return set;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Add a value to the set.
|
|
40
|
+
* Emits `{prop}:added` with the value if it wasn't already present.
|
|
41
|
+
*/
|
|
42
|
+
add(value) {
|
|
43
|
+
const isNew = !super.has(value);
|
|
44
|
+
super.add(value);
|
|
45
|
+
if (isNew) {
|
|
46
|
+
this._emitter(`${this._propertyName}:added`, value);
|
|
47
|
+
}
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Delete a value from the set.
|
|
52
|
+
* Emits `{prop}:deleted` with the value if it existed.
|
|
53
|
+
*/
|
|
54
|
+
delete(value) {
|
|
55
|
+
const existed = super.delete(value);
|
|
56
|
+
if (existed) {
|
|
57
|
+
this._emitter(`${this._propertyName}:deleted`, value);
|
|
58
|
+
}
|
|
59
|
+
return existed;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clear all values from the set.
|
|
63
|
+
* Emits `{prop}:cleared` with the count of removed values.
|
|
64
|
+
*/
|
|
65
|
+
clear() {
|
|
66
|
+
const count = super.size;
|
|
67
|
+
super.clear();
|
|
68
|
+
this._emitter(`${this._propertyName}:cleared`, { count });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=ReactiveSet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReactiveSet.js","sourceRoot":"","sources":["../../src/collections/ReactiveSet.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAIH,MAAM,OAAO,WAAe,SAAQ,GAAM;IAChC,aAAa,GAAW,EAAE,CAAC;IAC3B,QAAQ,GAAY,GAAG,EAAE,GAAE,CAAC,CAAC;IAErC;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,YAAoB,EACpB,OAAgB,EAChB,aAA2B;QAE3B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAI,aAAa,CAAC,CAAC;QAC9C,GAAG,CAAC,aAAa,GAAG,YAAY,CAAC;QACjC,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC;QACvB,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,GAAG,CAAC,KAAQ;QACV,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,QAAQ,EAAE,KAAK,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAQ;QACb,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,UAAU,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACzB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,aAAa,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF"}
|