@jsprismarine/mcfunction 0.0.0-stage → 0.16.0-unstable-20261029132853
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 +181 -2
- 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 -3
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const require_identifiers = require("./identifiers.cjs.cjs");
|
|
4
|
+
// src/tags.ts
|
|
5
|
+
/** The tag whose functions run once after the packs load. */
|
|
6
|
+
var LOAD_FUNCTION_TAG = "minecraft:load";
|
|
7
|
+
/** The tag whose functions run on every server tick. */
|
|
8
|
+
var TICK_FUNCTION_TAG = "minecraft:tick";
|
|
9
|
+
/**
|
|
10
|
+
* Expands a function tag into the functions it names.
|
|
11
|
+
*
|
|
12
|
+
* Entries apply in order and a nested `#tag` expands where it appears. A
|
|
13
|
+
* function already named earlier is not repeated. A cycle between tags is
|
|
14
|
+
* reported and cut rather than followed, and a missing entry is reported only
|
|
15
|
+
* when the entry does not say `required: false`.
|
|
16
|
+
*
|
|
17
|
+
* @param tagId - The tag id, with or without the leading `#`.
|
|
18
|
+
*/
|
|
19
|
+
var resolveFunctionTag = (lookup, tagId) => {
|
|
20
|
+
const functions = [];
|
|
21
|
+
const diagnostics = [];
|
|
22
|
+
const seen = /* @__PURE__ */ new Set();
|
|
23
|
+
const open = /* @__PURE__ */ new Set();
|
|
24
|
+
const visit = (id, required) => {
|
|
25
|
+
if (open.has(id)) {
|
|
26
|
+
diagnostics.push({
|
|
27
|
+
severity: "error",
|
|
28
|
+
code: "tag.cycle",
|
|
29
|
+
message: `the function tag #${id} references itself`
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const tag = lookup.get(id);
|
|
34
|
+
if (!tag) {
|
|
35
|
+
if (required) diagnostics.push({
|
|
36
|
+
severity: "error",
|
|
37
|
+
code: "tag.missing-entry",
|
|
38
|
+
message: `the function tag #${id} does not exist`
|
|
39
|
+
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
open.add(id);
|
|
43
|
+
for (const entry of tag.values) {
|
|
44
|
+
const text = typeof entry === "string" ? entry : entry.id;
|
|
45
|
+
const entryRequired = typeof entry === "string" ? true : entry.required !== false;
|
|
46
|
+
const reference = require_identifiers.parseFunctionReference(text);
|
|
47
|
+
if (!reference) {
|
|
48
|
+
diagnostics.push({
|
|
49
|
+
severity: "error",
|
|
50
|
+
code: "tag.missing-entry",
|
|
51
|
+
message: `'${text}' in #${id} is not a valid function reference`
|
|
52
|
+
});
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (reference.kind === "tag") {
|
|
56
|
+
visit(reference.id, entryRequired);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
if (seen.has(reference.id)) continue;
|
|
60
|
+
seen.add(reference.id);
|
|
61
|
+
functions.push(reference.id);
|
|
62
|
+
}
|
|
63
|
+
open.delete(id);
|
|
64
|
+
};
|
|
65
|
+
const start = require_identifiers.normalizeIdentifier(tagId.startsWith("#") ? tagId.slice(1) : tagId);
|
|
66
|
+
if (start === void 0) return {
|
|
67
|
+
functions: [],
|
|
68
|
+
exists: false,
|
|
69
|
+
diagnostics: [{
|
|
70
|
+
severity: "error",
|
|
71
|
+
code: "tag.missing-entry",
|
|
72
|
+
message: `'${tagId}' is not a valid tag id`
|
|
73
|
+
}]
|
|
74
|
+
};
|
|
75
|
+
const exists = lookup.get(start) !== void 0;
|
|
76
|
+
visit(start, false);
|
|
77
|
+
return {
|
|
78
|
+
functions,
|
|
79
|
+
exists,
|
|
80
|
+
diagnostics
|
|
81
|
+
};
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* The tags a pack stack declares. Tags merge instead of replacing: every pack
|
|
85
|
+
* that declares the same tag adds its entries, and only `replace: true`
|
|
86
|
+
* discards what came before, which is how one pack adds to `minecraft:tick`
|
|
87
|
+
* without hiding another pack's entry.
|
|
88
|
+
*/
|
|
89
|
+
var FunctionTagRegistry = class {
|
|
90
|
+
tags = /* @__PURE__ */ new Map();
|
|
91
|
+
/** Merges one tag file into the registry, honoring its `replace` flag. */
|
|
92
|
+
add(tagId, tag) {
|
|
93
|
+
const id = require_identifiers.normalizeIdentifier(tagId.startsWith("#") ? tagId.slice(1) : tagId);
|
|
94
|
+
if (id === void 0) return;
|
|
95
|
+
const existing = tag.replace ? void 0 : this.tags.get(id);
|
|
96
|
+
this.tags.set(id, [...existing ?? [], ...tag.values]);
|
|
97
|
+
}
|
|
98
|
+
/** Returns the merged tag, or undefined when no pack declared it. */
|
|
99
|
+
get(tagId) {
|
|
100
|
+
const values = this.tags.get(tagId);
|
|
101
|
+
return values ? { values } : void 0;
|
|
102
|
+
}
|
|
103
|
+
/** Every tag id the stack declared. */
|
|
104
|
+
ids() {
|
|
105
|
+
return [...this.tags.keys()];
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
exports.FunctionTagRegistry = FunctionTagRegistry;
|
|
109
|
+
exports.LOAD_FUNCTION_TAG = LOAD_FUNCTION_TAG;
|
|
110
|
+
exports.TICK_FUNCTION_TAG = TICK_FUNCTION_TAG;
|
|
111
|
+
exports.resolveFunctionTag = resolveFunctionTag;
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5janMuY2pzIiwibmFtZXMiOlsicGFyc2VGdW5jdGlvblJlZmVyZW5jZSIsIm5vcm1hbGl6ZUlkZW50aWZpZXIiXSwic291cmNlcyI6WyIuLi9zcmMvdGFncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZ1bmN0aW9uIHRhZ3MsIGluY2x1ZGluZyB0aGUgdHdvIHRoZSBzZXJ2ZXIgbG9va3MgdXAgYnkgbmFtZS4gSmF2YSdzXG4gKiBgU2VydmVyRnVuY3Rpb25NYW5hZ2VyYCBkZWNsYXJlcyBleGFjdGx5IHR3byB0YWcgY29uc3RhbnRzLCBgbWluZWNyYWZ0OnRpY2tgXG4gKiBhbmQgYG1pbmVjcmFmdDpsb2FkYCwgYW5kIG5vdGhpbmcgZWxzZSBpbiB0aGUgc2VydmVyIHJlYWRzIGEgZnVuY3Rpb24gdGFnXG4gKiBvbiBpdHMgb3duLiBFdmVyeSBvdGhlciB0YWcgaXMgcmVhY2hlZCBmcm9tIGEgYGZ1bmN0aW9uICNuYW1lc3BhY2U6dGFnYFxuICogbGluZS5cbiAqXG4gKiBWYW5pbGxhIHNoaXBzIG5laXRoZXIgZmlsZTogdGhlIDI2LjMgc2VydmVyIGphciBoYXMgODgzIHRhZyBmaWxlcyBhbmQgbm9uZVxuICogb2YgdGhlbSB0YWdzIHRoZSBmdW5jdGlvbiByZWdpc3RyeS4gQSBwYWNrIHN1cHBsaWVzIGJvdGguXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEaWFnbm9zdGljIH0gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQgeyBub3JtYWxpemVJZGVudGlmaWVyLCBwYXJzZUZ1bmN0aW9uUmVmZXJlbmNlIH0gZnJvbSAnLi9pZGVudGlmaWVycyc7XG5cbi8qKiBUaGUgdGFnIHdob3NlIGZ1bmN0aW9ucyBydW4gb25jZSBhZnRlciB0aGUgcGFja3MgbG9hZC4gKi9cbmV4cG9ydCBjb25zdCBMT0FEX0ZVTkNUSU9OX1RBRyA9ICdtaW5lY3JhZnQ6bG9hZCc7XG5cbi8qKiBUaGUgdGFnIHdob3NlIGZ1bmN0aW9ucyBydW4gb24gZXZlcnkgc2VydmVyIHRpY2suICovXG5leHBvcnQgY29uc3QgVElDS19GVU5DVElPTl9UQUcgPSAnbWluZWNyYWZ0OnRpY2snO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHRhZyBmaWxlOiBhIGZ1bmN0aW9uIGlkLCBhIGAjdGFnYCByZWZlcmVuY2UsIG9yIHRoZSBvYmplY3RcbiAqIGZvcm0sIHdob3NlIGByZXF1aXJlZDogZmFsc2VgIGxldHMgYSBwYWNrIHJlZmVyZW5jZSBzb21ldGhpbmcgdGhhdCBtYXkgbm90XG4gKiBiZSBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uVGFnRW50cnkgPSBzdHJpbmcgfCB7IGlkOiBzdHJpbmc7IHJlcXVpcmVkPzogYm9vbGVhbiB9O1xuXG4vKiogT25lIHRhZyBmaWxlJ3MgY29udGVudHMgYWZ0ZXIgdGhlIHBhY2tzIHRoYXQgZGVjbGFyZSBpdCBhcmUgbWVyZ2VkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblRhZyB7XG4gICAgdmFsdWVzOiByZWFkb25seSBGdW5jdGlvblRhZ0VudHJ5W107XG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhZyBkaXNjYXJkcyB3aGF0IGVhcmxpZXIgcGFja3MgY29udHJpYnV0ZWQuICovXG4gICAgcmVwbGFjZT86IGJvb2xlYW47XG59XG5cbi8qKiBXaGVyZSB7QGxpbmsgcmVzb2x2ZUZ1bmN0aW9uVGFnfSByZWFkcyB0YWdzIGZyb20uICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVGFnTG9va3VwIHtcbiAgICAvKiogUmV0dXJucyB0aGUgdGFnIHJlZ2lzdGVyZWQgdW5kZXIgYSBuYW1lc3BhY2VkIGlkLCB3aXRob3V0IHRoZSBgI2AuICovXG4gICAgZ2V0KHRhZ0lkOiBzdHJpbmcpOiBGdW5jdGlvblRhZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBmdW5jdGlvbnMgYSB0YWcgbmFtZXMsIGluIHRoZSBvcmRlciB0aGV5IHJ1biwgcGx1cyBhbnl0aGluZyB0aGF0IGRpZCBub3QgcmVzb2x2ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnUmVzb2x1dGlvbiB7XG4gICAgLyoqIFRoZSBmdW5jdGlvbiBpZHMsIGVhY2ggb25jZSwgaW4gdGFnIG9yZGVyIHdpdGggbmVzdGVkIHRhZ3MgZXhwYW5kZWQgaW4gcGxhY2UuICovXG4gICAgZnVuY3Rpb25zOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICAvKiogV2hldGhlciB0aGUgdGFnIGl0c2VsZiBleGlzdHMuIEFuIGVtcHR5IHRhZyB0aGF0IGV4aXN0cyByZXNvbHZlcyB0byBubyBmdW5jdGlvbnMuICovXG4gICAgZXhpc3RzOiBib29sZWFuO1xuICAgIGRpYWdub3N0aWNzOiByZWFkb25seSBEaWFnbm9zdGljW107XG59XG5cbi8qKlxuICogRXhwYW5kcyBhIGZ1bmN0aW9uIHRhZyBpbnRvIHRoZSBmdW5jdGlvbnMgaXQgbmFtZXMuXG4gKlxuICogRW50cmllcyBhcHBseSBpbiBvcmRlciBhbmQgYSBuZXN0ZWQgYCN0YWdgIGV4cGFuZHMgd2hlcmUgaXQgYXBwZWFycy4gQVxuICogZnVuY3Rpb24gYWxyZWFkeSBuYW1lZCBlYXJsaWVyIGlzIG5vdCByZXBlYXRlZC4gQSBjeWNsZSBiZXR3ZWVuIHRhZ3MgaXNcbiAqIHJlcG9ydGVkIGFuZCBjdXQgcmF0aGVyIHRoYW4gZm9sbG93ZWQsIGFuZCBhIG1pc3NpbmcgZW50cnkgaXMgcmVwb3J0ZWQgb25seVxuICogd2hlbiB0aGUgZW50cnkgZG9lcyBub3Qgc2F5IGByZXF1aXJlZDogZmFsc2VgLlxuICpcbiAqIEBwYXJhbSB0YWdJZCAtIFRoZSB0YWcgaWQsIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBgI2AuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlRnVuY3Rpb25UYWcgPSAobG9va3VwOiBGdW5jdGlvblRhZ0xvb2t1cCwgdGFnSWQ6IHN0cmluZyk6IFRhZ1Jlc29sdXRpb24gPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IG9wZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IHZpc2l0ID0gKGlkOiBzdHJpbmcsIHJlcXVpcmVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChvcGVuLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICd0YWcuY3ljbGUnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0aGUgZnVuY3Rpb24gdGFnICMke2lkfSByZWZlcmVuY2VzIGl0c2VsZmBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFnID0gbG9va3VwLmdldChpZCk7XG4gICAgICAgIGlmICghdGFnKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICd0YWcubWlzc2luZy1lbnRyeScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0aGUgZnVuY3Rpb24gdGFnICMke2lkfSBkb2VzIG5vdCBleGlzdGBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZW4uYWRkKGlkKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0YWcudmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5IDogZW50cnkuaWQ7XG4gICAgICAgICAgICBjb25zdCBlbnRyeVJlcXVpcmVkID0gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IHRydWUgOiBlbnRyeS5yZXF1aXJlZCAhPT0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSBwYXJzZUZ1bmN0aW9uUmVmZXJlbmNlKHRleHQpO1xuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICd0YWcubWlzc2luZy1lbnRyeScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAnJHt0ZXh0fScgaW4gIyR7aWR9IGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIHJlZmVyZW5jZWBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5raW5kID09PSAndGFnJykge1xuICAgICAgICAgICAgICAgIHZpc2l0KHJlZmVyZW5jZS5pZCwgZW50cnlSZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhyZWZlcmVuY2UuaWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlZW4uYWRkKHJlZmVyZW5jZS5pZCk7XG4gICAgICAgICAgICBmdW5jdGlvbnMucHVzaChyZWZlcmVuY2UuaWQpO1xuICAgICAgICB9XG4gICAgICAgIG9wZW4uZGVsZXRlKGlkKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRhZ0lkLnN0YXJ0c1dpdGgoJyMnKSA/IHRhZ0lkLnNsaWNlKDEpIDogdGFnSWQpO1xuICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jdGlvbnM6IFtdLFxuICAgICAgICAgICAgZXhpc3RzOiBmYWxzZSxcbiAgICAgICAgICAgIGRpYWdub3N0aWNzOiBbeyBzZXZlcml0eTogJ2Vycm9yJywgY29kZTogJ3RhZy5taXNzaW5nLWVudHJ5JywgbWVzc2FnZTogYCcke3RhZ0lkfScgaXMgbm90IGEgdmFsaWQgdGFnIGlkYCB9XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0cyA9IGxvb2t1cC5nZXQoc3RhcnQpICE9PSB1bmRlZmluZWQ7XG4gICAgdmlzaXQoc3RhcnQsIGZhbHNlKTtcbiAgICByZXR1cm4geyBmdW5jdGlvbnMsIGV4aXN0cywgZGlhZ25vc3RpY3MgfTtcbn07XG5cbi8qKlxuICogVGhlIHRhZ3MgYSBwYWNrIHN0YWNrIGRlY2xhcmVzLiBUYWdzIG1lcmdlIGluc3RlYWQgb2YgcmVwbGFjaW5nOiBldmVyeSBwYWNrXG4gKiB0aGF0IGRlY2xhcmVzIHRoZSBzYW1lIHRhZyBhZGRzIGl0cyBlbnRyaWVzLCBhbmQgb25seSBgcmVwbGFjZTogdHJ1ZWBcbiAqIGRpc2NhcmRzIHdoYXQgY2FtZSBiZWZvcmUsIHdoaWNoIGlzIGhvdyBvbmUgcGFjayBhZGRzIHRvIGBtaW5lY3JhZnQ6dGlja2BcbiAqIHdpdGhvdXQgaGlkaW5nIGFub3RoZXIgcGFjaydzIGVudHJ5LlxuICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25UYWdSZWdpc3RyeSBpbXBsZW1lbnRzIEZ1bmN0aW9uVGFnTG9va3VwIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhZ3MgPSBuZXcgTWFwPHN0cmluZywgRnVuY3Rpb25UYWdFbnRyeVtdPigpO1xuXG4gICAgLyoqIE1lcmdlcyBvbmUgdGFnIGZpbGUgaW50byB0aGUgcmVnaXN0cnksIGhvbm9yaW5nIGl0cyBgcmVwbGFjZWAgZmxhZy4gKi9cbiAgICBwdWJsaWMgYWRkKHRhZ0lkOiBzdHJpbmcsIHRhZzogRnVuY3Rpb25UYWcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRhZ0lkLnN0YXJ0c1dpdGgoJyMnKSA/IHRhZ0lkLnNsaWNlKDEpIDogdGFnSWQpO1xuICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGFnLnJlcGxhY2UgPyB1bmRlZmluZWQgOiB0aGlzLnRhZ3MuZ2V0KGlkKTtcbiAgICAgICAgdGhpcy50YWdzLnNldChpZCwgWy4uLihleGlzdGluZyA/PyBbXSksIC4uLnRhZy52YWx1ZXNdKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyB0aGUgbWVyZ2VkIHRhZywgb3IgdW5kZWZpbmVkIHdoZW4gbm8gcGFjayBkZWNsYXJlZCBpdC4gKi9cbiAgICBwdWJsaWMgZ2V0KHRhZ0lkOiBzdHJpbmcpOiBGdW5jdGlvblRhZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudGFncy5nZXQodGFnSWQpO1xuICAgICAgICByZXR1cm4gdmFsdWVzID8geyB2YWx1ZXMgfSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogRXZlcnkgdGFnIGlkIHRoZSBzdGFjayBkZWNsYXJlZC4gKi9cbiAgICBwdWJsaWMgaWRzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnRhZ3Mua2V5cygpXTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBZUEsSUFBYSxvQkFBb0I7O0FBR2pDLElBQWEsb0JBQW9COzs7Ozs7Ozs7OztBQXlDakMsSUFBYSxzQkFBc0IsUUFBMkIsVUFBaUM7Q0FDM0YsTUFBTSxZQUFzQixDQUFDO0NBQzdCLE1BQU0sY0FBNEIsQ0FBQztDQUNuQyxNQUFNLHVCQUFPLElBQUksSUFBWTtDQUM3QixNQUFNLHVCQUFPLElBQUksSUFBWTtDQUU3QixNQUFNLFNBQVMsSUFBWSxhQUE0QjtFQUNuRCxJQUFJLEtBQUssSUFBSSxFQUFFLEdBQUc7R0FDZCxZQUFZLEtBQUs7SUFDYixVQUFVO0lBQ1YsTUFBTTtJQUNOLFNBQVMscUJBQXFCLEdBQUc7R0FDckMsQ0FBQztHQUNEO0VBQ0o7RUFFQSxNQUFNLE1BQU0sT0FBTyxJQUFJLEVBQUU7RUFDekIsSUFBSSxDQUFDLEtBQUs7R0FDTixJQUFJLFVBQ0EsWUFBWSxLQUFLO0lBQ2IsVUFBVTtJQUNWLE1BQU07SUFDTixTQUFTLHFCQUFxQixHQUFHO0dBQ3JDLENBQUM7R0FFTDtFQUNKO0VBRUEsS0FBSyxJQUFJLEVBQUU7RUFDWCxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVE7R0FDNUIsTUFBTSxPQUFPLE9BQU8sVUFBVSxXQUFXLFFBQVEsTUFBTTtHQUN2RCxNQUFNLGdCQUFnQixPQUFPLFVBQVUsV0FBVyxPQUFPLE1BQU0sYUFBYTtHQUM1RSxNQUFNLFlBQVlBLG9CQUFBQSx1QkFBdUIsSUFBSTtHQUM3QyxJQUFJLENBQUMsV0FBVztJQUNaLFlBQVksS0FBSztLQUNiLFVBQVU7S0FDVixNQUFNO0tBQ04sU0FBUyxJQUFJLEtBQUssUUFBUSxHQUFHO0lBQ2pDLENBQUM7SUFDRDtHQUNKO0dBRUEsSUFBSSxVQUFVLFNBQVMsT0FBTztJQUMxQixNQUFNLFVBQVUsSUFBSSxhQUFhO0lBQ2pDO0dBQ0o7R0FFQSxJQUFJLEtBQUssSUFBSSxVQUFVLEVBQUUsR0FBRztHQUM1QixLQUFLLElBQUksVUFBVSxFQUFFO0dBQ3JCLFVBQVUsS0FBSyxVQUFVLEVBQUU7RUFDL0I7RUFDQSxLQUFLLE9BQU8sRUFBRTtDQUNsQjtDQUVBLE1BQU0sUUFBUUMsb0JBQUFBLG9CQUFvQixNQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sTUFBTSxDQUFDLElBQUksS0FBSztDQUNoRixJQUFJLFVBQVUsS0FBQSxHQUNWLE9BQU87RUFDSCxXQUFXLENBQUM7RUFDWixRQUFRO0VBQ1IsYUFBYSxDQUFDO0dBQUUsVUFBVTtHQUFTLE1BQU07R0FBcUIsU0FBUyxJQUFJLE1BQU07RUFBeUIsQ0FBQztDQUMvRztDQUdKLE1BQU0sU0FBUyxPQUFPLElBQUksS0FBSyxNQUFNLEtBQUE7Q0FDckMsTUFBTSxPQUFPLEtBQUs7Q0FDbEIsT0FBTztFQUFFO0VBQVc7RUFBUTtDQUFZO0FBQzVDOzs7Ozs7O0FBUUEsSUFBYSxzQkFBYixNQUE4RDtDQUMxRCx1QkFBd0IsSUFBSSxJQUFnQzs7Q0FHNUQsSUFBVyxPQUFlLEtBQXdCO0VBQzlDLE1BQU0sS0FBS0Esb0JBQUFBLG9CQUFvQixNQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sTUFBTSxDQUFDLElBQUksS0FBSztFQUM3RSxJQUFJLE9BQU8sS0FBQSxHQUFXO0VBRXRCLE1BQU0sV0FBVyxJQUFJLFVBQVUsS0FBQSxJQUFZLEtBQUssS0FBSyxJQUFJLEVBQUU7RUFDM0QsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUksWUFBWSxDQUFDLEdBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQztDQUMxRDs7Q0FHQSxJQUFXLE9BQXdDO0VBQy9DLE1BQU0sU0FBUyxLQUFLLEtBQUssSUFBSSxLQUFLO0VBQ2xDLE9BQU8sU0FBUyxFQUFFLE9BQU8sSUFBSSxLQUFBO0NBQ2pDOztDQUdBLE1BQWdDO0VBQzVCLE9BQU8sQ0FBQyxHQUFHLEtBQUssS0FBSyxLQUFLLENBQUM7Q0FDL0I7QUFDSiJ9
|
package/dist/tags.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Function tags, including the two the server looks up by name. Java's
|
|
3
|
+
* `ServerFunctionManager` declares exactly two tag constants, `minecraft:tick`
|
|
4
|
+
* and `minecraft:load`, and nothing else in the server reads a function tag
|
|
5
|
+
* on its own. Every other tag is reached from a `function #namespace:tag`
|
|
6
|
+
* line.
|
|
7
|
+
*
|
|
8
|
+
* Vanilla ships neither file: the 26.3 server jar has 883 tag files and none
|
|
9
|
+
* of them tags the function registry. A pack supplies both.
|
|
10
|
+
*/
|
|
11
|
+
import type { Diagnostic } from './diagnostics';
|
|
12
|
+
/** The tag whose functions run once after the packs load. */
|
|
13
|
+
export declare const LOAD_FUNCTION_TAG = "minecraft:load";
|
|
14
|
+
/** The tag whose functions run on every server tick. */
|
|
15
|
+
export declare const TICK_FUNCTION_TAG = "minecraft:tick";
|
|
16
|
+
/**
|
|
17
|
+
* One entry of a tag file: a function id, a `#tag` reference, or the object
|
|
18
|
+
* form, whose `required: false` lets a pack reference something that may not
|
|
19
|
+
* be installed.
|
|
20
|
+
*/
|
|
21
|
+
export type FunctionTagEntry = string | {
|
|
22
|
+
id: string;
|
|
23
|
+
required?: boolean;
|
|
24
|
+
};
|
|
25
|
+
/** One tag file's contents after the packs that declare it are merged. */
|
|
26
|
+
export interface FunctionTag {
|
|
27
|
+
values: readonly FunctionTagEntry[];
|
|
28
|
+
/** Whether the tag discards what earlier packs contributed. */
|
|
29
|
+
replace?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** Where {@link resolveFunctionTag} reads tags from. */
|
|
32
|
+
export interface FunctionTagLookup {
|
|
33
|
+
/** Returns the tag registered under a namespaced id, without the `#`. */
|
|
34
|
+
get(tagId: string): FunctionTag | undefined;
|
|
35
|
+
}
|
|
36
|
+
/** The functions a tag names, in the order they run, plus anything that did not resolve. */
|
|
37
|
+
export interface TagResolution {
|
|
38
|
+
/** The function ids, each once, in tag order with nested tags expanded in place. */
|
|
39
|
+
functions: readonly string[];
|
|
40
|
+
/** Whether the tag itself exists. An empty tag that exists resolves to no functions. */
|
|
41
|
+
exists: boolean;
|
|
42
|
+
diagnostics: readonly Diagnostic[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Expands a function tag into the functions it names.
|
|
46
|
+
*
|
|
47
|
+
* Entries apply in order and a nested `#tag` expands where it appears. A
|
|
48
|
+
* function already named earlier is not repeated. A cycle between tags is
|
|
49
|
+
* reported and cut rather than followed, and a missing entry is reported only
|
|
50
|
+
* when the entry does not say `required: false`.
|
|
51
|
+
*
|
|
52
|
+
* @param tagId - The tag id, with or without the leading `#`.
|
|
53
|
+
*/
|
|
54
|
+
export declare const resolveFunctionTag: (lookup: FunctionTagLookup, tagId: string) => TagResolution;
|
|
55
|
+
/**
|
|
56
|
+
* The tags a pack stack declares. Tags merge instead of replacing: every pack
|
|
57
|
+
* that declares the same tag adds its entries, and only `replace: true`
|
|
58
|
+
* discards what came before, which is how one pack adds to `minecraft:tick`
|
|
59
|
+
* without hiding another pack's entry.
|
|
60
|
+
*/
|
|
61
|
+
export declare class FunctionTagRegistry implements FunctionTagLookup {
|
|
62
|
+
private readonly tags;
|
|
63
|
+
/** Merges one tag file into the registry, honoring its `replace` flag. */
|
|
64
|
+
add(tagId: string, tag: FunctionTag): void;
|
|
65
|
+
/** Returns the merged tag, or undefined when no pack declared it. */
|
|
66
|
+
get(tagId: string): FunctionTag | undefined;
|
|
67
|
+
/** Every tag id the stack declared. */
|
|
68
|
+
ids(): readonly string[];
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=tags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../src/tags.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAGhD,6DAA6D;AAC7D,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD,wDAAwD;AACxD,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAElD;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3E,0EAA0E;AAC1E,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACpC,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAC9B,yEAAyE;IACzE,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAAC;CAC/C;AAED,4FAA4F;AAC5F,MAAM,WAAW,aAAa;IAC1B,oFAAoF;IACpF,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,wFAAwF;IACxF,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,WAAY,iBAAiB,SAAS,MAAM,KAAG,aAkE7E,CAAC;AAEF;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,iBAAiB;IACzD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyC;IAE9D,0EAA0E;IACnE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAMhD;IAED,qEAAqE;IAC9D,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGjD;IAED,uCAAuC;IAChC,GAAG,IAAI,SAAS,MAAM,EAAE,CAE9B;CACJ"}
|
package/dist/tags.es.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { normalizeIdentifier, parseFunctionReference } from "./identifiers.es.js";
|
|
2
|
+
// src/tags.ts
|
|
3
|
+
/** The tag whose functions run once after the packs load. */
|
|
4
|
+
var LOAD_FUNCTION_TAG = "minecraft:load";
|
|
5
|
+
/** The tag whose functions run on every server tick. */
|
|
6
|
+
var TICK_FUNCTION_TAG = "minecraft:tick";
|
|
7
|
+
/**
|
|
8
|
+
* Expands a function tag into the functions it names.
|
|
9
|
+
*
|
|
10
|
+
* Entries apply in order and a nested `#tag` expands where it appears. A
|
|
11
|
+
* function already named earlier is not repeated. A cycle between tags is
|
|
12
|
+
* reported and cut rather than followed, and a missing entry is reported only
|
|
13
|
+
* when the entry does not say `required: false`.
|
|
14
|
+
*
|
|
15
|
+
* @param tagId - The tag id, with or without the leading `#`.
|
|
16
|
+
*/
|
|
17
|
+
var resolveFunctionTag = (lookup, tagId) => {
|
|
18
|
+
const functions = [];
|
|
19
|
+
const diagnostics = [];
|
|
20
|
+
const seen = /* @__PURE__ */ new Set();
|
|
21
|
+
const open = /* @__PURE__ */ new Set();
|
|
22
|
+
const visit = (id, required) => {
|
|
23
|
+
if (open.has(id)) {
|
|
24
|
+
diagnostics.push({
|
|
25
|
+
severity: "error",
|
|
26
|
+
code: "tag.cycle",
|
|
27
|
+
message: `the function tag #${id} references itself`
|
|
28
|
+
});
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const tag = lookup.get(id);
|
|
32
|
+
if (!tag) {
|
|
33
|
+
if (required) diagnostics.push({
|
|
34
|
+
severity: "error",
|
|
35
|
+
code: "tag.missing-entry",
|
|
36
|
+
message: `the function tag #${id} does not exist`
|
|
37
|
+
});
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
open.add(id);
|
|
41
|
+
for (const entry of tag.values) {
|
|
42
|
+
const text = typeof entry === "string" ? entry : entry.id;
|
|
43
|
+
const entryRequired = typeof entry === "string" ? true : entry.required !== false;
|
|
44
|
+
const reference = parseFunctionReference(text);
|
|
45
|
+
if (!reference) {
|
|
46
|
+
diagnostics.push({
|
|
47
|
+
severity: "error",
|
|
48
|
+
code: "tag.missing-entry",
|
|
49
|
+
message: `'${text}' in #${id} is not a valid function reference`
|
|
50
|
+
});
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (reference.kind === "tag") {
|
|
54
|
+
visit(reference.id, entryRequired);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (seen.has(reference.id)) continue;
|
|
58
|
+
seen.add(reference.id);
|
|
59
|
+
functions.push(reference.id);
|
|
60
|
+
}
|
|
61
|
+
open.delete(id);
|
|
62
|
+
};
|
|
63
|
+
const start = normalizeIdentifier(tagId.startsWith("#") ? tagId.slice(1) : tagId);
|
|
64
|
+
if (start === void 0) return {
|
|
65
|
+
functions: [],
|
|
66
|
+
exists: false,
|
|
67
|
+
diagnostics: [{
|
|
68
|
+
severity: "error",
|
|
69
|
+
code: "tag.missing-entry",
|
|
70
|
+
message: `'${tagId}' is not a valid tag id`
|
|
71
|
+
}]
|
|
72
|
+
};
|
|
73
|
+
const exists = lookup.get(start) !== void 0;
|
|
74
|
+
visit(start, false);
|
|
75
|
+
return {
|
|
76
|
+
functions,
|
|
77
|
+
exists,
|
|
78
|
+
diagnostics
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* The tags a pack stack declares. Tags merge instead of replacing: every pack
|
|
83
|
+
* that declares the same tag adds its entries, and only `replace: true`
|
|
84
|
+
* discards what came before, which is how one pack adds to `minecraft:tick`
|
|
85
|
+
* without hiding another pack's entry.
|
|
86
|
+
*/
|
|
87
|
+
var FunctionTagRegistry = class {
|
|
88
|
+
tags = /* @__PURE__ */ new Map();
|
|
89
|
+
/** Merges one tag file into the registry, honoring its `replace` flag. */
|
|
90
|
+
add(tagId, tag) {
|
|
91
|
+
const id = normalizeIdentifier(tagId.startsWith("#") ? tagId.slice(1) : tagId);
|
|
92
|
+
if (id === void 0) return;
|
|
93
|
+
const existing = tag.replace ? void 0 : this.tags.get(id);
|
|
94
|
+
this.tags.set(id, [...existing ?? [], ...tag.values]);
|
|
95
|
+
}
|
|
96
|
+
/** Returns the merged tag, or undefined when no pack declared it. */
|
|
97
|
+
get(tagId) {
|
|
98
|
+
const values = this.tags.get(tagId);
|
|
99
|
+
return values ? { values } : void 0;
|
|
100
|
+
}
|
|
101
|
+
/** Every tag id the stack declared. */
|
|
102
|
+
ids() {
|
|
103
|
+
return [...this.tags.keys()];
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
export { FunctionTagRegistry, LOAD_FUNCTION_TAG, TICK_FUNCTION_TAG, resolveFunctionTag };
|
|
107
|
+
|
|
108
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy5lcy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvdGFncy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZ1bmN0aW9uIHRhZ3MsIGluY2x1ZGluZyB0aGUgdHdvIHRoZSBzZXJ2ZXIgbG9va3MgdXAgYnkgbmFtZS4gSmF2YSdzXG4gKiBgU2VydmVyRnVuY3Rpb25NYW5hZ2VyYCBkZWNsYXJlcyBleGFjdGx5IHR3byB0YWcgY29uc3RhbnRzLCBgbWluZWNyYWZ0OnRpY2tgXG4gKiBhbmQgYG1pbmVjcmFmdDpsb2FkYCwgYW5kIG5vdGhpbmcgZWxzZSBpbiB0aGUgc2VydmVyIHJlYWRzIGEgZnVuY3Rpb24gdGFnXG4gKiBvbiBpdHMgb3duLiBFdmVyeSBvdGhlciB0YWcgaXMgcmVhY2hlZCBmcm9tIGEgYGZ1bmN0aW9uICNuYW1lc3BhY2U6dGFnYFxuICogbGluZS5cbiAqXG4gKiBWYW5pbGxhIHNoaXBzIG5laXRoZXIgZmlsZTogdGhlIDI2LjMgc2VydmVyIGphciBoYXMgODgzIHRhZyBmaWxlcyBhbmQgbm9uZVxuICogb2YgdGhlbSB0YWdzIHRoZSBmdW5jdGlvbiByZWdpc3RyeS4gQSBwYWNrIHN1cHBsaWVzIGJvdGguXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEaWFnbm9zdGljIH0gZnJvbSAnLi9kaWFnbm9zdGljcyc7XG5pbXBvcnQgeyBub3JtYWxpemVJZGVudGlmaWVyLCBwYXJzZUZ1bmN0aW9uUmVmZXJlbmNlIH0gZnJvbSAnLi9pZGVudGlmaWVycyc7XG5cbi8qKiBUaGUgdGFnIHdob3NlIGZ1bmN0aW9ucyBydW4gb25jZSBhZnRlciB0aGUgcGFja3MgbG9hZC4gKi9cbmV4cG9ydCBjb25zdCBMT0FEX0ZVTkNUSU9OX1RBRyA9ICdtaW5lY3JhZnQ6bG9hZCc7XG5cbi8qKiBUaGUgdGFnIHdob3NlIGZ1bmN0aW9ucyBydW4gb24gZXZlcnkgc2VydmVyIHRpY2suICovXG5leHBvcnQgY29uc3QgVElDS19GVU5DVElPTl9UQUcgPSAnbWluZWNyYWZ0OnRpY2snO1xuXG4vKipcbiAqIE9uZSBlbnRyeSBvZiBhIHRhZyBmaWxlOiBhIGZ1bmN0aW9uIGlkLCBhIGAjdGFnYCByZWZlcmVuY2UsIG9yIHRoZSBvYmplY3RcbiAqIGZvcm0sIHdob3NlIGByZXF1aXJlZDogZmFsc2VgIGxldHMgYSBwYWNrIHJlZmVyZW5jZSBzb21ldGhpbmcgdGhhdCBtYXkgbm90XG4gKiBiZSBpbnN0YWxsZWQuXG4gKi9cbmV4cG9ydCB0eXBlIEZ1bmN0aW9uVGFnRW50cnkgPSBzdHJpbmcgfCB7IGlkOiBzdHJpbmc7IHJlcXVpcmVkPzogYm9vbGVhbiB9O1xuXG4vKiogT25lIHRhZyBmaWxlJ3MgY29udGVudHMgYWZ0ZXIgdGhlIHBhY2tzIHRoYXQgZGVjbGFyZSBpdCBhcmUgbWVyZ2VkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvblRhZyB7XG4gICAgdmFsdWVzOiByZWFkb25seSBGdW5jdGlvblRhZ0VudHJ5W107XG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhZyBkaXNjYXJkcyB3aGF0IGVhcmxpZXIgcGFja3MgY29udHJpYnV0ZWQuICovXG4gICAgcmVwbGFjZT86IGJvb2xlYW47XG59XG5cbi8qKiBXaGVyZSB7QGxpbmsgcmVzb2x2ZUZ1bmN0aW9uVGFnfSByZWFkcyB0YWdzIGZyb20uICovXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uVGFnTG9va3VwIHtcbiAgICAvKiogUmV0dXJucyB0aGUgdGFnIHJlZ2lzdGVyZWQgdW5kZXIgYSBuYW1lc3BhY2VkIGlkLCB3aXRob3V0IHRoZSBgI2AuICovXG4gICAgZ2V0KHRhZ0lkOiBzdHJpbmcpOiBGdW5jdGlvblRhZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBmdW5jdGlvbnMgYSB0YWcgbmFtZXMsIGluIHRoZSBvcmRlciB0aGV5IHJ1biwgcGx1cyBhbnl0aGluZyB0aGF0IGRpZCBub3QgcmVzb2x2ZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnUmVzb2x1dGlvbiB7XG4gICAgLyoqIFRoZSBmdW5jdGlvbiBpZHMsIGVhY2ggb25jZSwgaW4gdGFnIG9yZGVyIHdpdGggbmVzdGVkIHRhZ3MgZXhwYW5kZWQgaW4gcGxhY2UuICovXG4gICAgZnVuY3Rpb25zOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICAvKiogV2hldGhlciB0aGUgdGFnIGl0c2VsZiBleGlzdHMuIEFuIGVtcHR5IHRhZyB0aGF0IGV4aXN0cyByZXNvbHZlcyB0byBubyBmdW5jdGlvbnMuICovXG4gICAgZXhpc3RzOiBib29sZWFuO1xuICAgIGRpYWdub3N0aWNzOiByZWFkb25seSBEaWFnbm9zdGljW107XG59XG5cbi8qKlxuICogRXhwYW5kcyBhIGZ1bmN0aW9uIHRhZyBpbnRvIHRoZSBmdW5jdGlvbnMgaXQgbmFtZXMuXG4gKlxuICogRW50cmllcyBhcHBseSBpbiBvcmRlciBhbmQgYSBuZXN0ZWQgYCN0YWdgIGV4cGFuZHMgd2hlcmUgaXQgYXBwZWFycy4gQVxuICogZnVuY3Rpb24gYWxyZWFkeSBuYW1lZCBlYXJsaWVyIGlzIG5vdCByZXBlYXRlZC4gQSBjeWNsZSBiZXR3ZWVuIHRhZ3MgaXNcbiAqIHJlcG9ydGVkIGFuZCBjdXQgcmF0aGVyIHRoYW4gZm9sbG93ZWQsIGFuZCBhIG1pc3NpbmcgZW50cnkgaXMgcmVwb3J0ZWQgb25seVxuICogd2hlbiB0aGUgZW50cnkgZG9lcyBub3Qgc2F5IGByZXF1aXJlZDogZmFsc2VgLlxuICpcbiAqIEBwYXJhbSB0YWdJZCAtIFRoZSB0YWcgaWQsIHdpdGggb3Igd2l0aG91dCB0aGUgbGVhZGluZyBgI2AuXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlRnVuY3Rpb25UYWcgPSAobG9va3VwOiBGdW5jdGlvblRhZ0xvb2t1cCwgdGFnSWQ6IHN0cmluZyk6IFRhZ1Jlc29sdXRpb24gPT4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdID0gW107XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IG9wZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbnN0IHZpc2l0ID0gKGlkOiBzdHJpbmcsIHJlcXVpcmVkOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChvcGVuLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGRpYWdub3N0aWNzLnB1c2goe1xuICAgICAgICAgICAgICAgIHNldmVyaXR5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgIGNvZGU6ICd0YWcuY3ljbGUnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0aGUgZnVuY3Rpb24gdGFnICMke2lkfSByZWZlcmVuY2VzIGl0c2VsZmBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFnID0gbG9va3VwLmdldChpZCk7XG4gICAgICAgIGlmICghdGFnKSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICd0YWcubWlzc2luZy1lbnRyeScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGB0aGUgZnVuY3Rpb24gdGFnICMke2lkfSBkb2VzIG5vdCBleGlzdGBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG9wZW4uYWRkKGlkKTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0YWcudmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IGVudHJ5IDogZW50cnkuaWQ7XG4gICAgICAgICAgICBjb25zdCBlbnRyeVJlcXVpcmVkID0gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/IHRydWUgOiBlbnRyeS5yZXF1aXJlZCAhPT0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSBwYXJzZUZ1bmN0aW9uUmVmZXJlbmNlKHRleHQpO1xuICAgICAgICAgICAgaWYgKCFyZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICBkaWFnbm9zdGljcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICd0YWcubWlzc2luZy1lbnRyeScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGAnJHt0ZXh0fScgaW4gIyR7aWR9IGlzIG5vdCBhIHZhbGlkIGZ1bmN0aW9uIHJlZmVyZW5jZWBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5raW5kID09PSAndGFnJykge1xuICAgICAgICAgICAgICAgIHZpc2l0KHJlZmVyZW5jZS5pZCwgZW50cnlSZXF1aXJlZCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWVuLmhhcyhyZWZlcmVuY2UuaWQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHNlZW4uYWRkKHJlZmVyZW5jZS5pZCk7XG4gICAgICAgICAgICBmdW5jdGlvbnMucHVzaChyZWZlcmVuY2UuaWQpO1xuICAgICAgICB9XG4gICAgICAgIG9wZW4uZGVsZXRlKGlkKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhcnQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRhZ0lkLnN0YXJ0c1dpdGgoJyMnKSA/IHRhZ0lkLnNsaWNlKDEpIDogdGFnSWQpO1xuICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmdW5jdGlvbnM6IFtdLFxuICAgICAgICAgICAgZXhpc3RzOiBmYWxzZSxcbiAgICAgICAgICAgIGRpYWdub3N0aWNzOiBbeyBzZXZlcml0eTogJ2Vycm9yJywgY29kZTogJ3RhZy5taXNzaW5nLWVudHJ5JywgbWVzc2FnZTogYCcke3RhZ0lkfScgaXMgbm90IGEgdmFsaWQgdGFnIGlkYCB9XVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0cyA9IGxvb2t1cC5nZXQoc3RhcnQpICE9PSB1bmRlZmluZWQ7XG4gICAgdmlzaXQoc3RhcnQsIGZhbHNlKTtcbiAgICByZXR1cm4geyBmdW5jdGlvbnMsIGV4aXN0cywgZGlhZ25vc3RpY3MgfTtcbn07XG5cbi8qKlxuICogVGhlIHRhZ3MgYSBwYWNrIHN0YWNrIGRlY2xhcmVzLiBUYWdzIG1lcmdlIGluc3RlYWQgb2YgcmVwbGFjaW5nOiBldmVyeSBwYWNrXG4gKiB0aGF0IGRlY2xhcmVzIHRoZSBzYW1lIHRhZyBhZGRzIGl0cyBlbnRyaWVzLCBhbmQgb25seSBgcmVwbGFjZTogdHJ1ZWBcbiAqIGRpc2NhcmRzIHdoYXQgY2FtZSBiZWZvcmUsIHdoaWNoIGlzIGhvdyBvbmUgcGFjayBhZGRzIHRvIGBtaW5lY3JhZnQ6dGlja2BcbiAqIHdpdGhvdXQgaGlkaW5nIGFub3RoZXIgcGFjaydzIGVudHJ5LlxuICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25UYWdSZWdpc3RyeSBpbXBsZW1lbnRzIEZ1bmN0aW9uVGFnTG9va3VwIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhZ3MgPSBuZXcgTWFwPHN0cmluZywgRnVuY3Rpb25UYWdFbnRyeVtdPigpO1xuXG4gICAgLyoqIE1lcmdlcyBvbmUgdGFnIGZpbGUgaW50byB0aGUgcmVnaXN0cnksIGhvbm9yaW5nIGl0cyBgcmVwbGFjZWAgZmxhZy4gKi9cbiAgICBwdWJsaWMgYWRkKHRhZ0lkOiBzdHJpbmcsIHRhZzogRnVuY3Rpb25UYWcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaWQgPSBub3JtYWxpemVJZGVudGlmaWVyKHRhZ0lkLnN0YXJ0c1dpdGgoJyMnKSA/IHRhZ0lkLnNsaWNlKDEpIDogdGFnSWQpO1xuICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGFnLnJlcGxhY2UgPyB1bmRlZmluZWQgOiB0aGlzLnRhZ3MuZ2V0KGlkKTtcbiAgICAgICAgdGhpcy50YWdzLnNldChpZCwgWy4uLihleGlzdGluZyA/PyBbXSksIC4uLnRhZy52YWx1ZXNdKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyB0aGUgbWVyZ2VkIHRhZywgb3IgdW5kZWZpbmVkIHdoZW4gbm8gcGFjayBkZWNsYXJlZCBpdC4gKi9cbiAgICBwdWJsaWMgZ2V0KHRhZ0lkOiBzdHJpbmcpOiBGdW5jdGlvblRhZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudGFncy5nZXQodGFnSWQpO1xuICAgICAgICByZXR1cm4gdmFsdWVzID8geyB2YWx1ZXMgfSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogRXZlcnkgdGFnIGlkIHRoZSBzdGFjayBkZWNsYXJlZC4gKi9cbiAgICBwdWJsaWMgaWRzKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFsuLi50aGlzLnRhZ3Mua2V5cygpXTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQWVBLElBQWEsb0JBQW9COztBQUdqQyxJQUFhLG9CQUFvQjs7Ozs7Ozs7Ozs7QUF5Q2pDLElBQWEsc0JBQXNCLFFBQTJCLFVBQWlDO0NBQzNGLE1BQU0sWUFBc0IsQ0FBQztDQUM3QixNQUFNLGNBQTRCLENBQUM7Q0FDbkMsTUFBTSx1QkFBTyxJQUFJLElBQVk7Q0FDN0IsTUFBTSx1QkFBTyxJQUFJLElBQVk7Q0FFN0IsTUFBTSxTQUFTLElBQVksYUFBNEI7RUFDbkQsSUFBSSxLQUFLLElBQUksRUFBRSxHQUFHO0dBQ2QsWUFBWSxLQUFLO0lBQ2IsVUFBVTtJQUNWLE1BQU07SUFDTixTQUFTLHFCQUFxQixHQUFHO0dBQ3JDLENBQUM7R0FDRDtFQUNKO0VBRUEsTUFBTSxNQUFNLE9BQU8sSUFBSSxFQUFFO0VBQ3pCLElBQUksQ0FBQyxLQUFLO0dBQ04sSUFBSSxVQUNBLFlBQVksS0FBSztJQUNiLFVBQVU7SUFDVixNQUFNO0lBQ04sU0FBUyxxQkFBcUIsR0FBRztHQUNyQyxDQUFDO0dBRUw7RUFDSjtFQUVBLEtBQUssSUFBSSxFQUFFO0VBQ1gsS0FBSyxNQUFNLFNBQVMsSUFBSSxRQUFRO0dBQzVCLE1BQU0sT0FBTyxPQUFPLFVBQVUsV0FBVyxRQUFRLE1BQU07R0FDdkQsTUFBTSxnQkFBZ0IsT0FBTyxVQUFVLFdBQVcsT0FBTyxNQUFNLGFBQWE7R0FDNUUsTUFBTSxZQUFZLHVCQUF1QixJQUFJO0dBQzdDLElBQUksQ0FBQyxXQUFXO0lBQ1osWUFBWSxLQUFLO0tBQ2IsVUFBVTtLQUNWLE1BQU07S0FDTixTQUFTLElBQUksS0FBSyxRQUFRLEdBQUc7SUFDakMsQ0FBQztJQUNEO0dBQ0o7R0FFQSxJQUFJLFVBQVUsU0FBUyxPQUFPO0lBQzFCLE1BQU0sVUFBVSxJQUFJLGFBQWE7SUFDakM7R0FDSjtHQUVBLElBQUksS0FBSyxJQUFJLFVBQVUsRUFBRSxHQUFHO0dBQzVCLEtBQUssSUFBSSxVQUFVLEVBQUU7R0FDckIsVUFBVSxLQUFLLFVBQVUsRUFBRTtFQUMvQjtFQUNBLEtBQUssT0FBTyxFQUFFO0NBQ2xCO0NBRUEsTUFBTSxRQUFRLG9CQUFvQixNQUFNLFdBQVcsR0FBRyxJQUFJLE1BQU0sTUFBTSxDQUFDLElBQUksS0FBSztDQUNoRixJQUFJLFVBQVUsS0FBQSxHQUNWLE9BQU87RUFDSCxXQUFXLENBQUM7RUFDWixRQUFRO0VBQ1IsYUFBYSxDQUFDO0dBQUUsVUFBVTtHQUFTLE1BQU07R0FBcUIsU0FBUyxJQUFJLE1BQU07RUFBeUIsQ0FBQztDQUMvRztDQUdKLE1BQU0sU0FBUyxPQUFPLElBQUksS0FBSyxNQUFNLEtBQUE7Q0FDckMsTUFBTSxPQUFPLEtBQUs7Q0FDbEIsT0FBTztFQUFFO0VBQVc7RUFBUTtDQUFZO0FBQzVDOzs7Ozs7O0FBUUEsSUFBYSxzQkFBYixNQUE4RDtDQUMxRCx1QkFBd0IsSUFBSSxJQUFnQzs7Q0FHNUQsSUFBVyxPQUFlLEtBQXdCO0VBQzlDLE1BQU0sS0FBSyxvQkFBb0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxNQUFNLE1BQU0sQ0FBQyxJQUFJLEtBQUs7RUFDN0UsSUFBSSxPQUFPLEtBQUEsR0FBVztFQUV0QixNQUFNLFdBQVcsSUFBSSxVQUFVLEtBQUEsSUFBWSxLQUFLLEtBQUssSUFBSSxFQUFFO0VBQzNELEtBQUssS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFJLFlBQVksQ0FBQyxHQUFJLEdBQUcsSUFBSSxNQUFNLENBQUM7Q0FDMUQ7O0NBR0EsSUFBVyxPQUF3QztFQUMvQyxNQUFNLFNBQVMsS0FBSyxLQUFLLElBQUksS0FBSztFQUNsQyxPQUFPLFNBQVMsRUFBRSxPQUFPLElBQUksS0FBQTtDQUNqQzs7Q0FHQSxNQUFnQztFQUM1QixPQUFPLENBQUMsR0FBRyxLQUFLLEtBQUssS0FBSyxDQUFDO0NBQy9CO0FBQ0oifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,64 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsprismarine/mcfunction",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.16.0-unstable-20261029132853",
|
|
4
|
+
"description": "Java Edition mcfunction runtime: parser, macros, function tags and a queue-based executor",
|
|
5
|
+
"sideEffects": false,
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"type": "module",
|
|
10
|
+
"files": [
|
|
11
|
+
"dist",
|
|
12
|
+
"CHANGELOG.md",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"main": "./dist/index.cjs.cjs",
|
|
16
|
+
"module": "./dist/index.es.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.es.js",
|
|
22
|
+
"module": "./dist/index.es.js",
|
|
23
|
+
"require": "./dist/index.cjs.cjs"
|
|
24
|
+
},
|
|
25
|
+
"./*": {
|
|
26
|
+
"types": "./dist/*.d.ts",
|
|
27
|
+
"import": "./dist/*.es.js",
|
|
28
|
+
"module": "./dist/*.es.js",
|
|
29
|
+
"require": "./dist/*.cjs.cjs"
|
|
30
|
+
},
|
|
31
|
+
"./package.json": "./package.json"
|
|
32
|
+
},
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "git+https://github.com/JSPrismarine/JSPrismarine.git"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"jsprismarine",
|
|
39
|
+
"minecraft",
|
|
40
|
+
"mcfunction",
|
|
41
|
+
"datapack"
|
|
42
|
+
],
|
|
43
|
+
"author": "JSPrismarine",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"bugs": {
|
|
46
|
+
"url": "https://github.com/JSPrismarine/JSPrismarine/issues"
|
|
47
|
+
},
|
|
48
|
+
"homepage": "https://github.com/JSPrismarine/JSPrismarine/tree/master/packages/mcfunction",
|
|
49
|
+
"devDependencies": {
|
|
50
|
+
"@types/node": "24.19.2",
|
|
51
|
+
"glob": "13.0.6",
|
|
52
|
+
"rimraf": "6.1.3",
|
|
53
|
+
"typescript": "7.0.2",
|
|
54
|
+
"vite": "8.3.5",
|
|
55
|
+
"vitest": "5.0.5"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"clean": "rimraf dist jsp *.tsbuildinfo vite.config.ts.timestamp-* .tsup .turbo",
|
|
59
|
+
"build": "vite build && node ../../scripts/emit-dts.mts",
|
|
60
|
+
"build:watch": "vite build --watch",
|
|
61
|
+
"test": "vitest run",
|
|
62
|
+
"typecheck": "tsc-ts --noEmit && tsc-ts --noEmit -p tsconfig.test.json"
|
|
63
|
+
}
|
|
6
64
|
}
|