yarn-spinner-runner-ts 0.1.3 → 0.1.4
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/README.md +5 -0
- package/dist/runtime/commands.js +12 -1
- package/dist/runtime/commands.js.map +1 -1
- package/dist/runtime/runner.d.ts +6 -0
- package/dist/runtime/runner.js +10 -0
- package/dist/runtime/runner.js.map +1 -1
- package/dist/tests/custom_functions.test.d.ts +1 -0
- package/dist/tests/custom_functions.test.js +129 -0
- package/dist/tests/custom_functions.test.js.map +1 -0
- package/dist/tests/story_end.test.d.ts +1 -0
- package/dist/tests/story_end.test.js +37 -0
- package/dist/tests/story_end.test.js.map +1 -0
- package/package.json +6 -6
- package/src/runtime/commands.ts +14 -1
- package/src/runtime/runner.ts +12 -0
- package/src/tests/custom_functions.test.ts +140 -0
- package/src/tests/story_end.test.ts +42 -0
package/README.md
CHANGED
|
@@ -76,6 +76,10 @@ const runner = new YarnRunner(program, {
|
|
|
76
76
|
handleCommand: (cmd, parsed) => {
|
|
77
77
|
console.log("Command:", cmd);
|
|
78
78
|
},
|
|
79
|
+
onStoryEnd: ({ variables, storyEnd }) => {
|
|
80
|
+
console.log("Story ended!", storyEnd);
|
|
81
|
+
console.log("Final variables:", variables);
|
|
82
|
+
},
|
|
79
83
|
});
|
|
80
84
|
|
|
81
85
|
// Get current result
|
|
@@ -160,6 +164,7 @@ This starts a Vite dev server with a live Yarn script editor and dialogue system
|
|
|
160
164
|
* `getVariable(name: string): unknown` — Get variable value
|
|
161
165
|
* `setVariable(name: string, value: unknown): void` — Set variable value
|
|
162
166
|
* `getVariables(): Readonly<Record<string, unknown>>` — Get all variables
|
|
167
|
+
* `onStoryEnd?: (payload: { variables: Readonly<Record<string, unknown>>; storyEnd: true }) => void` — Handler called when story reaches its end, providing final variable state
|
|
163
168
|
|
|
164
169
|
### React Components
|
|
165
170
|
|
package/dist/runtime/commands.js
CHANGED
|
@@ -17,14 +17,25 @@ export function parseCommand(content) {
|
|
|
17
17
|
for (let i = 0; i < trimmed.length; i++) {
|
|
18
18
|
const char = trimmed[i];
|
|
19
19
|
if ((char === '"' || char === "'") && !inQuotes) {
|
|
20
|
+
// If we have accumulated non-quoted content (e.g. a function name and "(")
|
|
21
|
+
// push it as its own part before entering quoted mode. This prevents the
|
|
22
|
+
// surrounding text from being merged into the quoted content when we
|
|
23
|
+
// later push the quoted value.
|
|
24
|
+
if (current.trim()) {
|
|
25
|
+
parts.push(current.trim());
|
|
26
|
+
current = "";
|
|
27
|
+
}
|
|
20
28
|
inQuotes = true;
|
|
21
29
|
quoteChar = char;
|
|
22
30
|
continue;
|
|
23
31
|
}
|
|
24
32
|
if (char === quoteChar && inQuotes) {
|
|
25
33
|
inQuotes = false;
|
|
34
|
+
// Preserve the surrounding quotes in the parsed part so callers that
|
|
35
|
+
// reassemble the expression (e.g. declare handlers) keep string literals
|
|
36
|
+
// intact instead of losing quote characters.
|
|
37
|
+
parts.push(quoteChar + current + quoteChar);
|
|
26
38
|
quoteChar = "";
|
|
27
|
-
parts.push(current);
|
|
28
39
|
current = "";
|
|
29
40
|
continue;
|
|
30
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/runtime/commands.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,QAAQ,GAAG,IAAI,CAAC;YAChB,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;YACnC,QAAQ,GAAG,KAAK,CAAC;YACjB,
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/runtime/commands.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/runner.d.ts
CHANGED
|
@@ -7,6 +7,10 @@ export interface RunnerOptions {
|
|
|
7
7
|
functions?: Record<string, (...args: unknown[]) => unknown>;
|
|
8
8
|
handleCommand?: (command: string, parsed?: ReturnType<typeof parseCommand>) => void;
|
|
9
9
|
commandHandler?: CommandHandler;
|
|
10
|
+
onStoryEnd?: (payload: {
|
|
11
|
+
variables: Readonly<Record<string, unknown>>;
|
|
12
|
+
storyEnd: true;
|
|
13
|
+
}) => void;
|
|
10
14
|
}
|
|
11
15
|
export declare class YarnRunner {
|
|
12
16
|
private readonly program;
|
|
@@ -16,6 +20,8 @@ export declare class YarnRunner {
|
|
|
16
20
|
private readonly commandHandler;
|
|
17
21
|
private readonly evaluator;
|
|
18
22
|
private readonly onceSeen;
|
|
23
|
+
private readonly onStoryEnd?;
|
|
24
|
+
private storyEnded;
|
|
19
25
|
private readonly nodeGroupOnceSeen;
|
|
20
26
|
private readonly visitCounts;
|
|
21
27
|
private nodeTitle;
|
package/dist/runtime/runner.js
CHANGED
|
@@ -5,6 +5,7 @@ const globalNodeGroupOnceSeen = new Set(); // Track "once" nodes in groups: "tit
|
|
|
5
5
|
export class YarnRunner {
|
|
6
6
|
constructor(program, opts) {
|
|
7
7
|
this.onceSeen = globalOnceSeen;
|
|
8
|
+
this.storyEnded = false;
|
|
8
9
|
this.nodeGroupOnceSeen = globalNodeGroupOnceSeen;
|
|
9
10
|
this.visitCounts = {};
|
|
10
11
|
this.ip = 0; // instruction pointer within node
|
|
@@ -70,6 +71,7 @@ export class YarnRunner {
|
|
|
70
71
|
...(opts.functions ?? {}),
|
|
71
72
|
};
|
|
72
73
|
this.handleCommand = opts.handleCommand;
|
|
74
|
+
this.onStoryEnd = opts.onStoryEnd;
|
|
73
75
|
this.evaluator = new ExpressionEvaluator(this.variables, this.functions, this.program.enums);
|
|
74
76
|
this.commandHandler = opts.commandHandler ?? new CommandHandler(this.variables);
|
|
75
77
|
this.nodeTitle = opts.startAt;
|
|
@@ -562,6 +564,14 @@ export class YarnRunner {
|
|
|
562
564
|
emit(res) {
|
|
563
565
|
this.currentResult = res;
|
|
564
566
|
this.history.push(res);
|
|
567
|
+
if (res.isDialogueEnd && !this.storyEnded && this.callStack.length === 0) {
|
|
568
|
+
this.storyEnded = true;
|
|
569
|
+
if (this.onStoryEnd) {
|
|
570
|
+
// Create a readonly copy of the variables
|
|
571
|
+
const variablesCopy = Object.freeze({ ...this.variables });
|
|
572
|
+
this.onStoryEnd({ storyEnd: true, variables: variablesCopy });
|
|
573
|
+
}
|
|
574
|
+
}
|
|
565
575
|
// If we ended a detour node, return to caller after emitting last result
|
|
566
576
|
// Position is restored here, but we wait for next advance() to continue
|
|
567
577
|
if (res.isDialogueEnd && this.callStack.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runtime/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/runtime/runner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAW7D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;AACzC,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAU,CAAC,CAAC,8CAA8C;AAEjG,MAAM,OAAO,UAAU;IAwBrB,YAAY,OAAkB,EAAE,IAAmB;QAjBlC,aAAQ,GAAG,cAAc,CAAC;QAEnC,eAAU,GAAG,KAAK,CAAC;QACV,sBAAiB,GAAG,uBAAuB,CAAC;QAC5C,gBAAW,GAA2B,EAAE,CAAC;QAGlD,OAAE,GAAG,CAAC,CAAC,CAAC,kCAAkC;QAC1C,qBAAgB,GAAW,CAAC,CAAC,CAAC,CAAC,sDAAsD;QACrF,cAAS,GAGb,EAAE,CAAC;QAEP,kBAAa,GAAyB,IAAI,CAAC;QAC3C,YAAO,GAAoB,EAAE,CAAC;QAG5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG;YACf,6BAA6B;YAC7B,MAAM,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,MAAM,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YACjC,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAChC,OAAO,EAAE,CAAC,QAAiB,EAAE,EAAE;gBAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBACpC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,aAAa,EAAE,CAAC,QAAiB,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;gBACpC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;YACD,gBAAgB,EAAE,CAAC,CAAU,EAAE,EAAE;gBAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,CAAC;gBAC/B,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvG,CAAC;YACD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE;YAC3B,YAAY,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;gBACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3B,OAAO,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,EAAE,CAAC,KAAc,EAAE,EAAE;gBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3C,CAAC;YACD,GAAG,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/D,GAAG,EAAE,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/D,KAAK,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,YAAY,EAAE,CAAC,CAAU,EAAE,MAAe,EAAE,EAAE;gBAC5C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;YACjD,CAAC;YACD,KAAK,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,GAAG,EAAE,CAAC,CAAU,EAAE,EAAE;gBAClB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACpD,CAAC;YACD,GAAG,EAAE,CAAC,CAAU,EAAE,EAAE;gBAClB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,EAAE,CAAC,CAAU,EAAE,EAAE;gBACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;YACD,GAAG,EAAE,CAAC,CAAU,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;SACyB,CAAC;QACrD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,SAAS,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7F,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;QAE9B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,KAAa;QAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;QAE7D,mCAAmC;QACnC,IAAI,CAAC,CAAC,OAAO,IAAI,WAAW,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;YAC3B,OAAO,WAAqB,CAAC;QAC/B,CAAC;QAED,8EAA8E;QAC9E,MAAM,KAAK,GAAG,WAA0B,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC1D,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;gBAC1B,gDAAgD;gBAChD,IAAI,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACrC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,uFAAuF;QACvF,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,UAAgC,EAAE,SAAiB,EAAE,SAAiB;QACnG,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,6EAA6E;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0CAA0C;QAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;YAEjC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;gBACvB,2CAA2C;gBAC3C,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;oBACxC,OAAO,KAAK,CAAC,CAAC,oBAAoB;gBACpC,CAAC;gBACD,yCAAyC;gBACzC,SAAS;YACX,CAAC;YAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,mBAAmB;gBACnB,SAAS;YACX,CAAC;YAED,sDAAsD;YACtD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtC,OAAO,KAAK,CAAC,CAAC,mBAAmB;YACnC,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,wBAAwB;IACvC,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,SAAiB,EAAE,SAAiB;QAChE,MAAM,OAAO,GAAG,GAAG,SAAS,IAAI,SAAS,EAAE,CAAC;QAC5C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,WAAoB;QAC1B,2EAA2E;QAC3E,IAAI,IAAI,CAAC,aAAa,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,WAAW,IAAI,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAClE,0CAA0C;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9C,wCAAwC;YACxC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE,EAAE,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACrD,yDAAyD;YACzD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACxG,IAAI,IAAI,CAAC,WAAW,EAAE;gBAAE,OAAO;YAC/B,OAAO;QACT,CAAC;QACD,8CAA8C;QAC9C,IAAI,IAAI,CAAC,WAAW,EAAE;YAAE,OAAO;QAC/B,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,MAA0B;QAC1D,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAU,EAAE;YAClD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC7D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC1C,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1F,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC3E,MAAM,aAAa,GAAG,CAAC,KAAa,EAAmB,EAAE;YACvD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;oBAClD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;wBACxC,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;qBACtC,CAAC,CAAC,CAAC;gBACN,CAAC;YACH,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,OAAO,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC5C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;aACtC,CAAC,CAAC,CAAC;QACN,CAAC,CAAC;QAEF,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,MAAM,WAAW,GAAoB,EAAE,CAAC;QACxC,IAAI,cAAc,GAAyB,IAAI,CAAC;QAEhD,MAAM,aAAa,GAAG,CAAC,CAAkB,EAAE,CAAkB,EAAE,EAAE;YAC/D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,IAAI;oBAAE,OAAO,KAAK,CAAC;gBAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;gBACzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;gBACzC,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;oBAAE,OAAO,KAAK,CAAC;gBAChD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;oBACxB,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;wBAAE,OAAO,KAAK,CAAC;gBAC9D,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,IAAI,cAAc,EAAE,CAAC;gBACnB,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBACjC,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAE,QAAyB,EAAE,EAAE;YACzE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC;YACjC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC9C,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;aACtC,CAAC,CAAC,CAAC;YACJ,IAAI,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,CAAC;gBAC3E,cAAc,CAAC,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,YAAY,EAAE,CAAC;gBACf,cAAc,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,wBAAwB,GAAG,CAAC,KAAa,EAAE,QAAyB,EAAE,EAAE;YAC5E,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,YAAY,EAAE,CAAC;gBACf,OAAO;YACT,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvF,CAAC,IAAI,CAAC,CAAC;oBACP,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;gBACtC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC1E,wBAAwB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAC9C,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;gBACd,SAAS;YACX,CAAC;YACD,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;QAED,YAAY,EAAE,CAAC;QACf,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;QACvG,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC9D,CAAC;IAEO,qBAAqB,CAAC,MAAyB;QACrD,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CACxC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,CAChE,CAAC;QACF,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAC1C,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;oBAC3C,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,UAAU,EAAE;iBACtC,CAAC,CAAC;gBACH,WAAW,EAAE,OAAO,CAAC,WAAW;aACjC,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAEO,WAAW;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/C,mEAAmE;QACnE,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,6CAA6C;gBAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;gBACrB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,OAAO,IAAI,CAAC;YACd,CAAC;YACD,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC5I,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;wBACpE,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAClE,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1D,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC3E,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC1I,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrG,IAAI,MAAM,EAAE,CAAC;wBACX,2DAA2D;wBAC3D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACxG,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5B,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACrG,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5B,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;oBACtE,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,IAAI;QACV,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,WAAW,GAAW,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC3F,MAAM,GAAG,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,aAAa;gBACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC/E,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBACzG,OAAO;YACT,CAAC;YACD,IAAI,CAAC,EAAE,EAAE,CAAC;YACV,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBAC1M,OAAO;gBACT,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;wBACpE,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAClE,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1D,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBAC3F,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,mCAAmC;oBACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBAC/E,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,sCAAsC;oBAClE,sCAAsC;oBACtC,SAAS;gBACX,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,iEAAiE;oBACjE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC5E,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,sCAAsC;oBAClE,sCAAsC;oBACtC,SAAS;gBACX,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAA8E,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACjS,OAAO;gBACT,CAAC;gBACD,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAuD,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC3J,IAAI,MAAM,EAAE,CAAC;wBACX,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACxG,IAAI,IAAI,CAAC,WAAW,EAAE;4BAAE,OAAO;oBACjC,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACrG,IAAI,IAAI,CAAC,WAAW,EAAE;4BAAE,OAAO;oBACjC,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,KAAuD;QAC1E,6CAA6C;QAC7C,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAW,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;QAC7B,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAW,CAAC;QACnF,+BAA+B;QAC/B,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,4CAA4C;QAC5C,IAAI,GAAG,GAAG,WAAW,CAAC;QACtB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,GAAG;gBAAE,MAAM;YAChB,QAAQ,GAAG,CAAC,EAAE,EAAE,CAAC;gBACf,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACtG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC5H,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBACD,KAAK,SAAS;oBACZ,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;wBACpE,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBAClE,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,IAAI,CAAC,aAAa;4BAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC1D,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC3E,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,KAAK,SAAS;oBACZ,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;oBAC5H,4DAA4D;oBAC5D,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,KAAK,IAAI,CAAC,CAAC,CAAC;oBACV,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBACrG,IAAI,MAAM,EAAE,CAAC;wBACX,oDAAoD;wBACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACxG,OAAO,EAAE,CAAC;wBACV,IAAI,IAAI,CAAC,WAAW,EAAE;4BAAE,OAAO;wBAC/B,OAAO;oBACT,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBACrG,OAAO,EAAE,CAAC;wBACV,IAAI,IAAI,CAAC,WAAW,EAAE;4BAAE,OAAO;wBAC/B,OAAO;oBACT,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,MAAM,CAAC,CAAC,CAAC;oBACZ,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1E,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC;oBAC5B,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACZ,IAAI,CAAC,IAAI,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;YACH,CAAC;QACH,CAAC;QACD,mCAAmC;QACnC,OAAO,EAAE,CAAC;QACV,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAEO,cAAc;QACpB,0DAA0D;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxD,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,CAAC,EAAE;gBAAE,MAAM;YACf,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,MAAM;gBAAE,OAAO,KAAK,CAAC;YACxG,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;QACrD,CAAC;QACD,gFAAgF;QAChF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,IAAI,CAAC,GAAkB;QAC7B,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,0CAA0C;gBAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3D,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QACD,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAC;YACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY;QACtB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,IAAY,EAAE,KAAc;QACtC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { test } from "node:test";
|
|
2
|
+
import { strictEqual, ok, match } from "node:assert";
|
|
3
|
+
import { parseYarn, compile } from "../index.js";
|
|
4
|
+
import { YarnRunner } from "../runtime/runner.js";
|
|
5
|
+
test("custom functions", () => {
|
|
6
|
+
const yarnText = `
|
|
7
|
+
title: CustomFuncs
|
|
8
|
+
---
|
|
9
|
+
<<declare $doubled = multiply(2, 3)>>
|
|
10
|
+
<<declare $concatenated = concat("Hello", " World")>>
|
|
11
|
+
<<declare $power = pow(2, 3)>>
|
|
12
|
+
<<declare $conditionalValue = ifThen(true, "yes", "no")>>
|
|
13
|
+
Result: {$doubled}, {$concatenated}, {$power}, {$conditionalValue}
|
|
14
|
+
===
|
|
15
|
+
`;
|
|
16
|
+
const ast = parseYarn(yarnText);
|
|
17
|
+
const program = compile(ast);
|
|
18
|
+
const runner = new YarnRunner(program, {
|
|
19
|
+
startAt: "CustomFuncs",
|
|
20
|
+
functions: {
|
|
21
|
+
multiply: (a, b) => Number(a) * Number(b),
|
|
22
|
+
concat: (a, b) => String(a) + String(b),
|
|
23
|
+
pow: (base, exp) => Math.pow(Number(base), Number(exp)),
|
|
24
|
+
ifThen: (cond, yes, no) => Boolean(cond) ? yes : no,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
// Need to advance past declare commands and get to the text line
|
|
28
|
+
for (let i = 0; i < 4; i++) {
|
|
29
|
+
runner.advance();
|
|
30
|
+
}
|
|
31
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
32
|
+
if (runner.currentResult?.type === "text") {
|
|
33
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
34
|
+
strictEqual(fullText, "Result: 6, Hello World, 8, yes");
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
test("custom functions with type coercion", () => {
|
|
38
|
+
const yarnText = `
|
|
39
|
+
title: TypeCoercion
|
|
40
|
+
---
|
|
41
|
+
<<declare $numFromStr = multiply("2", "3")>>
|
|
42
|
+
<<declare $concatNums = concat(123, 456)>>
|
|
43
|
+
<<declare $boolStr = ifThen("true", 1, 0)>>
|
|
44
|
+
Result: {$numFromStr}, {$concatNums}, {$boolStr}
|
|
45
|
+
===
|
|
46
|
+
`;
|
|
47
|
+
const ast = parseYarn(yarnText);
|
|
48
|
+
const program = compile(ast);
|
|
49
|
+
const runner = new YarnRunner(program, {
|
|
50
|
+
startAt: "TypeCoercion",
|
|
51
|
+
functions: {
|
|
52
|
+
multiply: (a, b) => Number(a) * Number(b),
|
|
53
|
+
concat: (a, b) => String(a) + String(b),
|
|
54
|
+
ifThen: (cond, yes, no) => Boolean(cond) ? yes : no,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
// Need to advance past declare commands and get to the text line
|
|
58
|
+
for (let i = 0; i < 3; i++) {
|
|
59
|
+
runner.advance();
|
|
60
|
+
}
|
|
61
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
62
|
+
if (runner.currentResult?.type === "text") {
|
|
63
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
64
|
+
strictEqual(fullText, "Result: 6, 123456, 1");
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
test("custom functions error handling", () => {
|
|
68
|
+
const yarnText = `
|
|
69
|
+
title: ErrorHandling
|
|
70
|
+
---
|
|
71
|
+
<<declare $result = safeDivide(10, 0)>>
|
|
72
|
+
Result: {$result}
|
|
73
|
+
===
|
|
74
|
+
`;
|
|
75
|
+
const ast = parseYarn(yarnText);
|
|
76
|
+
const program = compile(ast);
|
|
77
|
+
const runner = new YarnRunner(program, {
|
|
78
|
+
startAt: "ErrorHandling",
|
|
79
|
+
functions: {
|
|
80
|
+
safeDivide: (a, b) => {
|
|
81
|
+
const numerator = Number(a);
|
|
82
|
+
const denominator = Number(b);
|
|
83
|
+
return denominator === 0 ? "Cannot divide by zero" : numerator / denominator;
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
// Advance until we reach a text result (some commands emit immediately)
|
|
88
|
+
for (let i = 0; i < 10 && runner.currentResult?.type !== "text"; i++) {
|
|
89
|
+
runner.advance();
|
|
90
|
+
}
|
|
91
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
92
|
+
if (runner.currentResult?.type === "text") {
|
|
93
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
94
|
+
strictEqual(fullText, "Result: Cannot divide by zero");
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
test("custom functions alongside built-in functions", () => {
|
|
98
|
+
const yarnText = `
|
|
99
|
+
title: MixedFunctions
|
|
100
|
+
---
|
|
101
|
+
<<declare $random = random()>>
|
|
102
|
+
<<declare $doubled = multiply($random, 2)>>
|
|
103
|
+
<<declare $formatted = format_number($doubled)>>
|
|
104
|
+
Result: {$formatted}
|
|
105
|
+
===
|
|
106
|
+
`;
|
|
107
|
+
const ast = parseYarn(yarnText);
|
|
108
|
+
const program = compile(ast);
|
|
109
|
+
const runner = new YarnRunner(program, {
|
|
110
|
+
startAt: "MixedFunctions",
|
|
111
|
+
functions: {
|
|
112
|
+
multiply: (a, b) => Number(a) * Number(b),
|
|
113
|
+
format_number: (n) => Number(n).toFixed(2),
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
// Need to advance past declare commands and get to the text line
|
|
117
|
+
for (let i = 0; i < 3; i++) {
|
|
118
|
+
runner.advance();
|
|
119
|
+
}
|
|
120
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
121
|
+
if (runner.currentResult?.type === "text") {
|
|
122
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
123
|
+
const resultNumber = parseFloat(fullText.replace("Result: ", ""));
|
|
124
|
+
ok(resultNumber >= 0);
|
|
125
|
+
ok(resultNumber <= 2);
|
|
126
|
+
match(fullText, /Result: \d+\.\d{2}/);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
//# sourceMappingURL=custom_functions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom_functions.test.js","sourceRoot":"","sources":["../../src/tests/custom_functions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { test } from "node:test";
|
|
2
|
+
import { ok, strictEqual } from "node:assert";
|
|
3
|
+
import { parseYarn, compile, YarnRunner } from "../index.js";
|
|
4
|
+
test("onStoryEnd receives variables snapshot", () => {
|
|
5
|
+
const script = `
|
|
6
|
+
title: Start
|
|
7
|
+
---
|
|
8
|
+
Narrator: Beginning
|
|
9
|
+
<<set $score = 42>>
|
|
10
|
+
Narrator: Done
|
|
11
|
+
===
|
|
12
|
+
`;
|
|
13
|
+
let payload;
|
|
14
|
+
const doc = parseYarn(script);
|
|
15
|
+
const ir = compile(doc);
|
|
16
|
+
const runner = new YarnRunner(ir, {
|
|
17
|
+
startAt: "Start",
|
|
18
|
+
onStoryEnd: (info) => {
|
|
19
|
+
payload = info;
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
let result = runner.currentResult;
|
|
23
|
+
ok(result && result.type === "text");
|
|
24
|
+
runner.advance();
|
|
25
|
+
result = runner.currentResult;
|
|
26
|
+
ok(result && result.type === "command");
|
|
27
|
+
runner.advance();
|
|
28
|
+
result = runner.currentResult;
|
|
29
|
+
ok(result && result.type === "text");
|
|
30
|
+
runner.advance();
|
|
31
|
+
result = runner.currentResult;
|
|
32
|
+
ok(result && result.isDialogueEnd === true);
|
|
33
|
+
strictEqual(payload?.storyEnd, true);
|
|
34
|
+
const variables = payload?.variables ?? {};
|
|
35
|
+
strictEqual(variables["score"], 42);
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=story_end.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"story_end.test.js","sourceRoot":"","sources":["../../src/tests/story_end.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7D,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;IAClD,MAAM,MAAM,GAAG;;;;;;;CAOhB,CAAC;IACA,IAAI,OAAqF,CAAC;IAC1F,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,EAAE;QAChC,OAAO,EAAE,OAAO;QAChB,UAAU,EAAE,CAAC,IAAI,EAAE,EAAE;YACnB,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;KACF,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAClC,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAErC,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9B,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAExC,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9B,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAErC,MAAM,CAAC,OAAO,EAAE,CAAC;IACjB,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;IAC9B,EAAE,CAAC,MAAM,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC;IAE5C,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,EAAE,CAAC;IAC3C,WAAW,CAAE,SAAqC,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yarn-spinner-runner-ts",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "TypeScript parser, compiler, and runtime for Yarn Spinner 3.x with React adapter [NPM package](https://www.npmjs.com/package/yarn-spinner-runner-ts)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,20 +37,20 @@
|
|
|
37
37
|
"js-yaml": "^4.1.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
|
-
"@
|
|
40
|
+
"@eslint/js": "^9.12.0",
|
|
41
41
|
"@types/js-yaml": "^4.0.9",
|
|
42
|
+
"@types/node": "^22.7.4",
|
|
42
43
|
"@types/react": "^18.3.3",
|
|
43
44
|
"@types/react-dom": "^18.3.0",
|
|
44
|
-
"@eslint/js": "^9.12.0",
|
|
45
|
-
"@typescript-eslint/parser": "^8.8.1",
|
|
46
45
|
"@typescript-eslint/eslint-plugin": "^8.8.1",
|
|
46
|
+
"@typescript-eslint/parser": "^8.8.1",
|
|
47
47
|
"@vitejs/plugin-react": "^4.3.1",
|
|
48
48
|
"eslint": "^9.12.0",
|
|
49
49
|
"react": "^18.3.1",
|
|
50
50
|
"react-dom": "^18.3.1",
|
|
51
51
|
"rimraf": "^6.0.1",
|
|
52
52
|
"typescript": "^5.6.3",
|
|
53
|
-
"vite": "^5.4.3"
|
|
53
|
+
"vite": "^5.4.3",
|
|
54
|
+
"vitest": "^4.0.7"
|
|
54
55
|
}
|
|
55
56
|
}
|
|
56
|
-
|
package/src/runtime/commands.ts
CHANGED
|
@@ -29,6 +29,14 @@ export function parseCommand(content: string): ParsedCommand {
|
|
|
29
29
|
const char = trimmed[i];
|
|
30
30
|
|
|
31
31
|
if ((char === '"' || char === "'") && !inQuotes) {
|
|
32
|
+
// If we have accumulated non-quoted content (e.g. a function name and "(")
|
|
33
|
+
// push it as its own part before entering quoted mode. This prevents the
|
|
34
|
+
// surrounding text from being merged into the quoted content when we
|
|
35
|
+
// later push the quoted value.
|
|
36
|
+
if (current.trim()) {
|
|
37
|
+
parts.push(current.trim());
|
|
38
|
+
current = "";
|
|
39
|
+
}
|
|
32
40
|
inQuotes = true;
|
|
33
41
|
quoteChar = char;
|
|
34
42
|
continue;
|
|
@@ -36,8 +44,11 @@ export function parseCommand(content: string): ParsedCommand {
|
|
|
36
44
|
|
|
37
45
|
if (char === quoteChar && inQuotes) {
|
|
38
46
|
inQuotes = false;
|
|
47
|
+
// Preserve the surrounding quotes in the parsed part so callers that
|
|
48
|
+
// reassemble the expression (e.g. declare handlers) keep string literals
|
|
49
|
+
// intact instead of losing quote characters.
|
|
50
|
+
parts.push(quoteChar + current + quoteChar);
|
|
39
51
|
quoteChar = "";
|
|
40
|
-
parts.push(current);
|
|
41
52
|
current = "";
|
|
42
53
|
continue;
|
|
43
54
|
}
|
|
@@ -129,11 +140,13 @@ export class CommandHandler {
|
|
|
129
140
|
this.register("declare", (args, evaluator) => {
|
|
130
141
|
if (!evaluator) return;
|
|
131
142
|
if (args.length < 3) return; // name, '=', expr
|
|
143
|
+
|
|
132
144
|
const varNameRaw = args[0];
|
|
133
145
|
let exprParts = args.slice(1);
|
|
134
146
|
if (exprParts[0] === "=") exprParts = exprParts.slice(1);
|
|
135
147
|
const expr = exprParts.join(" ");
|
|
136
148
|
|
|
149
|
+
|
|
137
150
|
const key = varNameRaw.startsWith("$") ? varNameRaw.slice(1) : varNameRaw;
|
|
138
151
|
|
|
139
152
|
// Check if expression is "smart" (contains operators, comparisons, or variable references)
|
package/src/runtime/runner.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface RunnerOptions {
|
|
|
10
10
|
functions?: Record<string, (...args: unknown[]) => unknown>;
|
|
11
11
|
handleCommand?: (command: string, parsed?: ReturnType<typeof parseCommand>) => void;
|
|
12
12
|
commandHandler?: CommandHandler;
|
|
13
|
+
onStoryEnd?: (payload: { variables: Readonly<Record<string, unknown>>; storyEnd: true }) => void;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
const globalOnceSeen = new Set<string>();
|
|
@@ -23,6 +24,8 @@ export class YarnRunner {
|
|
|
23
24
|
private readonly commandHandler: CommandHandler;
|
|
24
25
|
private readonly evaluator: ExpressionEvaluator;
|
|
25
26
|
private readonly onceSeen = globalOnceSeen;
|
|
27
|
+
private readonly onStoryEnd?: RunnerOptions["onStoryEnd"];
|
|
28
|
+
private storyEnded = false;
|
|
26
29
|
private readonly nodeGroupOnceSeen = globalNodeGroupOnceSeen;
|
|
27
30
|
private readonly visitCounts: Record<string, number> = {};
|
|
28
31
|
|
|
@@ -95,6 +98,7 @@ export class YarnRunner {
|
|
|
95
98
|
...(opts.functions ?? {}),
|
|
96
99
|
} as Record<string, (...args: unknown[]) => unknown>;
|
|
97
100
|
this.handleCommand = opts.handleCommand;
|
|
101
|
+
this.onStoryEnd = opts.onStoryEnd;
|
|
98
102
|
this.evaluator = new ExpressionEvaluator(this.variables, this.functions, this.program.enums);
|
|
99
103
|
this.commandHandler = opts.commandHandler ?? new CommandHandler(this.variables);
|
|
100
104
|
this.nodeTitle = opts.startAt;
|
|
@@ -589,6 +593,14 @@ export class YarnRunner {
|
|
|
589
593
|
private emit(res: RuntimeResult) {
|
|
590
594
|
this.currentResult = res;
|
|
591
595
|
this.history.push(res);
|
|
596
|
+
if (res.isDialogueEnd && !this.storyEnded && this.callStack.length === 0) {
|
|
597
|
+
this.storyEnded = true;
|
|
598
|
+
if (this.onStoryEnd) {
|
|
599
|
+
// Create a readonly copy of the variables
|
|
600
|
+
const variablesCopy = Object.freeze({ ...this.variables });
|
|
601
|
+
this.onStoryEnd({ storyEnd: true, variables: variablesCopy });
|
|
602
|
+
}
|
|
603
|
+
}
|
|
592
604
|
// If we ended a detour node, return to caller after emitting last result
|
|
593
605
|
// Position is restored here, but we wait for next advance() to continue
|
|
594
606
|
if (res.isDialogueEnd && this.callStack.length > 0) {
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { test } from "node:test";
|
|
2
|
+
import { strictEqual, ok, match } from "node:assert";
|
|
3
|
+
import { parseYarn, compile } from "../index.js";
|
|
4
|
+
import { YarnRunner } from "../runtime/runner.js";
|
|
5
|
+
|
|
6
|
+
test("custom functions", () => {
|
|
7
|
+
const yarnText = `
|
|
8
|
+
title: CustomFuncs
|
|
9
|
+
---
|
|
10
|
+
<<declare $doubled = multiply(2, 3)>>
|
|
11
|
+
<<declare $concatenated = concat("Hello", " World")>>
|
|
12
|
+
<<declare $power = pow(2, 3)>>
|
|
13
|
+
<<declare $conditionalValue = ifThen(true, "yes", "no")>>
|
|
14
|
+
Result: {$doubled}, {$concatenated}, {$power}, {$conditionalValue}
|
|
15
|
+
===
|
|
16
|
+
`;
|
|
17
|
+
|
|
18
|
+
const ast = parseYarn(yarnText);
|
|
19
|
+
const program = compile(ast);
|
|
20
|
+
const runner = new YarnRunner(program, {
|
|
21
|
+
startAt: "CustomFuncs",
|
|
22
|
+
functions: {
|
|
23
|
+
multiply: (a: unknown, b: unknown) => Number(a) * Number(b),
|
|
24
|
+
concat: (a: unknown, b: unknown) => String(a) + String(b),
|
|
25
|
+
pow: (base: unknown, exp: unknown) => Math.pow(Number(base), Number(exp)),
|
|
26
|
+
ifThen: (cond: unknown, yes: unknown, no: unknown) => Boolean(cond) ? yes : no,
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
// Need to advance past declare commands and get to the text line
|
|
31
|
+
for (let i = 0; i < 4; i++) {
|
|
32
|
+
runner.advance();
|
|
33
|
+
}
|
|
34
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
35
|
+
if (runner.currentResult?.type === "text") {
|
|
36
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
37
|
+
strictEqual(fullText, "Result: 6, Hello World, 8, yes");
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test("custom functions with type coercion", () => {
|
|
42
|
+
const yarnText = `
|
|
43
|
+
title: TypeCoercion
|
|
44
|
+
---
|
|
45
|
+
<<declare $numFromStr = multiply("2", "3")>>
|
|
46
|
+
<<declare $concatNums = concat(123, 456)>>
|
|
47
|
+
<<declare $boolStr = ifThen("true", 1, 0)>>
|
|
48
|
+
Result: {$numFromStr}, {$concatNums}, {$boolStr}
|
|
49
|
+
===
|
|
50
|
+
`;
|
|
51
|
+
|
|
52
|
+
const ast = parseYarn(yarnText);
|
|
53
|
+
const program = compile(ast);
|
|
54
|
+
const runner = new YarnRunner(program, {
|
|
55
|
+
startAt: "TypeCoercion",
|
|
56
|
+
functions: {
|
|
57
|
+
multiply: (a: unknown, b: unknown) => Number(a) * Number(b),
|
|
58
|
+
concat: (a: unknown, b: unknown) => String(a) + String(b),
|
|
59
|
+
ifThen: (cond: unknown, yes: unknown, no: unknown) => Boolean(cond) ? yes : no,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Need to advance past declare commands and get to the text line
|
|
64
|
+
for (let i = 0; i < 3; i++) {
|
|
65
|
+
runner.advance();
|
|
66
|
+
}
|
|
67
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
68
|
+
if (runner.currentResult?.type === "text") {
|
|
69
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
70
|
+
strictEqual(fullText, "Result: 6, 123456, 1");
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
test("custom functions error handling", () => {
|
|
75
|
+
const yarnText = `
|
|
76
|
+
title: ErrorHandling
|
|
77
|
+
---
|
|
78
|
+
<<declare $result = safeDivide(10, 0)>>
|
|
79
|
+
Result: {$result}
|
|
80
|
+
===
|
|
81
|
+
`;
|
|
82
|
+
|
|
83
|
+
const ast = parseYarn(yarnText);
|
|
84
|
+
const program = compile(ast);
|
|
85
|
+
const runner = new YarnRunner(program, {
|
|
86
|
+
startAt: "ErrorHandling",
|
|
87
|
+
functions: {
|
|
88
|
+
safeDivide: (a: unknown, b: unknown) => {
|
|
89
|
+
const numerator = Number(a);
|
|
90
|
+
const denominator = Number(b);
|
|
91
|
+
return denominator === 0 ? "Cannot divide by zero" : numerator / denominator;
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// Advance until we reach a text result (some commands emit immediately)
|
|
97
|
+
for (let i = 0; i < 10 && runner.currentResult?.type !== "text"; i++) {
|
|
98
|
+
runner.advance();
|
|
99
|
+
}
|
|
100
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
101
|
+
if (runner.currentResult?.type === "text") {
|
|
102
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
103
|
+
strictEqual(fullText, "Result: Cannot divide by zero");
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("custom functions alongside built-in functions", () => {
|
|
108
|
+
const yarnText = `
|
|
109
|
+
title: MixedFunctions
|
|
110
|
+
---
|
|
111
|
+
<<declare $random = random()>>
|
|
112
|
+
<<declare $doubled = multiply($random, 2)>>
|
|
113
|
+
<<declare $formatted = format_number($doubled)>>
|
|
114
|
+
Result: {$formatted}
|
|
115
|
+
===
|
|
116
|
+
`;
|
|
117
|
+
|
|
118
|
+
const ast = parseYarn(yarnText);
|
|
119
|
+
const program = compile(ast);
|
|
120
|
+
const runner = new YarnRunner(program, {
|
|
121
|
+
startAt: "MixedFunctions",
|
|
122
|
+
functions: {
|
|
123
|
+
multiply: (a: unknown, b: unknown) => Number(a) * Number(b),
|
|
124
|
+
format_number: (n: unknown) => Number(n).toFixed(2),
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
// Need to advance past declare commands and get to the text line
|
|
129
|
+
for (let i = 0; i < 3; i++) {
|
|
130
|
+
runner.advance();
|
|
131
|
+
}
|
|
132
|
+
strictEqual(runner.currentResult?.type, "text");
|
|
133
|
+
if (runner.currentResult?.type === "text") {
|
|
134
|
+
const fullText = (runner.currentResult.speaker ? `${runner.currentResult.speaker}: ` : "") + runner.currentResult.text;
|
|
135
|
+
const resultNumber = parseFloat(fullText.replace("Result: ", ""));
|
|
136
|
+
ok(resultNumber >= 0);
|
|
137
|
+
ok(resultNumber <= 2);
|
|
138
|
+
match(fullText, /Result: \d+\.\d{2}/);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { test } from "node:test";
|
|
2
|
+
import { ok, strictEqual } from "node:assert";
|
|
3
|
+
import { parseYarn, compile, YarnRunner } from "../index.js";
|
|
4
|
+
|
|
5
|
+
test("onStoryEnd receives variables snapshot", () => {
|
|
6
|
+
const script = `
|
|
7
|
+
title: Start
|
|
8
|
+
---
|
|
9
|
+
Narrator: Beginning
|
|
10
|
+
<<set $score = 42>>
|
|
11
|
+
Narrator: Done
|
|
12
|
+
===
|
|
13
|
+
`;
|
|
14
|
+
let payload: { variables: Readonly<Record<string, unknown>>; storyEnd: true } | undefined;
|
|
15
|
+
const doc = parseYarn(script);
|
|
16
|
+
const ir = compile(doc);
|
|
17
|
+
const runner = new YarnRunner(ir, {
|
|
18
|
+
startAt: "Start",
|
|
19
|
+
onStoryEnd: (info) => {
|
|
20
|
+
payload = info;
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
let result = runner.currentResult;
|
|
25
|
+
ok(result && result.type === "text");
|
|
26
|
+
|
|
27
|
+
runner.advance();
|
|
28
|
+
result = runner.currentResult;
|
|
29
|
+
ok(result && result.type === "command");
|
|
30
|
+
|
|
31
|
+
runner.advance();
|
|
32
|
+
result = runner.currentResult;
|
|
33
|
+
ok(result && result.type === "text");
|
|
34
|
+
|
|
35
|
+
runner.advance();
|
|
36
|
+
result = runner.currentResult;
|
|
37
|
+
ok(result && result.isDialogueEnd === true);
|
|
38
|
+
|
|
39
|
+
strictEqual(payload?.storyEnd, true);
|
|
40
|
+
const variables = payload?.variables ?? {};
|
|
41
|
+
strictEqual((variables as Record<string, unknown>)["score"], 42);
|
|
42
|
+
});
|