@threadplane/a2ui 0.0.55 → 0.0.56

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@threadplane/a2ui",
3
- "version": "0.0.55",
3
+ "version": "0.0.56",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,12 +1,16 @@
1
+ /** Returns true when `value` is an A2UI dynamic path reference. */
1
2
  export declare function isPathRef(value: unknown): value is {
2
3
  path: string;
3
4
  };
5
+ /** Returns true when `value` is an A2UI string literal wrapper. */
4
6
  export declare function isLiteralString(value: unknown): value is {
5
7
  literalString: string;
6
8
  };
9
+ /** Returns true when `value` is an A2UI number literal wrapper. */
7
10
  export declare function isLiteralNumber(value: unknown): value is {
8
11
  literalNumber: number;
9
12
  };
13
+ /** Returns true when `value` is an A2UI boolean literal wrapper. */
10
14
  export declare function isLiteralBoolean(value: unknown): value is {
11
15
  literalBoolean: boolean;
12
16
  };
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/guards.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAGnE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAErF"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/guards.ts"],"names":[],"mappings":"AAEA,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAGnE;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAElF;AAED,oEAAoE;AACpE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAErF"}
package/src/lib/guards.js CHANGED
@@ -1,14 +1,18 @@
1
1
  // SPDX-License-Identifier: MIT
2
+ /** Returns true when `value` is an A2UI dynamic path reference. */
2
3
  export function isPathRef(value) {
3
4
  return typeof value === 'object' && value !== null
4
5
  && 'path' in value && typeof value.path === 'string';
5
6
  }
7
+ /** Returns true when `value` is an A2UI string literal wrapper. */
6
8
  export function isLiteralString(value) {
7
9
  return typeof value === 'object' && value !== null && 'literalString' in value;
8
10
  }
11
+ /** Returns true when `value` is an A2UI number literal wrapper. */
9
12
  export function isLiteralNumber(value) {
10
13
  return typeof value === 'object' && value !== null && 'literalNumber' in value;
11
14
  }
15
+ /** Returns true when `value` is an A2UI boolean literal wrapper. */
12
16
  export function isLiteralBoolean(value) {
13
17
  return typeof value === 'object' && value !== null && 'literalBoolean' in value;
14
18
  }
@@ -1,6 +1,20 @@
1
1
  import type { A2uiMessage } from './types.js';
2
2
  export interface A2uiMessageParser {
3
+ /** Push a JSONL stream chunk and return every complete A2UI envelope parsed from it. */
3
4
  push(chunk: string): A2uiMessage[];
4
5
  }
6
+ /**
7
+ * Creates a stateful parser for newline-delimited A2UI message streams.
8
+ *
9
+ * The parser buffers incomplete lines, skips malformed JSON, and returns only
10
+ * recognized A2UI envelopes: `surfaceUpdate`, `dataModelUpdate`,
11
+ * `beginRendering`, and `deleteSurface`.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const parser = createA2uiMessageParser();
16
+ * const messages = parser.push('{"beginRendering":{"surfaceId":"s1","root":"root"}}\n');
17
+ * ```
18
+ */
5
19
  export declare function createA2uiMessageParser(): A2uiMessageParser;
6
20
  //# sourceMappingURL=parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACpC;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAsC3D"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/parser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,WAAW,iBAAiB;IAChC,wFAAwF;IACxF,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;CACpC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAsC3D"}
package/src/lib/parser.js CHANGED
@@ -1,4 +1,17 @@
1
1
  const ENVELOPE_KEYS = ['surfaceUpdate', 'dataModelUpdate', 'beginRendering', 'deleteSurface'];
2
+ /**
3
+ * Creates a stateful parser for newline-delimited A2UI message streams.
4
+ *
5
+ * The parser buffers incomplete lines, skips malformed JSON, and returns only
6
+ * recognized A2UI envelopes: `surfaceUpdate`, `dataModelUpdate`,
7
+ * `beginRendering`, and `deleteSurface`.
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * const parser = createA2uiMessageParser();
12
+ * const messages = parser.push('{"beginRendering":{"surfaceId":"s1","root":"root"}}\n');
13
+ * ```
14
+ */
2
15
  export function createA2uiMessageParser() {
3
16
  let buffer = '';
4
17
  function parseEnvelope(json) {
@@ -1,4 +1,36 @@
1
+ /**
2
+ * Reads a value from a model using the package's simple slash-separated pointer syntax.
3
+ *
4
+ * Empty string and `/` target the root. Segments are not RFC 6901-unescaped;
5
+ * normalize keys before using pointers that would require `~0` or `~1`.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * getByPointer({ user: { name: 'Ada' } }, '/user/name'); // 'Ada'
10
+ * ```
11
+ */
1
12
  export declare function getByPointer(model: Record<string, unknown>, pointer: string): unknown;
13
+ /**
14
+ * Returns a new model with `value` written at `pointer`.
15
+ *
16
+ * The input model is not mutated. Missing intermediate objects are created.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const next = setByPointer({}, '/user/name', 'Ada');
21
+ * ```
22
+ */
2
23
  export declare function setByPointer(model: Record<string, unknown>, pointer: string, value: unknown): Record<string, unknown>;
24
+ /**
25
+ * Returns a new model with the key at `pointer` removed.
26
+ *
27
+ * Empty string and `/` clear the whole model. Missing parent paths leave the
28
+ * input model unchanged.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const next = deleteByPointer({ user: { name: 'Ada' } }, '/user/name');
33
+ * ```
34
+ */
3
35
  export declare function deleteByPointer(model: Record<string, unknown>, pointer: string): Record<string, unknown>;
4
36
  //# sourceMappingURL=pointer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/pointer.ts"],"names":[],"mappings":"AAOA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQrF;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
1
+ {"version":3,"file":"pointer.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/pointer.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQrF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBzB"}
@@ -4,6 +4,17 @@ function parsePointer(pointer) {
4
4
  return [];
5
5
  return pointer.split('/').filter(Boolean);
6
6
  }
7
+ /**
8
+ * Reads a value from a model using the package's simple slash-separated pointer syntax.
9
+ *
10
+ * Empty string and `/` target the root. Segments are not RFC 6901-unescaped;
11
+ * normalize keys before using pointers that would require `~0` or `~1`.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * getByPointer({ user: { name: 'Ada' } }, '/user/name'); // 'Ada'
16
+ * ```
17
+ */
7
18
  export function getByPointer(model, pointer) {
8
19
  const segments = parsePointer(pointer);
9
20
  let current = model;
@@ -14,6 +25,16 @@ export function getByPointer(model, pointer) {
14
25
  }
15
26
  return current;
16
27
  }
28
+ /**
29
+ * Returns a new model with `value` written at `pointer`.
30
+ *
31
+ * The input model is not mutated. Missing intermediate objects are created.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const next = setByPointer({}, '/user/name', 'Ada');
36
+ * ```
37
+ */
17
38
  export function setByPointer(model, pointer, value) {
18
39
  const segments = parsePointer(pointer);
19
40
  if (segments.length === 0)
@@ -30,6 +51,17 @@ export function setByPointer(model, pointer, value) {
30
51
  }
31
52
  return clone(model, segments, value);
32
53
  }
54
+ /**
55
+ * Returns a new model with the key at `pointer` removed.
56
+ *
57
+ * Empty string and `/` clear the whole model. Missing parent paths leave the
58
+ * input model unchanged.
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * const next = deleteByPointer({ user: { name: 'Ada' } }, '/user/name');
63
+ * ```
64
+ */
33
65
  export function deleteByPointer(model, pointer) {
34
66
  const segments = parsePointer(pointer);
35
67
  if (segments.length === 0)
@@ -2,5 +2,19 @@ export interface A2uiScope {
2
2
  basePath: string;
3
3
  item: unknown;
4
4
  }
5
+ /**
6
+ * Resolves an A2UI dynamic value against a client data model.
7
+ *
8
+ * Literal wrappers unwrap to their inner values, `{ path }` references read
9
+ * from the model by JSON-pointer path, arrays resolve recursively, and
10
+ * unrecognized plain values pass through unchanged.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const model = { customer: { name: 'Ada' } };
15
+ * resolveDynamic({ path: '/customer/name' }, model); // 'Ada'
16
+ * resolveDynamic({ literalString: 'Checkout' }, model); // 'Checkout'
17
+ * ```
18
+ */
5
19
  export declare function resolveDynamic(value: unknown, model: Record<string, unknown>, scope?: A2uiScope): unknown;
6
20
  //# sourceMappingURL=resolve.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/resolve.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AA+BD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAeT"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../../../libs/a2ui/src/lib/resolve.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AA+BD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAeT"}
@@ -23,6 +23,20 @@ function resolvePathRef(ref, model, scope) {
23
23
  return getByPointer(model, `${scope.basePath}/${path}`);
24
24
  return getByPointer(model, '/' + path);
25
25
  }
26
+ /**
27
+ * Resolves an A2UI dynamic value against a client data model.
28
+ *
29
+ * Literal wrappers unwrap to their inner values, `{ path }` references read
30
+ * from the model by JSON-pointer path, arrays resolve recursively, and
31
+ * unrecognized plain values pass through unchanged.
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * const model = { customer: { name: 'Ada' } };
36
+ * resolveDynamic({ path: '/customer/name' }, model); // 'Ada'
37
+ * resolveDynamic({ literalString: 'Checkout' }, model); // 'Checkout'
38
+ * ```
39
+ */
26
40
  export function resolveDynamic(value, model, scope) {
27
41
  if (value == null)
28
42
  return value;