@sandstone-mc/mcdoc-ts-generator 0.1.5 → 0.1.7

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/dist/cli.js CHANGED
@@ -28,6 +28,8 @@ function pascal_case(name) {
28
28
  return words.map((word) => word[0].toUpperCase() + word.slice(1)).join("");
29
29
  }
30
30
  function pluralize(name) {
31
+ if (name.endsWith("ey"))
32
+ return name + "s";
31
33
  if (name.endsWith("y"))
32
34
  return name.slice(0, -1) + "ies";
33
35
  if (name.endsWith("s") || name.endsWith("ch") || name.endsWith("sh") || name.endsWith("x") || name.endsWith("z"))
@@ -1549,7 +1551,7 @@ var static_value3 = {
1549
1551
  };
1550
1552
  var ResourceClasses = {
1551
1553
  "minecraft:advancement": "AdvancementClass",
1552
- "minecraft:function": "_RawFunctionClass"
1554
+ "minecraft:function": "MCFunctionClass"
1553
1555
  };
1554
1556
  function mcdoc_string(type) {
1555
1557
  const string = type;
@@ -1697,15 +1699,15 @@ function mcdoc_string(type) {
1697
1699
  }).with({ name: "integer" }, () => {
1698
1700
  return (args) => static_value3.number;
1699
1701
  }).with({ name: "item_slots" }, () => {
1700
- const ITEM_SLOTS = "ITEM_SLOTS";
1702
+ const ENTITY_SLOTS = "ENTITY_SLOTS";
1701
1703
  const LiteralUnion = "LiteralUnion";
1702
1704
  return (args) => ({
1703
1705
  type: factory17.createTypeReferenceNode(LiteralUnion, [
1704
- factory17.createTypeReferenceNode(ITEM_SLOTS)
1706
+ factory17.createTypeReferenceNode(ENTITY_SLOTS)
1705
1707
  ]),
1706
1708
  imports: {
1707
- ordered: [`sandstone::arguments::${ITEM_SLOTS}`, `sandstone::${LiteralUnion}`],
1708
- check: new Map([[`sandstone::arguments::${ITEM_SLOTS}`, 0], [`sandstone::${LiteralUnion}`, 1]])
1709
+ ordered: [`sandstone::arguments::${ENTITY_SLOTS}`, `sandstone::${LiteralUnion}`],
1710
+ check: new Map([[`sandstone::arguments::${ENTITY_SLOTS}`, 0], [`sandstone::${LiteralUnion}`, 1]])
1709
1711
  }
1710
1712
  });
1711
1713
  }).with({ name: "nbt" }, ({ value }) => {
@@ -1757,7 +1759,7 @@ function mcdoc_string(type) {
1757
1759
  ])
1758
1760
  });
1759
1761
  }).with({ name: "score_holder" }, () => {
1760
- const Score = "ScoreClass";
1762
+ const Score = "Score";
1761
1763
  return (args) => ({
1762
1764
  type: factory17.createUnionTypeNode([
1763
1765
  static_value3.not_empty,
@@ -1803,15 +1805,12 @@ function mcdoc_string(type) {
1803
1805
  }).with({ name: "time_pattern" }, () => {
1804
1806
  return (args) => static_value3.time;
1805
1807
  }).with({ name: "translation_key" }, () => {
1806
- const TRANSLATION_KEYS = "TRANSLATION_KEYS";
1807
- const LiteralUnion = "LiteralUnion";
1808
+ const Registry = "::java::registry::Registry";
1808
1809
  return (args) => ({
1809
- type: factory17.createTypeReferenceNode(LiteralUnion, [
1810
- factory17.createTypeReferenceNode(TRANSLATION_KEYS)
1811
- ]),
1810
+ type: factory17.createIndexedAccessTypeNode(factory17.createTypeReferenceNode("Registry"), Bind.StringLiteral("minecraft:translation_key")),
1812
1811
  imports: {
1813
- ordered: [`sandstone::arguments::${TRANSLATION_KEYS}`, `sandstone::${LiteralUnion}`],
1814
- check: new Map([[`sandstone::arguments::${TRANSLATION_KEYS}`, 0], [`sandstone::${LiteralUnion}`, 1]])
1812
+ ordered: [Registry],
1813
+ check: new Map([[Registry, 0]])
1815
1814
  }
1816
1815
  });
1817
1816
  }).with({ name: "translation_value" }, () => {
@@ -1958,12 +1957,12 @@ function mcdoc_struct(type) {
1958
1957
  imports = add_import(imports, registry_import);
1959
1958
  inherit.push(Bind.MappedType(factory18.createIndexedAccessTypeNode(factory18.createTypeReferenceNode("Registry"), Bind.StringLiteral(registry_id)), value.type));
1960
1959
  }).with({ name: "item_slots" }, () => {
1961
- const ITEM_SLOTS = "ITEM_SLOTS";
1960
+ const ENTITY_SLOTS = "ENTITY_SLOTS";
1962
1961
  const LiteralUnion = "LiteralUnion";
1963
- imports = add_import(imports, `sandstone::arguments::${ITEM_SLOTS}`);
1962
+ imports = add_import(imports, `sandstone::arguments::${ENTITY_SLOTS}`);
1964
1963
  imports = add_import(imports, `sandstone::${LiteralUnion}`);
1965
1964
  inherit.push(Bind.MappedType(factory18.createTypeReferenceNode(LiteralUnion, [
1966
- factory18.createTypeReferenceNode(ITEM_SLOTS)
1965
+ factory18.createTypeReferenceNode(ENTITY_SLOTS)
1967
1966
  ]), value.type));
1968
1967
  }).with({ name: "objective" }, () => {
1969
1968
  const Objective = "ObjectiveClass";
@@ -2637,9 +2636,9 @@ class TypesGenerator {
2637
2636
  resolved_symbols = new Map;
2638
2637
  resolved_dispatchers = new Map;
2639
2638
  constructor() {}
2640
- resolve_types(symbols) {
2639
+ resolve_types(symbols, translation_keys) {
2641
2640
  console.log("registries");
2642
- this.resolve_registry_symbols(symbols);
2641
+ this.resolve_registry_symbols(symbols, translation_keys);
2643
2642
  const registry_exports = export_registry(this.resolved_registries);
2644
2643
  this.resolved_symbols.set("::java::registry", registry_exports);
2645
2644
  const dispatchers = symbols.getVisibleSymbols("mcdoc/dispatcher");
@@ -2656,12 +2655,12 @@ class TypesGenerator {
2656
2655
  const dispatcher_exports = export_dispatcher(this.resolved_dispatchers);
2657
2656
  this.resolved_symbols.set("mcdoc::dispatcher", dispatcher_exports);
2658
2657
  }
2659
- resolve_registry_symbols(registries) {
2660
- for (const registry_name of AllCategories) {
2658
+ resolve_registry_symbols(registries, translation_keys) {
2659
+ for (const registry_name of [...AllCategories]) {
2661
2660
  if (registry_name === "mcdoc" || registry_name === "mcdoc/dispatcher") {
2662
2661
  continue;
2663
2662
  }
2664
- const registry = Object.keys(registries.getVisibleSymbols(registry_name));
2663
+ const registry = registry_name === "translation_key" ? translation_keys : Object.keys(registries.getVisibleSymbols(registry_name));
2665
2664
  if (registry.length === 0)
2666
2665
  continue;
2667
2666
  const type_name = pluralize(registry_name.split("/").join("_")).toUpperCase();
@@ -2886,7 +2885,13 @@ function handle_imports(imports) {
2886
2885
  } else if (path[1] === "java") {
2887
2886
  file = `sandstone/arguments/generated/${path.slice(2).join("/")}.js`;
2888
2887
  } else if (path[0] === "sandstone") {
2889
- file = path.length === 1 ? "sandstone" : `${path.join("/")}.js`;
2888
+ if (path.length === 1) {
2889
+ file = "sandstone";
2890
+ } else if (path[1] === "arguments" && path.length === 2) {
2891
+ file = "sandstone/arguments";
2892
+ } else {
2893
+ file = `${path.join("/")}.js`;
2894
+ }
2890
2895
  } else {
2891
2896
  throw new Error(`[mcdoc_import] Unsupported import location "${path[0]}" in "${import_path}"`);
2892
2897
  }
@@ -2984,6 +2989,18 @@ async function fetchBlockStates(versionId) {
2984
2989
  }
2985
2990
  return [result, etag];
2986
2991
  }
2992
+ async function fetchTranslationKeys() {
2993
+ console.debug(`[fetchTranslationKeys] latest from github`);
2994
+ const result = new Map;
2995
+ try {
2996
+ const req = await fetchWithCache(`https://raw.githubusercontent.com/misode/mcmeta/refs/heads/assets-tiny/assets/minecraft/lang/en_us.json`);
2997
+ const data = await req.json();
2998
+ return Object.keys(data).map((key) => `minecraft:${key}`);
2999
+ } catch (e) {
3000
+ console.warn("Error occurred while fetching translation keys:", errorMessage(e));
3001
+ }
3002
+ return [];
3003
+ }
2987
3004
  var VanillaMcdocUri = "mcdoc://vanilla-mcdoc/symbols.json";
2988
3005
  function vanillaMcdocRegistrar(vanillaMcdoc) {
2989
3006
  return (symbols) => {
@@ -3058,7 +3075,7 @@ async function generate(options = {}) {
3058
3075
  await service.project.ready();
3059
3076
  await service.project.cacheService.save();
3060
3077
  const type_gen = new TypesGenerator;
3061
- type_gen.resolve_types(service.project.symbols);
3078
+ type_gen.resolve_types(service.project.symbols, await fetchTranslationKeys());
3062
3079
  for await (const [symbol_path, { exports, imports }] of type_gen.resolved_symbols.entries()) {
3063
3080
  const parts = symbol_path.split("::");
3064
3081
  if (parts[0] === "") {
@@ -3084,7 +3101,8 @@ async function generate(options = {}) {
3084
3101
  baseUrl: "./",
3085
3102
  paths: {
3086
3103
  sandstone: ["../sandstone-types/index.ts"],
3087
- "sandstone/arguments/generated/*": [`./*`]
3104
+ "sandstone/arguments": ["../sandstone-types/arguments/index.ts"],
3105
+ "sandstone/arguments/generated/*": ["./*"]
3088
3106
  }
3089
3107
  }
3090
3108
  }, null, 2));
package/dist/index.d.ts CHANGED
@@ -14,4 +14,5 @@ export declare function fetchVanillaMcdoc(): Promise<VanillaMcdocSymbols>;
14
14
  export declare function fetchRegistries(versionId: string): Promise<readonly [Map<string, string[]>, string]>;
15
15
  export type BlockStateData = [Record<string, string[]>, Record<string, string>];
16
16
  export declare function fetchBlockStates(versionId: string): Promise<readonly [Map<string, BlockStateData>, string]>;
17
+ export declare function fetchTranslationKeys(): Promise<string[]>;
17
18
  export declare function generate(options?: GeneratorOptions): Promise<void>;
package/dist/index.js CHANGED
@@ -26,6 +26,8 @@ function pascal_case(name) {
26
26
  return words.map((word) => word[0].toUpperCase() + word.slice(1)).join("");
27
27
  }
28
28
  function pluralize(name) {
29
+ if (name.endsWith("ey"))
30
+ return name + "s";
29
31
  if (name.endsWith("y"))
30
32
  return name.slice(0, -1) + "ies";
31
33
  if (name.endsWith("s") || name.endsWith("ch") || name.endsWith("sh") || name.endsWith("x") || name.endsWith("z"))
@@ -1547,7 +1549,7 @@ var static_value3 = {
1547
1549
  };
1548
1550
  var ResourceClasses = {
1549
1551
  "minecraft:advancement": "AdvancementClass",
1550
- "minecraft:function": "_RawFunctionClass"
1552
+ "minecraft:function": "MCFunctionClass"
1551
1553
  };
1552
1554
  function mcdoc_string(type) {
1553
1555
  const string = type;
@@ -1695,15 +1697,15 @@ function mcdoc_string(type) {
1695
1697
  }).with({ name: "integer" }, () => {
1696
1698
  return (args) => static_value3.number;
1697
1699
  }).with({ name: "item_slots" }, () => {
1698
- const ITEM_SLOTS = "ITEM_SLOTS";
1700
+ const ENTITY_SLOTS = "ENTITY_SLOTS";
1699
1701
  const LiteralUnion = "LiteralUnion";
1700
1702
  return (args) => ({
1701
1703
  type: factory17.createTypeReferenceNode(LiteralUnion, [
1702
- factory17.createTypeReferenceNode(ITEM_SLOTS)
1704
+ factory17.createTypeReferenceNode(ENTITY_SLOTS)
1703
1705
  ]),
1704
1706
  imports: {
1705
- ordered: [`sandstone::arguments::${ITEM_SLOTS}`, `sandstone::${LiteralUnion}`],
1706
- check: new Map([[`sandstone::arguments::${ITEM_SLOTS}`, 0], [`sandstone::${LiteralUnion}`, 1]])
1707
+ ordered: [`sandstone::arguments::${ENTITY_SLOTS}`, `sandstone::${LiteralUnion}`],
1708
+ check: new Map([[`sandstone::arguments::${ENTITY_SLOTS}`, 0], [`sandstone::${LiteralUnion}`, 1]])
1707
1709
  }
1708
1710
  });
1709
1711
  }).with({ name: "nbt" }, ({ value }) => {
@@ -1755,7 +1757,7 @@ function mcdoc_string(type) {
1755
1757
  ])
1756
1758
  });
1757
1759
  }).with({ name: "score_holder" }, () => {
1758
- const Score = "ScoreClass";
1760
+ const Score = "Score";
1759
1761
  return (args) => ({
1760
1762
  type: factory17.createUnionTypeNode([
1761
1763
  static_value3.not_empty,
@@ -1801,15 +1803,12 @@ function mcdoc_string(type) {
1801
1803
  }).with({ name: "time_pattern" }, () => {
1802
1804
  return (args) => static_value3.time;
1803
1805
  }).with({ name: "translation_key" }, () => {
1804
- const TRANSLATION_KEYS = "TRANSLATION_KEYS";
1805
- const LiteralUnion = "LiteralUnion";
1806
+ const Registry = "::java::registry::Registry";
1806
1807
  return (args) => ({
1807
- type: factory17.createTypeReferenceNode(LiteralUnion, [
1808
- factory17.createTypeReferenceNode(TRANSLATION_KEYS)
1809
- ]),
1808
+ type: factory17.createIndexedAccessTypeNode(factory17.createTypeReferenceNode("Registry"), Bind.StringLiteral("minecraft:translation_key")),
1810
1809
  imports: {
1811
- ordered: [`sandstone::arguments::${TRANSLATION_KEYS}`, `sandstone::${LiteralUnion}`],
1812
- check: new Map([[`sandstone::arguments::${TRANSLATION_KEYS}`, 0], [`sandstone::${LiteralUnion}`, 1]])
1810
+ ordered: [Registry],
1811
+ check: new Map([[Registry, 0]])
1813
1812
  }
1814
1813
  });
1815
1814
  }).with({ name: "translation_value" }, () => {
@@ -1956,12 +1955,12 @@ function mcdoc_struct(type) {
1956
1955
  imports = add_import(imports, registry_import);
1957
1956
  inherit.push(Bind.MappedType(factory18.createIndexedAccessTypeNode(factory18.createTypeReferenceNode("Registry"), Bind.StringLiteral(registry_id)), value.type));
1958
1957
  }).with({ name: "item_slots" }, () => {
1959
- const ITEM_SLOTS = "ITEM_SLOTS";
1958
+ const ENTITY_SLOTS = "ENTITY_SLOTS";
1960
1959
  const LiteralUnion = "LiteralUnion";
1961
- imports = add_import(imports, `sandstone::arguments::${ITEM_SLOTS}`);
1960
+ imports = add_import(imports, `sandstone::arguments::${ENTITY_SLOTS}`);
1962
1961
  imports = add_import(imports, `sandstone::${LiteralUnion}`);
1963
1962
  inherit.push(Bind.MappedType(factory18.createTypeReferenceNode(LiteralUnion, [
1964
- factory18.createTypeReferenceNode(ITEM_SLOTS)
1963
+ factory18.createTypeReferenceNode(ENTITY_SLOTS)
1965
1964
  ]), value.type));
1966
1965
  }).with({ name: "objective" }, () => {
1967
1966
  const Objective = "ObjectiveClass";
@@ -2635,9 +2634,9 @@ class TypesGenerator {
2635
2634
  resolved_symbols = new Map;
2636
2635
  resolved_dispatchers = new Map;
2637
2636
  constructor() {}
2638
- resolve_types(symbols) {
2637
+ resolve_types(symbols, translation_keys) {
2639
2638
  console.log("registries");
2640
- this.resolve_registry_symbols(symbols);
2639
+ this.resolve_registry_symbols(symbols, translation_keys);
2641
2640
  const registry_exports = export_registry(this.resolved_registries);
2642
2641
  this.resolved_symbols.set("::java::registry", registry_exports);
2643
2642
  const dispatchers = symbols.getVisibleSymbols("mcdoc/dispatcher");
@@ -2654,12 +2653,12 @@ class TypesGenerator {
2654
2653
  const dispatcher_exports = export_dispatcher(this.resolved_dispatchers);
2655
2654
  this.resolved_symbols.set("mcdoc::dispatcher", dispatcher_exports);
2656
2655
  }
2657
- resolve_registry_symbols(registries) {
2658
- for (const registry_name of AllCategories) {
2656
+ resolve_registry_symbols(registries, translation_keys) {
2657
+ for (const registry_name of [...AllCategories]) {
2659
2658
  if (registry_name === "mcdoc" || registry_name === "mcdoc/dispatcher") {
2660
2659
  continue;
2661
2660
  }
2662
- const registry = Object.keys(registries.getVisibleSymbols(registry_name));
2661
+ const registry = registry_name === "translation_key" ? translation_keys : Object.keys(registries.getVisibleSymbols(registry_name));
2663
2662
  if (registry.length === 0)
2664
2663
  continue;
2665
2664
  const type_name = pluralize(registry_name.split("/").join("_")).toUpperCase();
@@ -2884,7 +2883,13 @@ function handle_imports(imports) {
2884
2883
  } else if (path[1] === "java") {
2885
2884
  file = `sandstone/arguments/generated/${path.slice(2).join("/")}.js`;
2886
2885
  } else if (path[0] === "sandstone") {
2887
- file = path.length === 1 ? "sandstone" : `${path.join("/")}.js`;
2886
+ if (path.length === 1) {
2887
+ file = "sandstone";
2888
+ } else if (path[1] === "arguments" && path.length === 2) {
2889
+ file = "sandstone/arguments";
2890
+ } else {
2891
+ file = `${path.join("/")}.js`;
2892
+ }
2888
2893
  } else {
2889
2894
  throw new Error(`[mcdoc_import] Unsupported import location "${path[0]}" in "${import_path}"`);
2890
2895
  }
@@ -2982,6 +2987,18 @@ async function fetchBlockStates(versionId) {
2982
2987
  }
2983
2988
  return [result, etag];
2984
2989
  }
2990
+ async function fetchTranslationKeys() {
2991
+ console.debug(`[fetchTranslationKeys] latest from github`);
2992
+ const result = new Map;
2993
+ try {
2994
+ const req = await fetchWithCache(`https://raw.githubusercontent.com/misode/mcmeta/refs/heads/assets-tiny/assets/minecraft/lang/en_us.json`);
2995
+ const data = await req.json();
2996
+ return Object.keys(data).map((key) => `minecraft:${key}`);
2997
+ } catch (e) {
2998
+ console.warn("Error occurred while fetching translation keys:", errorMessage(e));
2999
+ }
3000
+ return [];
3001
+ }
2985
3002
  var VanillaMcdocUri = "mcdoc://vanilla-mcdoc/symbols.json";
2986
3003
  function vanillaMcdocRegistrar(vanillaMcdoc) {
2987
3004
  return (symbols) => {
@@ -3056,7 +3073,7 @@ async function generate(options = {}) {
3056
3073
  await service.project.ready();
3057
3074
  await service.project.cacheService.save();
3058
3075
  const type_gen = new TypesGenerator;
3059
- type_gen.resolve_types(service.project.symbols);
3076
+ type_gen.resolve_types(service.project.symbols, await fetchTranslationKeys());
3060
3077
  for await (const [symbol_path, { exports, imports }] of type_gen.resolved_symbols.entries()) {
3061
3078
  const parts = symbol_path.split("::");
3062
3079
  if (parts[0] === "") {
@@ -3082,7 +3099,8 @@ async function generate(options = {}) {
3082
3099
  baseUrl: "./",
3083
3100
  paths: {
3084
3101
  sandstone: ["../sandstone-types/index.ts"],
3085
- "sandstone/arguments/generated/*": [`./*`]
3102
+ "sandstone/arguments": ["../sandstone-types/arguments/index.ts"],
3103
+ "sandstone/arguments/generated/*": ["./*"]
3086
3104
  }
3087
3105
  }
3088
3106
  }, null, 2));
@@ -3093,6 +3111,7 @@ export {
3093
3111
  mcdoc_raw,
3094
3112
  generate,
3095
3113
  fetchVanillaMcdoc,
3114
+ fetchTranslationKeys,
3096
3115
  fetchRegistries,
3097
3116
  fetchBlockStates
3098
3117
  };
@@ -31,7 +31,7 @@ export declare class TypesGenerator {
31
31
  readonly resolved_symbols: Map<string, ResolvedSymbol>;
32
32
  readonly resolved_dispatchers: Map<string, ResolvedDispatcher>;
33
33
  constructor();
34
- resolve_types(symbols: SymbolUtil): void;
34
+ resolve_types(symbols: SymbolUtil, translation_keys: string[]): void;
35
35
  private resolve_registry_symbols;
36
36
  private resolve_module_symbols;
37
37
  private resolve_dispatcher_symbols;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sandstone-mc/mcdoc-ts-generator",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "Generate TypeScript types from Minecraft mcdoc definitions",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",