@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.
Files changed (44) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/LICENSE +373 -0
  3. package/README.md +182 -0
  4. package/dist/compile.cjs.cjs +166 -0
  5. package/dist/compile.d.ts +91 -0
  6. package/dist/compile.d.ts.map +1 -0
  7. package/dist/compile.es.js +162 -0
  8. package/dist/diagnostics.cjs.cjs +19 -0
  9. package/dist/diagnostics.d.ts +62 -0
  10. package/dist/diagnostics.d.ts.map +1 -0
  11. package/dist/diagnostics.es.js +17 -0
  12. package/dist/executor.cjs.cjs +302 -0
  13. package/dist/executor.d.ts +140 -0
  14. package/dist/executor.d.ts.map +1 -0
  15. package/dist/executor.es.js +298 -0
  16. package/dist/identifiers.cjs.cjs +79 -0
  17. package/dist/identifiers.d.ts +44 -0
  18. package/dist/identifiers.d.ts.map +1 -0
  19. package/dist/identifiers.es.js +72 -0
  20. package/dist/index.cjs.cjs +36 -0
  21. package/dist/index.d.ts +10 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.es.js +10 -0
  24. package/dist/macro.cjs.cjs +119 -0
  25. package/dist/macro.d.ts +59 -0
  26. package/dist/macro.d.ts.map +1 -0
  27. package/dist/macro.es.js +115 -0
  28. package/dist/parse.cjs.cjs +107 -0
  29. package/dist/parse.d.ts +40 -0
  30. package/dist/parse.d.ts.map +1 -0
  31. package/dist/parse.es.js +104 -0
  32. package/dist/registry.cjs.cjs +135 -0
  33. package/dist/registry.d.ts +53 -0
  34. package/dist/registry.d.ts.map +1 -0
  35. package/dist/registry.es.js +132 -0
  36. package/dist/runner.cjs.cjs +42 -0
  37. package/dist/runner.d.ts +83 -0
  38. package/dist/runner.d.ts.map +1 -0
  39. package/dist/runner.es.js +40 -0
  40. package/dist/tags.cjs.cjs +113 -0
  41. package/dist/tags.d.ts +70 -0
  42. package/dist/tags.d.ts.map +1 -0
  43. package/dist/tags.es.js +108 -0
  44. package/package.json +61 -5
@@ -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"}
@@ -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,8 +1,64 @@
1
1
  {
2
2
  "name": "@jsprismarine/mcfunction",
3
- "version": "0.0.0",
4
- "description": "Placeholder package to setup trusted publishing",
5
- "keywords": [],
6
- "author": "",
7
- "scripts": {}
3
+ "version": "0.16.0-unstable-20261029134110",
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
+ }
8
64
  }