@manifesto-ai/sdk 1.2.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +60 -34
  2. package/dist/index.d.ts +413 -22
  3. package/dist/index.js +587 -52
  4. package/dist/index.js.map +1 -1
  5. package/package.json +10 -9
  6. package/dist/__tests__/bootstrap.test.d.ts +0 -2
  7. package/dist/__tests__/bootstrap.test.d.ts.map +0 -1
  8. package/dist/__tests__/bootstrap.test.js +0 -33
  9. package/dist/__tests__/bootstrap.test.js.map +0 -1
  10. package/dist/__tests__/public-exports.test.d.ts +0 -2
  11. package/dist/__tests__/public-exports.test.d.ts.map +0 -1
  12. package/dist/__tests__/public-exports.test.js +0 -59
  13. package/dist/__tests__/public-exports.test.js.map +0 -1
  14. package/dist/__tests__/typed-ops-scenarios.test.d.ts +0 -2
  15. package/dist/__tests__/typed-ops-scenarios.test.d.ts.map +0 -1
  16. package/dist/__tests__/typed-ops-scenarios.test.js +0 -334
  17. package/dist/__tests__/typed-ops-scenarios.test.js.map +0 -1
  18. package/dist/__tests__/typed-ops.test.d.ts +0 -2
  19. package/dist/__tests__/typed-ops.test.d.ts.map +0 -1
  20. package/dist/__tests__/typed-ops.test.js +0 -210
  21. package/dist/__tests__/typed-ops.test.js.map +0 -1
  22. package/dist/app.d.ts +0 -51
  23. package/dist/app.d.ts.map +0 -1
  24. package/dist/app.js +0 -170
  25. package/dist/app.js.map +0 -1
  26. package/dist/create-app.d.ts +0 -52
  27. package/dist/create-app.d.ts.map +0 -1
  28. package/dist/create-app.js +0 -94
  29. package/dist/create-app.js.map +0 -1
  30. package/dist/hooks/app-ref.d.ts +0 -71
  31. package/dist/hooks/app-ref.d.ts.map +0 -1
  32. package/dist/hooks/app-ref.js +0 -82
  33. package/dist/hooks/app-ref.js.map +0 -1
  34. package/dist/hooks/context.d.ts +0 -22
  35. package/dist/hooks/context.d.ts.map +0 -1
  36. package/dist/hooks/context.js +0 -26
  37. package/dist/hooks/context.js.map +0 -1
  38. package/dist/hooks/hookable.d.ts +0 -79
  39. package/dist/hooks/hookable.d.ts.map +0 -1
  40. package/dist/hooks/hookable.js +0 -137
  41. package/dist/hooks/hookable.js.map +0 -1
  42. package/dist/hooks/index.d.ts +0 -14
  43. package/dist/hooks/index.d.ts.map +0 -1
  44. package/dist/hooks/index.js +0 -13
  45. package/dist/hooks/index.js.map +0 -1
  46. package/dist/hooks/queue.d.ts +0 -57
  47. package/dist/hooks/queue.d.ts.map +0 -1
  48. package/dist/hooks/queue.js +0 -141
  49. package/dist/hooks/queue.js.map +0 -1
  50. package/dist/index.d.ts.map +0 -1
  51. package/dist/manifest.d.ts +0 -10
  52. package/dist/manifest.d.ts.map +0 -1
  53. package/dist/manifest.js +0 -2
  54. package/dist/manifest.js.map +0 -1
  55. package/dist/typed-ops.d.ts +0 -148
  56. package/dist/typed-ops.d.ts.map +0 -1
  57. package/dist/typed-ops.js +0 -69
  58. package/dist/typed-ops.js.map +0 -1
@@ -1,141 +0,0 @@
1
- /**
2
- * Job Queue Implementation
3
- *
4
- * Manages enqueued jobs with priority support.
5
- *
6
- * @see SPEC §11.3 ENQ-1~6
7
- * @module
8
- */
9
- /**
10
- * Job Queue for managing enqueued jobs.
11
- *
12
- * @see SPEC §11.3
13
- */
14
- export class JobQueue {
15
- _immediateJobs = [];
16
- _normalJobs = [];
17
- _deferredJobs = [];
18
- _isProcessing = false;
19
- _processScheduled = false;
20
- /**
21
- * Enqueue a job with optional priority.
22
- *
23
- * ENQ-1: Jobs are executed after the current hook completes
24
- * ENQ-2: Priority ordering: immediate > normal > defer
25
- * ENQ-3: Within same priority, FIFO ordering
26
- *
27
- * @see SPEC §11.3
28
- */
29
- enqueue(job, opts) {
30
- const priority = opts?.priority ?? "normal";
31
- const queuedJob = {
32
- job,
33
- priority,
34
- label: opts?.label,
35
- enqueuedAt: Date.now(),
36
- };
37
- switch (priority) {
38
- case "immediate":
39
- this._immediateJobs.push(queuedJob);
40
- break;
41
- case "defer":
42
- this._deferredJobs.push(queuedJob);
43
- break;
44
- case "normal":
45
- default:
46
- this._normalJobs.push(queuedJob);
47
- break;
48
- }
49
- // Schedule processing if not already scheduled
50
- this._scheduleProcess();
51
- }
52
- /**
53
- * Process all pending jobs.
54
- *
55
- * ENQ-4: Jobs are processed in priority order
56
- * ENQ-5: Errors in jobs are caught and logged (don't break queue)
57
- * ENQ-6: New jobs enqueued during processing are handled
58
- *
59
- * @see SPEC §11.3
60
- */
61
- async processAll() {
62
- if (this._isProcessing) {
63
- return;
64
- }
65
- this._isProcessing = true;
66
- this._processScheduled = false;
67
- try {
68
- // Process until all queues are empty
69
- while (this._hasJobs()) {
70
- // Process in priority order: immediate > normal > defer
71
- const job = this._dequeueNext();
72
- if (job) {
73
- try {
74
- await job.job();
75
- }
76
- catch (error) {
77
- // ENQ-5: Log error but continue processing
78
- console.error(`[JobQueue] Error in job${job.label ? ` "${job.label}"` : ""}:`, error);
79
- }
80
- }
81
- }
82
- }
83
- finally {
84
- this._isProcessing = false;
85
- }
86
- }
87
- /**
88
- * Check if queue has pending jobs.
89
- */
90
- hasPendingJobs() {
91
- return this._hasJobs();
92
- }
93
- /**
94
- * Get count of pending jobs.
95
- */
96
- pendingCount() {
97
- return (this._immediateJobs.length +
98
- this._normalJobs.length +
99
- this._deferredJobs.length);
100
- }
101
- /**
102
- * Clear all pending jobs.
103
- */
104
- clear() {
105
- this._immediateJobs = [];
106
- this._normalJobs = [];
107
- this._deferredJobs = [];
108
- }
109
- // ===========================================================================
110
- // Private Methods
111
- // ===========================================================================
112
- _hasJobs() {
113
- return (this._immediateJobs.length > 0 ||
114
- this._normalJobs.length > 0 ||
115
- this._deferredJobs.length > 0);
116
- }
117
- _dequeueNext() {
118
- // Priority order: immediate > normal > defer
119
- if (this._immediateJobs.length > 0) {
120
- return this._immediateJobs.shift();
121
- }
122
- if (this._normalJobs.length > 0) {
123
- return this._normalJobs.shift();
124
- }
125
- if (this._deferredJobs.length > 0) {
126
- return this._deferredJobs.shift();
127
- }
128
- return undefined;
129
- }
130
- _scheduleProcess() {
131
- if (this._processScheduled || this._isProcessing) {
132
- return;
133
- }
134
- this._processScheduled = true;
135
- // Use queueMicrotask for immediate scheduling
136
- queueMicrotask(() => {
137
- void this.processAll();
138
- });
139
- }
140
- }
141
- //# sourceMappingURL=queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/hooks/queue.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAMjD,YAAY,EAEV,SAAS,EACT,WAAW,EACX,WAAW,EAGX,WAAW,EAGX,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,EAC7B,cAAc,EAGd,YAAY,EACZ,kBAAkB,EAGlB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,cAAc,EAGd,QAAQ,EACR,WAAW,EACX,YAAY,EAGZ,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,wBAAwB,EAGxB,aAAa,EACb,gBAAgB,EAChB,WAAW,EAGX,GAAG,EACH,YAAY,EACZ,MAAM,EACN,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,WAAW,EACX,cAAc,EAGd,SAAS,EAGT,QAAQ,EAGR,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EAGX,WAAW,EAGX,SAAS,EACT,MAAM,EACN,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,OAAO,EACP,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,MAAM,EACN,yBAAyB,EACzB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,EACZ,KAAK,EACL,OAAO,EACP,QAAQ,EACR,KAAK,EACL,SAAS,EAGT,OAAO,EACP,gBAAgB,EAChB,aAAa,EAGb,UAAU,EAGV,OAAO,GACR,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAEL,iBAAiB,EAGjB,gBAAgB,EAChB,gBAAgB,EAGhB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EAGnB,iBAAiB,EAGjB,uBAAuB,EAGvB,yBAAyB,EACzB,wBAAwB,EAGxB,mBAAmB,EAGnB,mBAAmB,EACnB,kBAAkB,EAClB,4BAA4B,EAC5B,sBAAsB,EAGtB,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,EAGf,2BAA2B,EAC3B,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAM3D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAMxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAMtE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,10 +0,0 @@
1
- /**
2
- * SDK package identity and SPEC version metadata.
3
- * Used for phase tracking and compatibility verification.
4
- */
5
- export type SdkManifest = {
6
- readonly name: '@manifesto-ai/sdk';
7
- readonly specVersion: '0.1.0';
8
- readonly phase: 'bootstrap';
9
- };
10
- //# sourceMappingURL=manifest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B,CAAC"}
package/dist/manifest.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=manifest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":""}
@@ -1,148 +0,0 @@
1
- import type { SetPatch, UnsetPatch, MergePatch } from "@manifesto-ai/core";
2
- /**
3
- * Depth counter for recursive type operations.
4
- * Prevents infinite recursion in TypeScript's type system.
5
- *
6
- * Usage: Prev[4] = 3, Prev[3] = 2, ... Prev[0] = never
7
- */
8
- type Prev = [never, 0, 1, 2, 3, 4];
9
- /**
10
- * Extract all valid dot-separated paths from a data type.
11
- *
12
- * - Object keys become path segments
13
- * - Nested objects generate dot-separated paths (e.g. "user.name")
14
- * - Arrays, primitives, and Record<string, T> are leaf nodes
15
- * (Record sub-paths are not supported by Core's path resolution)
16
- * - Limited to 3 levels of nesting to avoid TS recursion limits
17
- * (root key + 3 nested levels = max 4 path segments)
18
- *
19
- * @example
20
- * type State = { user: { name: string; age: number }; count: number };
21
- * type P = DataPaths<State>;
22
- * // "user" | "user.name" | "user.age" | "count"
23
- */
24
- export type DataPaths<T, D extends number = 3> = [D] extends [never] ? never : T extends Record<string, unknown> ? T extends unknown[] ? never : {
25
- [K in keyof T & string]: K | (NonNullable<T[K]> extends Record<string, unknown> ? NonNullable<T[K]> extends unknown[] ? never : string extends keyof NonNullable<T[K]> ? never : `${K}.${DataPaths<NonNullable<T[K]>, Prev[D]>}` : never);
26
- }[keyof T & string] : never;
27
- /**
28
- * Resolve the value type at a dot-separated path.
29
- *
30
- * @example
31
- * type State = { user: { name: string } };
32
- * type V = ValueAt<State, "user.name">; // string
33
- * type U = ValueAt<State, "user">; // { name: string }
34
- */
35
- export type ValueAt<T, P extends string> = P extends `${infer K}.${infer Rest}` ? K extends keyof T ? ValueAt<NonNullable<T[K]>, Rest> : never : P extends keyof T ? T[P] : never;
36
- /**
37
- * Paths that resolve to plain object types (valid targets for merge).
38
- * Arrays and primitives are excluded since merge performs shallow object merge.
39
- *
40
- * @example
41
- * type State = { user: { name: string }; tags: string[]; count: number };
42
- * type M = ObjectPaths<State>;
43
- * // "user" (tags and count excluded - not plain objects)
44
- */
45
- export type ObjectPaths<T, D extends number = 3> = [D] extends [never] ? never : T extends Record<string, unknown> ? T extends unknown[] ? never : {
46
- [K in keyof T & string]: (NonNullable<T[K]> extends Record<string, unknown> ? NonNullable<T[K]> extends unknown[] ? never : K : never) | (NonNullable<T[K]> extends Record<string, unknown> ? NonNullable<T[K]> extends unknown[] ? never : string extends keyof NonNullable<T[K]> ? never : `${K}.${ObjectPaths<NonNullable<T[K]>, Prev[D]>}` : never);
47
- }[keyof T & string] : never;
48
- /**
49
- * Snapshot root prefixes reserved by Core's splitPatchPath().
50
- * Paths starting with these are routed to snapshot.system / .input / etc.,
51
- * NOT to snapshot.data. Typed ops exclude them to prevent silent misrouting.
52
- */
53
- type ReservedRoot = "system" | "input" | "computed" | "meta";
54
- /** DataPaths with reserved snapshot roots filtered out. */
55
- type SafeDataPaths<T extends Record<string, unknown>> = Exclude<DataPaths<T>, ReservedRoot | `${ReservedRoot}.${string}`>;
56
- /** ObjectPaths with reserved snapshot roots filtered out. */
57
- type SafeObjectPaths<T extends Record<string, unknown>> = Exclude<ObjectPaths<T>, ReservedRoot | `${ReservedRoot}.${string}`>;
58
- /**
59
- * Type-safe patch operations builder.
60
- *
61
- * Provides IDE autocomplete for state paths and compile-time type checking
62
- * for patch values. All methods return standard Patch objects compatible
63
- * with Core's apply() function.
64
- *
65
- * @typeParam TData - The shape of domain state (snapshot.data)
66
- */
67
- export interface TypedOps<TData extends Record<string, unknown>> {
68
- /**
69
- * Create a set patch — replace value at path (create if missing).
70
- *
71
- * @example
72
- * ops.set('count', 5);
73
- * ops.set('user.name', 'Alice');
74
- */
75
- set<P extends SafeDataPaths<TData>>(path: P, value: Exclude<ValueAt<TData, P>, undefined>): SetPatch;
76
- /**
77
- * Create an unset patch — remove property at path.
78
- *
79
- * @example
80
- * ops.unset('temporaryField');
81
- */
82
- unset<P extends SafeDataPaths<TData>>(path: P): UnsetPatch;
83
- /**
84
- * Create a merge patch — shallow merge at object path.
85
- * Only valid for paths that resolve to plain object types.
86
- *
87
- * @example
88
- * ops.merge('user', { name: 'Bob' });
89
- */
90
- merge<P extends SafeObjectPaths<TData>>(path: P, value: {
91
- [K in keyof ValueAt<TData, P>]?: Exclude<ValueAt<TData, P>[K], undefined>;
92
- }): MergePatch;
93
- /**
94
- * Create an error patch targeting system.lastError.
95
- *
96
- * Convenience for writing error state from effect handlers.
97
- * Provide source and timestamp for full audit trail;
98
- * omitted fields default to empty/zero.
99
- */
100
- error(code: string, message: string, options?: {
101
- source?: {
102
- actionId: string;
103
- nodePath: string;
104
- };
105
- timestamp?: number;
106
- context?: Record<string, unknown>;
107
- }): SetPatch;
108
- /**
109
- * Raw (untyped) patch creation — escape hatch for dynamic paths
110
- * or platform namespace ($*) targets.
111
- */
112
- raw: {
113
- set(path: string, value: unknown): SetPatch;
114
- unset(path: string): UnsetPatch;
115
- merge(path: string, value: Record<string, unknown>): MergePatch;
116
- };
117
- }
118
- /**
119
- * Create a type-safe patch operations builder.
120
- *
121
- * Injects the domain state type to enable:
122
- * - IDE autocomplete on all valid state paths
123
- * - Compile-time type checking of patch values
124
- * - Merge restricted to object-typed paths
125
- *
126
- * @typeParam TData - The shape of domain state (snapshot.data)
127
- *
128
- * @example
129
- * type State = {
130
- * count: number;
131
- * user: { name: string; age: number };
132
- * tags: string[];
133
- * };
134
- *
135
- * const ops = defineOps<State>();
136
- *
137
- * ops.set('count', 5); // OK — value: number
138
- * ops.set('user.name', 'Alice'); // OK — value: string
139
- * ops.set('count', 'hello'); // TS error — expected number
140
- * ops.merge('user', { name: 'B' }); // OK — partial object merge
141
- * ops.unset('tags'); // OK
142
- *
143
- * // Escape hatch for dynamic / platform paths
144
- * ops.raw.set('$host.custom', { key: 'value' });
145
- */
146
- export declare function defineOps<TData extends Record<string, unknown>>(): TypedOps<TData>;
147
- export {};
148
- //# sourceMappingURL=typed-ops.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typed-ops.d.ts","sourceRoot":"","sources":["../src/typed-ops.ts"],"names":[],"mappings":"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"}
package/dist/typed-ops.js DELETED
@@ -1,69 +0,0 @@
1
- // ============================================================================
2
- // Factory
3
- // ============================================================================
4
- /**
5
- * Create a type-safe patch operations builder.
6
- *
7
- * Injects the domain state type to enable:
8
- * - IDE autocomplete on all valid state paths
9
- * - Compile-time type checking of patch values
10
- * - Merge restricted to object-typed paths
11
- *
12
- * @typeParam TData - The shape of domain state (snapshot.data)
13
- *
14
- * @example
15
- * type State = {
16
- * count: number;
17
- * user: { name: string; age: number };
18
- * tags: string[];
19
- * };
20
- *
21
- * const ops = defineOps<State>();
22
- *
23
- * ops.set('count', 5); // OK — value: number
24
- * ops.set('user.name', 'Alice'); // OK — value: string
25
- * ops.set('count', 'hello'); // TS error — expected number
26
- * ops.merge('user', { name: 'B' }); // OK — partial object merge
27
- * ops.unset('tags'); // OK
28
- *
29
- * // Escape hatch for dynamic / platform paths
30
- * ops.raw.set('$host.custom', { key: 'value' });
31
- */
32
- export function defineOps() {
33
- return {
34
- set(path, value) {
35
- return { op: "set", path, value };
36
- },
37
- unset(path) {
38
- return { op: "unset", path };
39
- },
40
- merge(path, value) {
41
- return { op: "merge", path, value: value };
42
- },
43
- error(code, message, options) {
44
- return {
45
- op: "set",
46
- path: "system.lastError",
47
- value: {
48
- code,
49
- message,
50
- source: options?.source ?? { actionId: "", nodePath: "" },
51
- timestamp: options?.timestamp ?? 0,
52
- ...(options?.context !== undefined ? { context: options.context } : {}),
53
- },
54
- };
55
- },
56
- raw: {
57
- set(path, value) {
58
- return { op: "set", path, value };
59
- },
60
- unset(path) {
61
- return { op: "unset", path };
62
- },
63
- merge(path, value) {
64
- return { op: "merge", path, value };
65
- },
66
- },
67
- };
68
- }
69
- //# sourceMappingURL=typed-ops.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typed-ops.js","sourceRoot":"","sources":["../src/typed-ops.ts"],"names":[],"mappings":"AAwLA,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,SAAS;IAGvB,OAAO;QACL,GAAG,CAAC,IAAY,EAAE,KAAc;YAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,IAAY;YAChB,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,IAAY,EAAE,KAAc;YAChC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAgC,EAAE,CAAC;QACxE,CAAC;QACD,KAAK,CACH,IAAY,EACZ,OAAe,EACf,OAIC;YAED,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,kBAAkB;gBACxB,KAAK,EAAE;oBACL,IAAI;oBACJ,OAAO;oBACP,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;oBACzD,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,CAAC;oBAClC,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxE;aACF,CAAC;QACJ,CAAC;QACD,GAAG,EAAE;YACH,GAAG,CAAC,IAAY,EAAE,KAAc;gBAC9B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACpC,CAAC;YACD,KAAK,CAAC,IAAY;gBAChB,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/B,CAAC;YACD,KAAK,CAAC,IAAY,EAAE,KAA8B;gBAChD,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YACtC,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}