@maxhealth.tech/prefab 0.2.0 → 0.2.1
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 +23 -0
- package/dist/app.d.ts +7 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +9 -1
- package/dist/app.js.map +1 -1
- package/dist/renderer/components/control.js +4 -10
- package/dist/renderer/components/control.js.map +1 -1
- package/dist/renderer/engine.d.ts +6 -0
- package/dist/renderer/engine.d.ts.map +1 -1
- package/dist/renderer/engine.js +74 -2
- package/dist/renderer/engine.js.map +1 -1
- package/dist/renderer/index.d.ts +4 -0
- package/dist/renderer/index.d.ts.map +1 -1
- package/dist/renderer/index.js +49 -0
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer.min.js +12 -12
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.2.0] — 2026-04-25
|
|
6
|
+
|
|
7
|
+
### Bug Fix: If/Elif/Else Conditional Chains
|
|
8
|
+
- **Fixed**: `Elif` and `Else` nodes rendered independently instead of being consumed by the preceding `If` chain. All branches in an `If/Elif/Else` sequence now render—only the first matching branch renders; the rest are skipped.
|
|
9
|
+
- New `renderChildArray()` in the render engine detects `If/Elif/Else` sibling sequences and evaluates them as a single conditional chain
|
|
10
|
+
- Orphaned `Elif`/`Else` nodes (not adjacent to an `If`) are silently skipped
|
|
11
|
+
- `ForEach`, `If`, and `Else` body rendering now uses chain-aware iteration for nested chains
|
|
12
|
+
- 55 new tests in `test/tdd-bugs-r2.test.ts` — **913 total tests**
|
|
13
|
+
|
|
14
|
+
### Bug Fix: Browser Pipe Registration
|
|
15
|
+
|
|
16
|
+
### Bug Fix: Browser Pipe Registration
|
|
17
|
+
- **Fixed**: Custom pipes registered in Node (via `registerPipe()`) were not available in the browser renderer bundle. Pipes are functions — they can't be serialized as JSON. The renderer loaded a fresh instance with zero custom pipes, causing `{{ name | humanName }}` to fall through to `[object Object]`.
|
|
18
|
+
- `PrefabApp({ pipes: { humanName: fn } })` — accepts pipe functions and serializes their source code into the wire format
|
|
19
|
+
- `PrefabWireFormat.pipes` — new optional field carrying pipe source strings
|
|
20
|
+
- Renderer `mount()` hydrates wire pipes via `new Function()` before first render
|
|
21
|
+
- `destroy()` cleans up wire-hydrated pipes (scoped to mount lifetime)
|
|
22
|
+
- `window.prefab` global now exposes `registerPipe`, `unregisterPipe`, `listPipes`
|
|
23
|
+
- Renderer module re-exports `registerPipe`, `unregisterPipe`, `listPipes`, `PipeFn`
|
|
24
|
+
- Built-in pipes cannot be shadowed by wire pipes (security)
|
|
25
|
+
- Invalid pipe source is caught gracefully (warning, no throw)
|
|
26
|
+
- 12 new tests in `test/pipe-wire.test.ts` — **858 total tests**
|
|
27
|
+
|
|
5
28
|
## [0.1.10] — 2026-04-24
|
|
6
29
|
|
|
7
30
|
### Action-Builder Sugar
|
package/dist/app.d.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
import { type Component } from './core/component.js';
|
|
8
8
|
import type { ComponentJSON } from './core/component.js';
|
|
9
9
|
import type { Action, ActionJSON } from './actions/types.js';
|
|
10
|
+
import type { PipeFn } from './rx/pipes.js';
|
|
10
11
|
/** Package version — injected by build script, updated at release time. */
|
|
11
|
-
export declare const VERSION = "0.2.
|
|
12
|
+
export declare const VERSION = "0.2.1";
|
|
12
13
|
export interface Theme {
|
|
13
14
|
light?: Record<string, string>;
|
|
14
15
|
dark?: Record<string, string>;
|
|
@@ -24,6 +25,8 @@ export interface PrefabWireFormat {
|
|
|
24
25
|
keyBindings?: Record<string, ActionJSON | ActionJSON[]>;
|
|
25
26
|
onMount?: ActionJSON | ActionJSON[];
|
|
26
27
|
stylesheets?: string[];
|
|
28
|
+
/** Custom pipe source code — hydrated by the renderer on mount. */
|
|
29
|
+
pipes?: Record<string, string>;
|
|
27
30
|
}
|
|
28
31
|
export interface PrefabAppOptions {
|
|
29
32
|
title?: string;
|
|
@@ -36,6 +39,8 @@ export interface PrefabAppOptions {
|
|
|
36
39
|
onMount?: Action | Action[];
|
|
37
40
|
keyBindings?: Record<string, Action | Action[]>;
|
|
38
41
|
cssClass?: string;
|
|
42
|
+
/** Custom pipes to serialize in the wire format. Functions are converted to source strings. */
|
|
43
|
+
pipes?: Record<string, PipeFn>;
|
|
39
44
|
}
|
|
40
45
|
export declare class PrefabApp {
|
|
41
46
|
readonly title: string;
|
|
@@ -48,6 +53,7 @@ export declare class PrefabApp {
|
|
|
48
53
|
readonly onMount?: Action | Action[];
|
|
49
54
|
readonly keyBindings?: Record<string, Action | Action[]>;
|
|
50
55
|
readonly cssClass?: string;
|
|
56
|
+
readonly pipes?: Record<string, PipeFn>;
|
|
51
57
|
constructor(opts: PrefabAppOptions);
|
|
52
58
|
/**
|
|
53
59
|
* Serialize to the $prefab wire format (JSON).
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import {} from './core/component.js';
|
|
8
8
|
import { drainAutoState } from './rx/state-collector.js';
|
|
9
9
|
/** Package version — injected by build script, updated at release time. */
|
|
10
|
-
export const VERSION = '0.2.
|
|
10
|
+
export const VERSION = '0.2.1';
|
|
11
11
|
export class PrefabApp {
|
|
12
12
|
title;
|
|
13
13
|
view;
|
|
@@ -19,6 +19,7 @@ export class PrefabApp {
|
|
|
19
19
|
onMount;
|
|
20
20
|
keyBindings;
|
|
21
21
|
cssClass;
|
|
22
|
+
pipes;
|
|
22
23
|
constructor(opts) {
|
|
23
24
|
this.title = opts.title ?? 'Prefab';
|
|
24
25
|
this.view = opts.view;
|
|
@@ -37,6 +38,7 @@ export class PrefabApp {
|
|
|
37
38
|
this.onMount = opts.onMount;
|
|
38
39
|
this.keyBindings = opts.keyBindings;
|
|
39
40
|
this.cssClass = opts.cssClass;
|
|
41
|
+
this.pipes = opts.pipes;
|
|
40
42
|
}
|
|
41
43
|
/**
|
|
42
44
|
* Serialize to the $prefab wire format (JSON).
|
|
@@ -79,6 +81,12 @@ export class PrefabApp {
|
|
|
79
81
|
? this.onMount.map(a => a.toJSON())
|
|
80
82
|
: this.onMount.toJSON();
|
|
81
83
|
}
|
|
84
|
+
if (this.pipes && Object.keys(this.pipes).length > 0) {
|
|
85
|
+
wire.pipes = {};
|
|
86
|
+
for (const [name, fn] of Object.entries(this.pipes)) {
|
|
87
|
+
wire.pipes[name] = fn.toString();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
82
90
|
return wire;
|
|
83
91
|
}
|
|
84
92
|
/**
|
package/dist/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAkB,MAAM,qBAAqB,CAAA;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Control flow renderers — ForEach, If/Elif/Else
|
|
3
3
|
*/
|
|
4
|
-
import { registerComponent, renderNode } from '../engine.js';
|
|
4
|
+
import { registerComponent, renderNode, renderChildArray } from '../engine.js';
|
|
5
5
|
import { evaluateTemplate, isRxExpression } from '../rx.js';
|
|
6
6
|
export function registerControlComponents() {
|
|
7
7
|
registerComponent('ForEach', renderForEach);
|
|
@@ -37,9 +37,7 @@ function renderForEach(node, ctx) {
|
|
|
37
37
|
};
|
|
38
38
|
const childCtx = { ...ctx, scope: childScope };
|
|
39
39
|
if (node.children) {
|
|
40
|
-
|
|
41
|
-
frag.appendChild(renderNode(child, childCtx));
|
|
42
|
-
}
|
|
40
|
+
renderChildArray(node.children, frag, childCtx);
|
|
43
41
|
}
|
|
44
42
|
}
|
|
45
43
|
return frag;
|
|
@@ -61,9 +59,7 @@ function renderIf(node, ctx) {
|
|
|
61
59
|
if (condition) {
|
|
62
60
|
const frag = document.createDocumentFragment();
|
|
63
61
|
if (node.children) {
|
|
64
|
-
|
|
65
|
-
frag.appendChild(renderNode(child, ctx));
|
|
66
|
-
}
|
|
62
|
+
renderChildArray(node.children, frag, ctx);
|
|
67
63
|
}
|
|
68
64
|
return frag;
|
|
69
65
|
}
|
|
@@ -77,9 +73,7 @@ function renderElif(node, ctx) {
|
|
|
77
73
|
function renderElse(node, ctx) {
|
|
78
74
|
const frag = document.createDocumentFragment();
|
|
79
75
|
if (node.children) {
|
|
80
|
-
|
|
81
|
-
frag.appendChild(renderNode(child, ctx));
|
|
82
|
-
}
|
|
76
|
+
renderChildArray(node.children, frag, ctx);
|
|
83
77
|
}
|
|
84
78
|
return frag;
|
|
85
79
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../src/renderer/components/control.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../src/renderer/components/control.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAE9E,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAE3D,MAAM,UAAU,yBAAyB;IACvC,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAA;IAC3C,iBAAiB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IACjC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACrC,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;IACzC,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IACnC,iBAAiB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB,EAAE,GAAkB;IAC5D,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAA;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAgC,CAAA;IAClD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAA;IACtB,IAAI,KAAgB,CAAA;IAEpB,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAA;QACxD,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC/B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IACvC,CAAC;IAED,MAAM,WAAW,GAAI,IAAI,CAAC,GAA2C,IAAI,EAAE,CAAA;IAE3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QACrB,MAAM,UAAU,GAAG;YACjB,GAAG,GAAG,CAAC,KAAK;YACZ,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,CAAC;YACT,GAAG,WAAW;SACf,CAAA;QACD,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;QAE9C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,QAAQ,CAAC,IAAmB,EAAE,GAAkB;IACvD,MAAM,SAAS,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAmB,EAAE,GAAG,CAAC,CAAA;IAElE,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAA;QAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,uBAAuB;IACvB,OAAO,QAAQ,CAAC,sBAAsB,EAAE,CAAA;AAC1C,CAAC;AAED,SAAS,UAAU,CAAC,IAAmB,EAAE,GAAkB;IACzD,qEAAqE;IACrE,OAAO,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,IAAmB,EAAE,GAAkB;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAA;IAC9C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;IAC5C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAiB,EAAE,GAAkB;IAC9D,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAA;IAC5B,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;IACnE,CAAC;IACD,4BAA4B;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;AAC1C,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,SAAS,YAAY,CAAC,IAAmB,EAAE,GAAkB;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAA;IAChC,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC1B,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,EAAE,CAAA;QACnC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC,sBAAsB,EAAE,CAAA;AAC1C,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,IAAmB,EAAE,GAAkB;IACxD,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAA;IAC9C,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAW,CAAA;IAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IAE1B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAA;IACnE,MAAM,UAAU,GAAG,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,SAAS,EAAE,CAAA;IACjD,MAAM,QAAQ,GAAG,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;IAE9C,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC/C,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,IAAmB,EAAE,GAAkB;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAA;IAC9C,MAAM,QAAQ,GAAI,IAAI,CAAC,IAA2B,IAAI,SAAS,CAAA;IAE/D,gDAAgD;IAChD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAA;IAE7C,IAAI,QAAQ,EAAE,CAAC;QACb,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;QAC1C,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC"}
|
|
@@ -38,8 +38,14 @@ export declare function getRenderer(type: string): RenderFn | undefined;
|
|
|
38
38
|
export declare function renderNode(node: ComponentNode, ctx: RenderContext): HTMLElement | DocumentFragment;
|
|
39
39
|
/**
|
|
40
40
|
* Render all children of a node into a parent element.
|
|
41
|
+
* Handles If/Elif/Else chains: only the first matching branch renders.
|
|
41
42
|
*/
|
|
42
43
|
export declare function renderChildren(node: ComponentNode, parent: HTMLElement, ctx: RenderContext): void;
|
|
44
|
+
/**
|
|
45
|
+
* Render an array of child nodes into a parent, handling If/Elif/Else chains.
|
|
46
|
+
* Exported so ForEach and other manual-loop renderers can use it.
|
|
47
|
+
*/
|
|
48
|
+
export declare function renderChildArray(children: ComponentNode[], parent: HTMLElement | DocumentFragment, ctx: RenderContext): void;
|
|
43
49
|
/** Resolve a possibly-reactive string value */
|
|
44
50
|
export declare function resolveStr(value: unknown, ctx: RenderContext): string;
|
|
45
51
|
/** Resolve a possibly-reactive value, keeping original type */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/renderer/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAMzF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IACnC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;CACxC;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,KAAK,WAAW,GAAG,gBAAgB,CAAA;AAMlG,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAElE;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE9D;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,WAAW,GAAG,gBAAgB,CAwClG;AAED
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/renderer/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAMzF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAA;IACnC,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,KAAK,EAAE,SAAS,CAAA;IAChB,SAAS,CAAC,EAAE,YAAY,CAAA;IACxB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC,CAAA;CACxC;AAED,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,KAAK,WAAW,GAAG,gBAAgB,CAAA;AAMlG,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,GAAG,IAAI,CAElE;AAED,0CAA0C;AAC1C,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE9D;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,WAAW,GAAG,gBAAgB,CAwClG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CAGjG;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,aAAa,EAAE,EACzB,MAAM,EAAE,WAAW,GAAG,gBAAgB,EACtC,GAAG,EAAE,aAAa,GACjB,IAAI,CAcN;AAmED,+CAA+C;AAC/C,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAMrE;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,GAAG,OAAO,CAKxE;AAED,kDAAkD;AAClD,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,eAAe,CAQnE;AAED,yCAAyC;AACzC,wBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAI/D;AAED,qCAAqC;AACrC,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,CAGvE"}
|
package/dist/renderer/engine.js
CHANGED
|
@@ -63,14 +63,86 @@ export function renderNode(node, ctx) {
|
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
65
|
* Render all children of a node into a parent element.
|
|
66
|
+
* Handles If/Elif/Else chains: only the first matching branch renders.
|
|
66
67
|
*/
|
|
67
68
|
export function renderChildren(node, parent, ctx) {
|
|
68
69
|
if (!node.children)
|
|
69
70
|
return;
|
|
70
|
-
|
|
71
|
-
|
|
71
|
+
renderChildArray(node.children, parent, ctx);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Render an array of child nodes into a parent, handling If/Elif/Else chains.
|
|
75
|
+
* Exported so ForEach and other manual-loop renderers can use it.
|
|
76
|
+
*/
|
|
77
|
+
export function renderChildArray(children, parent, ctx) {
|
|
78
|
+
let i = 0;
|
|
79
|
+
while (i < children.length) {
|
|
80
|
+
const child = children[i];
|
|
81
|
+
if (child.type === 'If') {
|
|
82
|
+
i = renderConditionalChain(children, i, parent, ctx);
|
|
83
|
+
}
|
|
84
|
+
else if (child.type === 'Elif' || child.type === 'Else') {
|
|
85
|
+
// Orphaned Elif/Else outside an If chain — skip silently
|
|
86
|
+
i++;
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
parent.appendChild(renderNode(child, ctx));
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
72
92
|
}
|
|
73
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Consume an If / Elif* / Else? chain starting at index `start`.
|
|
96
|
+
* Returns the index of the first child AFTER the chain.
|
|
97
|
+
*/
|
|
98
|
+
function renderConditionalChain(children, start, parent, ctx) {
|
|
99
|
+
let matched = false;
|
|
100
|
+
let i = start;
|
|
101
|
+
// Evaluate the If node
|
|
102
|
+
const ifNode = children[i];
|
|
103
|
+
if (evalCondition(ifNode.condition, ctx)) {
|
|
104
|
+
renderBranchChildren(ifNode, parent, ctx);
|
|
105
|
+
matched = true;
|
|
106
|
+
}
|
|
107
|
+
i++;
|
|
108
|
+
// Consume consecutive Elif / Else siblings
|
|
109
|
+
while (i < children.length) {
|
|
110
|
+
const sibling = children[i];
|
|
111
|
+
if (sibling.type === 'Elif') {
|
|
112
|
+
if (!matched && evalCondition(sibling.condition, ctx)) {
|
|
113
|
+
renderBranchChildren(sibling, parent, ctx);
|
|
114
|
+
matched = true;
|
|
115
|
+
}
|
|
116
|
+
i++;
|
|
117
|
+
}
|
|
118
|
+
else if (sibling.type === 'Else') {
|
|
119
|
+
if (!matched) {
|
|
120
|
+
renderBranchChildren(sibling, parent, ctx);
|
|
121
|
+
}
|
|
122
|
+
i++;
|
|
123
|
+
break; // Else always terminates the chain
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
break; // Non-conditional sibling — chain ends
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return i;
|
|
130
|
+
}
|
|
131
|
+
/** Evaluate a condition string to boolean (used by the chain handler). */
|
|
132
|
+
function evalCondition(condition, ctx) {
|
|
133
|
+
if (!condition)
|
|
134
|
+
return false;
|
|
135
|
+
if (isRxExpression(condition)) {
|
|
136
|
+
return Boolean(evaluateTemplate(condition, ctx.store, ctx.scope));
|
|
137
|
+
}
|
|
138
|
+
return Boolean(ctx.store.get(condition));
|
|
139
|
+
}
|
|
140
|
+
/** Render a branch node's children into the parent. */
|
|
141
|
+
function renderBranchChildren(node, parent, ctx) {
|
|
142
|
+
if (!node.children)
|
|
143
|
+
return;
|
|
144
|
+
renderChildArray(node.children, parent, ctx);
|
|
145
|
+
}
|
|
74
146
|
// ── Helpers for renderers ────────────────────────────────────────────────────
|
|
75
147
|
/** Resolve a possibly-reactive string value */
|
|
76
148
|
export function resolveStr(value, ctx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/renderer/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AA0B9C,gFAAgF;AAEhF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAA;AAE5C,sDAAsD;AACtD,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,EAAY;IAC1D,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACxB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,IAAmB,EAAE,GAAkB;IAChE,uDAAuD;IACvD,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;QACnF,OAAO,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,EAAkC,CAAA;IAEtC,IAAI,QAAQ,EAAE,CAAC;QACb,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC1B,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CACjC;QAAA,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QACjD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,IAAI,EAAE,YAAY,WAAW,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,EAAE;YAAE,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;QAC5B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;YAC1C,IAAI,GAAG;gBAAE,EAAE,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;QACxE,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC5B,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;QACpC,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;IAC9D,CAAC;IAED,OAAO,EAAE,CAAA;AACX,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/renderer/engine.ts"],"names":[],"mappings":"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"}
|
package/dist/renderer/index.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ import type { McpTransportOptions } from './transport.js';
|
|
|
33
33
|
export { app } from './app.js';
|
|
34
34
|
export type { AppOptions, PrefabApp, MountHandle } from './app.js';
|
|
35
35
|
export { Bridge, isIframe, applyHostTheme } from './bridge.js';
|
|
36
|
+
export { registerPipe, unregisterPipe, listPipes } from '../rx/pipes.js';
|
|
37
|
+
export type { PipeFn } from '../rx/pipes.js';
|
|
36
38
|
export type { AppCapabilities, HostCapabilities, HostContext, HostTheme, DisplayMode, BridgeMessage, } from './bridge.js';
|
|
37
39
|
export interface PrefabWireData {
|
|
38
40
|
$prefab: {
|
|
@@ -47,6 +49,8 @@ export interface PrefabWireData {
|
|
|
47
49
|
defs?: Record<string, ComponentNode>;
|
|
48
50
|
keyBindings?: Record<string, ActionJSON | ActionJSON[]>;
|
|
49
51
|
stylesheets?: string[];
|
|
52
|
+
/** Custom pipe source code strings — hydrated by the renderer on mount. */
|
|
53
|
+
pipes?: Record<string, string>;
|
|
50
54
|
}
|
|
51
55
|
export interface PrefabUpdateData {
|
|
52
56
|
$prefab: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,aAAa,CAAA;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAOzD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAClE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AACxE,YAAY,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAA;AAIpB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC,CAAA;IACvD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAA;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,SAAS,CAAC,EAAE,YAAY,GAAG,mBAAmB,CAAA;IAC9C,kCAAkC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,UAAU;IACzB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,kDAAkD;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAA;IACxC,8BAA8B;IAC9B,KAAK,EAAE,KAAK,CAAA;IACZ,4BAA4B;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAID,eAAO,MAAM,cAAc;IACzB;;;;;;;OAOG;gBACS,WAAW,QAAQ,cAAc,YAAY,YAAY,GAAG,UAAU;IAkGlF;;OAEG;uBACgB,OAAO,GAAG,IAAI,IAAI,cAAc;IAInD;;OAEG;yBACkB,OAAO,GAAG,IAAI,IAAI,gBAAgB;CAQxD,CAAA"}
|
package/dist/renderer/index.js
CHANGED
|
@@ -34,9 +34,11 @@ import { dispatchActions, clearAllIntervals } from './actions.js';
|
|
|
34
34
|
import { createHttpTransport, createNoopTransport } from './transport.js';
|
|
35
35
|
import { app } from './app.js';
|
|
36
36
|
import { Bridge, isIframe } from './bridge.js';
|
|
37
|
+
import { registerPipe, unregisterPipe, listPipes } from '../rx/pipes.js';
|
|
37
38
|
// Re-export new APIs
|
|
38
39
|
export { app } from './app.js';
|
|
39
40
|
export { Bridge, isIframe, applyHostTheme } from './bridge.js';
|
|
41
|
+
export { registerPipe, unregisterPipe, listPipes } from '../rx/pipes.js';
|
|
40
42
|
// ── PrefabRenderer ───────────────────────────────────────────────────────────
|
|
41
43
|
export const PrefabRenderer = {
|
|
42
44
|
/**
|
|
@@ -50,6 +52,13 @@ export const PrefabRenderer = {
|
|
|
50
52
|
mount(root, data, options) {
|
|
51
53
|
// Register all built-in components (idempotent)
|
|
52
54
|
registerAllComponents();
|
|
55
|
+
// Hydrate custom pipes from wire format (before any rendering)
|
|
56
|
+
const wirePipeNames = [];
|
|
57
|
+
if (data.pipes) {
|
|
58
|
+
for (const [name, source] of Object.entries(data.pipes)) {
|
|
59
|
+
hydratePipe(name, source, wirePipeNames);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
53
62
|
// Initialize state store
|
|
54
63
|
const store = new Store(data.state);
|
|
55
64
|
// Set up transport
|
|
@@ -122,6 +131,9 @@ export const PrefabRenderer = {
|
|
|
122
131
|
clearAllIntervals();
|
|
123
132
|
for (const s of styleEls)
|
|
124
133
|
s.remove();
|
|
134
|
+
// Unregister wire-hydrated pipes (scoped to this mount)
|
|
135
|
+
for (const name of wirePipeNames)
|
|
136
|
+
unregisterPipe(name);
|
|
125
137
|
root.innerHTML = '';
|
|
126
138
|
},
|
|
127
139
|
};
|
|
@@ -142,6 +154,40 @@ export const PrefabRenderer = {
|
|
|
142
154
|
'update' in data);
|
|
143
155
|
},
|
|
144
156
|
};
|
|
157
|
+
// ── Pipe hydration ───────────────────────────────────────────────────────────
|
|
158
|
+
/** Built-in pipe names that wire pipes must never shadow. */
|
|
159
|
+
const BUILTIN_PIPES = new Set([
|
|
160
|
+
'find', 'dot', 'length', 'upper', 'lower', 'truncate', 'join',
|
|
161
|
+
'first', 'last', 'abs', 'round', 'number', 'currency', 'percent',
|
|
162
|
+
'compact', 'date', 'time', 'datetime', 'pluralize', 'default',
|
|
163
|
+
'selectattr', 'rejectattr',
|
|
164
|
+
]);
|
|
165
|
+
/**
|
|
166
|
+
* Safely hydrate a pipe from its source string.
|
|
167
|
+
* Registers it via registerPipe if valid; skips with a warning otherwise.
|
|
168
|
+
* Built-in pipe names are silently ignored (security).
|
|
169
|
+
*/
|
|
170
|
+
function hydratePipe(name, source, tracked) {
|
|
171
|
+
if (BUILTIN_PIPES.has(name)) {
|
|
172
|
+
console.warn(`[prefab] wire pipe "${name}" ignored — shadows built-in`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
// Evaluate the source string as a function expression.
|
|
177
|
+
// new Function is intentional — it's the only way to hydrate serialized pipe source from wire format.
|
|
178
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval, @typescript-eslint/no-unsafe-call
|
|
179
|
+
const fn = new Function('return (' + source + ')')();
|
|
180
|
+
if (typeof fn !== 'function') {
|
|
181
|
+
console.warn(`[prefab] wire pipe "${name}" — source did not evaluate to a function`);
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
registerPipe(name, fn);
|
|
185
|
+
tracked.push(name);
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
console.warn(`[prefab] wire pipe "${name}" — failed to hydrate:`, e);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
145
191
|
// ── Default toast ────────────────────────────────────────────────────────────
|
|
146
192
|
function defaultToastHandler(toast) {
|
|
147
193
|
if (typeof document === 'undefined')
|
|
@@ -202,6 +248,9 @@ if (typeof window !== 'undefined') {
|
|
|
202
248
|
isPrefabUpdate: PrefabRenderer.isPrefabUpdate.bind(PrefabRenderer),
|
|
203
249
|
Bridge,
|
|
204
250
|
isIframe,
|
|
251
|
+
registerPipe,
|
|
252
|
+
unregisterPipe,
|
|
253
|
+
listPipes,
|
|
205
254
|
};
|
|
206
255
|
// Auto-mount if data is available
|
|
207
256
|
const prefabData = w.__PREFAB_DATA__;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAEjE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEzE,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/renderer/index.ts"],"names":[],"mappings":"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"}
|