yarn-spinner-runner-ts
Version:
TypeScript parser, compiler, and runtime for Yarn Spinner 3.x with React adapter [NPM package](https://www.npmjs.com/package/yarn-spinner-runner-ts)
43 lines (36 loc) • 1.14 kB
text/typescript
import { test } from "node:test";
import { ok, strictEqual } from "node:assert";
import { parseYarn, compile, YarnRunner } from "../index.js";
test("onStoryEnd receives variables snapshot", () => {
const script = `
title: Start
---
Narrator: Beginning
<<set $score = 42>>
Narrator: Done
===
`;
let payload: { variables: Readonly<Record<string, unknown>>; storyEnd: true } | undefined;
const doc = parseYarn(script);
const ir = compile(doc);
const runner = new YarnRunner(ir, {
startAt: "Start",
onStoryEnd: (info) => {
payload = info;
},
});
let result = runner.currentResult;
ok(result && result.type === "text");
runner.advance();
result = runner.currentResult;
ok(result && result.type === "command");
runner.advance();
result = runner.currentResult;
ok(result && result.type === "text");
runner.advance();
result = runner.currentResult;
ok(result && result.isDialogueEnd === true);
strictEqual(payload?.storyEnd, true);
const variables = payload?.variables ?? {};
strictEqual((variables as Record<string, unknown>)["score"], 42);
});