@dxos/app-graph 0.8.4-main.ae835ea → 0.8.4-main.bc674ce
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/lib/browser/index.mjs +1014 -553
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +1013 -553
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/atoms.d.ts +8 -0
- package/dist/types/src/atoms.d.ts.map +1 -0
- package/dist/types/src/graph-builder.d.ts +108 -66
- package/dist/types/src/graph-builder.d.ts.map +1 -1
- package/dist/types/src/graph.d.ts +182 -212
- package/dist/types/src/graph.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +6 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/node-matcher.d.ts +218 -0
- package/dist/types/src/node-matcher.d.ts.map +1 -0
- package/dist/types/src/node-matcher.test.d.ts +2 -0
- package/dist/types/src/node-matcher.test.d.ts.map +1 -0
- package/dist/types/src/node.d.ts +32 -3
- package/dist/types/src/node.d.ts.map +1 -1
- package/dist/types/src/stories/EchoGraph.stories.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +35 -33
- package/src/atoms.ts +25 -0
- package/src/graph-builder.test.ts +520 -104
- package/src/graph-builder.ts +550 -255
- package/src/graph.test.ts +299 -106
- package/src/graph.ts +964 -394
- package/src/index.ts +9 -3
- package/src/node-matcher.test.ts +301 -0
- package/src/node-matcher.ts +284 -0
- package/src/node.ts +39 -6
- package/src/stories/EchoGraph.stories.tsx +104 -95
- package/src/stories/Tree.tsx +2 -2
- package/dist/types/src/experimental/graph-projections.test.d.ts +0 -25
- package/dist/types/src/experimental/graph-projections.test.d.ts.map +0 -1
- package/dist/types/src/signals-integration.test.d.ts +0 -2
- package/dist/types/src/signals-integration.test.d.ts.map +0 -1
- package/dist/types/src/testing.d.ts +0 -5
- package/dist/types/src/testing.d.ts.map +0 -1
- package/src/experimental/graph-projections.test.ts +0 -56
- package/src/signals-integration.test.ts +0 -218
- package/src/testing.ts +0 -20
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import * as Option from 'effect/Option';
|
|
2
|
+
import type * as Schema from 'effect/Schema';
|
|
3
|
+
import { type Entity, Obj, type Type } from '@dxos/echo';
|
|
4
|
+
import * as Node from './node';
|
|
5
|
+
/**
|
|
6
|
+
* Type for a node matcher function that returns an Option of the matched data.
|
|
7
|
+
* Matchers are used to filter and transform nodes in the app graph.
|
|
8
|
+
*
|
|
9
|
+
* @template TData - The type of data returned when the matcher succeeds.
|
|
10
|
+
* Defaults to Node.Node, but can be a more specific type (e.g., an ECHO entity).
|
|
11
|
+
*/
|
|
12
|
+
export type NodeMatcher<TData = Node.Node> = (node: Node.Node) => Option.Option<TData>;
|
|
13
|
+
/**
|
|
14
|
+
* Matches the root node of the graph.
|
|
15
|
+
*
|
|
16
|
+
* @returns Option.some(node) if the node is the root, Option.none() otherwise.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* GraphBuilder.createExtension({
|
|
21
|
+
* id: 'my-extension',
|
|
22
|
+
* match: NodeMatcher.whenRoot,
|
|
23
|
+
* connector: (node) => Effect.succeed([...]),
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const whenRoot: (node: Node.Node) => Option.Option<Node.Node>;
|
|
28
|
+
/**
|
|
29
|
+
* Matches a node by its exact ID.
|
|
30
|
+
*
|
|
31
|
+
* @param id - The node ID to match against.
|
|
32
|
+
* @returns A matcher that returns Option.some(node) if IDs match, Option.none() otherwise.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* GraphBuilder.createExtension({
|
|
37
|
+
* id: 'spaces-extension',
|
|
38
|
+
* match: NodeMatcher.whenId('spaces'),
|
|
39
|
+
* connector: (node) => Effect.succeed([...]),
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare const whenId: (id: string) => (node: Node.Node) => Option.Option<Node.Node>;
|
|
44
|
+
/**
|
|
45
|
+
* Matches a node by its type string (the `node.type` property).
|
|
46
|
+
*
|
|
47
|
+
* @param type - The node type string to match against.
|
|
48
|
+
* @returns A matcher that returns Option.some(node) if types match, Option.none() otherwise.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* GraphBuilder.createExtension({
|
|
53
|
+
* id: 'space-settings-extension',
|
|
54
|
+
* match: NodeMatcher.whenNodeType('dxos.org/plugin/space/settings'),
|
|
55
|
+
* connector: (node) => Effect.succeed([...]),
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare const whenNodeType: (type: string) => (node: Node.Node) => Option.Option<Node.Node>;
|
|
60
|
+
/**
|
|
61
|
+
* Matches a node whose data is an instance of the given ECHO schema type.
|
|
62
|
+
* Returns the **typed entity data** (not the node) for direct use in callbacks.
|
|
63
|
+
*
|
|
64
|
+
* Use this when you need to work directly with the typed ECHO entity in your
|
|
65
|
+
* connector or actions callback.
|
|
66
|
+
*
|
|
67
|
+
* @template T - The ECHO schema type to match against.
|
|
68
|
+
* @param type - The ECHO schema (e.g., `Collection.Collection`, `Document.Document`).
|
|
69
|
+
* @returns A matcher that returns Option.some(entity) if the data matches, Option.none() otherwise.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```ts
|
|
73
|
+
* GraphBuilder.createExtension({
|
|
74
|
+
* id: 'collection-extension',
|
|
75
|
+
* match: NodeMatcher.whenEchoType(Collection.Collection),
|
|
76
|
+
* connector: (collection) => {
|
|
77
|
+
* // `collection` is typed as Collection.Collection
|
|
78
|
+
* return Effect.succeed(collection.objects.map(...));
|
|
79
|
+
* },
|
|
80
|
+
* });
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* @see {@link whenEchoTypeMatches} - Use instead when composing with whenAll/whenAny.
|
|
84
|
+
*/
|
|
85
|
+
export declare const whenEchoType: <T extends Type.Entity.Any>(type: T) => NodeMatcher<Entity.Entity<Schema.Schema.Type<T>>>;
|
|
86
|
+
/**
|
|
87
|
+
* Matches a node whose data is any ECHO object.
|
|
88
|
+
* Returns the **object data** (not the node) for direct use in callbacks.
|
|
89
|
+
*
|
|
90
|
+
* Use this when you need to work with any ECHO object regardless of its specific type.
|
|
91
|
+
*
|
|
92
|
+
* @returns Option.some(object) if the node's data is an ECHO object, Option.none() otherwise.
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```ts
|
|
96
|
+
* GraphBuilder.createExtension({
|
|
97
|
+
* id: 'object-settings',
|
|
98
|
+
* match: NodeMatcher.whenEchoObject,
|
|
99
|
+
* connector: (object) => {
|
|
100
|
+
* // `object` is typed as Obj.Unknown
|
|
101
|
+
* const id = Obj.getDXN(object).toString();
|
|
102
|
+
* return Effect.succeed([{ id: `${id}/settings`, ... }]);
|
|
103
|
+
* },
|
|
104
|
+
* });
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @see {@link whenEchoObjectMatches} - Use instead when composing with whenAll/whenAny.
|
|
108
|
+
*/
|
|
109
|
+
export declare const whenEchoObject: (node: Node.Node) => Option.Option<Obj.Unknown>;
|
|
110
|
+
/**
|
|
111
|
+
* Composes multiple matchers with AND logic - all matchers must match for success.
|
|
112
|
+
* Returns the **node** (not the matched data) to enable further composition.
|
|
113
|
+
*
|
|
114
|
+
* @param matchers - The matchers to combine. All must return Option.some for success.
|
|
115
|
+
* @returns A matcher that returns Option.some(node) if all match, Option.none() otherwise.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* // Match ECHO objects that are NOT Channels
|
|
120
|
+
* const whenCommentable = NodeMatcher.whenAll(
|
|
121
|
+
* NodeMatcher.whenEchoObjectMatches,
|
|
122
|
+
* NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),
|
|
123
|
+
* );
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export declare const whenAll: (...matchers: NodeMatcher[]) => NodeMatcher;
|
|
127
|
+
/**
|
|
128
|
+
* Composes multiple matchers with OR logic - at least one matcher must match.
|
|
129
|
+
* Returns the **node** (not the matched data) to enable further composition.
|
|
130
|
+
*
|
|
131
|
+
* @param matchers - The matchers to combine. At least one must return Option.some.
|
|
132
|
+
* @returns A matcher that returns Option.some(node) if any match, Option.none() otherwise.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* // Match nodes that are either Sequences or Prompts
|
|
137
|
+
* const whenInvocable = NodeMatcher.whenAny(
|
|
138
|
+
* NodeMatcher.whenEchoTypeMatches(Sequence),
|
|
139
|
+
* NodeMatcher.whenEchoTypeMatches(Prompt.Prompt),
|
|
140
|
+
* );
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export declare const whenAny: (...matchers: NodeMatcher[]) => NodeMatcher;
|
|
144
|
+
/**
|
|
145
|
+
* Matches a node whose data is an instance of the given ECHO schema type.
|
|
146
|
+
* Returns the **node** (not the data) to enable composition with whenAll/whenAny/whenNot.
|
|
147
|
+
*
|
|
148
|
+
* Use this instead of {@link whenEchoType} when you need to combine matchers.
|
|
149
|
+
* The difference is what's returned:
|
|
150
|
+
* - `whenEchoType` returns the typed entity (for direct use)
|
|
151
|
+
* - `whenEchoTypeMatches` returns the node (for composition)
|
|
152
|
+
*
|
|
153
|
+
* @template T - The ECHO schema type to match against.
|
|
154
|
+
* @param type - The ECHO schema (e.g., `Channel.Channel`, `Document.Document`).
|
|
155
|
+
* @returns A matcher that returns Option.some(node) if the data matches, Option.none() otherwise.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* // Use with whenAny for OR logic
|
|
160
|
+
* const whenPresentable = NodeMatcher.whenAny(
|
|
161
|
+
* NodeMatcher.whenEchoTypeMatches(Collection.Collection),
|
|
162
|
+
* NodeMatcher.whenEchoTypeMatches(Markdown.Document),
|
|
163
|
+
* );
|
|
164
|
+
*
|
|
165
|
+
* // Use with whenNot for exclusion
|
|
166
|
+
* const whenNotChannel = NodeMatcher.whenNot(
|
|
167
|
+
* NodeMatcher.whenEchoTypeMatches(Channel.Channel),
|
|
168
|
+
* );
|
|
169
|
+
* ```
|
|
170
|
+
*
|
|
171
|
+
* @see {@link whenEchoType} - Use instead when you need the typed entity directly.
|
|
172
|
+
*/
|
|
173
|
+
export declare const whenEchoTypeMatches: <T extends Type.Entity.Any>(type: T) => NodeMatcher;
|
|
174
|
+
/**
|
|
175
|
+
* Matches a node whose data is any ECHO object.
|
|
176
|
+
* Returns the **node** (not the data) to enable composition with whenAll/whenAny/whenNot.
|
|
177
|
+
*
|
|
178
|
+
* Use this instead of {@link whenEchoObject} when you need to combine matchers.
|
|
179
|
+
* The difference is what's returned:
|
|
180
|
+
* - `whenEchoObject` returns the object data (for direct use)
|
|
181
|
+
* - `whenEchoObjectMatches` returns the node (for composition)
|
|
182
|
+
*
|
|
183
|
+
* @returns Option.some(node) if the node's data is an ECHO object, Option.none() otherwise.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* // Match ECHO objects that are not system types
|
|
188
|
+
* const whenUserObject = NodeMatcher.whenAll(
|
|
189
|
+
* NodeMatcher.whenEchoObjectMatches,
|
|
190
|
+
* NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(SystemType)),
|
|
191
|
+
* );
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @see {@link whenEchoObject} - Use instead when you need the object data directly.
|
|
195
|
+
*/
|
|
196
|
+
export declare const whenEchoObjectMatches: (node: Node.Node) => Option.Option<Node.Node>;
|
|
197
|
+
/**
|
|
198
|
+
* Negates a matcher - matches when the given matcher does NOT match.
|
|
199
|
+
* Useful for exclusion patterns like "any object EXCEPT type X".
|
|
200
|
+
*
|
|
201
|
+
* @param matcher - The matcher to negate.
|
|
202
|
+
* @returns A matcher that returns Option.some(node) if the input matcher returns none,
|
|
203
|
+
* and Option.none() if the input matcher returns some.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```ts
|
|
207
|
+
* // Match any ECHO object that is NOT a Channel
|
|
208
|
+
* const whenCommentable = NodeMatcher.whenAll(
|
|
209
|
+
* NodeMatcher.whenEchoObjectMatches,
|
|
210
|
+
* NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),
|
|
211
|
+
* );
|
|
212
|
+
*
|
|
213
|
+
* // Match any node that is NOT the root
|
|
214
|
+
* const whenNotRoot = NodeMatcher.whenNot(NodeMatcher.whenRoot);
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
217
|
+
export declare const whenNot: (matcher: NodeMatcher) => NodeMatcher;
|
|
218
|
+
//# sourceMappingURL=node-matcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-matcher.d.ts","sourceRoot":"","sources":["../../../src/node-matcher.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,KAAK,MAAM,EAAE,GAAG,EAAE,KAAK,IAAI,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAMvF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CACL,CAAC;AAE9D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM,GAChB,IAAI,MAAM,MACV,MAAM,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CACU,CAAC;AAEvD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,YAAY,GACtB,MAAM,MAAM,MACZ,MAAM,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CACc,CAAC;AAM3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,YAAY,GACtB,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAEZ,CAAC;AAE7E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CACR,CAAC;AAMnE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,OAAO,GACjB,GAAG,UAAU,WAAW,EAAE,KAAG,WAS7B,CAAC;AAEJ;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,OAAO,GACjB,GAAG,UAAU,WAAW,EAAE,KAAG,WAS7B,CAAC;AAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,mBAAmB,GAC7B,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAG,WAE+B,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,IAAI,CAAC,IAAI,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAClB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,OAAO,GACjB,SAAS,WAAW,KAAG,WAE0C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-matcher.test.d.ts","sourceRoot":"","sources":["../../../src/node-matcher.test.ts"],"names":[],"mappings":""}
|
package/dist/types/src/node.d.ts
CHANGED
|
@@ -1,4 +1,22 @@
|
|
|
1
|
-
import
|
|
1
|
+
import type * as Context from 'effect/Context';
|
|
2
|
+
import type * as Effect from 'effect/Effect';
|
|
3
|
+
import { type MakeOptional } from '@dxos/util';
|
|
4
|
+
/**
|
|
5
|
+
* Root node ID.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RootId = "root";
|
|
8
|
+
/**
|
|
9
|
+
* Root node type.
|
|
10
|
+
*/
|
|
11
|
+
export declare const RootType = "dxos.org/type/GraphRoot";
|
|
12
|
+
/**
|
|
13
|
+
* Action node type.
|
|
14
|
+
*/
|
|
15
|
+
export declare const ActionType = "dxos.org/type/GraphAction";
|
|
16
|
+
/**
|
|
17
|
+
* Action group node type.
|
|
18
|
+
*/
|
|
19
|
+
export declare const ActionGroupType = "dxos.org/type/GraphActionGroup";
|
|
2
20
|
/**
|
|
3
21
|
* Represents a node in the graph.
|
|
4
22
|
*/
|
|
@@ -35,14 +53,25 @@ export type NodeArg<TData, TProperties extends Record<string, any> = Record<stri
|
|
|
35
53
|
/** Will automatically add specified edges. */
|
|
36
54
|
edges?: [string, Relation][];
|
|
37
55
|
};
|
|
38
|
-
export type
|
|
56
|
+
export type InvokeProps = {
|
|
39
57
|
/** Node the invoked action is connected to. */
|
|
40
58
|
parent?: Node;
|
|
41
59
|
caller?: string;
|
|
42
60
|
};
|
|
43
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Action data is an Effect-returning function.
|
|
63
|
+
* The Effect is provided with captured context at execution time.
|
|
64
|
+
*/
|
|
65
|
+
export type ActionData<R = never> = (params?: InvokeProps) => Effect.Effect<any, Error, R>;
|
|
66
|
+
/**
|
|
67
|
+
* Context captured at extension creation time.
|
|
68
|
+
* Automatically provided to action Effects at execution.
|
|
69
|
+
*/
|
|
70
|
+
export type ActionContext = Context.Context<any>;
|
|
44
71
|
export type Action<TProperties extends Record<string, any> = Record<string, any>> = Readonly<Omit<Node<ActionData, TProperties>, 'properties'> & {
|
|
45
72
|
properties: Readonly<TProperties>;
|
|
73
|
+
/** Captured context from extension creation. Provided automatically at action execution. */
|
|
74
|
+
_actionContext?: ActionContext;
|
|
46
75
|
}>;
|
|
47
76
|
export declare const isAction: (data: unknown) => data is Action;
|
|
48
77
|
export declare const actionGroupSymbol: unique symbol;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/node.ts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EchoGraph.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/EchoGraph.stories.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"EchoGraph.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/EchoGraph.stories.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAsPjE,QAAA,MAAM,IAAI;;;CAYM,CAAC;AAEjB,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,QAAQ,EAAE,KActB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAsGtB,CAAC"}
|