@maxhealth.tech/prefab 0.1.7 → 0.1.9
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/CHANGELOG.md +56 -0
- package/README.md +70 -3
- package/dist/app.d.ts +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +10 -2
- package/dist/app.js.map +1 -1
- package/dist/components/data/index.d.ts +13 -3
- package/dist/components/data/index.d.ts.map +1 -1
- package/dist/components/data/index.js +38 -16
- package/dist/components/data/index.js.map +1 -1
- package/dist/components/layout/index.d.ts +36 -1
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/components/layout/index.js +16 -0
- package/dist/components/layout/index.js.map +1 -1
- package/dist/core/component.d.ts +3 -2
- package/dist/core/component.d.ts.map +1 -1
- package/dist/core/component.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/renderer/components/data.d.ts.map +1 -1
- package/dist/renderer/components/data.js +34 -2
- package/dist/renderer/components/data.js.map +1 -1
- package/dist/renderer/components/layout.d.ts.map +1 -1
- package/dist/renderer/components/layout.js +42 -1
- package/dist/renderer/components/layout.js.map +1 -1
- package/dist/renderer/rx.d.ts.map +1 -1
- package/dist/renderer/rx.js +115 -3
- package/dist/renderer/rx.js.map +1 -1
- package/dist/renderer/state.d.ts +5 -0
- package/dist/renderer/state.d.ts.map +1 -1
- package/dist/renderer/state.js +6 -0
- package/dist/renderer/state.js.map +1 -1
- package/dist/renderer.min.js +30 -30
- package/dist/rx/collection.d.ts +92 -0
- package/dist/rx/collection.d.ts.map +1 -0
- package/dist/rx/collection.js +126 -0
- package/dist/rx/collection.js.map +1 -0
- package/dist/rx/index.d.ts +6 -0
- package/dist/rx/index.d.ts.map +1 -1
- package/dist/rx/index.js +4 -0
- package/dist/rx/index.js.map +1 -1
- package/dist/rx/pipes.d.ts +22 -0
- package/dist/rx/pipes.d.ts.map +1 -0
- package/dist/rx/pipes.js +32 -0
- package/dist/rx/pipes.js.map +1 -0
- package/dist/rx/rx.d.ts +7 -1
- package/dist/rx/rx.d.ts.map +1 -1
- package/dist/rx/rx.js +12 -3
- package/dist/rx/rx.js.map +1 -1
- package/dist/rx/signal.d.ts +50 -0
- package/dist/rx/signal.d.ts.map +1 -0
- package/dist/rx/signal.js +58 -0
- package/dist/rx/signal.js.map +1 -0
- package/dist/rx/state-collector.d.ts +23 -0
- package/dist/rx/state-collector.d.ts.map +1 -0
- package/dist/rx/state-collector.js +38 -0
- package/dist/rx/state-collector.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection — Named keyed array for the prefab wire format.
|
|
3
|
+
*
|
|
4
|
+
* Collections carry row data with a key field. They serialize into `state`
|
|
5
|
+
* as an array and produce `Ref<T>` lazy lookup expressions via `.by(signal)`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const patients = collection('patients', fhirPatients, { key: 'id' })
|
|
10
|
+
* const selectedId = signal('selectedPatientId', patients.firstKey())
|
|
11
|
+
* const selectedPatient = patients.by(selectedId)
|
|
12
|
+
* // selectedPatient.expr → "{{ patients | find:'id',selectedPatientId }}"
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { Rx } from './rx.js';
|
|
16
|
+
import type { Signal, SignalValue } from './signal.js';
|
|
17
|
+
/**
|
|
18
|
+
* A lazy, serializable reference to a row in a collection.
|
|
19
|
+
* The expression is evaluated at runtime by the renderer's pipe evaluator.
|
|
20
|
+
*/
|
|
21
|
+
export declare class Ref<T = unknown> {
|
|
22
|
+
readonly expr: string;
|
|
23
|
+
readonly type: "ref";
|
|
24
|
+
/** @internal */
|
|
25
|
+
readonly _phantom?: T;
|
|
26
|
+
constructor(expr: string);
|
|
27
|
+
/** Rx expression for use in component props */
|
|
28
|
+
toRx(): Rx;
|
|
29
|
+
toString(): string;
|
|
30
|
+
toJSON(): string;
|
|
31
|
+
/**
|
|
32
|
+
* Type-safe property access on the referenced row.
|
|
33
|
+
* Returns `Ref<T[K]>` so downstream type checking works.
|
|
34
|
+
*
|
|
35
|
+
* `ref.dot('name')` → `Ref<HumanName[]>` with expr `{{ ... | dot:'name' }}`
|
|
36
|
+
*/
|
|
37
|
+
dot<K extends keyof T & string>(field: K): Ref<T[K]>;
|
|
38
|
+
/** Untyped escape hatch for dynamic/computed field names. */
|
|
39
|
+
dot(field: string): Ref;
|
|
40
|
+
/**
|
|
41
|
+
* Shorthand for `.dot(field).pipe(pipeName, ...args)`.
|
|
42
|
+
* Compiles to `{{ expr | dot:'field' | pipeName }}`.
|
|
43
|
+
*
|
|
44
|
+
* Use for FHIR datatype formatting:
|
|
45
|
+
* `ref.formatted('name', 'humanName')` → `{{ ... | dot:'name' | humanName }}`
|
|
46
|
+
*/
|
|
47
|
+
formatted(field: keyof T & string | string, pipeName: string, ...args: unknown[]): Rx;
|
|
48
|
+
/**
|
|
49
|
+
* Append a pipe filter to the ref expression.
|
|
50
|
+
* `ref.pipe('humanName')` → `{{ expr | humanName }}`
|
|
51
|
+
* `ref.pipe('date', 'long')` → `{{ expr | date:'long' }}`
|
|
52
|
+
*/
|
|
53
|
+
pipe(name: string, ...args: unknown[]): Rx;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A named keyed array. Serializes rows into state and provides
|
|
57
|
+
* typed lookup helpers that compile to pipe expressions.
|
|
58
|
+
*/
|
|
59
|
+
export declare class Collection<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
60
|
+
readonly stateKey: string;
|
|
61
|
+
readonly keyField: string;
|
|
62
|
+
readonly rows: T[];
|
|
63
|
+
constructor(stateKey: string, rows: T[], keyField: string);
|
|
64
|
+
/** Key of the first row, or null if empty. */
|
|
65
|
+
firstKey(): string | null;
|
|
66
|
+
/** Key of the last row, or null if empty. */
|
|
67
|
+
lastKey(): string | null;
|
|
68
|
+
/** Number of rows. */
|
|
69
|
+
get length(): number;
|
|
70
|
+
/**
|
|
71
|
+
* Create a Ref that lazily resolves a row by signal key.
|
|
72
|
+
* Compiles to: `{{ stateKey | find:'keyField',signal.key }}`
|
|
73
|
+
*/
|
|
74
|
+
by<K extends SignalValue>(key: Signal<K>): Ref<T>;
|
|
75
|
+
/** Rx expression referencing the full array: `{{ stateKey }}` */
|
|
76
|
+
toRx(): Rx;
|
|
77
|
+
toString(): string;
|
|
78
|
+
toJSON(): string;
|
|
79
|
+
/** State entry for PrefabApp: `{ stateKey: rows }` */
|
|
80
|
+
toState(): Record<string, T[]>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a named keyed collection.
|
|
84
|
+
*
|
|
85
|
+
* @param stateKey Stable state path (e.g. 'patients')
|
|
86
|
+
* @param rows Source array
|
|
87
|
+
* @param options Must include `key` — the field name used for identity lookup
|
|
88
|
+
*/
|
|
89
|
+
export declare function collection<T extends Record<string, unknown>>(stateKey: string, rows: T[], options: {
|
|
90
|
+
key: string;
|
|
91
|
+
}): Collection<T>;
|
|
92
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/rx/collection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAGtD;;;GAGG;AACH,qBAAa,GAAG,CAAC,CAAC,GAAG,OAAO;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAG,KAAK,CAAS;IAE9B,gBAAgB;IAChB,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;gBAET,IAAI,EAAE,MAAM;IAIxB,+CAA+C;IAC/C,IAAI,IAAI,EAAE;IAIV,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;IAIhB;;;;;OAKG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,6DAA6D;IAC7D,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG;IAKvB;;;;;;OAMG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;IAIrF;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE;CAG3C;AAED;;;GAGG;AACH,qBAAa,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACjF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAA;gBAEN,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM;IAMzD,8CAA8C;IAC9C,QAAQ,IAAI,MAAM,GAAG,IAAI;IAMzB,6CAA6C;IAC7C,OAAO,IAAI,MAAM,GAAG,IAAI;IAMxB,sBAAsB;IACtB,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;OAGG;IACH,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAIjD,iEAAiE;IACjE,IAAI,IAAI,EAAE;IAIV,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;IAIhB,sDAAsD;IACtD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;CAG/B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,CAAC,EAAE,EACT,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACvB,UAAU,CAAC,CAAC,CAAC,CAIf"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection — Named keyed array for the prefab wire format.
|
|
3
|
+
*
|
|
4
|
+
* Collections carry row data with a key field. They serialize into `state`
|
|
5
|
+
* as an array and produce `Ref<T>` lazy lookup expressions via `.by(signal)`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const patients = collection('patients', fhirPatients, { key: 'id' })
|
|
10
|
+
* const selectedId = signal('selectedPatientId', patients.firstKey())
|
|
11
|
+
* const selectedPatient = patients.by(selectedId)
|
|
12
|
+
* // selectedPatient.expr → "{{ patients | find:'id',selectedPatientId }}"
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { Rx } from './rx.js';
|
|
16
|
+
import { trackState } from './state-collector.js';
|
|
17
|
+
/**
|
|
18
|
+
* A lazy, serializable reference to a row in a collection.
|
|
19
|
+
* The expression is evaluated at runtime by the renderer's pipe evaluator.
|
|
20
|
+
*/
|
|
21
|
+
export class Ref {
|
|
22
|
+
expr;
|
|
23
|
+
type = 'ref';
|
|
24
|
+
/** @internal */
|
|
25
|
+
_phantom;
|
|
26
|
+
constructor(expr) {
|
|
27
|
+
this.expr = expr;
|
|
28
|
+
}
|
|
29
|
+
/** Rx expression for use in component props */
|
|
30
|
+
toRx() {
|
|
31
|
+
return new Rx(this.expr);
|
|
32
|
+
}
|
|
33
|
+
toString() {
|
|
34
|
+
return `{{ ${this.expr} }}`;
|
|
35
|
+
}
|
|
36
|
+
toJSON() {
|
|
37
|
+
return this.toString();
|
|
38
|
+
}
|
|
39
|
+
dot(field) {
|
|
40
|
+
return new Ref(`${this.expr} | dot:'${field}'`);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Shorthand for `.dot(field).pipe(pipeName, ...args)`.
|
|
44
|
+
* Compiles to `{{ expr | dot:'field' | pipeName }}`.
|
|
45
|
+
*
|
|
46
|
+
* Use for FHIR datatype formatting:
|
|
47
|
+
* `ref.formatted('name', 'humanName')` → `{{ ... | dot:'name' | humanName }}`
|
|
48
|
+
*/
|
|
49
|
+
formatted(field, pipeName, ...args) {
|
|
50
|
+
return this.dot(field).pipe(pipeName, ...args);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Append a pipe filter to the ref expression.
|
|
54
|
+
* `ref.pipe('humanName')` → `{{ expr | humanName }}`
|
|
55
|
+
* `ref.pipe('date', 'long')` → `{{ expr | date:'long' }}`
|
|
56
|
+
*/
|
|
57
|
+
pipe(name, ...args) {
|
|
58
|
+
return this.toRx().pipe(name, ...args);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A named keyed array. Serializes rows into state and provides
|
|
63
|
+
* typed lookup helpers that compile to pipe expressions.
|
|
64
|
+
*/
|
|
65
|
+
export class Collection {
|
|
66
|
+
stateKey;
|
|
67
|
+
keyField;
|
|
68
|
+
rows;
|
|
69
|
+
constructor(stateKey, rows, keyField) {
|
|
70
|
+
this.stateKey = stateKey;
|
|
71
|
+
this.keyField = keyField;
|
|
72
|
+
this.rows = rows;
|
|
73
|
+
}
|
|
74
|
+
/** Key of the first row, or null if empty. */
|
|
75
|
+
firstKey() {
|
|
76
|
+
if (this.rows.length === 0)
|
|
77
|
+
return null;
|
|
78
|
+
const val = this.rows[0][this.keyField];
|
|
79
|
+
return val == null ? null : String(val);
|
|
80
|
+
}
|
|
81
|
+
/** Key of the last row, or null if empty. */
|
|
82
|
+
lastKey() {
|
|
83
|
+
if (this.rows.length === 0)
|
|
84
|
+
return null;
|
|
85
|
+
const val = this.rows[this.rows.length - 1][this.keyField];
|
|
86
|
+
return val == null ? null : String(val);
|
|
87
|
+
}
|
|
88
|
+
/** Number of rows. */
|
|
89
|
+
get length() {
|
|
90
|
+
return this.rows.length;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create a Ref that lazily resolves a row by signal key.
|
|
94
|
+
* Compiles to: `{{ stateKey | find:'keyField',signal.key }}`
|
|
95
|
+
*/
|
|
96
|
+
by(key) {
|
|
97
|
+
return new Ref(`${this.stateKey} | find:'${this.keyField}',${key.key}`);
|
|
98
|
+
}
|
|
99
|
+
/** Rx expression referencing the full array: `{{ stateKey }}` */
|
|
100
|
+
toRx() {
|
|
101
|
+
return new Rx(this.stateKey);
|
|
102
|
+
}
|
|
103
|
+
toString() {
|
|
104
|
+
return this.toRx().toString();
|
|
105
|
+
}
|
|
106
|
+
toJSON() {
|
|
107
|
+
return this.toString();
|
|
108
|
+
}
|
|
109
|
+
/** State entry for PrefabApp: `{ stateKey: rows }` */
|
|
110
|
+
toState() {
|
|
111
|
+
return { [this.stateKey]: this.rows };
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a named keyed collection.
|
|
116
|
+
*
|
|
117
|
+
* @param stateKey Stable state path (e.g. 'patients')
|
|
118
|
+
* @param rows Source array
|
|
119
|
+
* @param options Must include `key` — the field name used for identity lookup
|
|
120
|
+
*/
|
|
121
|
+
export function collection(stateKey, rows, options) {
|
|
122
|
+
const c = new Collection(stateKey, rows, options.key);
|
|
123
|
+
trackState(c);
|
|
124
|
+
return c;
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=collection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection.js","sourceRoot":"","sources":["../../src/rx/collection.ts"],"names":[],"mappings":"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"}
|
package/dist/rx/index.d.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
1
|
export { Rx, rx, ITEM, INDEX, EVENT, ERROR, RESULT, STATE } from './rx.js';
|
|
2
|
+
export { Signal, signal } from './signal.js';
|
|
3
|
+
export type { SignalValue, SignalOptions } from './signal.js';
|
|
4
|
+
export { Collection, collection, Ref } from './collection.js';
|
|
5
|
+
export { registerPipe, unregisterPipe, listPipes } from './pipes.js';
|
|
6
|
+
export type { PipeFn } from './pipes.js';
|
|
7
|
+
export { resetAutoState } from './state-collector.js';
|
|
2
8
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/rx/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC5C,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACpE,YAAY,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
package/dist/rx/index.js
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
export { Rx, rx, ITEM, INDEX, EVENT, ERROR, RESULT, STATE } from './rx.js';
|
|
2
|
+
export { Signal, signal } from './signal.js';
|
|
3
|
+
export { Collection, collection, Ref } from './collection.js';
|
|
4
|
+
export { registerPipe, unregisterPipe, listPipes } from './pipes.js';
|
|
5
|
+
export { resetAutoState } from './state-collector.js';
|
|
2
6
|
//# sourceMappingURL=index.js.map
|
package/dist/rx/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom pipe registry — extension point for companion packages.
|
|
3
|
+
*
|
|
4
|
+
* Companion packages (e.g. @maxhealth.tech/prefab-fhir) call
|
|
5
|
+
* `registerPipe()` at import time to add domain-specific formatters.
|
|
6
|
+
* Built-in pipes in applyFilter always take precedence over custom pipes.
|
|
7
|
+
*/
|
|
8
|
+
/** A pipe function receives the current value and optional arguments. */
|
|
9
|
+
export type PipeFn = (value: unknown, ...args: unknown[]) => unknown;
|
|
10
|
+
/**
|
|
11
|
+
* Register a custom pipe filter.
|
|
12
|
+
* Re-registration warns and overwrites (HMR-friendly).
|
|
13
|
+
* Built-in pipes in applyFilter always shadow custom pipes.
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerPipe(name: string, fn: PipeFn): void;
|
|
16
|
+
/** Remove a custom pipe (useful in tests). Returns true if it existed. */
|
|
17
|
+
export declare function unregisterPipe(name: string): boolean;
|
|
18
|
+
/** List all registered custom pipe names (useful for debugging). */
|
|
19
|
+
export declare function listPipes(): string[];
|
|
20
|
+
/** @internal — used by applyFilter to resolve custom pipes. */
|
|
21
|
+
export declare function getCustomPipe(name: string): PipeFn | undefined;
|
|
22
|
+
//# sourceMappingURL=pipes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipes.d.ts","sourceRoot":"","sources":["../../src/rx/pipes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,yEAAyE;AACzE,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;AAIpE;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAK3D;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,oEAAoE;AACpE,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAEpC;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D"}
|
package/dist/rx/pipes.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom pipe registry — extension point for companion packages.
|
|
3
|
+
*
|
|
4
|
+
* Companion packages (e.g. @maxhealth.tech/prefab-fhir) call
|
|
5
|
+
* `registerPipe()` at import time to add domain-specific formatters.
|
|
6
|
+
* Built-in pipes in applyFilter always take precedence over custom pipes.
|
|
7
|
+
*/
|
|
8
|
+
const pipes = new Map();
|
|
9
|
+
/**
|
|
10
|
+
* Register a custom pipe filter.
|
|
11
|
+
* Re-registration warns and overwrites (HMR-friendly).
|
|
12
|
+
* Built-in pipes in applyFilter always shadow custom pipes.
|
|
13
|
+
*/
|
|
14
|
+
export function registerPipe(name, fn) {
|
|
15
|
+
if (pipes.has(name) && pipes.get(name) !== fn) {
|
|
16
|
+
console.warn(`[prefab] pipe "${name}" re-registered`);
|
|
17
|
+
}
|
|
18
|
+
pipes.set(name, fn);
|
|
19
|
+
}
|
|
20
|
+
/** Remove a custom pipe (useful in tests). Returns true if it existed. */
|
|
21
|
+
export function unregisterPipe(name) {
|
|
22
|
+
return pipes.delete(name);
|
|
23
|
+
}
|
|
24
|
+
/** List all registered custom pipe names (useful for debugging). */
|
|
25
|
+
export function listPipes() {
|
|
26
|
+
return [...pipes.keys()];
|
|
27
|
+
}
|
|
28
|
+
/** @internal — used by applyFilter to resolve custom pipes. */
|
|
29
|
+
export function getCustomPipe(name) {
|
|
30
|
+
return pipes.get(name);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=pipes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipes.js","sourceRoot":"","sources":["../../src/rx/pipes.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAA;AAEvC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,EAAU;IACnD,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,kBAAkB,IAAI,iBAAiB,CAAC,CAAA;IACvD,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACrB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,SAAS;IACvB,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;AAC1B,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACxB,CAAC"}
|
package/dist/rx/rx.d.ts
CHANGED
|
@@ -59,7 +59,13 @@ export declare class Rx {
|
|
|
59
59
|
selectattr(attr: string): Rx;
|
|
60
60
|
rejectattr(attr: string): Rx;
|
|
61
61
|
default(value: unknown): Rx;
|
|
62
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Append an arbitrary pipe filter: `rx('x').pipe('humanName')` → `{{ x | humanName }}`
|
|
64
|
+
*
|
|
65
|
+
* Supports variadic args: `.pipe('date', 'long')` → `{{ x | date:'long' }}`
|
|
66
|
+
* Use this for custom pipes registered via `registerPipe()`.
|
|
67
|
+
*/
|
|
68
|
+
pipe(name: string, ...args: unknown[]): Rx;
|
|
63
69
|
}
|
|
64
70
|
/** Create an Rx expression referencing a state key */
|
|
65
71
|
export declare function rx(key: string): Rx;
|
package/dist/rx/rx.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rx.d.ts","sourceRoot":"","sources":["../../src/rx/rx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,qBAAa,EAAE;IACb,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;gBAEjB,UAAU,EAAE,MAAM;IAM9B,kDAAkD;IAClD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,sDAAsD;IACtD,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;IAMhB,kEAAkE;IAClE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;IAIpB,wDAAwD;IACxD,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;IAO1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;IAIpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;IAIpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;IAIpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;IAIpC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,EAAE;IAMpC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IAItB,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IAIvB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;IAI1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;IAI3B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;IAI1B,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,EAAE,GAAG,EAAE;IAM3B,GAAG,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE;IAIlB,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE;IAIjB,GAAG,IAAI,EAAE;IAMT,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE;IAM3C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE;IAI3B,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE;IAI9B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE;IAI7B,KAAK,CAAC,QAAQ,SAAI,GAAG,EAAE;IAIvB,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,EAAE;IAI9B,GAAG,IAAI,EAAE;IAIT,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE;IAIzB,IAAI,IAAI,EAAE;IAIV,QAAQ,IAAI,EAAE;IAId,KAAK,IAAI,EAAE;IAIX,KAAK,IAAI,EAAE;IAIX,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,EAAE;IAI/B,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,EAAE;IAI5B,MAAM,IAAI,EAAE;IAIZ,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,EAAE;IAI5B,KAAK,IAAI,EAAE;IAIX,IAAI,IAAI,EAAE;IAIV,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE;IAI5B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE;IAI5B,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE;IAM3B,
|
|
1
|
+
{"version":3,"file":"rx.d.ts","sourceRoot":"","sources":["../../src/rx/rx.ts"],"names":[],"mappings":"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"}
|
package/dist/rx/rx.js
CHANGED
|
@@ -149,9 +149,18 @@ export class Rx {
|
|
|
149
149
|
default(value) {
|
|
150
150
|
return this.pipe('default', value);
|
|
151
151
|
}
|
|
152
|
-
// ──
|
|
153
|
-
|
|
154
|
-
|
|
152
|
+
// ── Generic pipe ─────────────────────────────────────────────────────────
|
|
153
|
+
/**
|
|
154
|
+
* Append an arbitrary pipe filter: `rx('x').pipe('humanName')` → `{{ x | humanName }}`
|
|
155
|
+
*
|
|
156
|
+
* Supports variadic args: `.pipe('date', 'long')` → `{{ x | date:'long' }}`
|
|
157
|
+
* Use this for custom pipes registered via `registerPipe()`.
|
|
158
|
+
*/
|
|
159
|
+
pipe(name, ...args) {
|
|
160
|
+
const defined = args.filter((a) => a !== undefined);
|
|
161
|
+
const pipeStr = defined.length > 0
|
|
162
|
+
? `${name}:${defined.map(formatPipeArg).join(',')}`
|
|
163
|
+
: name;
|
|
155
164
|
return new Rx(`${this.expr} | ${pipeStr}`);
|
|
156
165
|
}
|
|
157
166
|
}
|
package/dist/rx/rx.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rx.js","sourceRoot":"","sources":["../../src/rx/rx.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,OAAO,EAAE;IACI,IAAI,CAAQ;IAE7B,YAAY,UAAkB;QAC5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;IACxB,CAAC;IAED,4EAA4E;IAE5E,kDAAkD;IAClD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED,sDAAsD;IACtD,QAAQ;QACN,OAAO,MAAM,IAAI,CAAC,IAAI,KAAK,CAAA;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,4EAA4E;IAE5E,kEAAkE;IAClE,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,wDAAwD;IACxD,EAAE,CAAC,KAAkB;QACnB,MAAM,GAAG,GAAG,KAAK,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QACvE,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC,CAAA;IACtC,CAAC;IAED,4EAA4E;IAE5E,GAAG,CAAC,KAA2B;QAC7B,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,GAAG,CAAC,KAA2B;QAC7B,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,GAAG,CAAC,KAA2B;QAC7B,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,GAAG,CAAC,KAA2B;QAC7B,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,GAAG,CAAC,KAA2B;QAC7B,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,4EAA4E;IAE5E,EAAE,CAAC,KAAc;QACf,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,QAAQ,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,GAAG,CAAC,KAAc;QAChB,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,QAAQ,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC3D,CAAC;IAED,EAAE,CAAC,KAAkB;QACnB,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,GAAG,CAAC,KAAkB;QACpB,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,EAAE,CAAC,KAAkB;QACnB,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,GAAG,CAAC,KAAkB;QACpB,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC1D,CAAC;IAED,4EAA4E;IAE5E,GAAG,CAAC,KAAS;QACX,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,EAAE,CAAC,KAAS;QACV,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,GAAG;QACD,OAAO,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC;IAED,4EAA4E;IAE5E,IAAI,CAAC,MAAe,EAAE,OAAgB;QACpC,OAAO,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IAED,4EAA4E;IAE5E,QAAQ,CAAC,IAAa;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACpC,CAAC;IAED,OAAO,CAAC,QAAiB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,CAAC,QAAiB;QACtB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IACtC,CAAC;IAED,KAAK,CAAC,QAAQ,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC;IAED,OAAO,CAAC,QAAiB;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAA;IACvC,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,CAAC,MAAe;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC9B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,QAAQ,CAAC,SAAiB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;IACzC,CAAC;IAED,SAAS,CAAC,IAAa;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC,SAAkB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACrC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC1B,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,OAAO,CAAC,KAAc;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;IACpC,CAAC;IAED,4EAA4E;
|
|
1
|
+
{"version":3,"file":"rx.js","sourceRoot":"","sources":["../../src/rx/rx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal — Named reactive scalar for the prefab wire format.
|
|
3
|
+
*
|
|
4
|
+
* Signals carry identity values (string, number, boolean, null) — never
|
|
5
|
+
* full objects. They serialize into `state` as a key-value pair and
|
|
6
|
+
* produce `{{ key }}` expressions wherever they're referenced.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const selectedId = signal('selectedPatientId', 'hans-meier')
|
|
11
|
+
* // state: { selectedPatientId: 'hans-meier' }
|
|
12
|
+
* // referenced as: "{{ selectedPatientId }}"
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { Rx } from './rx.js';
|
|
16
|
+
/** Allowed signal value types — intentionally excludes objects/arrays. */
|
|
17
|
+
export type SignalValue = string | number | boolean | null;
|
|
18
|
+
export interface SignalOptions {
|
|
19
|
+
/**
|
|
20
|
+
* URL query parameter name. When set, the runtime syncs the signal
|
|
21
|
+
* value with `?param=value` in the address bar. Opt-in.
|
|
22
|
+
*/
|
|
23
|
+
urlSync?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A named reactive scalar. Carries a state key, an initial value,
|
|
27
|
+
* and produces rx expressions for component props.
|
|
28
|
+
*/
|
|
29
|
+
export declare class Signal<T extends SignalValue = SignalValue> {
|
|
30
|
+
readonly key: string;
|
|
31
|
+
readonly initial: T;
|
|
32
|
+
readonly options?: SignalOptions;
|
|
33
|
+
constructor(key: string, initial: T, options?: SignalOptions);
|
|
34
|
+
/** Rx expression referencing this signal's value: `{{ key }}` */
|
|
35
|
+
toRx(): Rx;
|
|
36
|
+
/** Serialize to the rx template string */
|
|
37
|
+
toString(): string;
|
|
38
|
+
toJSON(): string;
|
|
39
|
+
/** State entry for PrefabApp: `{ key: initial }` */
|
|
40
|
+
toState(): Record<string, T>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create a named reactive signal.
|
|
44
|
+
*
|
|
45
|
+
* @param key Stable state path (e.g. 'selectedPatientId')
|
|
46
|
+
* @param initial Initial value
|
|
47
|
+
* @param options Optional configuration (urlSync, etc.)
|
|
48
|
+
*/
|
|
49
|
+
export declare function signal<T extends SignalValue>(key: string, initial: T, options?: SignalOptions): Signal<T>;
|
|
50
|
+
//# sourceMappingURL=signal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../src/rx/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAG5B,0EAA0E;AAC1E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAE1D,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;;GAGG;AACH,qBAAa,MAAM,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW;IACrD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;IACnB,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAA;gBAEpB,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;IAM5D,iEAAiE;IACjE,IAAI,IAAI,EAAE;IAIV,0CAA0C;IAC1C,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;IAIhB,oDAAoD;IACpD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;CAG7B;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,WAAW,EAC1C,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,EACV,OAAO,CAAC,EAAE,aAAa,GACtB,MAAM,CAAC,CAAC,CAAC,CAIX"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Signal — Named reactive scalar for the prefab wire format.
|
|
3
|
+
*
|
|
4
|
+
* Signals carry identity values (string, number, boolean, null) — never
|
|
5
|
+
* full objects. They serialize into `state` as a key-value pair and
|
|
6
|
+
* produce `{{ key }}` expressions wherever they're referenced.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const selectedId = signal('selectedPatientId', 'hans-meier')
|
|
11
|
+
* // state: { selectedPatientId: 'hans-meier' }
|
|
12
|
+
* // referenced as: "{{ selectedPatientId }}"
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import { Rx } from './rx.js';
|
|
16
|
+
import { trackState } from './state-collector.js';
|
|
17
|
+
/**
|
|
18
|
+
* A named reactive scalar. Carries a state key, an initial value,
|
|
19
|
+
* and produces rx expressions for component props.
|
|
20
|
+
*/
|
|
21
|
+
export class Signal {
|
|
22
|
+
key;
|
|
23
|
+
initial;
|
|
24
|
+
options;
|
|
25
|
+
constructor(key, initial, options) {
|
|
26
|
+
this.key = key;
|
|
27
|
+
this.initial = initial;
|
|
28
|
+
this.options = options;
|
|
29
|
+
}
|
|
30
|
+
/** Rx expression referencing this signal's value: `{{ key }}` */
|
|
31
|
+
toRx() {
|
|
32
|
+
return new Rx(this.key);
|
|
33
|
+
}
|
|
34
|
+
/** Serialize to the rx template string */
|
|
35
|
+
toString() {
|
|
36
|
+
return this.toRx().toString();
|
|
37
|
+
}
|
|
38
|
+
toJSON() {
|
|
39
|
+
return this.toString();
|
|
40
|
+
}
|
|
41
|
+
/** State entry for PrefabApp: `{ key: initial }` */
|
|
42
|
+
toState() {
|
|
43
|
+
return { [this.key]: this.initial };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a named reactive signal.
|
|
48
|
+
*
|
|
49
|
+
* @param key Stable state path (e.g. 'selectedPatientId')
|
|
50
|
+
* @param initial Initial value
|
|
51
|
+
* @param options Optional configuration (urlSync, etc.)
|
|
52
|
+
*/
|
|
53
|
+
export function signal(key, initial, options) {
|
|
54
|
+
const s = new Signal(key, initial, options);
|
|
55
|
+
trackState(s);
|
|
56
|
+
return s;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=signal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signal.js","sourceRoot":"","sources":["../../src/rx/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAajD;;;GAGG;AACH,MAAM,OAAO,MAAM;IACR,GAAG,CAAQ;IACX,OAAO,CAAG;IACV,OAAO,CAAgB;IAEhC,YAAY,GAAW,EAAE,OAAU,EAAE,OAAuB;QAC1D,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,iEAAiE;IACjE,IAAI;QACF,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IAED,0CAA0C;IAC1C,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAA;IAC/B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAED,oDAAoD;IACpD,OAAO;QACL,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAA;IACrC,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CACpB,GAAW,EACX,OAAU,EACV,OAAuB;IAEvB,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;IAC3C,UAAU,CAAC,CAAC,CAAC,CAAA;IACb,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto state collector — tracks Signal and Collection instances
|
|
3
|
+
* for automatic state assembly in PrefabApp.
|
|
4
|
+
*
|
|
5
|
+
* `signal()` and `collection()` factories push entries here.
|
|
6
|
+
* `PrefabApp` drains the collector at construction time, so each
|
|
7
|
+
* app captures exactly the state created before it.
|
|
8
|
+
*/
|
|
9
|
+
export interface StateEntry {
|
|
10
|
+
toState(): Record<string, unknown>;
|
|
11
|
+
}
|
|
12
|
+
/** @internal Push a signal or collection for auto-collection. */
|
|
13
|
+
export declare function trackState(entry: StateEntry): void;
|
|
14
|
+
/**
|
|
15
|
+
* @internal Drain all pending state entries and return merged state.
|
|
16
|
+
* Clears the pending list. Called by PrefabApp constructor.
|
|
17
|
+
*/
|
|
18
|
+
export declare function drainAutoState(): Record<string, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* @internal Reset the collector (for tests).
|
|
21
|
+
*/
|
|
22
|
+
export declare function resetAutoState(): void;
|
|
23
|
+
//# sourceMappingURL=state-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-collector.d.ts","sourceRoot":"","sources":["../../src/rx/state-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,UAAU;IACzB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC;AAID,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAElD;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAaxD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto state collector — tracks Signal and Collection instances
|
|
3
|
+
* for automatic state assembly in PrefabApp.
|
|
4
|
+
*
|
|
5
|
+
* `signal()` and `collection()` factories push entries here.
|
|
6
|
+
* `PrefabApp` drains the collector at construction time, so each
|
|
7
|
+
* app captures exactly the state created before it.
|
|
8
|
+
*/
|
|
9
|
+
const pending = [];
|
|
10
|
+
/** @internal Push a signal or collection for auto-collection. */
|
|
11
|
+
export function trackState(entry) {
|
|
12
|
+
pending.push(entry);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* @internal Drain all pending state entries and return merged state.
|
|
16
|
+
* Clears the pending list. Called by PrefabApp constructor.
|
|
17
|
+
*/
|
|
18
|
+
export function drainAutoState() {
|
|
19
|
+
const merged = {};
|
|
20
|
+
for (const entry of pending) {
|
|
21
|
+
const state = entry.toState();
|
|
22
|
+
for (const key of Object.keys(state)) {
|
|
23
|
+
if (key in merged) {
|
|
24
|
+
console.warn(`[prefab] state key "${key}" registered multiple times — last value wins`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
Object.assign(merged, state);
|
|
28
|
+
}
|
|
29
|
+
pending.length = 0;
|
|
30
|
+
return merged;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @internal Reset the collector (for tests).
|
|
34
|
+
*/
|
|
35
|
+
export function resetAutoState() {
|
|
36
|
+
pending.length = 0;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=state-collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-collector.js","sourceRoot":"","sources":["../../src/rx/state-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,OAAO,GAAiB,EAAE,CAAA;AAEhC,iEAAiE;AACjE,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,MAAM,GAA4B,EAAE,CAAA;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,uBAAuB,GAAG,+CAA+C,CAAC,CAAA;YACzF,CAAC;QACH,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9B,CAAC;IACD,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;IAClB,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;AACpB,CAAC"}
|
package/package.json
CHANGED