@jsprismarine/mcfunction 0.0.0 → 0.16.0-unstable-20261029134110
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/CHANGELOG.md +48 -0
- package/LICENSE +373 -0
- package/README.md +182 -0
- package/dist/compile.cjs.cjs +166 -0
- package/dist/compile.d.ts +91 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.es.js +162 -0
- package/dist/diagnostics.cjs.cjs +19 -0
- package/dist/diagnostics.d.ts +62 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.es.js +17 -0
- package/dist/executor.cjs.cjs +302 -0
- package/dist/executor.d.ts +140 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.es.js +298 -0
- package/dist/identifiers.cjs.cjs +79 -0
- package/dist/identifiers.d.ts +44 -0
- package/dist/identifiers.d.ts.map +1 -0
- package/dist/identifiers.es.js +72 -0
- package/dist/index.cjs.cjs +36 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.es.js +10 -0
- package/dist/macro.cjs.cjs +119 -0
- package/dist/macro.d.ts +59 -0
- package/dist/macro.d.ts.map +1 -0
- package/dist/macro.es.js +115 -0
- package/dist/parse.cjs.cjs +107 -0
- package/dist/parse.d.ts +40 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.es.js +104 -0
- package/dist/registry.cjs.cjs +135 -0
- package/dist/registry.d.ts +53 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.es.js +132 -0
- package/dist/runner.cjs.cjs +42 -0
- package/dist/runner.d.ts +83 -0
- package/dist/runner.d.ts.map +1 -0
- package/dist/runner.es.js +40 -0
- package/dist/tags.cjs.cjs +113 -0
- package/dist/tags.d.ts +70 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.es.js +108 -0
- package/package.json +61 -5
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const require_identifiers = require("./identifiers.cjs.cjs");
|
|
4
|
+
const require_tags = require("./tags.cjs.cjs");
|
|
5
|
+
const require_compile = require("./compile.cjs.cjs");
|
|
6
|
+
const require_diagnostics = require("./diagnostics.cjs.cjs");
|
|
7
|
+
// src/registry.ts
|
|
8
|
+
/** The functions a pack stack loaded, keyed by namespaced id. */
|
|
9
|
+
var FunctionRegistry = class {
|
|
10
|
+
functions = /* @__PURE__ */ new Map();
|
|
11
|
+
/** Registers a function, replacing whatever an earlier pack registered under the same id. */
|
|
12
|
+
add(compiled, pack) {
|
|
13
|
+
this.functions.set(compiled.id, {
|
|
14
|
+
compiled,
|
|
15
|
+
pack
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/** Returns the winning function for an id. */
|
|
19
|
+
get(id) {
|
|
20
|
+
return this.functions.get(id)?.compiled;
|
|
21
|
+
}
|
|
22
|
+
/** Whether any pack registered the id. */
|
|
23
|
+
has(id) {
|
|
24
|
+
return this.functions.has(id);
|
|
25
|
+
}
|
|
26
|
+
/** The name of the pack whose file won the id. */
|
|
27
|
+
packOf(id) {
|
|
28
|
+
return this.functions.get(id)?.pack;
|
|
29
|
+
}
|
|
30
|
+
/** Every registered id, in registration order. */
|
|
31
|
+
ids() {
|
|
32
|
+
return [...this.functions.keys()];
|
|
33
|
+
}
|
|
34
|
+
/** How many functions are registered. */
|
|
35
|
+
get size() {
|
|
36
|
+
return this.functions.size;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var decoder = new TextDecoder("utf-8", { fatal: true });
|
|
40
|
+
/** Decodes a file, or reports that it is not text. */
|
|
41
|
+
var decode = (file, pack, path, collector) => {
|
|
42
|
+
if (typeof file === "string") return file;
|
|
43
|
+
try {
|
|
44
|
+
return decoder.decode(file);
|
|
45
|
+
} catch {
|
|
46
|
+
collector.add({
|
|
47
|
+
severity: "error",
|
|
48
|
+
code: "load.invalid-file",
|
|
49
|
+
pack,
|
|
50
|
+
message: `${path} is not valid UTF-8`
|
|
51
|
+
});
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
/** Reads a function tag file, which is a JSON object with `values` and an optional `replace`. */
|
|
56
|
+
var readTagFile = (text, pack, path, collector) => {
|
|
57
|
+
const report = (message) => {
|
|
58
|
+
collector.add({
|
|
59
|
+
severity: "error",
|
|
60
|
+
code: "load.invalid-file",
|
|
61
|
+
pack,
|
|
62
|
+
message: `${path}: ${message}`
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
let parsed;
|
|
66
|
+
try {
|
|
67
|
+
parsed = JSON.parse(text);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return report(error instanceof Error ? error.message : String(error));
|
|
70
|
+
}
|
|
71
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return report("a tag file must be a JSON object");
|
|
72
|
+
if (!("values" in parsed) || !Array.isArray(parsed.values)) return report("the tag file has no values array");
|
|
73
|
+
const values = [];
|
|
74
|
+
for (const entry of parsed.values) {
|
|
75
|
+
if (typeof entry === "string") {
|
|
76
|
+
values.push(entry);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (typeof entry === "object" && entry !== null && "id" in entry && typeof entry.id === "string") {
|
|
80
|
+
const required = "required" in entry && typeof entry.required === "boolean" ? entry.required : void 0;
|
|
81
|
+
values.push(required === void 0 ? { id: entry.id } : {
|
|
82
|
+
id: entry.id,
|
|
83
|
+
required
|
|
84
|
+
});
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
return report("a tag entry must be an id or an object with an id");
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
values,
|
|
91
|
+
replace: "replace" in parsed && parsed.replace === true
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Loads every function and function tag a pack stack declares.
|
|
96
|
+
*
|
|
97
|
+
* Packs apply in order. A function id a later pack also declares is replaced
|
|
98
|
+
* whole; a tag a later pack also declares is merged, unless that pack sets
|
|
99
|
+
* `replace`. A file that does not compile is reported and left out, so one
|
|
100
|
+
* broken function does not stop the rest of the stack from loading.
|
|
101
|
+
*/
|
|
102
|
+
var loadFunctions = (packs) => {
|
|
103
|
+
const functions = new FunctionRegistry();
|
|
104
|
+
const tags = new require_tags.FunctionTagRegistry();
|
|
105
|
+
const collector = new require_diagnostics.DiagnosticCollector();
|
|
106
|
+
for (const pack of packs) for (const [path, file] of pack.files) {
|
|
107
|
+
const functionId = require_identifiers.functionIdForPath(path);
|
|
108
|
+
if (functionId !== void 0) {
|
|
109
|
+
const text = decode(file, pack.name, path, collector);
|
|
110
|
+
if (text === void 0) continue;
|
|
111
|
+
const compiled = require_compile.compileFunction(functionId, text);
|
|
112
|
+
for (const diagnostic of compiled.diagnostics) collector.add({
|
|
113
|
+
...diagnostic,
|
|
114
|
+
pack: pack.name
|
|
115
|
+
});
|
|
116
|
+
if (compiled.function) functions.add(compiled.function, pack.name);
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const tagId = require_identifiers.functionTagIdForPath(path);
|
|
120
|
+
if (tagId === void 0) continue;
|
|
121
|
+
const text = decode(file, pack.name, path, collector);
|
|
122
|
+
if (text === void 0) continue;
|
|
123
|
+
const tag = readTagFile(text, pack.name, path, collector);
|
|
124
|
+
if (tag) tags.add(tagId, tag);
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
functions,
|
|
128
|
+
tags,
|
|
129
|
+
diagnostics: collector.diagnostics
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
exports.FunctionRegistry = FunctionRegistry;
|
|
133
|
+
exports.loadFunctions = loadFunctions;
|
|
134
|
+
|
|
135
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuY2pzLmNqcyIsIm5hbWVzIjpbIkZ1bmN0aW9uVGFnUmVnaXN0cnkiLCJEaWFnbm9zdGljQ29sbGVjdG9yIiwiZnVuY3Rpb25JZEZvclBhdGgiLCJjb21waWxlRnVuY3Rpb24iLCJmdW5jdGlvblRhZ0lkRm9yUGF0aCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWdpc3RyeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIExvYWRpbmcgZnVuY3Rpb25zIGFuZCBmdW5jdGlvbiB0YWdzIGZyb20gYSBzdGFjayBvZiBwYWNrcy4gVGhlIHN0YWNrXG4gKiBjb21wb3NlcyB0aGUgd2F5IHRoZSByZXN0IG9mIHRoaXMgcmVwb3NpdG9yeSBjb21wb3NlcyBwYWNrczogYSBsYXRlciBwYWNrXG4gKiByZXBsYWNlcyBhbiBlYXJsaWVyIG9uZSBieSBpZGVudGlmaWVyLiBUYWdzIGFyZSB0aGUgZXhjZXB0aW9uLCBiZWNhdXNlIGEgdGFnXG4gKiBtZXJnZXMgYWNyb3NzIHBhY2tzIHVubGVzcyBpdCBzYXlzIGByZXBsYWNlYCwgd2hpY2ggaXMgd2hhdCBsZXRzIHR3byBwYWNrc1xuICogYm90aCBhZGQgdG8gYG1pbmVjcmFmdDp0aWNrYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkRnVuY3Rpb24gfSBmcm9tICcuL2NvbXBpbGUnO1xuaW1wb3J0IHsgY29tcGlsZUZ1bmN0aW9uIH0gZnJvbSAnLi9jb21waWxlJztcbmltcG9ydCB0eXBlIHsgRGlhZ25vc3RpYyB9IGZyb20gJy4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHsgRGlhZ25vc3RpY0NvbGxlY3RvciB9IGZyb20gJy4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHR5cGUgeyBGdW5jdGlvbkxvb2t1cCB9IGZyb20gJy4vZXhlY3V0b3InO1xuaW1wb3J0IHsgZnVuY3Rpb25JZEZvclBhdGgsIGZ1bmN0aW9uVGFnSWRGb3JQYXRoIH0gZnJvbSAnLi9pZGVudGlmaWVycyc7XG5pbXBvcnQgdHlwZSB7IEZ1bmN0aW9uVGFnLCBGdW5jdGlvblRhZ0VudHJ5IH0gZnJvbSAnLi90YWdzJztcbmltcG9ydCB7IEZ1bmN0aW9uVGFnUmVnaXN0cnkgfSBmcm9tICcuL3RhZ3MnO1xuXG4vKipcbiAqIE9uZSBwYWNrJ3MgZmlsZXMsIGtleWVkIGJ5IHBhY2stcmVsYXRpdmUgcGF0aC4gQW55IHBhY2sgcmVhZGVyIGNhbiBzdXBwbHlcbiAqIHRoaXM6IGBAanNwcmlzbWFyaW5lL3BhY2tzYCByb3V0ZXMgdGhlIEpTT04gaGFsZiBvZiBhIGRhdGFwYWNrLCBhbmQgdGhlXG4gKiBgLm1jZnVuY3Rpb25gIGZpbGVzIGl0IGRvZXMgbm90IGNvbnN1bWUgY29tZSB0aHJvdWdoIGhlcmUgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uUGFjayB7XG4gICAgLyoqIFRoZSBwYWNrJ3MgbmFtZSwgdXNlZCB0byBhdHRyaWJ1dGUgZGlhZ25vc3RpY3MgYW5kIHRvIHNheSB3aGljaCBwYWNrIHdvbi4gKi9cbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZmlsZXM6IFJlYWRvbmx5TWFwPHN0cmluZywgc3RyaW5nIHwgVWludDhBcnJheT47XG59XG5cbi8qKiBUaGUgZnVuY3Rpb25zIGEgcGFjayBzdGFjayBsb2FkZWQsIGtleWVkIGJ5IG5hbWVzcGFjZWQgaWQuICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25SZWdpc3RyeSBpbXBsZW1lbnRzIEZ1bmN0aW9uTG9va3VwIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZ1bmN0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCB7IGNvbXBpbGVkOiBDb21waWxlZEZ1bmN0aW9uOyBwYWNrOiBzdHJpbmcgfT4oKTtcblxuICAgIC8qKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiwgcmVwbGFjaW5nIHdoYXRldmVyIGFuIGVhcmxpZXIgcGFjayByZWdpc3RlcmVkIHVuZGVyIHRoZSBzYW1lIGlkLiAqL1xuICAgIHB1YmxpYyBhZGQoY29tcGlsZWQ6IENvbXBpbGVkRnVuY3Rpb24sIHBhY2s6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmZ1bmN0aW9ucy5zZXQoY29tcGlsZWQuaWQsIHsgY29tcGlsZWQsIHBhY2sgfSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgdGhlIHdpbm5pbmcgZnVuY3Rpb24gZm9yIGFuIGlkLiAqL1xuICAgIHB1YmxpYyBnZXQoaWQ6IHN0cmluZyk6IENvbXBpbGVkRnVuY3Rpb24gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnMuZ2V0KGlkKT8uY29tcGlsZWQ7XG4gICAgfVxuXG4gICAgLyoqIFdoZXRoZXIgYW55IHBhY2sgcmVnaXN0ZXJlZCB0aGUgaWQuICovXG4gICAgcHVibGljIGhhcyhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmN0aW9ucy5oYXMoaWQpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgbmFtZSBvZiB0aGUgcGFjayB3aG9zZSBmaWxlIHdvbiB0aGUgaWQuICovXG4gICAgcHVibGljIHBhY2tPZihpZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zLmdldChpZCk/LnBhY2s7XG4gICAgfVxuXG4gICAgLyoqIEV2ZXJ5IHJlZ2lzdGVyZWQgaWQsIGluIHJlZ2lzdHJhdGlvbiBvcmRlci4gKi9cbiAgICBwdWJsaWMgaWRzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLmZ1bmN0aW9ucy5rZXlzKCldO1xuICAgIH1cblxuICAgIC8qKiBIb3cgbWFueSBmdW5jdGlvbnMgYXJlIHJlZ2lzdGVyZWQuICovXG4gICAgcHVibGljIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmN0aW9ucy5zaXplO1xuICAgIH1cbn1cblxuLyoqIFdoYXQge0BsaW5rIGxvYWRGdW5jdGlvbnN9IHByb2R1Y2VzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkxvYWRSZXN1bHQge1xuICAgIGZ1bmN0aW9uczogRnVuY3Rpb25SZWdpc3RyeTtcbiAgICB0YWdzOiBGdW5jdGlvblRhZ1JlZ2lzdHJ5O1xuICAgIGRpYWdub3N0aWNzOiByZWFkb25seSBEaWFnbm9zdGljW107XG59XG5cbmNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KTtcblxuLyoqIERlY29kZXMgYSBmaWxlLCBvciByZXBvcnRzIHRoYXQgaXQgaXMgbm90IHRleHQuICovXG5jb25zdCBkZWNvZGUgPSAoXG4gICAgZmlsZTogc3RyaW5nIHwgVWludDhBcnJheSxcbiAgICBwYWNrOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIGNvbGxlY3RvcjogRGlhZ25vc3RpY0NvbGxlY3RvclxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAodHlwZW9mIGZpbGUgPT09ICdzdHJpbmcnKSByZXR1cm4gZmlsZTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2Rlci5kZWNvZGUoZmlsZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAgIGNvbGxlY3Rvci5hZGQoe1xuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICBjb2RlOiAnbG9hZC5pbnZhbGlkLWZpbGUnLFxuICAgICAgICAgICAgcGFjayxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3BhdGh9IGlzIG5vdCB2YWxpZCBVVEYtOGBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuLyoqIFJlYWRzIGEgZnVuY3Rpb24gdGFnIGZpbGUsIHdoaWNoIGlzIGEgSlNPTiBvYmplY3Qgd2l0aCBgdmFsdWVzYCBhbmQgYW4gb3B0aW9uYWwgYHJlcGxhY2VgLiAqL1xuY29uc3QgcmVhZFRhZ0ZpbGUgPSAoXG4gICAgdGV4dDogc3RyaW5nLFxuICAgIHBhY2s6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29sbGVjdG9yOiBEaWFnbm9zdGljQ29sbGVjdG9yXG4pOiBGdW5jdGlvblRhZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgcmVwb3J0ID0gKG1lc3NhZ2U6IHN0cmluZyk6IHVuZGVmaW5lZCA9PiB7XG4gICAgICAgIGNvbGxlY3Rvci5hZGQoeyBzZXZlcml0eTogJ2Vycm9yJywgY29kZTogJ2xvYWQuaW52YWxpZC1maWxlJywgcGFjaywgbWVzc2FnZTogYCR7cGF0aH06ICR7bWVzc2FnZX1gIH0pO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZCA9IEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlcG9ydChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcikpO1xuICAgIH1cblxuICAgIC8vIFBhY2sgZGF0YSBpcyBhIHBhcnNlZC1pbnB1dCBib3VuZGFyeSwgc28gZXZlcnkgZmllbGQgaXMgbmFycm93ZWQgcmF0aGVyIHRoYW4gYXNzZXJ0ZWQuXG4gICAgaWYgKHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IHBhcnNlZCA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHBhcnNlZCkpIHtcbiAgICAgICAgcmV0dXJuIHJlcG9ydCgnYSB0YWcgZmlsZSBtdXN0IGJlIGEgSlNPTiBvYmplY3QnKTtcbiAgICB9XG4gICAgaWYgKCEoJ3ZhbHVlcycgaW4gcGFyc2VkKSB8fCAhQXJyYXkuaXNBcnJheShwYXJzZWQudmFsdWVzKSkgcmV0dXJuIHJlcG9ydCgndGhlIHRhZyBmaWxlIGhhcyBubyB2YWx1ZXMgYXJyYXknKTtcblxuICAgIGNvbnN0IHZhbHVlczogRnVuY3Rpb25UYWdFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBwYXJzZWQudmFsdWVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChlbnRyeSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGVudHJ5ID09PSAnb2JqZWN0JyAmJiBlbnRyeSAhPT0gbnVsbCAmJiAnaWQnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5pZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gJ3JlcXVpcmVkJyBpbiBlbnRyeSAmJiB0eXBlb2YgZW50cnkucmVxdWlyZWQgPT09ICdib29sZWFuJyA/IGVudHJ5LnJlcXVpcmVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgdmFsdWVzLnB1c2gocmVxdWlyZWQgPT09IHVuZGVmaW5lZCA/IHsgaWQ6IGVudHJ5LmlkIH0gOiB7IGlkOiBlbnRyeS5pZCwgcmVxdWlyZWQgfSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVwb3J0KCdhIHRhZyBlbnRyeSBtdXN0IGJlIGFuIGlkIG9yIGFuIG9iamVjdCB3aXRoIGFuIGlkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVwbGFjZSA9ICdyZXBsYWNlJyBpbiBwYXJzZWQgJiYgcGFyc2VkLnJlcGxhY2UgPT09IHRydWU7XG4gICAgcmV0dXJuIHsgdmFsdWVzLCByZXBsYWNlIH07XG59O1xuXG4vKipcbiAqIExvYWRzIGV2ZXJ5IGZ1bmN0aW9uIGFuZCBmdW5jdGlvbiB0YWcgYSBwYWNrIHN0YWNrIGRlY2xhcmVzLlxuICpcbiAqIFBhY2tzIGFwcGx5IGluIG9yZGVyLiBBIGZ1bmN0aW9uIGlkIGEgbGF0ZXIgcGFjayBhbHNvIGRlY2xhcmVzIGlzIHJlcGxhY2VkXG4gKiB3aG9sZTsgYSB0YWcgYSBsYXRlciBwYWNrIGFsc28gZGVjbGFyZXMgaXMgbWVyZ2VkLCB1bmxlc3MgdGhhdCBwYWNrIHNldHNcbiAqIGByZXBsYWNlYC4gQSBmaWxlIHRoYXQgZG9lcyBub3QgY29tcGlsZSBpcyByZXBvcnRlZCBhbmQgbGVmdCBvdXQsIHNvIG9uZVxuICogYnJva2VuIGZ1bmN0aW9uIGRvZXMgbm90IHN0b3AgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrIGZyb20gbG9hZGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGxvYWRGdW5jdGlvbnMgPSAocGFja3M6IHJlYWRvbmx5IEZ1bmN0aW9uUGFja1tdKTogRnVuY3Rpb25Mb2FkUmVzdWx0ID0+IHtcbiAgICBjb25zdCBmdW5jdGlvbnMgPSBuZXcgRnVuY3Rpb25SZWdpc3RyeSgpO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgRnVuY3Rpb25UYWdSZWdpc3RyeSgpO1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBEaWFnbm9zdGljQ29sbGVjdG9yKCk7XG5cbiAgICBmb3IgKGNvbnN0IHBhY2sgb2YgcGFja3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBbcGF0aCwgZmlsZV0gb2YgcGFjay5maWxlcykge1xuICAgICAgICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IGZ1bmN0aW9uSWRGb3JQYXRoKHBhdGgpO1xuICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHQgPSBkZWNvZGUoZmlsZSwgcGFjay5uYW1lLCBwYXRoLCBjb2xsZWN0b3IpO1xuICAgICAgICAgICAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGlsZWQgPSBjb21waWxlRnVuY3Rpb24oZnVuY3Rpb25JZCwgdGV4dCk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBkaWFnbm9zdGljIG9mIGNvbXBpbGVkLmRpYWdub3N0aWNzKSBjb2xsZWN0b3IuYWRkKHsgLi4uZGlhZ25vc3RpYywgcGFjazogcGFjay5uYW1lIH0pO1xuICAgICAgICAgICAgICAgIGlmIChjb21waWxlZC5mdW5jdGlvbikgZnVuY3Rpb25zLmFkZChjb21waWxlZC5mdW5jdGlvbiwgcGFjay5uYW1lKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFnSWQgPSBmdW5jdGlvblRhZ0lkRm9yUGF0aChwYXRoKTtcbiAgICAgICAgICAgIGlmICh0YWdJZCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRlY29kZShmaWxlLCBwYWNrLm5hbWUsIHBhdGgsIGNvbGxlY3Rvcik7XG4gICAgICAgICAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgdGFnID0gcmVhZFRhZ0ZpbGUodGV4dCwgcGFjay5uYW1lLCBwYXRoLCBjb2xsZWN0b3IpO1xuICAgICAgICAgICAgaWYgKHRhZykgdGFncy5hZGQodGFnSWQsIHRhZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBmdW5jdGlvbnMsIHRhZ3MsIGRpYWdub3N0aWNzOiBjb2xsZWN0b3IuZGlhZ25vc3RpY3MgfTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBNkJBLElBQWEsbUJBQWIsTUFBd0Q7Q0FDcEQsNEJBQTZCLElBQUksSUFBMEQ7O0NBRzNGLElBQVcsVUFBNEIsTUFBb0I7RUFDdkQsS0FBSyxVQUFVLElBQUksU0FBUyxJQUFJO0dBQUU7R0FBVTtFQUFLLENBQUM7Q0FDdEQ7O0NBR0EsSUFBVyxJQUEwQztFQUNqRCxPQUFPLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0NBQ25DOztDQUdBLElBQVcsSUFBcUI7RUFDNUIsT0FBTyxLQUFLLFVBQVUsSUFBSSxFQUFFO0NBQ2hDOztDQUdBLE9BQWMsSUFBZ0M7RUFDMUMsT0FBTyxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRTtDQUNuQzs7Q0FHQSxNQUFnQztFQUM1QixPQUFPLENBQUMsR0FBRyxLQUFLLFVBQVUsS0FBSyxDQUFDO0NBQ3BDOztDQUdBLElBQVcsT0FBZTtFQUN0QixPQUFPLEtBQUssVUFBVTtDQUMxQjtBQUNKO0FBU0EsSUFBTSxVQUFVLElBQUksWUFBWSxTQUFTLEVBQUUsT0FBTyxLQUFLLENBQUM7O0FBR3hELElBQU0sVUFDRixNQUNBLE1BQ0EsTUFDQSxjQUNxQjtDQUNyQixJQUFJLE9BQU8sU0FBUyxVQUFVLE9BQU87Q0FDckMsSUFBSTtFQUNBLE9BQU8sUUFBUSxPQUFPLElBQUk7Q0FDOUIsUUFBUTtFQUNKLFVBQVUsSUFBSTtHQUNWLFVBQVU7R0FDVixNQUFNO0dBQ047R0FDQSxTQUFTLEdBQUcsS0FBSztFQUNyQixDQUFDO0VBQ0Q7Q0FDSjtBQUNKOztBQUdBLElBQU0sZUFDRixNQUNBLE1BQ0EsTUFDQSxjQUMwQjtDQUMxQixNQUFNLFVBQVUsWUFBK0I7RUFDM0MsVUFBVSxJQUFJO0dBQUUsVUFBVTtHQUFTLE1BQU07R0FBcUI7R0FBTSxTQUFTLEdBQUcsS0FBSyxJQUFJO0VBQVUsQ0FBQztDQUV4RztDQUVBLElBQUk7Q0FDSixJQUFJO0VBQ0EsU0FBUyxLQUFLLE1BQU0sSUFBSTtDQUM1QixTQUFTLE9BQU87RUFDWixPQUFPLE9BQU8saUJBQWlCLFFBQVEsTUFBTSxVQUFVLE9BQU8sS0FBSyxDQUFDO0NBQ3hFO0NBR0EsSUFBSSxPQUFPLFdBQVcsWUFBWSxXQUFXLFFBQVEsTUFBTSxRQUFRLE1BQU0sR0FDckUsT0FBTyxPQUFPLGtDQUFrQztDQUVwRCxJQUFJLEVBQUUsWUFBWSxXQUFXLENBQUMsTUFBTSxRQUFRLE9BQU8sTUFBTSxHQUFHLE9BQU8sT0FBTyxrQ0FBa0M7Q0FFNUcsTUFBTSxTQUE2QixDQUFDO0NBQ3BDLEtBQUssTUFBTSxTQUFTLE9BQU8sUUFBUTtFQUMvQixJQUFJLE9BQU8sVUFBVSxVQUFVO0dBQzNCLE9BQU8sS0FBSyxLQUFLO0dBQ2pCO0VBQ0o7RUFDQSxJQUFJLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxRQUFRLFNBQVMsT0FBTyxNQUFNLE9BQU8sVUFBVTtHQUM5RixNQUFNLFdBQVcsY0FBYyxTQUFTLE9BQU8sTUFBTSxhQUFhLFlBQVksTUFBTSxXQUFXLEtBQUE7R0FDL0YsT0FBTyxLQUFLLGFBQWEsS0FBQSxJQUFZLEVBQUUsSUFBSSxNQUFNLEdBQUcsSUFBSTtJQUFFLElBQUksTUFBTTtJQUFJO0dBQVMsQ0FBQztHQUNsRjtFQUNKO0VBQ0EsT0FBTyxPQUFPLG1EQUFtRDtDQUNyRTtDQUdBLE9BQU87RUFBRTtFQUFRLFNBREQsYUFBYSxVQUFVLE9BQU8sWUFBWTtDQUNqQztBQUM3Qjs7Ozs7Ozs7O0FBVUEsSUFBYSxpQkFBaUIsVUFBdUQ7Q0FDakYsTUFBTSxZQUFZLElBQUksaUJBQWlCO0NBQ3ZDLE1BQU0sT0FBTyxJQUFJQSxhQUFBQSxvQkFBb0I7Q0FDckMsTUFBTSxZQUFZLElBQUlDLG9CQUFBQSxvQkFBb0I7Q0FFMUMsS0FBSyxNQUFNLFFBQVEsT0FDZixLQUFLLE1BQU0sQ0FBQyxNQUFNLFNBQVMsS0FBSyxPQUFPO0VBQ25DLE1BQU0sYUFBYUMsb0JBQUFBLGtCQUFrQixJQUFJO0VBQ3pDLElBQUksZUFBZSxLQUFBLEdBQVc7R0FDMUIsTUFBTSxPQUFPLE9BQU8sTUFBTSxLQUFLLE1BQU0sTUFBTSxTQUFTO0dBQ3BELElBQUksU0FBUyxLQUFBLEdBQVc7R0FFeEIsTUFBTSxXQUFXQyxnQkFBQUEsZ0JBQWdCLFlBQVksSUFBSTtHQUNqRCxLQUFLLE1BQU0sY0FBYyxTQUFTLGFBQWEsVUFBVSxJQUFJO0lBQUUsR0FBRztJQUFZLE1BQU0sS0FBSztHQUFLLENBQUM7R0FDL0YsSUFBSSxTQUFTLFVBQVUsVUFBVSxJQUFJLFNBQVMsVUFBVSxLQUFLLElBQUk7R0FDakU7RUFDSjtFQUVBLE1BQU0sUUFBUUMsb0JBQUFBLHFCQUFxQixJQUFJO0VBQ3ZDLElBQUksVUFBVSxLQUFBLEdBQVc7RUFFekIsTUFBTSxPQUFPLE9BQU8sTUFBTSxLQUFLLE1BQU0sTUFBTSxTQUFTO0VBQ3BELElBQUksU0FBUyxLQUFBLEdBQVc7RUFFeEIsTUFBTSxNQUFNLFlBQVksTUFBTSxLQUFLLE1BQU0sTUFBTSxTQUFTO0VBQ3hELElBQUksS0FBSyxLQUFLLElBQUksT0FBTyxHQUFHO0NBQ2hDO0NBR0osT0FBTztFQUFFO0VBQVc7RUFBTSxhQUFhLFVBQVU7Q0FBWTtBQUNqRSJ9
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loading functions and function tags from a stack of packs. The stack
|
|
3
|
+
* composes the way the rest of this repository composes packs: a later pack
|
|
4
|
+
* replaces an earlier one by identifier. Tags are the exception, because a tag
|
|
5
|
+
* merges across packs unless it says `replace`, which is what lets two packs
|
|
6
|
+
* both add to `minecraft:tick`.
|
|
7
|
+
*/
|
|
8
|
+
import type { CompiledFunction } from './compile';
|
|
9
|
+
import type { Diagnostic } from './diagnostics';
|
|
10
|
+
import type { FunctionLookup } from './executor';
|
|
11
|
+
import { FunctionTagRegistry } from './tags';
|
|
12
|
+
/**
|
|
13
|
+
* One pack's files, keyed by pack-relative path. Any pack reader can supply
|
|
14
|
+
* this: `@jsprismarine/packs` routes the JSON half of a datapack, and the
|
|
15
|
+
* `.mcfunction` files it does not consume come through here unchanged.
|
|
16
|
+
*/
|
|
17
|
+
export interface FunctionPack {
|
|
18
|
+
/** The pack's name, used to attribute diagnostics and to say which pack won. */
|
|
19
|
+
name: string;
|
|
20
|
+
files: ReadonlyMap<string, string | Uint8Array>;
|
|
21
|
+
}
|
|
22
|
+
/** The functions a pack stack loaded, keyed by namespaced id. */
|
|
23
|
+
export declare class FunctionRegistry implements FunctionLookup {
|
|
24
|
+
private readonly functions;
|
|
25
|
+
/** Registers a function, replacing whatever an earlier pack registered under the same id. */
|
|
26
|
+
add(compiled: CompiledFunction, pack: string): void;
|
|
27
|
+
/** Returns the winning function for an id. */
|
|
28
|
+
get(id: string): CompiledFunction | undefined;
|
|
29
|
+
/** Whether any pack registered the id. */
|
|
30
|
+
has(id: string): boolean;
|
|
31
|
+
/** The name of the pack whose file won the id. */
|
|
32
|
+
packOf(id: string): string | undefined;
|
|
33
|
+
/** Every registered id, in registration order. */
|
|
34
|
+
ids(): readonly string[];
|
|
35
|
+
/** How many functions are registered. */
|
|
36
|
+
get size(): number;
|
|
37
|
+
}
|
|
38
|
+
/** What {@link loadFunctions} produces. */
|
|
39
|
+
export interface FunctionLoadResult {
|
|
40
|
+
functions: FunctionRegistry;
|
|
41
|
+
tags: FunctionTagRegistry;
|
|
42
|
+
diagnostics: readonly Diagnostic[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Loads every function and function tag a pack stack declares.
|
|
46
|
+
*
|
|
47
|
+
* Packs apply in order. A function id a later pack also declares is replaced
|
|
48
|
+
* whole; a tag a later pack also declares is merged, unless that pack sets
|
|
49
|
+
* `replace`. A file that does not compile is reported and left out, so one
|
|
50
|
+
* broken function does not stop the rest of the stack from loading.
|
|
51
|
+
*/
|
|
52
|
+
export declare const loadFunctions: (packs: readonly FunctionPack[]) => FunctionLoadResult;
|
|
53
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAE7C;;;;GAIG;AACH,MAAM,WAAW,YAAY;IACzB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC;CACnD;AAED,iEAAiE;AACjE,qBAAa,gBAAiB,YAAW,cAAc;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmE;IAE7F,6FAA6F;IACtF,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEzD;IAED,8CAA8C;IACvC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEnD;IAED,0CAA0C;IACnC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAE9B;IAED,kDAAkD;IAC3C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5C;IAED,kDAAkD;IAC3C,GAAG,IAAI,SAAS,MAAM,EAAE,CAE9B;IAED,yCAAyC;IACzC,IAAW,IAAI,IAAI,MAAM,CAExB;CACJ;AAED,2CAA2C;AAC3C,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CACtC;AAoED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,UAAW,SAAS,YAAY,EAAE,KAAG,kBA8B9D,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { functionIdForPath, functionTagIdForPath } from "./identifiers.es.js";
|
|
2
|
+
import { FunctionTagRegistry } from "./tags.es.js";
|
|
3
|
+
import { compileFunction } from "./compile.es.js";
|
|
4
|
+
import { DiagnosticCollector } from "./diagnostics.es.js";
|
|
5
|
+
// src/registry.ts
|
|
6
|
+
/** The functions a pack stack loaded, keyed by namespaced id. */
|
|
7
|
+
var FunctionRegistry = class {
|
|
8
|
+
functions = /* @__PURE__ */ new Map();
|
|
9
|
+
/** Registers a function, replacing whatever an earlier pack registered under the same id. */
|
|
10
|
+
add(compiled, pack) {
|
|
11
|
+
this.functions.set(compiled.id, {
|
|
12
|
+
compiled,
|
|
13
|
+
pack
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/** Returns the winning function for an id. */
|
|
17
|
+
get(id) {
|
|
18
|
+
return this.functions.get(id)?.compiled;
|
|
19
|
+
}
|
|
20
|
+
/** Whether any pack registered the id. */
|
|
21
|
+
has(id) {
|
|
22
|
+
return this.functions.has(id);
|
|
23
|
+
}
|
|
24
|
+
/** The name of the pack whose file won the id. */
|
|
25
|
+
packOf(id) {
|
|
26
|
+
return this.functions.get(id)?.pack;
|
|
27
|
+
}
|
|
28
|
+
/** Every registered id, in registration order. */
|
|
29
|
+
ids() {
|
|
30
|
+
return [...this.functions.keys()];
|
|
31
|
+
}
|
|
32
|
+
/** How many functions are registered. */
|
|
33
|
+
get size() {
|
|
34
|
+
return this.functions.size;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var decoder = new TextDecoder("utf-8", { fatal: true });
|
|
38
|
+
/** Decodes a file, or reports that it is not text. */
|
|
39
|
+
var decode = (file, pack, path, collector) => {
|
|
40
|
+
if (typeof file === "string") return file;
|
|
41
|
+
try {
|
|
42
|
+
return decoder.decode(file);
|
|
43
|
+
} catch {
|
|
44
|
+
collector.add({
|
|
45
|
+
severity: "error",
|
|
46
|
+
code: "load.invalid-file",
|
|
47
|
+
pack,
|
|
48
|
+
message: `${path} is not valid UTF-8`
|
|
49
|
+
});
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
/** Reads a function tag file, which is a JSON object with `values` and an optional `replace`. */
|
|
54
|
+
var readTagFile = (text, pack, path, collector) => {
|
|
55
|
+
const report = (message) => {
|
|
56
|
+
collector.add({
|
|
57
|
+
severity: "error",
|
|
58
|
+
code: "load.invalid-file",
|
|
59
|
+
pack,
|
|
60
|
+
message: `${path}: ${message}`
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
let parsed;
|
|
64
|
+
try {
|
|
65
|
+
parsed = JSON.parse(text);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
return report(error instanceof Error ? error.message : String(error));
|
|
68
|
+
}
|
|
69
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return report("a tag file must be a JSON object");
|
|
70
|
+
if (!("values" in parsed) || !Array.isArray(parsed.values)) return report("the tag file has no values array");
|
|
71
|
+
const values = [];
|
|
72
|
+
for (const entry of parsed.values) {
|
|
73
|
+
if (typeof entry === "string") {
|
|
74
|
+
values.push(entry);
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (typeof entry === "object" && entry !== null && "id" in entry && typeof entry.id === "string") {
|
|
78
|
+
const required = "required" in entry && typeof entry.required === "boolean" ? entry.required : void 0;
|
|
79
|
+
values.push(required === void 0 ? { id: entry.id } : {
|
|
80
|
+
id: entry.id,
|
|
81
|
+
required
|
|
82
|
+
});
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
return report("a tag entry must be an id or an object with an id");
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
values,
|
|
89
|
+
replace: "replace" in parsed && parsed.replace === true
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Loads every function and function tag a pack stack declares.
|
|
94
|
+
*
|
|
95
|
+
* Packs apply in order. A function id a later pack also declares is replaced
|
|
96
|
+
* whole; a tag a later pack also declares is merged, unless that pack sets
|
|
97
|
+
* `replace`. A file that does not compile is reported and left out, so one
|
|
98
|
+
* broken function does not stop the rest of the stack from loading.
|
|
99
|
+
*/
|
|
100
|
+
var loadFunctions = (packs) => {
|
|
101
|
+
const functions = new FunctionRegistry();
|
|
102
|
+
const tags = new FunctionTagRegistry();
|
|
103
|
+
const collector = new DiagnosticCollector();
|
|
104
|
+
for (const pack of packs) for (const [path, file] of pack.files) {
|
|
105
|
+
const functionId = functionIdForPath(path);
|
|
106
|
+
if (functionId !== void 0) {
|
|
107
|
+
const text = decode(file, pack.name, path, collector);
|
|
108
|
+
if (text === void 0) continue;
|
|
109
|
+
const compiled = compileFunction(functionId, text);
|
|
110
|
+
for (const diagnostic of compiled.diagnostics) collector.add({
|
|
111
|
+
...diagnostic,
|
|
112
|
+
pack: pack.name
|
|
113
|
+
});
|
|
114
|
+
if (compiled.function) functions.add(compiled.function, pack.name);
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const tagId = functionTagIdForPath(path);
|
|
118
|
+
if (tagId === void 0) continue;
|
|
119
|
+
const text = decode(file, pack.name, path, collector);
|
|
120
|
+
if (text === void 0) continue;
|
|
121
|
+
const tag = readTagFile(text, pack.name, path, collector);
|
|
122
|
+
if (tag) tags.add(tagId, tag);
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
functions,
|
|
126
|
+
tags,
|
|
127
|
+
diagnostics: collector.diagnostics
|
|
128
|
+
};
|
|
129
|
+
};
|
|
130
|
+
export { FunctionRegistry, loadFunctions };
|
|
131
|
+
|
|
132
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0cnkuZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3JlZ2lzdHJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTG9hZGluZyBmdW5jdGlvbnMgYW5kIGZ1bmN0aW9uIHRhZ3MgZnJvbSBhIHN0YWNrIG9mIHBhY2tzLiBUaGUgc3RhY2tcbiAqIGNvbXBvc2VzIHRoZSB3YXkgdGhlIHJlc3Qgb2YgdGhpcyByZXBvc2l0b3J5IGNvbXBvc2VzIHBhY2tzOiBhIGxhdGVyIHBhY2tcbiAqIHJlcGxhY2VzIGFuIGVhcmxpZXIgb25lIGJ5IGlkZW50aWZpZXIuIFRhZ3MgYXJlIHRoZSBleGNlcHRpb24sIGJlY2F1c2UgYSB0YWdcbiAqIG1lcmdlcyBhY3Jvc3MgcGFja3MgdW5sZXNzIGl0IHNheXMgYHJlcGxhY2VgLCB3aGljaCBpcyB3aGF0IGxldHMgdHdvIHBhY2tzXG4gKiBib3RoIGFkZCB0byBgbWluZWNyYWZ0OnRpY2tgLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tcGlsZWRGdW5jdGlvbiB9IGZyb20gJy4vY29tcGlsZSc7XG5pbXBvcnQgeyBjb21waWxlRnVuY3Rpb24gfSBmcm9tICcuL2NvbXBpbGUnO1xuaW1wb3J0IHR5cGUgeyBEaWFnbm9zdGljIH0gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQgeyBEaWFnbm9zdGljQ29sbGVjdG9yIH0gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQgdHlwZSB7IEZ1bmN0aW9uTG9va3VwIH0gZnJvbSAnLi9leGVjdXRvcic7XG5pbXBvcnQgeyBmdW5jdGlvbklkRm9yUGF0aCwgZnVuY3Rpb25UYWdJZEZvclBhdGggfSBmcm9tICcuL2lkZW50aWZpZXJzJztcbmltcG9ydCB0eXBlIHsgRnVuY3Rpb25UYWcsIEZ1bmN0aW9uVGFnRW50cnkgfSBmcm9tICcuL3RhZ3MnO1xuaW1wb3J0IHsgRnVuY3Rpb25UYWdSZWdpc3RyeSB9IGZyb20gJy4vdGFncyc7XG5cbi8qKlxuICogT25lIHBhY2sncyBmaWxlcywga2V5ZWQgYnkgcGFjay1yZWxhdGl2ZSBwYXRoLiBBbnkgcGFjayByZWFkZXIgY2FuIHN1cHBseVxuICogdGhpczogYEBqc3ByaXNtYXJpbmUvcGFja3NgIHJvdXRlcyB0aGUgSlNPTiBoYWxmIG9mIGEgZGF0YXBhY2ssIGFuZCB0aGVcbiAqIGAubWNmdW5jdGlvbmAgZmlsZXMgaXQgZG9lcyBub3QgY29uc3VtZSBjb21lIHRocm91Z2ggaGVyZSB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25QYWNrIHtcbiAgICAvKiogVGhlIHBhY2sncyBuYW1lLCB1c2VkIHRvIGF0dHJpYnV0ZSBkaWFnbm9zdGljcyBhbmQgdG8gc2F5IHdoaWNoIHBhY2sgd29uLiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBmaWxlczogUmVhZG9ubHlNYXA8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5Pjtcbn1cblxuLyoqIFRoZSBmdW5jdGlvbnMgYSBwYWNrIHN0YWNrIGxvYWRlZCwga2V5ZWQgYnkgbmFtZXNwYWNlZCBpZC4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvblJlZ2lzdHJ5IGltcGxlbWVudHMgRnVuY3Rpb25Mb29rdXAge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZnVuY3Rpb25zID0gbmV3IE1hcDxzdHJpbmcsIHsgY29tcGlsZWQ6IENvbXBpbGVkRnVuY3Rpb247IHBhY2s6IHN0cmluZyB9PigpO1xuXG4gICAgLyoqIFJlZ2lzdGVycyBhIGZ1bmN0aW9uLCByZXBsYWNpbmcgd2hhdGV2ZXIgYW4gZWFybGllciBwYWNrIHJlZ2lzdGVyZWQgdW5kZXIgdGhlIHNhbWUgaWQuICovXG4gICAgcHVibGljIGFkZChjb21waWxlZDogQ29tcGlsZWRGdW5jdGlvbiwgcGFjazogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZnVuY3Rpb25zLnNldChjb21waWxlZC5pZCwgeyBjb21waWxlZCwgcGFjayB9KTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyB0aGUgd2lubmluZyBmdW5jdGlvbiBmb3IgYW4gaWQuICovXG4gICAgcHVibGljIGdldChpZDogc3RyaW5nKTogQ29tcGlsZWRGdW5jdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmN0aW9ucy5nZXQoaWQpPy5jb21waWxlZDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciBhbnkgcGFjayByZWdpc3RlcmVkIHRoZSBpZC4gKi9cbiAgICBwdWJsaWMgaGFzKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zLmhhcyhpZCk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBuYW1lIG9mIHRoZSBwYWNrIHdob3NlIGZpbGUgd29uIHRoZSBpZC4gKi9cbiAgICBwdWJsaWMgcGFja09mKGlkOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbnMuZ2V0KGlkKT8ucGFjaztcbiAgICB9XG5cbiAgICAvKiogRXZlcnkgcmVnaXN0ZXJlZCBpZCwgaW4gcmVnaXN0cmF0aW9uIG9yZGVyLiAqL1xuICAgIHB1YmxpYyBpZHMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gWy4uLnRoaXMuZnVuY3Rpb25zLmtleXMoKV07XG4gICAgfVxuXG4gICAgLyoqIEhvdyBtYW55IGZ1bmN0aW9ucyBhcmUgcmVnaXN0ZXJlZC4gKi9cbiAgICBwdWJsaWMgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zLnNpemU7XG4gICAgfVxufVxuXG4vKiogV2hhdCB7QGxpbmsgbG9hZEZ1bmN0aW9uc30gcHJvZHVjZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uTG9hZFJlc3VsdCB7XG4gICAgZnVuY3Rpb25zOiBGdW5jdGlvblJlZ2lzdHJ5O1xuICAgIHRhZ3M6IEZ1bmN0aW9uVGFnUmVnaXN0cnk7XG4gICAgZGlhZ25vc3RpY3M6IHJlYWRvbmx5IERpYWdub3N0aWNbXTtcbn1cblxuY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pO1xuXG4vKiogRGVjb2RlcyBhIGZpbGUsIG9yIHJlcG9ydHMgdGhhdCBpdCBpcyBub3QgdGV4dC4gKi9cbmNvbnN0IGRlY29kZSA9IChcbiAgICBmaWxlOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIHBhY2s6IHN0cmluZyxcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgY29sbGVjdG9yOiBEaWFnbm9zdGljQ29sbGVjdG9yXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgIGlmICh0eXBlb2YgZmlsZSA9PT0gJ3N0cmluZycpIHJldHVybiBmaWxlO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShmaWxlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgY29sbGVjdG9yLmFkZCh7XG4gICAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICAgIGNvZGU6ICdsb2FkLmludmFsaWQtZmlsZScsXG4gICAgICAgICAgICBwYWNrLFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7cGF0aH0gaXMgbm90IHZhbGlkIFVURi04YFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuXG4vKiogUmVhZHMgYSBmdW5jdGlvbiB0YWcgZmlsZSwgd2hpY2ggaXMgYSBKU09OIG9iamVjdCB3aXRoIGB2YWx1ZXNgIGFuZCBhbiBvcHRpb25hbCBgcmVwbGFjZWAuICovXG5jb25zdCByZWFkVGFnRmlsZSA9IChcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcGFjazogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBjb2xsZWN0b3I6IERpYWdub3N0aWNDb2xsZWN0b3Jcbik6IEZ1bmN0aW9uVGFnIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCByZXBvcnQgPSAobWVzc2FnZTogc3RyaW5nKTogdW5kZWZpbmVkID0+IHtcbiAgICAgICAgY29sbGVjdG9yLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBjb2RlOiAnbG9hZC5pbnZhbGlkLWZpbGUnLCBwYWNrLCBtZXNzYWdlOiBgJHtwYXRofTogJHttZXNzYWdlfWAgfSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIGxldCBwYXJzZWQ6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVwb3J0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSk7XG4gICAgfVxuXG4gICAgLy8gUGFjayBkYXRhIGlzIGEgcGFyc2VkLWlucHV0IGJvdW5kYXJ5LCBzbyBldmVyeSBmaWVsZCBpcyBuYXJyb3dlZCByYXRoZXIgdGhhbiBhc3NlcnRlZC5cbiAgICBpZiAodHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgcGFyc2VkID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICByZXR1cm4gcmVwb3J0KCdhIHRhZyBmaWxlIG11c3QgYmUgYSBKU09OIG9iamVjdCcpO1xuICAgIH1cbiAgICBpZiAoISgndmFsdWVzJyBpbiBwYXJzZWQpIHx8ICFBcnJheS5pc0FycmF5KHBhcnNlZC52YWx1ZXMpKSByZXR1cm4gcmVwb3J0KCd0aGUgdGFnIGZpbGUgaGFzIG5vIHZhbHVlcyBhcnJheScpO1xuXG4gICAgY29uc3QgdmFsdWVzOiBGdW5jdGlvblRhZ0VudHJ5W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHBhcnNlZC52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBlbnRyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdvYmplY3QnICYmIGVudHJ5ICE9PSBudWxsICYmICdpZCcgaW4gZW50cnkgJiYgdHlwZW9mIGVudHJ5LmlkID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSAncmVxdWlyZWQnIGluIGVudHJ5ICYmIHR5cGVvZiBlbnRyeS5yZXF1aXJlZCA9PT0gJ2Jvb2xlYW4nID8gZW50cnkucmVxdWlyZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChyZXF1aXJlZCA9PT0gdW5kZWZpbmVkID8geyBpZDogZW50cnkuaWQgfSA6IHsgaWQ6IGVudHJ5LmlkLCByZXF1aXJlZCB9KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXBvcnQoJ2EgdGFnIGVudHJ5IG11c3QgYmUgYW4gaWQgb3IgYW4gb2JqZWN0IHdpdGggYW4gaWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXBsYWNlID0gJ3JlcGxhY2UnIGluIHBhcnNlZCAmJiBwYXJzZWQucmVwbGFjZSA9PT0gdHJ1ZTtcbiAgICByZXR1cm4geyB2YWx1ZXMsIHJlcGxhY2UgfTtcbn07XG5cbi8qKlxuICogTG9hZHMgZXZlcnkgZnVuY3Rpb24gYW5kIGZ1bmN0aW9uIHRhZyBhIHBhY2sgc3RhY2sgZGVjbGFyZXMuXG4gKlxuICogUGFja3MgYXBwbHkgaW4gb3JkZXIuIEEgZnVuY3Rpb24gaWQgYSBsYXRlciBwYWNrIGFsc28gZGVjbGFyZXMgaXMgcmVwbGFjZWRcbiAqIHdob2xlOyBhIHRhZyBhIGxhdGVyIHBhY2sgYWxzbyBkZWNsYXJlcyBpcyBtZXJnZWQsIHVubGVzcyB0aGF0IHBhY2sgc2V0c1xuICogYHJlcGxhY2VgLiBBIGZpbGUgdGhhdCBkb2VzIG5vdCBjb21waWxlIGlzIHJlcG9ydGVkIGFuZCBsZWZ0IG91dCwgc28gb25lXG4gKiBicm9rZW4gZnVuY3Rpb24gZG9lcyBub3Qgc3RvcCB0aGUgcmVzdCBvZiB0aGUgc3RhY2sgZnJvbSBsb2FkaW5nLlxuICovXG5leHBvcnQgY29uc3QgbG9hZEZ1bmN0aW9ucyA9IChwYWNrczogcmVhZG9ubHkgRnVuY3Rpb25QYWNrW10pOiBGdW5jdGlvbkxvYWRSZXN1bHQgPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IG5ldyBGdW5jdGlvblJlZ2lzdHJ5KCk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBGdW5jdGlvblRhZ1JlZ2lzdHJ5KCk7XG4gICAgY29uc3QgY29sbGVjdG9yID0gbmV3IERpYWdub3N0aWNDb2xsZWN0b3IoKTtcblxuICAgIGZvciAoY29uc3QgcGFjayBvZiBwYWNrcykge1xuICAgICAgICBmb3IgKGNvbnN0IFtwYXRoLCBmaWxlXSBvZiBwYWNrLmZpbGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmdW5jdGlvbklkID0gZnVuY3Rpb25JZEZvclBhdGgocGF0aCk7XG4gICAgICAgICAgICBpZiAoZnVuY3Rpb25JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGV4dCA9IGRlY29kZShmaWxlLCBwYWNrLm5hbWUsIHBhdGgsIGNvbGxlY3Rvcik7XG4gICAgICAgICAgICAgICAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21waWxlZCA9IGNvbXBpbGVGdW5jdGlvbihmdW5jdGlvbklkLCB0ZXh0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGRpYWdub3N0aWMgb2YgY29tcGlsZWQuZGlhZ25vc3RpY3MpIGNvbGxlY3Rvci5hZGQoeyAuLi5kaWFnbm9zdGljLCBwYWNrOiBwYWNrLm5hbWUgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBpbGVkLmZ1bmN0aW9uKSBmdW5jdGlvbnMuYWRkKGNvbXBpbGVkLmZ1bmN0aW9uLCBwYWNrLm5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0YWdJZCA9IGZ1bmN0aW9uVGFnSWRGb3JQYXRoKHBhdGgpO1xuICAgICAgICAgICAgaWYgKHRhZ0lkID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZGVjb2RlKGZpbGUsIHBhY2submFtZSwgcGF0aCwgY29sbGVjdG9yKTtcbiAgICAgICAgICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICBjb25zdCB0YWcgPSByZWFkVGFnRmlsZSh0ZXh0LCBwYWNrLm5hbWUsIHBhdGgsIGNvbGxlY3Rvcik7XG4gICAgICAgICAgICBpZiAodGFnKSB0YWdzLmFkZCh0YWdJZCwgdGFnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZ1bmN0aW9ucywgdGFncywgZGlhZ25vc3RpY3M6IGNvbGxlY3Rvci5kaWFnbm9zdGljcyB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBNkJBLElBQWEsbUJBQWIsTUFBd0Q7Q0FDcEQsNEJBQTZCLElBQUksSUFBMEQ7O0NBRzNGLElBQVcsVUFBNEIsTUFBb0I7RUFDdkQsS0FBSyxVQUFVLElBQUksU0FBUyxJQUFJO0dBQUU7R0FBVTtFQUFLLENBQUM7Q0FDdEQ7O0NBR0EsSUFBVyxJQUEwQztFQUNqRCxPQUFPLEtBQUssVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0NBQ25DOztDQUdBLElBQVcsSUFBcUI7RUFDNUIsT0FBTyxLQUFLLFVBQVUsSUFBSSxFQUFFO0NBQ2hDOztDQUdBLE9BQWMsSUFBZ0M7RUFDMUMsT0FBTyxLQUFLLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRTtDQUNuQzs7Q0FHQSxNQUFnQztFQUM1QixPQUFPLENBQUMsR0FBRyxLQUFLLFVBQVUsS0FBSyxDQUFDO0NBQ3BDOztDQUdBLElBQVcsT0FBZTtFQUN0QixPQUFPLEtBQUssVUFBVTtDQUMxQjtBQUNKO0FBU0EsSUFB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
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
// src/runner.ts
|
|
4
|
+
/**
|
|
5
|
+
* A runner that records what it was asked to run instead of running it. It is
|
|
6
|
+
* the second adapter at the command seam: tests and pack authors use it to
|
|
7
|
+
* check what a function would execute without a world to execute it against.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const runner = new RecordingCommandRunner();
|
|
12
|
+
* new FunctionExecutor({ functions, runner }).run('pack:greet', { source: console });
|
|
13
|
+
* expect(runner.commandLines).toEqual(['say hello']);
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
var RecordingCommandRunner = class {
|
|
17
|
+
respond;
|
|
18
|
+
/** Every command handed to the runner, in execution order. */
|
|
19
|
+
recorded = [];
|
|
20
|
+
constructor(respond = () => ({})) {
|
|
21
|
+
this.respond = respond;
|
|
22
|
+
}
|
|
23
|
+
/** Records the command and returns whatever the configured response says. */
|
|
24
|
+
run(commandLine, context) {
|
|
25
|
+
this.recorded.push({
|
|
26
|
+
commandLine,
|
|
27
|
+
context
|
|
28
|
+
});
|
|
29
|
+
return this.respond(commandLine, context);
|
|
30
|
+
}
|
|
31
|
+
/** The recorded command text, in execution order. */
|
|
32
|
+
get commandLines() {
|
|
33
|
+
return this.recorded.map((entry) => entry.commandLine);
|
|
34
|
+
}
|
|
35
|
+
/** Forgets everything recorded so far. */
|
|
36
|
+
clear() {
|
|
37
|
+
this.recorded.length = 0;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
exports.RecordingCommandRunner = RecordingCommandRunner;
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmNqcy5janMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3J1bm5lci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBzZWFtIGJldHdlZW4gdGhpcyBwYWNrYWdlIGFuZCB0aGUgY29tbWFuZHMuIFRoaXMgcGFja2FnZSBydW5zIGZ1bmN0aW9uc1xuICogYW5kIG5ldmVyIGltcGxlbWVudHMgYSBjb21tYW5kOiBldmVyeSBsaW5lIGl0IGRvZXMgbm90IGhhbmRsZSBpdHNlbGYgZ29lcyB0b1xuICogYSB7QGxpbmsgQ29tbWFuZFJ1bm5lcn0sIHdoaWNoIGlzIHdoZXJlIHRoZSBzZXJ2ZXIncyBCcmlnYWRpZXIgZGlzcGF0Y2hlclxuICogcGx1Z3MgaW4uXG4gKi9cblxuLyoqIFdoYXQgYSBjb21tYW5kIGlzIHRvbGQgYWJvdXQgdGhlIGxpbmUgaXQgd2FzIHJlYWNoZWQgZnJvbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZENvbnRleHQ8VFNvdXJjZSA9IHVua25vd24+IHtcbiAgICAvKiogV2hhdGV2ZXIgdGhlIHNlcnZlciB1c2VzIGFzIGEgY29tbWFuZCBzb3VyY2UsIHBhc3NlZCB0aHJvdWdoIHVudG91Y2hlZC4gKi9cbiAgICBzb3VyY2U6IFRTb3VyY2U7XG4gICAgLyoqIFRoZSBuYW1lc3BhY2VkIGlkIG9mIHRoZSBmdW5jdGlvbiB0aGUgbGluZSBiZWxvbmdzIHRvLiAqL1xuICAgIGZ1bmN0aW9uSWQ6IHN0cmluZztcbiAgICAvKiogVGhlIDEtYmFzZWQgbGluZSBvZiB0aGF0IGZ1bmN0aW9uJ3MgZmlsZS4gKi9cbiAgICBsaW5lOiBudW1iZXI7XG59XG5cbi8qKiBXaGF0IGEgY29tbWFuZCByZXBvcnRzIGJhY2suICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRPdXRjb21lIHtcbiAgICAvKiogVGhlIGNvbW1hbmQncyBpbnRlZ2VyIHJlc3VsdCwgYXMgQnJpZ2FkaWVyIGRlZmluZXMgaXQuIERlZmF1bHRzIHRvIDAuICovXG4gICAgcmVzdWx0PzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEhvdyBtYW55IGNvbnRleHRzIHRoZSBjb21tYW5kIGNyZWF0ZWQsIHdoaWNoIGlzIHdoYXQgYG1heENvbW1hbmRGb3Jrc2BcbiAgICAgKiBjb3VudHMuIGBleGVjdXRlIGFzIEBlYCB3aXRoIGZpdmUgbWF0Y2hpbmcgZW50aXRpZXMgcmVwb3J0cyA1LiBBIGNvbW1hbmRcbiAgICAgKiB0aGF0IHJ1bnMgaW4gb25lIGNvbnRleHQgcmVwb3J0cyBub3RoaW5nLlxuICAgICAqL1xuICAgIGZvcmtzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFNldCB3aGVuIHRoZSBsaW5lIGVuZGVkIHRoZSBmdW5jdGlvbiBpdCBiZWxvbmdzIHRvLCB3aGljaCBpcyB3aGF0XG4gICAgICogYC9yZXR1cm5gIGRvZXMuIFRoZSBleGVjdXRvciBkcm9wcyB0aGF0IGZ1bmN0aW9uJ3MgcmVtYWluaW5nIGxpbmVzIGFuZFxuICAgICAqIGNhcnJpZXMgb24gd2l0aCB3aGF0ZXZlciBjYWxsZWQgaXQuXG4gICAgICpcbiAgICAgKiBgdmFsdWVgIGlzIHdoYXQgdGhlIGZ1bmN0aW9uIHJldHVybnMuIGAvcmV0dXJuIGZhaWxgLCBhbmQgYVxuICAgICAqIGAvcmV0dXJuIHJ1bmAgd2hvc2UgY29tbWFuZCBmYWlsZWQsIGVuZCB0aGUgZnVuY3Rpb24gd2l0aG91dCBvbmUsIHdoaWNoXG4gICAgICogaXMgdGhlIGNhc2UgYGV4ZWN1dGUgaWYgZnVuY3Rpb25gIGRvZXMgbm90IG1hdGNoLlxuICAgICAqL1xuICAgIHJldHVybmVkPzogeyByZWFkb25seSB2YWx1ZT86IG51bWJlciB9O1xufVxuXG4vKiogUnVucyBvbmUgY29tbWFuZCBsaW5lLiBUaGUgc2VydmVyJ3MgZGlzcGF0Y2hlciBpcyB0aGUgcmVhbCBhZGFwdGVyIGF0IHRoaXMgc2VhbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJ1bm5lcjxUU291cmNlID0gdW5rbm93bj4ge1xuICAgIC8qKlxuICAgICAqIFJ1bnMgb25lIGNvbW1hbmQsIHdyaXR0ZW4gd2l0aG91dCBhIGxlYWRpbmcgc2xhc2guXG4gICAgICpcbiAgICAgKiBUaGUgcnVudGltZSBuZXZlciBjYWxscyB0aGlzIHdpdGggYSBjb21tYW5kIHRoZSBsaW5lIGZvcm1hdCBhbHJlYWR5XG4gICAgICogaGFuZGxlcywgc28gYSBgZnVuY3Rpb25gIGxpbmUgbmV2ZXIgcmVhY2hlcyBpdC4gVGhyb3dpbmcgaXMgYWxsb3dlZDogdGhlXG4gICAgICogZXhlY3V0b3IgY2F0Y2hlcyBpdCwgcmVwb3J0cyBpdCwgYW5kIGNhcnJpZXMgb24gd2l0aCB0aGUgbmV4dCBsaW5lLCB0aGVcbiAgICAgKiB3YXkgb25lIGZhaWxpbmcgY29tbWFuZCBkb2VzIG5vdCBhYm9ydCBhIEphdmEgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcnVuKGNvbW1hbmRMaW5lOiBzdHJpbmcsIGNvbnRleHQ6IENvbW1hbmRDb250ZXh0PFRTb3VyY2U+KTogQ29tbWFuZE91dGNvbWU7XG59XG5cbi8qKiBPbmUgY29tbWFuZCBhIHtAbGluayBSZWNvcmRpbmdDb21tYW5kUnVubmVyfSB3YXMgYXNrZWQgdG8gcnVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWNvcmRlZENvbW1hbmQ8VFNvdXJjZSA9IHVua25vd24+IHtcbiAgICBjb21tYW5kTGluZTogc3RyaW5nO1xuICAgIGNvbnRleHQ6IENvbW1hbmRDb250ZXh0PFRTb3VyY2U+O1xufVxuXG4vKipcbiAqIEEgcnVubmVyIHRoYXQgcmVjb3JkcyB3aGF0IGl0IHdhcyBhc2tlZCB0byBydW4gaW5zdGVhZCBvZiBydW5uaW5nIGl0LiBJdCBpc1xuICogdGhlIHNlY29uZCBhZGFwdGVyIGF0IHRoZSBjb21tYW5kIHNlYW06IHRlc3RzIGFuZCBwYWNrIGF1dGhvcnMgdXNlIGl0IHRvXG4gKiBjaGVjayB3aGF0IGEgZnVuY3Rpb24gd291bGQgZXhlY3V0ZSB3aXRob3V0IGEgd29ybGQgdG8gZXhlY3V0ZSBpdCBhZ2FpbnN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgcnVubmVyID0gbmV3IFJlY29yZGluZ0NvbW1hbmRSdW5uZXIoKTtcbiAqIG5ldyBGdW5jdGlvbkV4ZWN1dG9yKHsgZnVuY3Rpb25zLCBydW5uZXIgfSkucnVuKCdwYWNrOmdyZWV0JywgeyBzb3VyY2U6IGNvbnNvbGUgfSk7XG4gKiBleHBlY3QocnVubmVyLmNvbW1hbmRMaW5lcykudG9FcXVhbChbJ3NheSBoZWxsbyddKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgUmVjb3JkaW5nQ29tbWFuZFJ1bm5lcjxUU291cmNlID0gdW5rbm93bj4gaW1wbGVtZW50cyBDb21tYW5kUnVubmVyPFRTb3VyY2U+IHtcbiAgICAvKiogRXZlcnkgY29tbWFuZCBoYW5kZWQgdG8gdGhlIHJ1bm5lciwgaW4gZXhlY3V0aW9uIG9yZGVyLiAqL1xuICAgIHB1YmxpYyByZWFkb25seSByZWNvcmRlZDogUmVjb3JkZWRDb21tYW5kPFRTb3VyY2U+W10gPSBbXTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgLyoqIERlY2lkZXMgd2hhdCBlYWNoIGNvbW1hbmQgcmVwb3J0cyBiYWNrLiBFdmVyeXRoaW5nIHN1Y2NlZWRzIHdpdGggbm8gZm9ya3MgYnkgZGVmYXVsdC4gKi9cbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSByZXNwb25kOiAoY29tbWFuZExpbmU6IHN0cmluZywgY29udGV4dDogQ29tbWFuZENvbnRleHQ8VFNvdXJjZT4pID0+IENvbW1hbmRPdXRjb21lID0gKCkgPT4gKHt9KVxuICAgICkge31cblxuICAgIC8qKiBSZWNvcmRzIHRoZSBjb21tYW5kIGFuZCByZXR1cm5zIHdoYXRldmVyIHRoZSBjb25maWd1cmVkIHJlc3BvbnNlIHNheXMuICovXG4gICAgcHVibGljIHJ1bihjb21tYW5kTGluZTogc3RyaW5nLCBjb250ZXh0OiBDb21tYW5kQ29udGV4dDxUU291cmNlPik6IENvbW1hbmRPdXRjb21lIHtcbiAgICAgICAgdGhpcy5yZWNvcmRlZC5wdXNoKHsgY29tbWFuZExpbmUsIGNvbnRleHQgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbmQoY29tbWFuZExpbmUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgcmVjb3JkZWQgY29tbWFuZCB0ZXh0LCBpbiBleGVjdXRpb24gb3JkZXIuICovXG4gICAgcHVibGljIGdldCBjb21tYW5kTGluZXMoKTogcmVhZG9ubHkgc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRlZC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5jb21tYW5kTGluZSk7XG4gICAgfVxuXG4gICAgLyoqIEZvcmdldHMgZXZlcnl0aGluZyByZWNvcmRlZCBzbyBmYXIuICovXG4gICAgcHVibGljIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlY29yZGVkLmxlbmd0aCA9IDA7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFzRUEsSUFBYSx5QkFBYixNQUF5RjtDQU1oRTs7Q0FKckIsV0FBdUQsQ0FBQztDQUV4RCxZQUVJLGlCQUE2RyxDQUFDLElBQ2hIO0VBRG1CLEtBQUEsVUFBQTtDQUNsQjs7Q0FHSCxJQUFXLGFBQXFCLFNBQWtEO0VBQzlFLEtBQUssU0FBUyxLQUFLO0dBQUU7R0FBYTtFQUFRLENBQUM7RUFDM0MsT0FBTyxLQUFLLFFBQVEsYUFBYSxPQUFPO0NBQzVDOztDQUdBLElBQVcsZUFBa0M7RUFDekMsT0FBTyxLQUFLLFNBQVMsS0FBSyxVQUFVLE1BQU0sV0FBVztDQUN6RDs7Q0FHQSxRQUFxQjtFQUNqQixLQUFLLFNBQVMsU0FBUztDQUMzQjtBQUNKIn0=
|
package/dist/runner.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The seam between this package and the commands. This package runs functions
|
|
3
|
+
* and never implements a command: every line it does not handle itself goes to
|
|
4
|
+
* a {@link CommandRunner}, which is where the server's Brigadier dispatcher
|
|
5
|
+
* plugs in.
|
|
6
|
+
*/
|
|
7
|
+
/** What a command is told about the line it was reached from. */
|
|
8
|
+
export interface CommandContext<TSource = unknown> {
|
|
9
|
+
/** Whatever the server uses as a command source, passed through untouched. */
|
|
10
|
+
source: TSource;
|
|
11
|
+
/** The namespaced id of the function the line belongs to. */
|
|
12
|
+
functionId: string;
|
|
13
|
+
/** The 1-based line of that function's file. */
|
|
14
|
+
line: number;
|
|
15
|
+
}
|
|
16
|
+
/** What a command reports back. */
|
|
17
|
+
export interface CommandOutcome {
|
|
18
|
+
/** The command's integer result, as Brigadier defines it. Defaults to 0. */
|
|
19
|
+
result?: number;
|
|
20
|
+
/**
|
|
21
|
+
* How many contexts the command created, which is what `maxCommandForks`
|
|
22
|
+
* counts. `execute as @e` with five matching entities reports 5. A command
|
|
23
|
+
* that runs in one context reports nothing.
|
|
24
|
+
*/
|
|
25
|
+
forks?: number;
|
|
26
|
+
/**
|
|
27
|
+
* Set when the line ended the function it belongs to, which is what
|
|
28
|
+
* `/return` does. The executor drops that function's remaining lines and
|
|
29
|
+
* carries on with whatever called it.
|
|
30
|
+
*
|
|
31
|
+
* `value` is what the function returns. `/return fail`, and a
|
|
32
|
+
* `/return run` whose command failed, end the function without one, which
|
|
33
|
+
* is the case `execute if function` does not match.
|
|
34
|
+
*/
|
|
35
|
+
returned?: {
|
|
36
|
+
readonly value?: number;
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/** Runs one command line. The server's dispatcher is the real adapter at this seam. */
|
|
40
|
+
export interface CommandRunner<TSource = unknown> {
|
|
41
|
+
/**
|
|
42
|
+
* Runs one command, written without a leading slash.
|
|
43
|
+
*
|
|
44
|
+
* The runtime never calls this with a command the line format already
|
|
45
|
+
* handles, so a `function` line never reaches it. Throwing is allowed: the
|
|
46
|
+
* executor catches it, reports it, and carries on with the next line, the
|
|
47
|
+
* way one failing command does not abort a Java function.
|
|
48
|
+
*/
|
|
49
|
+
run(commandLine: string, context: CommandContext<TSource>): CommandOutcome;
|
|
50
|
+
}
|
|
51
|
+
/** One command a {@link RecordingCommandRunner} was asked to run. */
|
|
52
|
+
export interface RecordedCommand<TSource = unknown> {
|
|
53
|
+
commandLine: string;
|
|
54
|
+
context: CommandContext<TSource>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A runner that records what it was asked to run instead of running it. It is
|
|
58
|
+
* the second adapter at the command seam: tests and pack authors use it to
|
|
59
|
+
* check what a function would execute without a world to execute it against.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```ts
|
|
63
|
+
* const runner = new RecordingCommandRunner();
|
|
64
|
+
* new FunctionExecutor({ functions, runner }).run('pack:greet', { source: console });
|
|
65
|
+
* expect(runner.commandLines).toEqual(['say hello']);
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export declare class RecordingCommandRunner<TSource = unknown> implements CommandRunner<TSource> {
|
|
69
|
+
/** Decides what each command reports back. Everything succeeds with no forks by default. */
|
|
70
|
+
private readonly respond;
|
|
71
|
+
/** Every command handed to the runner, in execution order. */
|
|
72
|
+
readonly recorded: RecordedCommand<TSource>[];
|
|
73
|
+
constructor(
|
|
74
|
+
/** Decides what each command reports back. Everything succeeds with no forks by default. */
|
|
75
|
+
respond?: (commandLine: string, context: CommandContext<TSource>) => CommandOutcome);
|
|
76
|
+
/** Records the command and returns whatever the configured response says. */
|
|
77
|
+
run(commandLine: string, context: CommandContext<TSource>): CommandOutcome;
|
|
78
|
+
/** The recorded command text, in execution order. */
|
|
79
|
+
get commandLines(): readonly string[];
|
|
80
|
+
/** Forgets everything recorded so far. */
|
|
81
|
+
clear(): void;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iEAAiE;AACjE,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC7C,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,mCAAmC;AACnC,MAAM,WAAW,cAAc;IAC3B,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1C;AAED,uFAAuF;AACvF,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,OAAO;IAC5C;;;;;;;OAOG;IACH,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC;CAC9E;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe,CAAC,OAAO,GAAG,OAAO;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;CACpC;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,sBAAsB,CAAC,OAAO,GAAG,OAAO,CAAE,YAAW,aAAa,CAAC,OAAO,CAAC;IAKhF,4FAA4F;IAC5F,OAAO,CAAC,QAAQ,CAAC,OAAO;IAL5B,8DAA8D;IAC9D,SAAgB,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAM;IAE1D;IACI,4FAA4F;IAC3E,OAAO,GAAE,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,cAA2B,EAChH;IAEJ,6EAA6E;IACtE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,cAAc,CAGhF;IAED,qDAAqD;IACrD,IAAW,YAAY,IAAI,SAAS,MAAM,EAAE,CAE3C;IAED,0CAA0C;IACnC,KAAK,IAAI,IAAI,CAEnB;CACJ"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// src/runner.ts
|
|
2
|
+
/**
|
|
3
|
+
* A runner that records what it was asked to run instead of running it. It is
|
|
4
|
+
* the second adapter at the command seam: tests and pack authors use it to
|
|
5
|
+
* check what a function would execute without a world to execute it against.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* const runner = new RecordingCommandRunner();
|
|
10
|
+
* new FunctionExecutor({ functions, runner }).run('pack:greet', { source: console });
|
|
11
|
+
* expect(runner.commandLines).toEqual(['say hello']);
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
var RecordingCommandRunner = class {
|
|
15
|
+
respond;
|
|
16
|
+
/** Every command handed to the runner, in execution order. */
|
|
17
|
+
recorded = [];
|
|
18
|
+
constructor(respond = () => ({})) {
|
|
19
|
+
this.respond = respond;
|
|
20
|
+
}
|
|
21
|
+
/** Records the command and returns whatever the configured response says. */
|
|
22
|
+
run(commandLine, context) {
|
|
23
|
+
this.recorded.push({
|
|
24
|
+
commandLine,
|
|
25
|
+
context
|
|
26
|
+
});
|
|
27
|
+
return this.respond(commandLine, context);
|
|
28
|
+
}
|
|
29
|
+
/** The recorded command text, in execution order. */
|
|
30
|
+
get commandLines() {
|
|
31
|
+
return this.recorded.map((entry) => entry.commandLine);
|
|
32
|
+
}
|
|
33
|
+
/** Forgets everything recorded so far. */
|
|
34
|
+
clear() {
|
|
35
|
+
this.recorded.length = 0;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
export { RecordingCommandRunner };
|
|
39
|
+
|
|
40
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLmVzLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW5uZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGUgc2VhbSBiZXR3ZWVuIHRoaXMgcGFja2FnZSBhbmQgdGhlIGNvbW1hbmRzLiBUaGlzIHBhY2thZ2UgcnVucyBmdW5jdGlvbnNcbiAqIGFuZCBuZXZlciBpbXBsZW1lbnRzIGEgY29tbWFuZDogZXZlcnkgbGluZSBpdCBkb2VzIG5vdCBoYW5kbGUgaXRzZWxmIGdvZXMgdG9cbiAqIGEge0BsaW5rIENvbW1hbmRSdW5uZXJ9LCB3aGljaCBpcyB3aGVyZSB0aGUgc2VydmVyJ3MgQnJpZ2FkaWVyIGRpc3BhdGNoZXJcbiAqIHBsdWdzIGluLlxuICovXG5cbi8qKiBXaGF0IGEgY29tbWFuZCBpcyB0b2xkIGFib3V0IHRoZSBsaW5lIGl0IHdhcyByZWFjaGVkIGZyb20uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRDb250ZXh0PFRTb3VyY2UgPSB1bmtub3duPiB7XG4gICAgLyoqIFdoYXRldmVyIHRoZSBzZXJ2ZXIgdXNlcyBhcyBhIGNvbW1hbmQgc291cmNlLCBwYXNzZWQgdGhyb3VnaCB1bnRvdWNoZWQuICovXG4gICAgc291cmNlOiBUU291cmNlO1xuICAgIC8qKiBUaGUgbmFtZXNwYWNlZCBpZCBvZiB0aGUgZnVuY3Rpb24gdGhlIGxpbmUgYmVsb25ncyB0by4gKi9cbiAgICBmdW5jdGlvbklkOiBzdHJpbmc7XG4gICAgLyoqIFRoZSAxLWJhc2VkIGxpbmUgb2YgdGhhdCBmdW5jdGlvbidzIGZpbGUuICovXG4gICAgbGluZTogbnVtYmVyO1xufVxuXG4vKiogV2hhdCBhIGNvbW1hbmQgcmVwb3J0cyBiYWNrLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kT3V0Y29tZSB7XG4gICAgLyoqIFRoZSBjb21tYW5kJ3MgaW50ZWdlciByZXN1bHQsIGFzIEJyaWdhZGllciBkZWZpbmVzIGl0LiBEZWZhdWx0cyB0byAwLiAqL1xuICAgIHJlc3VsdD86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBIb3cgbWFueSBjb250ZXh0cyB0aGUgY29tbWFuZCBjcmVhdGVkLCB3aGljaCBpcyB3aGF0IGBtYXhDb21tYW5kRm9ya3NgXG4gICAgICogY291bnRzLiBgZXhlY3V0ZSBhcyBAZWAgd2l0aCBmaXZlIG1hdGNoaW5nIGVudGl0aWVzIHJlcG9ydHMgNS4gQSBjb21tYW5kXG4gICAgICogdGhhdCBydW5zIGluIG9uZSBjb250ZXh0IHJlcG9ydHMgbm90aGluZy5cbiAgICAgKi9cbiAgICBmb3Jrcz86IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBTZXQgd2hlbiB0aGUgbGluZSBlbmRlZCB0aGUgZnVuY3Rpb24gaXQgYmVsb25ncyB0bywgd2hpY2ggaXMgd2hhdFxuICAgICAqIGAvcmV0dXJuYCBkb2VzLiBUaGUgZXhlY3V0b3IgZHJvcHMgdGhhdCBmdW5jdGlvbidzIHJlbWFpbmluZyBsaW5lcyBhbmRcbiAgICAgKiBjYXJyaWVzIG9uIHdpdGggd2hhdGV2ZXIgY2FsbGVkIGl0LlxuICAgICAqXG4gICAgICogYHZhbHVlYCBpcyB3aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zLiBgL3JldHVybiBmYWlsYCwgYW5kIGFcbiAgICAgKiBgL3JldHVybiBydW5gIHdob3NlIGNvbW1hbmQgZmFpbGVkLCBlbmQgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgb25lLCB3aGljaFxuICAgICAqIGlzIHRoZSBjYXNlIGBleGVjdXRlIGlmIGZ1bmN0aW9uYCBkb2VzIG5vdCBtYXRjaC5cbiAgICAgKi9cbiAgICByZXR1cm5lZD86IHsgcmVhZG9ubHkgdmFsdWU/OiBudW1iZXIgfTtcbn1cblxuLyoqIFJ1bnMgb25lIGNvbW1hbmQgbGluZS4gVGhlIHNlcnZlcidzIGRpc3BhdGNoZXIgaXMgdGhlIHJlYWwgYWRhcHRlciBhdCB0aGlzIHNlYW0uICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1hbmRSdW5uZXI8VFNvdXJjZSA9IHVua25vd24+IHtcbiAgICAvKipcbiAgICAgKiBSdW5zIG9uZSBjb21tYW5kLCB3cml0dGVuIHdpdGhvdXQgYSBsZWFkaW5nIHNsYXNoLlxuICAgICAqXG4gICAgICogVGhlIHJ1bnRpbWUgbmV2ZXIgY2FsbHMgdGhpcyB3aXRoIGEgY29tbWFuZCB0aGUgbGluZSBmb3JtYXQgYWxyZWFkeVxuICAgICAqIGhhbmRsZXMsIHNvIGEgYGZ1bmN0aW9uYCBsaW5lIG5ldmVyIHJlYWNoZXMgaXQuIFRocm93aW5nIGlzIGFsbG93ZWQ6IHRoZVxuICAgICAqIGV4ZWN1dG9yIGNhdGNoZXMgaXQsIHJlcG9ydHMgaXQsIGFuZCBjYXJyaWVzIG9uIHdpdGggdGhlIG5leHQgbGluZSwgdGhlXG4gICAgICogd2F5IG9uZSBmYWlsaW5nIGNvbW1hbmQgZG9lcyBub3QgYWJvcnQgYSBKYXZhIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHJ1bihjb21tYW5kTGluZTogc3RyaW5nLCBjb250ZXh0OiBDb21tYW5kQ29udGV4dDxUU291cmNlPik6IENvbW1hbmRPdXRjb21lO1xufVxuXG4vKiogT25lIGNvbW1hbmQgYSB7QGxpbmsgUmVjb3JkaW5nQ29tbWFuZFJ1bm5lcn0gd2FzIGFza2VkIHRvIHJ1bi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZWRDb21tYW5kPFRTb3VyY2UgPSB1bmtub3duPiB7XG4gICAgY29tbWFuZExpbmU6IHN0cmluZztcbiAgICBjb250ZXh0OiBDb21tYW5kQ29udGV4dDxUU291cmNlPjtcbn1cblxuLyoqXG4gKiBBIHJ1bm5lciB0aGF0IHJlY29yZHMgd2hhdCBpdCB3YXMgYXNrZWQgdG8gcnVuIGluc3RlYWQgb2YgcnVubmluZyBpdC4gSXQgaXNcbiAqIHRoZSBzZWNvbmQgYWRhcHRlciBhdCB0aGUgY29tbWFuZCBzZWFtOiB0ZXN0cyBhbmQgcGFjayBhdXRob3JzIHVzZSBpdCB0b1xuICogY2hlY2sgd2hhdCBhIGZ1bmN0aW9uIHdvdWxkIGV4ZWN1dGUgd2l0aG91dCBhIHdvcmxkIHRvIGV4ZWN1dGUgaXQgYWdhaW5zdC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IHJ1bm5lciA9IG5ldyBSZWNvcmRpbmdDb21tYW5kUnVubmVyKCk7XG4gKiBuZXcgRnVuY3Rpb25FeGVjdXRvcih7IGZ1bmN0aW9ucywgcnVubmVyIH0pLnJ1bigncGFjazpncmVldCcsIHsgc291cmNlOiBjb25zb2xlIH0pO1xuICogZXhwZWN0KHJ1bm5lci5jb21tYW5kTGluZXMpLnRvRXF1YWwoWydzYXkgaGVsbG8nXSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZGluZ0NvbW1hbmRSdW5uZXI8VFNvdXJjZSA9IHVua25vd24+IGltcGxlbWVudHMgQ29tbWFuZFJ1bm5lcjxUU291cmNlPiB7XG4gICAgLyoqIEV2ZXJ5IGNvbW1hbmQgaGFuZGVkIHRvIHRoZSBydW5uZXIsIGluIGV4ZWN1dGlvbiBvcmRlci4gKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVjb3JkZWQ6IFJlY29yZGVkQ29tbWFuZDxUU291cmNlPltdID0gW107XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIC8qKiBEZWNpZGVzIHdoYXQgZWFjaCBjb21tYW5kIHJlcG9ydHMgYmFjay4gRXZlcnl0aGluZyBzdWNjZWVkcyB3aXRoIG5vIGZvcmtzIGJ5IGRlZmF1bHQuICovXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzcG9uZDogKGNvbW1hbmRMaW5lOiBzdHJpbmcsIGNvbnRleHQ6IENvbW1hbmRDb250ZXh0PFRTb3VyY2U+KSA9PiBDb21tYW5kT3V0Y29tZSA9ICgpID0+ICh7fSlcbiAgICApIHt9XG5cbiAgICAvKiogUmVjb3JkcyB0aGUgY29tbWFuZCBhbmQgcmV0dXJucyB3aGF0ZXZlciB0aGUgY29uZmlndXJlZCByZXNwb25zZSBzYXlzLiAqL1xuICAgIHB1YmxpYyBydW4oY29tbWFuZExpbmU6IHN0cmluZywgY29udGV4dDogQ29tbWFuZENvbnRleHQ8VFNvdXJjZT4pOiBDb21tYW5kT3V0Y29tZSB7XG4gICAgICAgIHRoaXMucmVjb3JkZWQucHVzaCh7IGNvbW1hbmRMaW5lLCBjb250ZXh0IH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNwb25kKGNvbW1hbmRMaW5lLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIHJlY29yZGVkIGNvbW1hbmQgdGV4dCwgaW4gZXhlY3V0aW9uIG9yZGVyLiAqL1xuICAgIHB1YmxpYyBnZXQgY29tbWFuZExpbmVzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjb3JkZWQubWFwKChlbnRyeSkgPT4gZW50cnkuY29tbWFuZExpbmUpO1xuICAgIH1cblxuICAgIC8qKiBGb3JnZXRzIGV2ZXJ5dGhpbmcgcmVjb3JkZWQgc28gZmFyLiAqL1xuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWNvcmRlZC5sZW5ndGggPSAwO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQXNFQSxJQUFhLHlCQUFiLE1BQXlGO0NBTWhFOztDQUpyQixXQUF1RCxDQUFDO0NBRXhELFlBRUksaUJBQTZHLENBQUMsSUFDaEg7RUFEbUIsS0FBQSxVQUFBO0NBQ2xCOztDQUdILElBQVcsYUFBcUIsU0FBa0Q7RUFDOUUsS0FBSyxTQUFTLEtBQUs7R0FBRTtHQUFhO0VBQVEsQ0FBQztFQUMzQyxPQUFPLEtBQUssUUFBUSxhQUFhLE9BQU87Q0FDNUM7O0NBR0EsSUFBVyxlQUFrQztFQUN6QyxPQUFPLEtBQUssU0FBUyxLQUFLLFVBQVUsTUFBTSxXQUFXO0NBQ3pEOztDQUdBLFFBQXFCO0VBQ2pCLEtBQUssU0FBUyxTQUFTO0NBQzNCO0FBQ0oifQ==
|