yarn-spinner-runner-ts 0.1.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.
- package/README.md +180 -0
- package/dist/compile/compiler.d.ts +9 -0
- package/dist/compile/compiler.js +172 -0
- package/dist/compile/compiler.js.map +1 -0
- package/dist/compile/ir.d.ts +47 -0
- package/dist/compile/ir.js +2 -0
- package/dist/compile/ir.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/model/ast.d.ts +72 -0
- package/dist/model/ast.js +2 -0
- package/dist/model/ast.js.map +1 -0
- package/dist/parse/lexer.d.ts +7 -0
- package/dist/parse/lexer.js +78 -0
- package/dist/parse/lexer.js.map +1 -0
- package/dist/parse/parser.d.ts +4 -0
- package/dist/parse/parser.js +433 -0
- package/dist/parse/parser.js.map +1 -0
- package/dist/runtime/commands.d.ts +31 -0
- package/dist/runtime/commands.js +157 -0
- package/dist/runtime/commands.js.map +1 -0
- package/dist/runtime/evaluator.d.ts +52 -0
- package/dist/runtime/evaluator.js +309 -0
- package/dist/runtime/evaluator.js.map +1 -0
- package/dist/runtime/results.d.ts +22 -0
- package/dist/runtime/results.js +2 -0
- package/dist/runtime/results.js.map +1 -0
- package/dist/runtime/runner.d.ts +63 -0
- package/dist/runtime/runner.js +456 -0
- package/dist/runtime/runner.js.map +1 -0
- package/dist/tests/full_featured.test.d.ts +1 -0
- package/dist/tests/full_featured.test.js +130 -0
- package/dist/tests/full_featured.test.js.map +1 -0
- package/dist/tests/index.test.d.ts +1 -0
- package/dist/tests/index.test.js +30 -0
- package/dist/tests/index.test.js.map +1 -0
- package/dist/tests/jump_detour.test.d.ts +1 -0
- package/dist/tests/jump_detour.test.js +47 -0
- package/dist/tests/jump_detour.test.js.map +1 -0
- package/dist/tests/nodes_lines.test.d.ts +1 -0
- package/dist/tests/nodes_lines.test.js +23 -0
- package/dist/tests/nodes_lines.test.js.map +1 -0
- package/dist/tests/once.test.d.ts +1 -0
- package/dist/tests/once.test.js +29 -0
- package/dist/tests/once.test.js.map +1 -0
- package/dist/tests/options.test.d.ts +1 -0
- package/dist/tests/options.test.js +32 -0
- package/dist/tests/options.test.js.map +1 -0
- package/dist/tests/variables_flow_cmds.test.d.ts +1 -0
- package/dist/tests/variables_flow_cmds.test.js +30 -0
- package/dist/tests/variables_flow_cmds.test.js.map +1 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/commands.md +21 -0
- package/docs/compatibility-checklist.md +77 -0
- package/docs/css-attribute.md +47 -0
- package/docs/detour.md +24 -0
- package/docs/enums.md +25 -0
- package/docs/flow-control.md +25 -0
- package/docs/functions.md +20 -0
- package/docs/jumps.md +24 -0
- package/docs/line-groups.md +21 -0
- package/docs/lines-nodes-and-options.md +30 -0
- package/docs/logic-and-variables.md +25 -0
- package/docs/markup.md +19 -0
- package/docs/node-groups.md +13 -0
- package/docs/once.md +21 -0
- package/docs/options.md +45 -0
- package/docs/saliency.md +25 -0
- package/docs/scenes-actors-setup.md +195 -0
- package/docs/scenes.md +64 -0
- package/docs/shadow-lines.md +18 -0
- package/docs/smart-variables.md +19 -0
- package/docs/storylets-and-saliency-a-primer.md +14 -0
- package/docs/tags-metadata.md +18 -0
- package/eslint.config.cjs +33 -0
- package/examples/browser/README.md +40 -0
- package/examples/browser/index.html +23 -0
- package/examples/browser/main.tsx +16 -0
- package/examples/browser/vite.config.ts +22 -0
- package/examples/react/DialogueExample.tsx +2 -0
- package/examples/react/DialogueView.tsx +2 -0
- package/examples/react/useYarnRunner.tsx +2 -0
- package/examples/scenes/scenes.yaml +10 -0
- package/examples/yarn/full_featured.yarn +43 -0
- package/package.json +55 -0
- package/src/compile/compiler.ts +183 -0
- package/src/compile/ir.ts +28 -0
- package/src/index.ts +17 -0
- package/src/model/ast.ts +93 -0
- package/src/parse/lexer.ts +108 -0
- package/src/parse/parser.ts +435 -0
- package/src/react/DialogueExample.tsx +149 -0
- package/src/react/DialogueScene.tsx +107 -0
- package/src/react/DialogueView.tsx +160 -0
- package/src/react/dialogue.css +181 -0
- package/src/react/useYarnRunner.tsx +33 -0
- package/src/runtime/commands.ts +183 -0
- package/src/runtime/evaluator.ts +327 -0
- package/src/runtime/results.ts +27 -0
- package/src/runtime/runner.ts +480 -0
- package/src/scene/parser.ts +83 -0
- package/src/scene/types.ts +17 -0
- package/src/tests/full_featured.test.ts +131 -0
- package/src/tests/index.test.ts +34 -0
- package/src/tests/jump_detour.test.ts +47 -0
- package/src/tests/nodes_lines.test.ts +27 -0
- package/src/tests/once.test.ts +32 -0
- package/src/tests/options.test.ts +34 -0
- package/src/tests/variables_flow_cmds.test.ts +33 -0
- package/src/types.ts +4 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe expression evaluator for Yarn Spinner conditions.
|
|
3
|
+
* Supports variables, functions, comparisons, and logical operators.
|
|
4
|
+
*/
|
|
5
|
+
export declare class ExpressionEvaluator {
|
|
6
|
+
private variables;
|
|
7
|
+
private functions;
|
|
8
|
+
private enums;
|
|
9
|
+
private smartVariables;
|
|
10
|
+
constructor(variables?: Record<string, unknown>, functions?: Record<string, (...args: unknown[]) => unknown>, enums?: Record<string, string[]>);
|
|
11
|
+
/**
|
|
12
|
+
* Evaluate a condition expression and return a boolean result.
|
|
13
|
+
* Supports: variables, literals (numbers, strings, booleans), comparisons, logical ops, function calls.
|
|
14
|
+
*/
|
|
15
|
+
evaluate(expr: string): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Evaluate an expression that can return any value (not just boolean).
|
|
18
|
+
*/
|
|
19
|
+
evaluateExpression(expr: string): unknown;
|
|
20
|
+
private preprocess;
|
|
21
|
+
private evaluateFunctionCall;
|
|
22
|
+
private parseArguments;
|
|
23
|
+
private containsComparison;
|
|
24
|
+
private evaluateComparison;
|
|
25
|
+
private evaluateLogical;
|
|
26
|
+
private resolveValue;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve shorthand enum (.CaseName) when setting a variable with known enum type
|
|
29
|
+
*/
|
|
30
|
+
resolveEnumValue(expr: string, enumName?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Get enum type for a variable (if it was declared with enum type)
|
|
33
|
+
*/
|
|
34
|
+
getEnumTypeForVariable(varName: string): string | undefined;
|
|
35
|
+
private deepEquals;
|
|
36
|
+
/**
|
|
37
|
+
* Update variables. Can be used to mutate state during dialogue.
|
|
38
|
+
*/
|
|
39
|
+
setVariable(name: string, value: unknown): void;
|
|
40
|
+
/**
|
|
41
|
+
* Register a smart variable (variable with expression that recalculates on access).
|
|
42
|
+
*/
|
|
43
|
+
setSmartVariable(name: string, expression: string): void;
|
|
44
|
+
/**
|
|
45
|
+
* Check if a variable is a smart variable.
|
|
46
|
+
*/
|
|
47
|
+
isSmartVariable(name: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Get variable value.
|
|
50
|
+
*/
|
|
51
|
+
getVariable(name: string): unknown;
|
|
52
|
+
}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe expression evaluator for Yarn Spinner conditions.
|
|
3
|
+
* Supports variables, functions, comparisons, and logical operators.
|
|
4
|
+
*/
|
|
5
|
+
export class ExpressionEvaluator {
|
|
6
|
+
constructor(variables = {}, functions = {}, enums = {} // enum name -> cases
|
|
7
|
+
) {
|
|
8
|
+
this.variables = variables;
|
|
9
|
+
this.functions = functions;
|
|
10
|
+
this.enums = enums;
|
|
11
|
+
this.smartVariables = {}; // variable name -> expression
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Evaluate a condition expression and return a boolean result.
|
|
15
|
+
* Supports: variables, literals (numbers, strings, booleans), comparisons, logical ops, function calls.
|
|
16
|
+
*/
|
|
17
|
+
evaluate(expr) {
|
|
18
|
+
try {
|
|
19
|
+
const result = this.evaluateExpression(expr);
|
|
20
|
+
return !!result;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Evaluate an expression that can return any value (not just boolean).
|
|
28
|
+
*/
|
|
29
|
+
evaluateExpression(expr) {
|
|
30
|
+
const trimmed = this.preprocess(expr.trim());
|
|
31
|
+
if (!trimmed)
|
|
32
|
+
return false;
|
|
33
|
+
// Handle function calls like `functionName(arg1, arg2)`
|
|
34
|
+
if (trimmed.includes("(") && trimmed.includes(")")) {
|
|
35
|
+
return this.evaluateFunctionCall(trimmed);
|
|
36
|
+
}
|
|
37
|
+
// Handle comparisons
|
|
38
|
+
if (this.containsComparison(trimmed)) {
|
|
39
|
+
return this.evaluateComparison(trimmed);
|
|
40
|
+
}
|
|
41
|
+
// Handle logical operators
|
|
42
|
+
if (trimmed.includes("&&") || trimmed.includes("||")) {
|
|
43
|
+
return this.evaluateLogical(trimmed);
|
|
44
|
+
}
|
|
45
|
+
// Handle negation
|
|
46
|
+
if (trimmed.startsWith("!")) {
|
|
47
|
+
return !this.evaluateExpression(trimmed.slice(1).trim());
|
|
48
|
+
}
|
|
49
|
+
// Simple variable or literal
|
|
50
|
+
return this.resolveValue(trimmed);
|
|
51
|
+
}
|
|
52
|
+
preprocess(expr) {
|
|
53
|
+
// Normalize operator word aliases to JS-like symbols
|
|
54
|
+
// Whole word replacements only
|
|
55
|
+
return expr
|
|
56
|
+
.replace(/\bnot\b/gi, "!")
|
|
57
|
+
.replace(/\band\b/gi, "&&")
|
|
58
|
+
.replace(/\bor\b/gi, "||")
|
|
59
|
+
.replace(/\bxor\b/gi, "^")
|
|
60
|
+
.replace(/\beq\b|\bis\b/gi, "==")
|
|
61
|
+
.replace(/\bneq\b/gi, "!=")
|
|
62
|
+
.replace(/\bgte\b/gi, ">=")
|
|
63
|
+
.replace(/\blte\b/gi, "<=")
|
|
64
|
+
.replace(/\bgt\b/gi, ">")
|
|
65
|
+
.replace(/\blt\b/gi, "<");
|
|
66
|
+
}
|
|
67
|
+
evaluateFunctionCall(expr) {
|
|
68
|
+
const match = expr.match(/^([a-zA-Z_][a-zA-Z0-9_]*)\s*\((.*)\)$/);
|
|
69
|
+
if (!match)
|
|
70
|
+
throw new Error(`Invalid function call: ${expr}`);
|
|
71
|
+
const [, name, argsStr] = match;
|
|
72
|
+
const func = this.functions[name];
|
|
73
|
+
if (!func)
|
|
74
|
+
throw new Error(`Function not found: ${name}`);
|
|
75
|
+
const args = this.parseArguments(argsStr);
|
|
76
|
+
const evaluatedArgs = args.map((arg) => this.evaluateExpression(arg.trim()));
|
|
77
|
+
return func(...evaluatedArgs);
|
|
78
|
+
}
|
|
79
|
+
parseArguments(argsStr) {
|
|
80
|
+
if (!argsStr.trim())
|
|
81
|
+
return [];
|
|
82
|
+
const args = [];
|
|
83
|
+
let depth = 0;
|
|
84
|
+
let current = "";
|
|
85
|
+
for (const char of argsStr) {
|
|
86
|
+
if (char === "(")
|
|
87
|
+
depth++;
|
|
88
|
+
else if (char === ")")
|
|
89
|
+
depth--;
|
|
90
|
+
else if (char === "," && depth === 0) {
|
|
91
|
+
args.push(current.trim());
|
|
92
|
+
current = "";
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
current += char;
|
|
96
|
+
}
|
|
97
|
+
if (current.trim())
|
|
98
|
+
args.push(current.trim());
|
|
99
|
+
return args;
|
|
100
|
+
}
|
|
101
|
+
containsComparison(expr) {
|
|
102
|
+
return /[<>=!]/.test(expr);
|
|
103
|
+
}
|
|
104
|
+
evaluateComparison(expr) {
|
|
105
|
+
// Match comparison operators (avoid matching !=, <=, >=)
|
|
106
|
+
const match = expr.match(/^(.+?)\s*(===|!==|<=|>=|<|>)\s*(.+)$/);
|
|
107
|
+
if (!match)
|
|
108
|
+
throw new Error(`Invalid comparison: ${expr}`);
|
|
109
|
+
const [, left, op, right] = match;
|
|
110
|
+
const leftVal = this.evaluateExpression(left.trim());
|
|
111
|
+
const rightVal = this.evaluateExpression(right.trim());
|
|
112
|
+
switch (op) {
|
|
113
|
+
case "===":
|
|
114
|
+
case "==":
|
|
115
|
+
return this.deepEquals(leftVal, rightVal);
|
|
116
|
+
case "!==":
|
|
117
|
+
case "!=":
|
|
118
|
+
return !this.deepEquals(leftVal, rightVal);
|
|
119
|
+
case "<":
|
|
120
|
+
return Number(leftVal) < Number(rightVal);
|
|
121
|
+
case ">":
|
|
122
|
+
return Number(leftVal) > Number(rightVal);
|
|
123
|
+
case "<=":
|
|
124
|
+
return Number(leftVal) <= Number(rightVal);
|
|
125
|
+
case ">=":
|
|
126
|
+
return Number(leftVal) >= Number(rightVal);
|
|
127
|
+
default:
|
|
128
|
+
throw new Error(`Unknown operator: ${op}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
evaluateLogical(expr) {
|
|
132
|
+
// Split by && or ||, respecting parentheses
|
|
133
|
+
const parts = [];
|
|
134
|
+
let depth = 0;
|
|
135
|
+
let current = "";
|
|
136
|
+
let lastOp = null;
|
|
137
|
+
for (const char of expr) {
|
|
138
|
+
if (char === "(")
|
|
139
|
+
depth++;
|
|
140
|
+
else if (char === ")")
|
|
141
|
+
depth--;
|
|
142
|
+
else if (depth === 0 && expr.includes(char === "&" ? "&&" : char === "|" ? "||" : "")) {
|
|
143
|
+
// Check for && or ||
|
|
144
|
+
const remaining = expr.slice(expr.indexOf(char));
|
|
145
|
+
if (remaining.startsWith("&&")) {
|
|
146
|
+
if (current.trim()) {
|
|
147
|
+
parts.push({ expr: current.trim(), op: lastOp });
|
|
148
|
+
current = "";
|
|
149
|
+
}
|
|
150
|
+
lastOp = "&&";
|
|
151
|
+
// skip &&
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
else if (remaining.startsWith("||")) {
|
|
155
|
+
if (current.trim()) {
|
|
156
|
+
parts.push({ expr: current.trim(), op: lastOp });
|
|
157
|
+
current = "";
|
|
158
|
+
}
|
|
159
|
+
lastOp = "||";
|
|
160
|
+
// skip ||
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
current += char;
|
|
165
|
+
}
|
|
166
|
+
if (current.trim())
|
|
167
|
+
parts.push({ expr: current.trim(), op: lastOp });
|
|
168
|
+
// Simple case: single expression
|
|
169
|
+
if (parts.length === 0)
|
|
170
|
+
return !!this.evaluateExpression(expr);
|
|
171
|
+
// Evaluate parts (supports &&, ||, ^ as xor)
|
|
172
|
+
let result = this.evaluateExpression(parts[0].expr);
|
|
173
|
+
for (let i = 1; i < parts.length; i++) {
|
|
174
|
+
const part = parts[i];
|
|
175
|
+
const val = this.evaluateExpression(part.expr);
|
|
176
|
+
if (part.op === "&&") {
|
|
177
|
+
result = result && val;
|
|
178
|
+
}
|
|
179
|
+
else if (part.op === "||") {
|
|
180
|
+
result = result || val;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return !!result;
|
|
184
|
+
}
|
|
185
|
+
resolveValue(expr) {
|
|
186
|
+
// Try enum syntax: EnumName.CaseName or .CaseName
|
|
187
|
+
const enumMatch = expr.match(/^\.?([A-Za-z_][A-Za-z0-9_]*)\.([A-Za-z_][A-Za-z0-9_]*)$/);
|
|
188
|
+
if (enumMatch) {
|
|
189
|
+
const [, enumName, caseName] = enumMatch;
|
|
190
|
+
if (this.enums[enumName] && this.enums[enumName].includes(caseName)) {
|
|
191
|
+
return `${enumName}.${caseName}`; // Store as "EnumName.CaseName" string
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Try shorthand enum: .CaseName (requires context from variables)
|
|
195
|
+
if (expr.startsWith(".") && expr.length > 1) {
|
|
196
|
+
const caseName = expr.slice(1);
|
|
197
|
+
// Try to infer enum from variable types - for now, return as-is and let validation handle it
|
|
198
|
+
return expr;
|
|
199
|
+
}
|
|
200
|
+
// Try as variable first
|
|
201
|
+
const key = expr.startsWith("$") ? expr.slice(1) : expr;
|
|
202
|
+
// Check if this is a smart variable (has stored expression)
|
|
203
|
+
if (Object.prototype.hasOwnProperty.call(this.smartVariables, key)) {
|
|
204
|
+
// Re-evaluate the expression each time it's accessed
|
|
205
|
+
return this.evaluateExpression(this.smartVariables[key]);
|
|
206
|
+
}
|
|
207
|
+
if (Object.prototype.hasOwnProperty.call(this.variables, key)) {
|
|
208
|
+
return this.variables[key];
|
|
209
|
+
}
|
|
210
|
+
// Try as number
|
|
211
|
+
const num = Number(expr);
|
|
212
|
+
if (!isNaN(num) && expr.trim() === String(num)) {
|
|
213
|
+
return num;
|
|
214
|
+
}
|
|
215
|
+
// Try as boolean
|
|
216
|
+
if (expr === "true")
|
|
217
|
+
return true;
|
|
218
|
+
if (expr === "false")
|
|
219
|
+
return false;
|
|
220
|
+
// Try as string (quoted)
|
|
221
|
+
if ((expr.startsWith('"') && expr.endsWith('"')) || (expr.startsWith("'") && expr.endsWith("'"))) {
|
|
222
|
+
return expr.slice(1, -1);
|
|
223
|
+
}
|
|
224
|
+
// Default: treat as variable (may be undefined)
|
|
225
|
+
return this.variables[key];
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Resolve shorthand enum (.CaseName) when setting a variable with known enum type
|
|
229
|
+
*/
|
|
230
|
+
resolveEnumValue(expr, enumName) {
|
|
231
|
+
if (expr.startsWith(".") && enumName) {
|
|
232
|
+
const caseName = expr.slice(1);
|
|
233
|
+
if (this.enums[enumName] && this.enums[enumName].includes(caseName)) {
|
|
234
|
+
return `${enumName}.${caseName}`;
|
|
235
|
+
}
|
|
236
|
+
throw new Error(`Invalid enum case ${caseName} for enum ${enumName}`);
|
|
237
|
+
}
|
|
238
|
+
// Check if it's already EnumName.CaseName format
|
|
239
|
+
const match = expr.match(/^([A-Za-z_][A-Za-z0-9_]*)\.([A-Za-z_][A-Za-z0-9_]*)$/);
|
|
240
|
+
if (match) {
|
|
241
|
+
const [, name, caseName] = match;
|
|
242
|
+
if (this.enums[name] && this.enums[name].includes(caseName)) {
|
|
243
|
+
return expr;
|
|
244
|
+
}
|
|
245
|
+
throw new Error(`Invalid enum case ${caseName} for enum ${name}`);
|
|
246
|
+
}
|
|
247
|
+
return expr;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get enum type for a variable (if it was declared with enum type)
|
|
251
|
+
*/
|
|
252
|
+
getEnumTypeForVariable(varName) {
|
|
253
|
+
// Check if variable value matches EnumName.CaseName pattern
|
|
254
|
+
const key = varName.startsWith("$") ? varName.slice(1) : varName;
|
|
255
|
+
const value = this.variables[key];
|
|
256
|
+
if (typeof value === "string") {
|
|
257
|
+
const match = value.match(/^([A-Za-z_][A-Za-z0-9_]*)\./);
|
|
258
|
+
if (match) {
|
|
259
|
+
return match[1];
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return undefined;
|
|
263
|
+
}
|
|
264
|
+
deepEquals(a, b) {
|
|
265
|
+
if (a === b)
|
|
266
|
+
return true;
|
|
267
|
+
if (a == null || b == null)
|
|
268
|
+
return a === b;
|
|
269
|
+
if (typeof a !== typeof b)
|
|
270
|
+
return false;
|
|
271
|
+
if (typeof a === "object") {
|
|
272
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
273
|
+
}
|
|
274
|
+
return false;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Update variables. Can be used to mutate state during dialogue.
|
|
278
|
+
*/
|
|
279
|
+
setVariable(name, value) {
|
|
280
|
+
// If setting a smart variable, remove it (converting to regular variable)
|
|
281
|
+
if (Object.prototype.hasOwnProperty.call(this.smartVariables, name)) {
|
|
282
|
+
delete this.smartVariables[name];
|
|
283
|
+
}
|
|
284
|
+
this.variables[name] = value;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Register a smart variable (variable with expression that recalculates on access).
|
|
288
|
+
*/
|
|
289
|
+
setSmartVariable(name, expression) {
|
|
290
|
+
// Remove from regular variables if it exists
|
|
291
|
+
if (Object.prototype.hasOwnProperty.call(this.variables, name)) {
|
|
292
|
+
delete this.variables[name];
|
|
293
|
+
}
|
|
294
|
+
this.smartVariables[name] = expression;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Check if a variable is a smart variable.
|
|
298
|
+
*/
|
|
299
|
+
isSmartVariable(name) {
|
|
300
|
+
return Object.prototype.hasOwnProperty.call(this.smartVariables, name);
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get variable value.
|
|
304
|
+
*/
|
|
305
|
+
getVariable(name) {
|
|
306
|
+
return this.variables[name];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/runtime/evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type TextResult = {
|
|
2
|
+
type: "text";
|
|
3
|
+
text: string;
|
|
4
|
+
speaker?: string;
|
|
5
|
+
tags?: string[];
|
|
6
|
+
isDialogueEnd: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type OptionsResult = {
|
|
9
|
+
type: "options";
|
|
10
|
+
options: {
|
|
11
|
+
text: string;
|
|
12
|
+
tags?: string[];
|
|
13
|
+
css?: string;
|
|
14
|
+
}[];
|
|
15
|
+
isDialogueEnd: boolean;
|
|
16
|
+
};
|
|
17
|
+
export type CommandResult = {
|
|
18
|
+
type: "command";
|
|
19
|
+
command: string;
|
|
20
|
+
isDialogueEnd: boolean;
|
|
21
|
+
};
|
|
22
|
+
export type RuntimeResult = TextResult | OptionsResult | CommandResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/runtime/results.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { IRProgram } from "../compile/ir";
|
|
2
|
+
import type { RuntimeResult } from "./results.js";
|
|
3
|
+
import { CommandHandler, parseCommand } from "./commands.js";
|
|
4
|
+
export interface RunnerOptions {
|
|
5
|
+
startAt: string;
|
|
6
|
+
variables?: Record<string, unknown>;
|
|
7
|
+
functions?: Record<string, (...args: unknown[]) => unknown>;
|
|
8
|
+
handleCommand?: (command: string, parsed?: ReturnType<typeof parseCommand>) => void;
|
|
9
|
+
commandHandler?: CommandHandler;
|
|
10
|
+
}
|
|
11
|
+
export declare class YarnRunner {
|
|
12
|
+
private readonly program;
|
|
13
|
+
private readonly variables;
|
|
14
|
+
private readonly functions;
|
|
15
|
+
private readonly handleCommand?;
|
|
16
|
+
private readonly commandHandler;
|
|
17
|
+
private readonly evaluator;
|
|
18
|
+
private readonly onceSeen;
|
|
19
|
+
private readonly nodeGroupOnceSeen;
|
|
20
|
+
private readonly visitCounts;
|
|
21
|
+
private nodeTitle;
|
|
22
|
+
private ip;
|
|
23
|
+
private currentNodeIndex;
|
|
24
|
+
private callStack;
|
|
25
|
+
currentResult: RuntimeResult | null;
|
|
26
|
+
history: RuntimeResult[];
|
|
27
|
+
constructor(program: IRProgram, opts: RunnerOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Get the current node title (may resolve to a node group).
|
|
30
|
+
*/
|
|
31
|
+
getCurrentNodeTitle(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Resolve a node title to an actual node (handling node groups).
|
|
34
|
+
*/
|
|
35
|
+
private resolveNode;
|
|
36
|
+
/**
|
|
37
|
+
* Evaluate when conditions for a node in a group.
|
|
38
|
+
*/
|
|
39
|
+
private evaluateWhenConditions;
|
|
40
|
+
/**
|
|
41
|
+
* Mark a node group node as seen (for "once" condition).
|
|
42
|
+
*/
|
|
43
|
+
private markNodeGroupOnceSeen;
|
|
44
|
+
advance(optionIndex?: number): void;
|
|
45
|
+
private interpolate;
|
|
46
|
+
private resumeBlock;
|
|
47
|
+
private step;
|
|
48
|
+
private executeBlock;
|
|
49
|
+
private lookaheadIsEnd;
|
|
50
|
+
private emit;
|
|
51
|
+
/**
|
|
52
|
+
* Get the current variable store (read-only view).
|
|
53
|
+
*/
|
|
54
|
+
getVariables(): Readonly<Record<string, unknown>>;
|
|
55
|
+
/**
|
|
56
|
+
* Get variable value.
|
|
57
|
+
*/
|
|
58
|
+
getVariable(name: string): unknown;
|
|
59
|
+
/**
|
|
60
|
+
* Set variable value.
|
|
61
|
+
*/
|
|
62
|
+
setVariable(name: string, value: unknown): void;
|
|
63
|
+
}
|