@maxhealth.tech/prefab 0.3.10 → 0.3.11

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/a2ui/emit.js CHANGED
@@ -17,7 +17,7 @@
17
17
  * asserted on in tests and cached by hosts.
18
18
  */
19
19
  import { createLogger } from '../core/logger.js';
20
- import { escapePointerToken, toBinding } from './expr.js';
20
+ import { dynamicString, escapePointerToken, toBinding } from './expr.js';
21
21
  import { fallbackMapper, isConsumedByParent, mapperFor } from './catalog.js';
22
22
  import { A2UI_BASIC_CATALOG, A2UI_ROOT_ID, A2UI_VERSION, } from './types.js';
23
23
  const log = createLogger('a2ui');
@@ -36,17 +36,92 @@ function unwrapAppRoot(view) {
36
36
  }
37
37
  return view;
38
38
  }
39
+ /**
40
+ * Collect every `Define` in the tree.
41
+ *
42
+ * A pre-pass rather than collection during the walk, because prefab resolves a
43
+ * definition by name at render time and imposes no ordering: a `Use` may appear
44
+ * before the `Define` it refers to, and inside a different branch of the tree.
45
+ */
46
+ function collectDefinitions(node, into) {
47
+ if (node.type === 'Define') {
48
+ const name = typeof node.name === 'string' ? node.name : undefined;
49
+ if (name != null && Array.isArray(node.children))
50
+ into.set(name, node.children);
51
+ }
52
+ if (Array.isArray(node.children))
53
+ for (const child of node.children)
54
+ collectDefinitions(child, into);
55
+ }
39
56
  class Emitter {
40
57
  warn;
41
58
  /** Insertion-ordered; `undefined` marks a reserved slot that was released. */
42
59
  components = new Map();
43
- dataModel = {};
60
+ // A Map rather than an object literal so a rolled-back subtree's seeded keys
61
+ // can be removed without a dynamic delete.
62
+ dataModel = new Map();
44
63
  used = new Set([A2UI_ROOT_ID]);
45
64
  diagnostics = [];
65
+ definitions = new Map();
46
66
  counter = 0;
67
+ /** Names in force for binding, extended while inlining a template or a definition. */
68
+ scope = {};
69
+ /** Slot content from the nearest enclosing `Use`. */
70
+ slots = {};
71
+ /**
72
+ * Definitions currently being expanded, so a `Use` inside its own `Define`
73
+ * reports a cycle instead of recursing until the stack gives out.
74
+ */
75
+ expanding = new Set();
47
76
  constructor(warn) {
48
77
  this.warn = warn;
49
78
  }
79
+ bind(value) {
80
+ return toBinding(value, this.scope);
81
+ }
82
+ dyn(value) {
83
+ return dynamicString(value, this.scope);
84
+ }
85
+ inScope(names, fn) {
86
+ const previous = this.scope;
87
+ this.scope = { ...previous, ...names };
88
+ try {
89
+ return fn();
90
+ }
91
+ finally {
92
+ this.scope = previous;
93
+ }
94
+ }
95
+ withSlots(slots, fn) {
96
+ const previous = this.slots;
97
+ this.slots = { ...previous, ...slots };
98
+ try {
99
+ return fn();
100
+ }
101
+ finally {
102
+ this.slots = previous;
103
+ }
104
+ }
105
+ slotContent(name) {
106
+ return this.slots[name];
107
+ }
108
+ definition(name) {
109
+ if (this.expanding.has(name)) {
110
+ this.note('unsupported', 'Use', `definition "${name}" uses itself; A2UI has no recursive template`);
111
+ return undefined;
112
+ }
113
+ return this.definitions.get(name);
114
+ }
115
+ /** Track expansion depth so `definition()` can detect a cycle. */
116
+ expand(name, fn) {
117
+ this.expanding.add(name);
118
+ try {
119
+ return fn();
120
+ }
121
+ finally {
122
+ this.expanding.delete(name);
123
+ }
124
+ }
50
125
  note(kind, subject, detail) {
51
126
  this.diagnostics.push({ kind, subject, detail });
52
127
  if (this.warn)
@@ -75,11 +150,11 @@ class Emitter {
75
150
  bindData(key, value) {
76
151
  let name = key;
77
152
  let n = 0;
78
- while (name in this.dataModel) {
153
+ while (this.dataModel.has(name)) {
79
154
  n += 1;
80
155
  name = `${key}${n}`;
81
156
  }
82
- this.dataModel[name] = value;
157
+ this.dataModel.set(name, value);
83
158
  return `/${escapePointerToken(name)}`;
84
159
  }
85
160
  child(node) {
@@ -125,7 +200,11 @@ class Emitter {
125
200
  if (kind == null)
126
201
  return undefined;
127
202
  switch (kind) {
128
- case 'toolCall': {
203
+ // `callTool` is the spelling the shipped examples use and the renderer
204
+ // accepts both, so an emitter that knew only one silently downgraded every
205
+ // hand-written tool call into a generic agent event.
206
+ case 'toolCall':
207
+ case 'callTool': {
129
208
  const tool = typeof json.tool === 'string' ? json.tool : undefined;
130
209
  if (tool == null)
131
210
  return undefined;
@@ -182,6 +261,26 @@ class Emitter {
182
261
  }
183
262
  return Object.keys(context).length > 0 ? context : undefined;
184
263
  }
264
+ /**
265
+ * Undo everything emitted since a watermark.
266
+ *
267
+ * A mapper reads its children before deciding whether it can map at all — a
268
+ * `Dialog` emits its body, then finds it cannot build a trigger. Without this,
269
+ * those children stay in the adjacency list with nothing pointing at them,
270
+ * which is a payload the renderer rejects for unreachability. Dropping a node
271
+ * has to drop its whole subtree.
272
+ */
273
+ rollback(components, dataKeys) {
274
+ const keys = [...this.components.keys()];
275
+ for (let i = components; i < keys.length; i++) {
276
+ this.components.delete(keys[i]);
277
+ if (keys[i] !== A2UI_ROOT_ID)
278
+ this.used.delete(keys[i]);
279
+ }
280
+ const seeded = [...this.dataModel.keys()];
281
+ for (let i = dataKeys; i < seeded.length; i++)
282
+ this.dataModel.delete(seeded[i]);
283
+ }
185
284
  /** Emit one subtree. Returns the allocated id, or `undefined` if it was dropped. */
186
285
  emit(node, isRoot) {
187
286
  if (typeof node.type !== 'string')
@@ -190,6 +289,8 @@ class Emitter {
190
289
  this.note('unsupported', node.type, 'only meaningful inside its parent; emitted standalone it has no meaning');
191
290
  return undefined;
192
291
  }
292
+ const componentMark = this.components.size;
293
+ const dataMark = this.dataModel.size;
193
294
  const id = isRoot ? A2UI_ROOT_ID : this.allocate(node);
194
295
  // Reserve the slot before the mapper runs, so children emitted during
195
296
  // mapping cannot claim this id.
@@ -197,9 +298,7 @@ class Emitter {
197
298
  const mapper = mapperFor(node.type) ?? fallbackMapper;
198
299
  const props = mapper(node, this);
199
300
  if (props == null) {
200
- this.components.delete(id);
201
- if (!isRoot)
202
- this.used.delete(id);
301
+ this.rollback(componentMark, dataMark);
203
302
  return undefined;
204
303
  }
205
304
  this.components.set(id, { id, ...props });
@@ -207,6 +306,11 @@ class Emitter {
207
306
  }
208
307
  finish(wire, options) {
209
308
  const surfaceId = options.surfaceId ?? 'prefab';
309
+ // Envelope-level defs first, then any `Define` in the tree, which wins on a
310
+ // name clash for the same reason it does in the renderer: it is nearer.
311
+ for (const [name, body] of Object.entries(wire.defs ?? {}))
312
+ this.definitions.set(name, [body]);
313
+ collectDefinitions(wire.view, this.definitions);
210
314
  const rootId = this.emit(unwrapAppRoot(wire.view), true);
211
315
  if (rootId == null) {
212
316
  this.note('unsupported', 'view', 'nothing in the view could be expressed in A2UI; the surface is empty');
@@ -218,7 +322,7 @@ class Emitter {
218
322
  // prefab state and any literals seeded during mapping share one data model.
219
323
  // State wins on a collision, since seeded keys are generated and state keys
220
324
  // are author-chosen.
221
- const dataModel = { ...this.dataModel, ...(wire.state ?? {}) };
325
+ const dataModel = { ...Object.fromEntries(this.dataModel), ...(wire.state ?? {}) };
222
326
  const hasData = Object.keys(dataModel).length > 0;
223
327
  const messages = [];
224
328
  const catalogId = options.catalogId ?? A2UI_BASIC_CATALOG;
@@ -1 +1 @@
1
- {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/a2ui/emit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/a2ui/emit.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,38 @@
1
1
  /**
2
2
  * `{{ }}` template → A2UI data binding.
3
3
  *
4
- * `$prefab` interpolates arbitrary expressions client-side `{{ count + 1 }}`,
5
- * `{{ price | currency:'USD' }}`, `{{ active ? 'Yes' : 'No' }}`. A2UI binds
6
- * values through JSON Pointer paths into the data model and has no expression
7
- * language, so only the plain-path subset crosses over: `{{ user.name }}`
8
- * becomes `{ path: '/user/name' }`, and anything with an operator, pipe or
9
- * conditional does not survive.
10
- *
11
- * Rather than silently emitting a broken binding, richer expressions are
12
- * reported back to the caller as an `expression` diagnostic and the property is
13
- * dropped, so the failure shows up at emit time instead of as an empty widget
14
- * in someone's renderer.
4
+ * `$prefab` interpolates arbitrary expressions client-side. A2UI binds values
5
+ * through JSON Pointers and, for text that mixes literals with values, through
6
+ * the `formatString` catalog function. Between them those cover more than a
7
+ * plain-path conversion would suggest:
8
+ *
9
+ * - `{{ user.name }}` → `{ path: '/user/name' }`
10
+ * - `Hi {{ name }}!` → `{ call: 'formatString', args: { value: 'Hi ${/name}!' } }`
11
+ * - `{{ p | currency:'EUR' }}` `{ call: 'formatCurrency', args: { … } }`
12
+ * - `{{ count + 1 }}` → nothing; A2UI has no expression language
13
+ *
14
+ * What does not survive is arithmetic, conditionals, and the pipes that
15
+ * transform data rather than format it (see `./pipes.ts`). Those are reported as
16
+ * `expression` diagnostics rather than emitted as a binding that would render an
17
+ * empty string in someone's renderer.
18
+ *
19
+ * ## Scopes
20
+ *
21
+ * A binding is resolved against a {@link BindScope}, which is how names local to
22
+ * a region become pointers. Inside a list template A2UI resolves relative paths
23
+ * against the current item, so prefab's `$item` maps to the empty prefix; inside
24
+ * an inlined definition, a `Use`'s overrides map to wherever the emitter seeded
25
+ * them. Without this, a name that means something local would silently bind to
26
+ * the root of the data model and read whatever happened to be there.
27
+ */
28
+ import type { A2uiDataBinding, A2uiDynamicString, A2uiFunctionCall } from './types.js';
29
+ /**
30
+ * Names local to a region, mapped to the pointer they resolve to.
31
+ *
32
+ * An empty-string value means "relative to the current template item", which is
33
+ * how A2UI addresses fields inside a list template.
15
34
  */
16
- import type { A2uiDataBinding, A2uiDynamicString } from './types.js';
35
+ export type BindScope = Record<string, string>;
17
36
  /**
18
37
  * Escape one JSON Pointer reference token (RFC 6901 §3).
19
38
  *
@@ -35,6 +54,21 @@ export type BindingResult =
35
54
  kind: 'binding';
36
55
  value: A2uiDataBinding;
37
56
  }
57
+ /**
58
+ * A value produced by a catalog function: interpolated text, or a pipe that
59
+ * maps onto one of A2UI's formatters. `note` carries anything the mapping
60
+ * cost, for the caller to report.
61
+ */
62
+ | {
63
+ kind: 'format';
64
+ value: A2uiFunctionCall;
65
+ note?: string;
66
+ }
67
+ /** The loop index, which A2UI exposes as a system function. */
68
+ | {
69
+ kind: 'index';
70
+ value: A2uiFunctionCall;
71
+ }
38
72
  /** A template too rich for A2UI. `expression` is the source, for diagnostics. */
39
73
  | {
40
74
  kind: 'unbindable';
@@ -43,16 +77,15 @@ export type BindingResult =
43
77
  /**
44
78
  * Convert a prefab string value into an A2UI dynamic value.
45
79
  *
46
- * Whole-string templates over a plain member path become bindings; strings with
47
- * no template at all pass through as literals; everything else is unbindable.
48
- * Mixed text such as `Hello {{ name }}` is unbindable too A2UI has no string
49
- * interpolation, and `formatString` would need an argument list this function
50
- * has no way to name.
80
+ * A whole-string template over a plain path becomes a binding, one over a
81
+ * formatting pipe becomes a catalog-function call, mixed text becomes a
82
+ * `formatString` call, a string with no template passes through, and anything
83
+ * else is unbindable.
51
84
  */
52
- export declare function toBinding(value: string): BindingResult;
85
+ export declare function toBinding(value: string, scope?: BindScope): BindingResult;
53
86
  /**
54
87
  * Resolve a value to an `A2uiDynamicString`, or `undefined` when it cannot be
55
88
  * expressed. Callers pair this with a diagnostic when it returns `undefined`.
56
89
  */
57
- export declare function dynamicString(value: string | undefined): A2uiDynamicString | undefined;
90
+ export declare function dynamicString(value: string | undefined, scope?: BindScope): A2uiDynamicString | undefined;
58
91
  //# sourceMappingURL=expr.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expr.d.ts","sourceRoot":"","sources":["../../src/a2ui/expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAapE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AAWD,6EAA6E;AAC7E,MAAM,MAAM,aAAa;AACvB,wCAAwC;AACtC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACpC,8DAA8D;GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE;AAC7C,iFAAiF;GAC/E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAE9C;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAWtD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAMtF"}
1
+ {"version":3,"file":"expr.d.ts","sourceRoot":"","sources":["../../src/a2ui/expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAgBxG;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAK9C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAExD;AA0CD,6EAA6E;AAC7E,MAAM,MAAM,aAAa;AACvB,wCAAwC;AACtC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AACpC,8DAA8D;GAC5D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE;AAC7C;;;;GAIG;GACD;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE;AAC5D,+DAA+D;GAC7D;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,gBAAgB,CAAA;CAAE;AAC5C,iFAAiF;GAC/E;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AA8D9C;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,SAAc,GAAG,aAAa,CAgC7E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,GAAE,SAAc,GAAG,iBAAiB,GAAG,SAAS,CAU7G"}
package/dist/a2ui/expr.js CHANGED
@@ -1,27 +1,44 @@
1
1
  /**
2
2
  * `{{ }}` template → A2UI data binding.
3
3
  *
4
- * `$prefab` interpolates arbitrary expressions client-side `{{ count + 1 }}`,
5
- * `{{ price | currency:'USD' }}`, `{{ active ? 'Yes' : 'No' }}`. A2UI binds
6
- * values through JSON Pointer paths into the data model and has no expression
7
- * language, so only the plain-path subset crosses over: `{{ user.name }}`
8
- * becomes `{ path: '/user/name' }`, and anything with an operator, pipe or
9
- * conditional does not survive.
4
+ * `$prefab` interpolates arbitrary expressions client-side. A2UI binds values
5
+ * through JSON Pointers and, for text that mixes literals with values, through
6
+ * the `formatString` catalog function. Between them those cover more than a
7
+ * plain-path conversion would suggest:
10
8
  *
11
- * Rather than silently emitting a broken binding, richer expressions are
12
- * reported back to the caller as an `expression` diagnostic and the property is
13
- * dropped, so the failure shows up at emit time instead of as an empty widget
14
- * in someone's renderer.
9
+ * - `{{ user.name }}` → `{ path: '/user/name' }`
10
+ * - `Hi {{ name }}!` → `{ call: 'formatString', args: { value: 'Hi ${/name}!' } }`
11
+ * - `{{ p | currency:'EUR' }}` `{ call: 'formatCurrency', args: { } }`
12
+ * - `{{ count + 1 }}` → nothing; A2UI has no expression language
13
+ *
14
+ * What does not survive is arithmetic, conditionals, and the pipes that
15
+ * transform data rather than format it (see `./pipes.ts`). Those are reported as
16
+ * `expression` diagnostics rather than emitted as a binding that would render an
17
+ * empty string in someone's renderer.
18
+ *
19
+ * ## Scopes
20
+ *
21
+ * A binding is resolved against a {@link BindScope}, which is how names local to
22
+ * a region become pointers. Inside a list template A2UI resolves relative paths
23
+ * against the current item, so prefab's `$item` maps to the empty prefix; inside
24
+ * an inlined definition, a `Use`'s overrides map to wherever the emitter seeded
25
+ * them. Without this, a name that means something local would silently bind to
26
+ * the root of the data model and read whatever happened to be there.
15
27
  */
28
+ import { parsePipe, pipeCall } from './pipes.js';
16
29
  /** Matches a string that is exactly one `{{ … }}` template and nothing else. */
17
30
  const SOLE_TEMPLATE = /^\s*\{\{\s*(.+?)\s*\}\}\s*$/s;
31
+ /** Matches every `{{ … }}` occurrence, for interpolating mixed text. */
32
+ const EVERY_TEMPLATE = /\{\{\s*(.+?)\s*\}\}/g;
18
33
  /**
19
- * A plain member path: `user.name`, `items.0.label`, `count`.
34
+ * A plain member path: `user.name`, `items.0.label`, `count`, `$item.title`.
20
35
  *
21
36
  * Deliberately narrow. Anything outside this shape (operators, pipes, calls,
22
37
  * ternaries, string literals) has no A2UI equivalent.
23
38
  */
24
- const PLAIN_PATH = /^[A-Za-z_$][\w$]*(?:\.(?:[A-Za-z_$][\w$]*|\d+))*$/;
39
+ const PLAIN_PATH = /^\$?[A-Za-z_][\w$]*(?:\.(?:[A-Za-z_$][\w$]*|\d+))*$/;
40
+ /** prefab's loop index. A2UI exposes the same thing as a system function. */
41
+ const LOOP_INDEX = '$index';
25
42
  /**
26
43
  * Escape one JSON Pointer reference token (RFC 6901 §3).
27
44
  *
@@ -43,39 +60,142 @@ export function toJsonPointer(segments) {
43
60
  function stripStatePrefix(path) {
44
61
  return path.startsWith('state.') ? path.slice('state.'.length) : path;
45
62
  }
63
+ /**
64
+ * Resolve a member path to a JSON Pointer under `scope`.
65
+ *
66
+ * A leading segment named in the scope is replaced by its prefix; everything
67
+ * else resolves from the data-model root.
68
+ */
69
+ function pathToPointer(expr, scope) {
70
+ if (!PLAIN_PATH.test(expr))
71
+ return undefined;
72
+ const segments = stripStatePrefix(expr).split('.');
73
+ const head = segments[0];
74
+ // `hasOwn` rather than a truthiness check: '' is a meaningful prefix, meaning
75
+ // "relative to the current template item".
76
+ const prefix = Object.hasOwn(scope, head) ? scope[head] : undefined;
77
+ if (prefix === undefined) {
78
+ // A `$`-prefixed name is a runtime binding prefab supplies ($event, $error,
79
+ // $result). Outside a scope that defines it, there is nothing to point at.
80
+ if (head.startsWith('$'))
81
+ return undefined;
82
+ return toJsonPointer(segments);
83
+ }
84
+ const rest = segments.slice(1);
85
+ if (prefix === '') {
86
+ // Relative to the current template item. `{{ $item }}` alone has no field to
87
+ // address, so it cannot become a pointer.
88
+ return rest.length === 0 ? undefined : rest.map(escapePointerToken).join('/');
89
+ }
90
+ return rest.length === 0 ? prefix : `${prefix}/${rest.map(escapePointerToken).join('/')}`;
91
+ }
92
+ /**
93
+ * Escape a literal segment for a `formatString` template.
94
+ *
95
+ * `${` is the interpolation opener, so a literal one has to be escaped or the
96
+ * renderer reads the surrounding text as an expression.
97
+ */
98
+ function escapeFormatLiteral(text) {
99
+ return text.replace(/\$\{/g, '\\${');
100
+ }
101
+ /**
102
+ * Convert mixed literal and template text into a `formatString` call.
103
+ *
104
+ * @returns `undefined` when any embedded expression is richer than a path, in
105
+ * which case the whole string is unbindable rather than partly interpolated.
106
+ */
107
+ function toFormatString(value, scope) {
108
+ let failed;
109
+ let interpolated = '';
110
+ let cursor = 0;
111
+ for (const match of value.matchAll(EVERY_TEMPLATE)) {
112
+ const expr = match[1].trim();
113
+ const pointer = pathToPointer(expr, scope);
114
+ if (pointer == null) {
115
+ failed = expr;
116
+ break;
117
+ }
118
+ interpolated += escapeFormatLiteral(value.slice(cursor, match.index));
119
+ interpolated += `\${${pointer}}`;
120
+ cursor = match.index + match[0].length;
121
+ }
122
+ if (failed != null)
123
+ return undefined;
124
+ interpolated += escapeFormatLiteral(value.slice(cursor));
125
+ return { call: 'formatString', args: { value: interpolated } };
126
+ }
127
+ /**
128
+ * Resolve a piped expression to a catalog-function call.
129
+ *
130
+ * The base must itself be a plain path or a literal, since A2UI function
131
+ * arguments take a value rather than an expression to evaluate.
132
+ */
133
+ function toPipeCall(expr, scope) {
134
+ const pipe = parsePipe(expr);
135
+ if (pipe == null)
136
+ return undefined;
137
+ const pointer = pathToPointer(pipe.base, scope);
138
+ const value = pointer != null
139
+ ? { path: pointer }
140
+ : /^-?\d+(\.\d+)?$/.test(pipe.base) ? Number(pipe.base) : undefined;
141
+ if (value === undefined)
142
+ return undefined;
143
+ const mapped = pipeCall(pipe, value);
144
+ if (mapped == null)
145
+ return undefined;
146
+ return { kind: 'format', value: mapped.call, ...(mapped.note != null && { note: mapped.note }) };
147
+ }
46
148
  /**
47
149
  * Convert a prefab string value into an A2UI dynamic value.
48
150
  *
49
- * Whole-string templates over a plain member path become bindings; strings with
50
- * no template at all pass through as literals; everything else is unbindable.
51
- * Mixed text such as `Hello {{ name }}` is unbindable too A2UI has no string
52
- * interpolation, and `formatString` would need an argument list this function
53
- * has no way to name.
151
+ * A whole-string template over a plain path becomes a binding, one over a
152
+ * formatting pipe becomes a catalog-function call, mixed text becomes a
153
+ * `formatString` call, a string with no template passes through, and anything
154
+ * else is unbindable.
54
155
  */
55
- export function toBinding(value) {
156
+ export function toBinding(value, scope = {}) {
56
157
  const sole = SOLE_TEMPLATE.exec(value);
57
- if (sole == null) {
58
- if (value.includes('{{'))
59
- return { kind: 'unbindable', expression: value };
60
- return { kind: 'literal', value };
158
+ // The capture is lazy but still spans `}} … {{`, so `{{ a }} of {{ b }}`
159
+ // matches as one template whose body is `a }} of {{ b`. Rejecting a capture
160
+ // that contains delimiters sends those strings down the interpolation path,
161
+ // which is where they belong.
162
+ const isSole = sole != null && !sole[1].includes('{{') && !sole[1].includes('}}');
163
+ if (isSole) {
164
+ const expr = sole[1].trim();
165
+ if (expr === LOOP_INDEX && LOOP_INDEX in scope) {
166
+ return { kind: 'index', value: { call: '@index' } };
167
+ }
168
+ const pointer = pathToPointer(expr, scope);
169
+ if (pointer != null)
170
+ return { kind: 'binding', value: { path: pointer } };
171
+ // A pipe is not part of A2UI's expression language, but the common
172
+ // formatting ones exist in its catalog as functions.
173
+ const piped = toPipeCall(expr, scope);
174
+ if (piped != null)
175
+ return piped;
176
+ return { kind: 'unbindable', expression: expr };
61
177
  }
62
- const expr = stripStatePrefix(sole[1].trim());
63
- if (!PLAIN_PATH.test(expr))
64
- return { kind: 'unbindable', expression: sole[1].trim() };
65
- return { kind: 'binding', value: { path: toJsonPointer(expr.split('.')) } };
178
+ if (!value.includes('{{'))
179
+ return { kind: 'literal', value };
180
+ const format = toFormatString(value, scope);
181
+ if (format != null)
182
+ return { kind: 'format', value: format };
183
+ return { kind: 'unbindable', expression: value };
66
184
  }
67
185
  /**
68
186
  * Resolve a value to an `A2uiDynamicString`, or `undefined` when it cannot be
69
187
  * expressed. Callers pair this with a diagnostic when it returns `undefined`.
70
188
  */
71
- export function dynamicString(value) {
189
+ export function dynamicString(value, scope = {}) {
72
190
  if (value == null)
73
191
  return undefined;
74
- const r = toBinding(value);
75
- if (r.kind === 'literal')
76
- return r.value;
77
- if (r.kind === 'binding')
78
- return r.value;
79
- return undefined;
192
+ const r = toBinding(value, scope);
193
+ switch (r.kind) {
194
+ case 'literal': return r.value;
195
+ case 'binding': return r.value;
196
+ case 'format': return r.value;
197
+ case 'index': return r.value;
198
+ default: return undefined;
199
+ }
80
200
  }
81
201
  //# sourceMappingURL=expr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/a2ui/expr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,gFAAgF;AAChF,MAAM,aAAa,GAAG,8BAA8B,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,GAAG,mDAAmD,CAAA;AAEtE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACvD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,OAAO,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACzD,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACvE,CAAC;AAWD;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACtC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;QACjB,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,CAAA;QAC1E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;IACnC,CAAC;IAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;IAErF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAA;AAC7E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,SAAS,CAAA;IACnC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC1B,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,KAAK,CAAA;IACxC,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,CAAC,KAAK,CAAA;IACxC,OAAO,SAAS,CAAA;AAClB,CAAC"}
1
+ {"version":3,"file":"expr.js","sourceRoot":"","sources":["../../src/a2ui/expr.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,8 @@ export { emitA2UI } from './emit.js';
19
19
  export type { A2uiEmitOptions, A2uiEmitResult } from './emit.js';
20
20
  export { mappedTypes } from './catalog.js';
21
21
  export { a2uiIconName, A2UI_ICONS } from './icons.js';
22
+ export { mappedPipes, parsePipe } from './pipes.js';
23
+ export type { ParsedPipe, PipeMapping } from './pipes.js';
22
24
  export type { A2uiProps, EmitContext, Mapper } from './catalog.js';
23
25
  export { toBinding, toJsonPointer, escapePointerToken, dynamicString } from './expr.js';
24
26
  export type { BindingResult } from './expr.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACrD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACvF,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/a2ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACzD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAElE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACvF,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAE9C,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAA;AACnB,YAAY,EACV,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAA"}
@@ -18,6 +18,7 @@
18
18
  export { emitA2UI } from './emit.js';
19
19
  export { mappedTypes } from './catalog.js';
20
20
  export { a2uiIconName, A2UI_ICONS } from './icons.js';
21
+ export { mappedPipes, parsePipe } from './pipes.js';
21
22
  export { toBinding, toJsonPointer, escapePointerToken, dynamicString } from './expr.js';
22
23
  export { A2UI_VERSION, A2UI_BASIC_CATALOG, A2UI_MIME, A2UI_SCHEME, A2UI_ROOT_ID, } from './types.js';
23
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGrD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGvF,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/a2ui/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAInD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGvF,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,GACb,MAAM,YAAY,CAAA"}