questmark 0.0.37 → 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/.github/workflows/docs.yml +56 -0
- package/bin/questmark +1 -1
- package/dist/browser/bundle.js +15575 -18661
- package/dist/node/QuestVM.d.ts +1 -2
- package/dist/node/QuestVM.js +81 -83
- package/dist/node/QuestVM.js.map +1 -1
- package/dist/node/cli.js +32 -48
- package/dist/node/cli.js.map +1 -1
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +2 -14
- package/dist/node/index.js.map +1 -1
- package/dist/node/parseMarkdown.d.ts +18 -7
- package/dist/node/parseMarkdown.js +81 -77
- package/dist/node/parseMarkdown.js.map +1 -1
- package/docs/explanation/how-questmark-works.md +123 -0
- package/docs/explanation/why-questmark.md +72 -0
- package/docs/how-to/compile-to-bytecode.md +62 -0
- package/docs/how-to/play-a-document.md +57 -0
- package/docs/how-to/use-the-library.md +98 -0
- package/docs/index.md +61 -0
- package/docs/reference/api.md +135 -0
- package/docs/reference/cli.md +66 -0
- package/docs/reference/language.md +213 -0
- package/docs/tutorials/first-conversation.md +219 -0
- package/package.json +30 -33
- package/readme.md +55 -80
- package/tsconfig.json +7 -3
- package/tsconfig.webpack.json +0 -2
- package/{webpack.config.js → webpack.config.cjs} +4 -10
package/dist/node/QuestVM.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import { EventEmitter } from "events";
|
|
3
2
|
import { Functions } from "tzo";
|
|
4
3
|
import { VM } from "tzo";
|
|
@@ -8,6 +7,6 @@ export interface Choice {
|
|
|
8
7
|
}
|
|
9
8
|
export declare class QuestVM extends VM {
|
|
10
9
|
responses: any[];
|
|
11
|
-
eventBus: EventEmitter
|
|
10
|
+
eventBus: EventEmitter<any>;
|
|
12
11
|
constructor(emitFunction: (body: string | number) => void, getResponseFunction: (choices: Choice[]) => Promise<number>, additionalFunctions?: Functions);
|
|
13
12
|
}
|
package/dist/node/QuestVM.js
CHANGED
|
@@ -1,89 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class QuestVM extends tzo_1.VM {
|
|
1
|
+
import { EventEmitter } from "events";
|
|
2
|
+
import { VM, getStackParams } from "tzo";
|
|
3
|
+
export class QuestVM extends VM {
|
|
4
|
+
responses = [];
|
|
5
|
+
eventBus = new EventEmitter();
|
|
7
6
|
constructor(emitFunction, getResponseFunction, additionalFunctions) {
|
|
8
|
-
super({},
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
vm
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
this.responses.
|
|
26
|
-
|
|
27
|
-
getResponseFunction(sChoices).then(choiceID => {
|
|
28
|
-
const choice = choices.find(c => c.id === choiceID);
|
|
29
|
-
if (choice === undefined) {
|
|
30
|
-
throw new Error(`Unknown choice ID: ${choiceID}!`);
|
|
7
|
+
super({}, {
|
|
8
|
+
...(additionalFunctions || {}), ...{
|
|
9
|
+
"emit": (stack) => {
|
|
10
|
+
const [str1] = getStackParams("emit", ["string | number"], stack);
|
|
11
|
+
this.eventBus.emit('emit', str1);
|
|
12
|
+
emitFunction(str1);
|
|
13
|
+
},
|
|
14
|
+
"response": (stack, context, vm) => {
|
|
15
|
+
const [num1, str1] = getStackParams("response", ["number", "string"], stack);
|
|
16
|
+
const response = { response: str1, pc: num1 };
|
|
17
|
+
this.eventBus.emit('response', response);
|
|
18
|
+
this.responses.push(response);
|
|
19
|
+
},
|
|
20
|
+
"getResponse": (stack, context, vm) => {
|
|
21
|
+
vm.suspend();
|
|
22
|
+
const choices = this.responses.map((resp, index) => { return { title: resp.response, programCounter: resp.pc, id: index }; });
|
|
23
|
+
const sChoices = choices.map(c => ({ title: c.title, id: c.id }));
|
|
24
|
+
while (this.responses.length > 0) { // clear responses, so that current responses won't appear again next time
|
|
25
|
+
this.responses.pop();
|
|
31
26
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
27
|
+
getResponseFunction(sChoices).then(choiceID => {
|
|
28
|
+
const choice = choices.find(c => c.id === choiceID);
|
|
29
|
+
if (choice === undefined) {
|
|
30
|
+
throw new Error(`Unknown choice ID: ${choiceID}!`);
|
|
31
|
+
}
|
|
32
|
+
vm.stack.push(choice.programCounter);
|
|
33
|
+
vm.run();
|
|
34
|
+
}).catch(e => {
|
|
35
|
+
this.eventBus.emit('error', e);
|
|
36
|
+
this.quit();
|
|
37
|
+
});
|
|
38
|
+
},
|
|
39
|
+
"optionEnabled": (stack, context, vm) => {
|
|
40
|
+
// DEPRECATED - do not use!
|
|
41
|
+
console.warn("optionEnabled opcode is deprecated! - do not use!");
|
|
42
|
+
const [str1] = getStackParams("optionEnabled", ["string"], stack);
|
|
43
|
+
const optstr = `optionEnabled_${str1}`;
|
|
44
|
+
let retval = null;
|
|
45
|
+
if (vm.context[optstr] === undefined) {
|
|
46
|
+
vm.context[optstr] = 1;
|
|
47
|
+
retval = 1;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
retval = vm.context[optstr];
|
|
51
|
+
}
|
|
52
|
+
stack.push(retval);
|
|
53
|
+
},
|
|
54
|
+
"optionDisabled": (stack, context, vm) => {
|
|
55
|
+
// DEPRECATED - do not use!
|
|
56
|
+
console.warn("optionDisabled opcode is deprecated! - do not use!");
|
|
57
|
+
const [str1] = getStackParams("optionDisabled", ["string"], stack);
|
|
58
|
+
const optstr = `optionEnabled_${str1}`;
|
|
59
|
+
let retval = null;
|
|
60
|
+
if (vm.context[optstr] === undefined) {
|
|
61
|
+
vm.context[optstr] = 1;
|
|
62
|
+
retval = 0;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
retval = vm.context[optstr] === 1 ? 0 : 1;
|
|
66
|
+
}
|
|
67
|
+
stack.push(retval);
|
|
68
|
+
},
|
|
69
|
+
"disableOption": (stack, context, vm) => {
|
|
70
|
+
// DEPRECATED - do not use!
|
|
71
|
+
console.warn("disableOption opcode is deprecated! - do not use!");
|
|
72
|
+
const [str1] = getStackParams("disableOption", ["string"], stack);
|
|
73
|
+
const optstr = `optionEnabled_${str1}`;
|
|
74
|
+
vm.context[optstr] = 0;
|
|
75
|
+
},
|
|
76
|
+
"enableOption": (stack, context, vm) => {
|
|
77
|
+
// DEPRECATED - do not use!
|
|
78
|
+
console.warn("enableOption opcode is deprecated! - do not use!");
|
|
79
|
+
const [str1] = getStackParams("enableOption", ["string"], stack);
|
|
80
|
+
const optstr = `optionEnabled_${str1}`;
|
|
61
81
|
vm.context[optstr] = 1;
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
retval = vm.context[optstr] === 1 ? 0 : 1;
|
|
66
|
-
}
|
|
67
|
-
stack.push(retval);
|
|
68
|
-
},
|
|
69
|
-
"disableOption": (stack, context, vm) => {
|
|
70
|
-
// DEPRECATED - do not use!
|
|
71
|
-
console.warn("disableOption opcode is deprecated! - do not use!");
|
|
72
|
-
const [str1] = tzo_1.getStackParams("disableOption", ["string"], stack);
|
|
73
|
-
const optstr = `optionEnabled_${str1}`;
|
|
74
|
-
vm.context[optstr] = 0;
|
|
75
|
-
},
|
|
76
|
-
"enableOption": (stack, context, vm) => {
|
|
77
|
-
// DEPRECATED - do not use!
|
|
78
|
-
console.warn("enableOption opcode is deprecated! - do not use!");
|
|
79
|
-
const [str1] = tzo_1.getStackParams("enableOption", ["string"], stack);
|
|
80
|
-
const optstr = `optionEnabled_${str1}`;
|
|
81
|
-
vm.context[optstr] = 1;
|
|
82
|
-
},
|
|
83
|
-
}));
|
|
84
|
-
this.responses = [];
|
|
85
|
-
this.eventBus = new events_1.EventEmitter();
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
});
|
|
86
85
|
}
|
|
87
86
|
}
|
|
88
|
-
exports.QuestVM = QuestVM;
|
|
89
87
|
//# sourceMappingURL=QuestVM.js.map
|
package/dist/node/QuestVM.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestVM.js","sourceRoot":"","sources":["../../src/QuestVM.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QuestVM.js","sourceRoot":"","sources":["../../src/QuestVM.ts"],"names":[],"mappings":"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"}
|
package/dist/node/cli.js
CHANGED
|
@@ -1,57 +1,41 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
8
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
9
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
10
|
-
});
|
|
11
|
-
};
|
|
12
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
-
};
|
|
15
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
const fs_1 = __importDefault(require("fs"));
|
|
17
|
-
const commander_1 = __importDefault(require("commander"));
|
|
18
|
-
const parseMarkdown_1 = require("./parseMarkdown");
|
|
19
|
-
const QuestVM_1 = require("./QuestVM");
|
|
20
|
-
const inquirer_1 = __importDefault(require("inquirer"));
|
|
21
|
-
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
22
|
-
commander_1.default
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import { program } from "commander";
|
|
4
|
+
import { parseMarkdown } from "./parseMarkdown.js";
|
|
5
|
+
import { QuestVM } from "./QuestVM.js";
|
|
6
|
+
program
|
|
23
7
|
.version('0.0.37')
|
|
24
8
|
.option('-c, --clear', 'Clear console on each state')
|
|
25
9
|
.option('--input <path>', "Load source .md or .json file from path. Path can be either from local filesystem, or via HTTP(S) URL")
|
|
26
10
|
.option('--output <path>', "Emit VMState .json file")
|
|
27
11
|
.option('--no-run', "Do not actually load and run the VM; just parse input and (optionally) emit output")
|
|
28
12
|
.parse(process.argv);
|
|
29
|
-
|
|
13
|
+
const options = program.opts();
|
|
14
|
+
if (!options.input) {
|
|
30
15
|
console.log("Missing input! Please specify an input file via --input");
|
|
31
16
|
process.exit(1);
|
|
32
17
|
}
|
|
33
|
-
function load() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return input_file;
|
|
45
|
-
});
|
|
18
|
+
async function load() {
|
|
19
|
+
let input_file;
|
|
20
|
+
if (options.input.startsWith("http://") || options.input.startsWith("https://")) {
|
|
21
|
+
const res = await fetch(options.input);
|
|
22
|
+
input_file = await res.text();
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
const input_file_buf = await fs.promises.readFile(options.input);
|
|
26
|
+
input_file = input_file_buf.toString();
|
|
27
|
+
}
|
|
28
|
+
return input_file;
|
|
46
29
|
}
|
|
47
|
-
(() =>
|
|
48
|
-
const input_file =
|
|
49
|
-
const vm = new
|
|
30
|
+
(async () => {
|
|
31
|
+
const input_file = await load();
|
|
32
|
+
const vm = new QuestVM(body => {
|
|
50
33
|
process.stdout.write(`${body}`);
|
|
51
|
-
}, (choices) => {
|
|
34
|
+
}, async (choices) => {
|
|
52
35
|
process.stdout.write("\n"); // add newline to make inquirer not overwrie any previously emitted text
|
|
53
|
-
|
|
54
|
-
|
|
36
|
+
const inquirer = (await import("inquirer")).default;
|
|
37
|
+
return inquirer.prompt([{
|
|
38
|
+
type: "select",
|
|
55
39
|
name: "selectedChoice",
|
|
56
40
|
message: " ",
|
|
57
41
|
choices: choices.map(c => ({ name: c.title, value: c.id }))
|
|
@@ -60,21 +44,21 @@ function load() {
|
|
|
60
44
|
});
|
|
61
45
|
}, {});
|
|
62
46
|
let vmState = undefined;
|
|
63
|
-
if (
|
|
47
|
+
if (options.input.endsWith(".json")) {
|
|
64
48
|
vmState = JSON.parse(input_file);
|
|
65
49
|
}
|
|
66
|
-
else if (
|
|
67
|
-
vmState =
|
|
50
|
+
else if (options.input.endsWith(".qmd") || options.input.endsWith(".qmd.html") || options.input.endsWith(".md") || options.input.endsWith(".md.html")) {
|
|
51
|
+
vmState = parseMarkdown(input_file).qvmState;
|
|
68
52
|
}
|
|
69
53
|
else {
|
|
70
54
|
throw new Error("Program input file needs to have .json or .qmd / .qmd.html / .md / .md.html extension!");
|
|
71
55
|
}
|
|
72
|
-
if (
|
|
73
|
-
|
|
56
|
+
if (options.output) {
|
|
57
|
+
fs.writeFileSync(options.output, JSON.stringify(vmState, null, 2));
|
|
74
58
|
}
|
|
75
|
-
if (
|
|
59
|
+
if (options.run) {
|
|
76
60
|
vm.loadVMState(vmState);
|
|
77
61
|
vm.run();
|
|
78
62
|
}
|
|
79
|
-
})
|
|
63
|
+
})();
|
|
80
64
|
//# sourceMappingURL=cli.js.map
|
package/dist/node/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/node/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./QuestVM";
|
|
2
|
-
export * from "./parseMarkdown";
|
|
1
|
+
export * from "./QuestVM.js";
|
|
2
|
+
export * from "./parseMarkdown.js";
|
package/dist/node/index.js
CHANGED
|
@@ -1,15 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
-
};
|
|
12
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
__exportStar(require("./QuestVM"), exports);
|
|
14
|
-
__exportStar(require("./parseMarkdown"), exports);
|
|
1
|
+
export * from "./QuestVM.js";
|
|
2
|
+
export * from "./parseMarkdown.js";
|
|
15
3
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,9 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Node as UnistNode } from "unist";
|
|
2
|
+
type Node = UnistNode & {
|
|
3
|
+
value?: string;
|
|
4
|
+
url?: string;
|
|
5
|
+
lang?: string;
|
|
6
|
+
name?: string;
|
|
7
|
+
ordered?: boolean;
|
|
8
|
+
options?: {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
children?: Node[];
|
|
12
|
+
};
|
|
3
13
|
import 'array-flat-polyfill';
|
|
4
14
|
import { TzoVMState } from "tzo";
|
|
5
|
-
export
|
|
6
|
-
export
|
|
15
|
+
export type Directive = string;
|
|
16
|
+
export type OptionNode = Node & {
|
|
7
17
|
type: "option";
|
|
8
18
|
directives: null | Directive[];
|
|
9
19
|
preconditionChildren: null | Node[];
|
|
@@ -11,15 +21,16 @@ export declare type OptionNode = Node & {
|
|
|
11
21
|
text: null | string;
|
|
12
22
|
link: null | string;
|
|
13
23
|
};
|
|
14
|
-
export
|
|
24
|
+
export type QuestMarkVMState = Node & TzoVMState;
|
|
15
25
|
export declare enum NoLinkBehaviour {
|
|
16
|
-
EXIT = 0
|
|
26
|
+
EXIT = 0,// Exit the quest if no link is found for an option. NOT RECOMMENDED - Prefer using explicit exits instead by calling the `exit` instruction!
|
|
17
27
|
LOOPBACK_TO_OPTIONS = 1
|
|
18
28
|
}
|
|
19
29
|
export declare function parseMarkdown(file_contents: string): {
|
|
20
|
-
parsedMDFile:
|
|
30
|
+
parsedMDFile: undefined;
|
|
21
31
|
qvmState: {
|
|
22
32
|
type: "questmarkVMState";
|
|
23
33
|
children: any[];
|
|
24
34
|
} & TzoVMState;
|
|
25
35
|
};
|
|
36
|
+
export {};
|