bc-minecraft-molang 1.21.61-5 → 1.21.100-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/LICENSE +29 -29
  2. package/README.md +18 -18
  3. package/lib/src/{MolangData/AnimationsControllers.d.ts → data/animations-controllers.d.ts} +1 -1
  4. package/lib/src/{MolangData/AnimationsControllers.js → data/animations-controllers.js} +1 -1
  5. package/lib/src/data/animations-controllers.js.map +1 -0
  6. package/lib/src/{MolangData/Animations.d.ts → data/animations.d.ts} +1 -1
  7. package/lib/src/{MolangData/Animations.js → data/animations.js} +1 -1
  8. package/lib/src/data/animations.js.map +1 -0
  9. package/lib/src/{MolangData/Attachables.d.ts → data/attachables.d.ts} +1 -1
  10. package/lib/src/{MolangData/Attachables.js → data/attachables.js} +1 -1
  11. package/lib/src/data/attachables.js.map +1 -0
  12. package/lib/src/{MolangData/Blocks.d.ts → data/blocks.d.ts} +1 -1
  13. package/lib/src/{MolangData/Blocks.js → data/blocks.js} +1 -1
  14. package/lib/src/data/blocks.js.map +1 -0
  15. package/lib/src/{MolangData/Data.js → data/data.js} +1 -1
  16. package/lib/src/data/data.js.map +1 -0
  17. package/lib/src/{MolangData/Entities.d.ts → data/entities.d.ts} +1 -1
  18. package/lib/src/{MolangData/Entities.js → data/entities.js} +1 -1
  19. package/lib/src/data/entities.js.map +1 -0
  20. package/lib/src/{MolangData/FeaturesRules.d.ts → data/features-rules.d.ts} +1 -1
  21. package/lib/src/{MolangData/FeaturesRules.js → data/features-rules.js} +1 -1
  22. package/lib/src/data/features-rules.js.map +1 -0
  23. package/lib/src/{MolangData/General.d.ts → data/general.d.ts} +1 -1
  24. package/lib/src/{MolangData/General.js → data/general.js} +1 -1
  25. package/lib/src/data/general.js.map +1 -0
  26. package/lib/src/data/index.d.ts +13 -0
  27. package/lib/src/{MolangData → data}/index.js +14 -14
  28. package/lib/src/data/index.js.map +1 -0
  29. package/lib/src/{MolangData/Items.d.ts → data/items.d.ts} +1 -1
  30. package/lib/src/{MolangData/Items.js → data/items.js} +1 -1
  31. package/lib/src/data/items.js.map +1 -0
  32. package/lib/src/{MolangData/MolangData.d.ts → data/molang-data.d.ts} +11 -11
  33. package/lib/src/data/molang-data.js +45 -0
  34. package/lib/src/data/molang-data.js.map +1 -0
  35. package/lib/src/{MolangData/MolangFunction.js → data/molang-function.js} +1 -1
  36. package/lib/src/data/molang-function.js.map +1 -0
  37. package/lib/src/{MolangData/Particles.d.ts → data/particles.d.ts} +1 -1
  38. package/lib/src/{MolangData/Particles.js → data/particles.js} +1 -1
  39. package/lib/src/data/particles.js.map +1 -0
  40. package/lib/src/{MolangData/RenderControllers.d.ts → data/render-controllers.d.ts} +1 -1
  41. package/lib/src/{MolangData/RenderControllers.js → data/render-controllers.js} +1 -1
  42. package/lib/src/data/render-controllers.js.map +1 -0
  43. package/lib/src/graph/mermaid.d.ts +48 -0
  44. package/lib/src/graph/mermaid.js +223 -0
  45. package/lib/src/graph/mermaid.js.map +1 -0
  46. package/lib/src/main.d.ts +2 -3
  47. package/lib/src/main.js +2 -3
  48. package/lib/src/main.js.map +1 -1
  49. package/lib/src/molang/cache.d.ts +11 -0
  50. package/lib/src/molang/cache.js +32 -0
  51. package/lib/src/molang/cache.js.map +1 -0
  52. package/lib/src/{Molang/Functions.d.ts → molang/functions.d.ts} +2 -1
  53. package/lib/src/{Molang/Functions.js → molang/functions.js} +7 -3
  54. package/lib/src/molang/functions.js.map +1 -0
  55. package/lib/src/molang/index.d.ts +4 -0
  56. package/lib/src/{Types/Defined Using/index.js → molang/index.js} +5 -4
  57. package/lib/src/molang/index.js.map +1 -0
  58. package/lib/src/molang/molang-set.d.ts +25 -0
  59. package/lib/src/molang/molang-set.js +84 -0
  60. package/lib/src/molang/molang-set.js.map +1 -0
  61. package/lib/src/molang/syntax/builder.d.ts +16 -0
  62. package/lib/src/molang/syntax/builder.js +56 -0
  63. package/lib/src/molang/syntax/builder.js.map +1 -0
  64. package/lib/src/molang/syntax/collect.d.ts +2 -0
  65. package/lib/src/molang/syntax/collect.js +15 -0
  66. package/lib/src/molang/syntax/collect.js.map +1 -0
  67. package/lib/src/molang/syntax/errors.d.ts +9 -0
  68. package/lib/src/molang/syntax/errors.js +20 -0
  69. package/lib/src/molang/syntax/errors.js.map +1 -0
  70. package/lib/src/molang/syntax/flatten.d.ts +2 -0
  71. package/lib/src/molang/syntax/flatten.js +10 -0
  72. package/lib/src/molang/syntax/flatten.js.map +1 -0
  73. package/lib/src/molang/syntax/index.d.ts +10 -0
  74. package/lib/src/{Molang/Types → molang/syntax}/index.js +10 -9
  75. package/lib/src/molang/syntax/index.js.map +1 -0
  76. package/lib/src/molang/syntax/nodes.d.ts +170 -0
  77. package/lib/src/molang/syntax/nodes.js +131 -0
  78. package/lib/src/molang/syntax/nodes.js.map +1 -0
  79. package/lib/src/molang/syntax/operators.d.ts +2 -0
  80. package/lib/src/molang/syntax/operators.js +234 -0
  81. package/lib/src/molang/syntax/operators.js.map +1 -0
  82. package/lib/src/molang/syntax/parse.d.ts +4 -0
  83. package/lib/src/molang/syntax/parse.js +264 -0
  84. package/lib/src/molang/syntax/parse.js.map +1 -0
  85. package/lib/src/molang/syntax/tokens.d.ts +35 -0
  86. package/lib/src/molang/syntax/tokens.js +229 -0
  87. package/lib/src/molang/syntax/tokens.js.map +1 -0
  88. package/lib/src/molang/syntax/util.d.ts +8 -0
  89. package/lib/src/molang/syntax/util.js +60 -0
  90. package/lib/src/molang/syntax/util.js.map +1 -0
  91. package/lib/src/molang/syntax/walk.d.ts +2 -0
  92. package/lib/src/molang/syntax/walk.js +15 -0
  93. package/lib/src/molang/syntax/walk.js.map +1 -0
  94. package/lib/src/{Molang/Traverse.d.ts → molang/traverse.d.ts} +2 -2
  95. package/lib/src/{Molang/Traverse.js → molang/traverse.js} +8 -8
  96. package/lib/src/molang/traverse.js.map +1 -0
  97. package/package.json +59 -59
  98. package/lib/src/Molang/Functions.js.map +0 -1
  99. package/lib/src/Molang/MolangSet.d.ts +0 -64
  100. package/lib/src/Molang/MolangSet.js +0 -127
  101. package/lib/src/Molang/MolangSet.js.map +0 -1
  102. package/lib/src/Molang/RegExp.d.ts +0 -31
  103. package/lib/src/Molang/RegExp.js +0 -84
  104. package/lib/src/Molang/RegExp.js.map +0 -1
  105. package/lib/src/Molang/Syntax.d.ts +0 -30
  106. package/lib/src/Molang/Syntax.js +0 -41
  107. package/lib/src/Molang/Syntax.js.map +0 -1
  108. package/lib/src/Molang/Traverse.js.map +0 -1
  109. package/lib/src/Molang/Types/Context.d.ts +0 -9
  110. package/lib/src/Molang/Types/Context.js +0 -18
  111. package/lib/src/Molang/Types/Context.js.map +0 -1
  112. package/lib/src/Molang/Types/Geometries.d.ts +0 -9
  113. package/lib/src/Molang/Types/Geometries.js +0 -18
  114. package/lib/src/Molang/Types/Geometries.js.map +0 -1
  115. package/lib/src/Molang/Types/Materials.d.ts +0 -9
  116. package/lib/src/Molang/Types/Materials.js +0 -18
  117. package/lib/src/Molang/Types/Materials.js.map +0 -1
  118. package/lib/src/Molang/Types/Math.d.ts +0 -9
  119. package/lib/src/Molang/Types/Math.js +0 -18
  120. package/lib/src/Molang/Types/Math.js.map +0 -1
  121. package/lib/src/Molang/Types/Queries.d.ts +0 -9
  122. package/lib/src/Molang/Types/Queries.js +0 -18
  123. package/lib/src/Molang/Types/Queries.js.map +0 -1
  124. package/lib/src/Molang/Types/Temps.d.ts +0 -15
  125. package/lib/src/Molang/Types/Temps.js +0 -27
  126. package/lib/src/Molang/Types/Temps.js.map +0 -1
  127. package/lib/src/Molang/Types/Textures.d.ts +0 -18
  128. package/lib/src/Molang/Types/Textures.js +0 -31
  129. package/lib/src/Molang/Types/Textures.js.map +0 -1
  130. package/lib/src/Molang/Types/Variables.d.ts +0 -15
  131. package/lib/src/Molang/Types/Variables.js +0 -27
  132. package/lib/src/Molang/Types/Variables.js.map +0 -1
  133. package/lib/src/Molang/Types/index.d.ts +0 -8
  134. package/lib/src/Molang/Types/index.js.map +0 -1
  135. package/lib/src/Molang/index.d.ts +0 -6
  136. package/lib/src/Molang/index.js +0 -47
  137. package/lib/src/Molang/index.js.map +0 -1
  138. package/lib/src/MolangData/Animations.js.map +0 -1
  139. package/lib/src/MolangData/AnimationsControllers.js.map +0 -1
  140. package/lib/src/MolangData/Attachables.js.map +0 -1
  141. package/lib/src/MolangData/Blocks.js.map +0 -1
  142. package/lib/src/MolangData/Data.js.map +0 -1
  143. package/lib/src/MolangData/Entities.js.map +0 -1
  144. package/lib/src/MolangData/FeaturesRules.js.map +0 -1
  145. package/lib/src/MolangData/General.js.map +0 -1
  146. package/lib/src/MolangData/Items.js.map +0 -1
  147. package/lib/src/MolangData/MolangData.js +0 -45
  148. package/lib/src/MolangData/MolangData.js.map +0 -1
  149. package/lib/src/MolangData/MolangFunction.js.map +0 -1
  150. package/lib/src/MolangData/Particles.js.map +0 -1
  151. package/lib/src/MolangData/RenderControllers.js.map +0 -1
  152. package/lib/src/MolangData/index.d.ts +0 -13
  153. package/lib/src/MolangData/index.js.map +0 -1
  154. package/lib/src/Types/Defined Using/Defined.d.ts +0 -23
  155. package/lib/src/Types/Defined Using/Defined.js +0 -38
  156. package/lib/src/Types/Defined Using/Defined.js.map +0 -1
  157. package/lib/src/Types/Defined Using/DefinedUsing.d.ts +0 -24
  158. package/lib/src/Types/Defined Using/DefinedUsing.js +0 -45
  159. package/lib/src/Types/Defined Using/DefinedUsing.js.map +0 -1
  160. package/lib/src/Types/Defined Using/Using.d.ts +0 -23
  161. package/lib/src/Types/Defined Using/Using.js +0 -38
  162. package/lib/src/Types/Defined Using/Using.js.map +0 -1
  163. package/lib/src/Types/Defined Using/index.d.ts +0 -3
  164. package/lib/src/Types/Defined Using/index.js.map +0 -1
  165. package/lib/src/Types/index.d.ts +0 -1
  166. package/lib/src/Types/index.js +0 -39
  167. package/lib/src/Types/index.js.map +0 -1
  168. /package/lib/src/{MolangData/Data.d.ts → data/data.d.ts} +0 -0
  169. /package/lib/src/{MolangData/MolangFunction.d.ts → data/molang-function.d.ts} +0 -0
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateMermaidDiagram = generateMermaidDiagram;
4
+ exports.generateCompactMermaidDiagram = generateCompactMermaidDiagram;
5
+ exports.generateDetailedMermaidDiagram = generateDetailedMermaidDiagram;
6
+ const nodes_1 = require("../molang/syntax/nodes");
7
+ const tokens_1 = require("../molang/syntax/tokens");
8
+ class MermaidDiagramBuilder {
9
+ constructor(options = {}) {
10
+ var _a, _b, _c, _d;
11
+ this.nodeCounter = 0;
12
+ this.nodeMap = new Map();
13
+ this.nodes = ['start@{ shape: sm-circ, label: "Small start" }'];
14
+ this.edges = ["start-->node0"];
15
+ this.options = {
16
+ direction: (_a = options.direction) !== null && _a !== void 0 ? _a : "TD",
17
+ showPosition: (_b = options.showPosition) !== null && _b !== void 0 ? _b : false,
18
+ maxDepth: (_c = options.maxDepth) !== null && _c !== void 0 ? _c : Infinity,
19
+ compactMode: (_d = options.compactMode) !== null && _d !== void 0 ? _d : false,
20
+ };
21
+ }
22
+ /**
23
+ * Generates a Mermaid flowchart diagram from an AST node
24
+ */
25
+ generateDiagram(rootNode) {
26
+ this.reset();
27
+ this.processNode(rootNode, 0);
28
+ const header = `---
29
+ config:
30
+ theme: redux
31
+ ---
32
+ flowchart ${this.options.direction}`;
33
+ const nodeDefinitions = this.nodes.join("\n ");
34
+ const edgeDefinitions = this.edges.join("\n ");
35
+ return `${header}\n ${nodeDefinitions}\n ${edgeDefinitions}`;
36
+ }
37
+ reset() {
38
+ this.nodeCounter = 0;
39
+ this.nodeMap.clear();
40
+ this.nodes = ['start@{ shape: sm-circ, label: "Small start" }'];
41
+ this.edges = ["start-->node0"];
42
+ }
43
+ getNodeId(node) {
44
+ if (!this.nodeMap.has(node)) {
45
+ this.nodeMap.set(node, `node${this.nodeCounter++}`);
46
+ }
47
+ return this.nodeMap.get(node);
48
+ }
49
+ processNode(node, depth) {
50
+ if (depth > this.options.maxDepth) {
51
+ return this.createLeafNode("...");
52
+ }
53
+ const nodeId = this.getNodeId(node);
54
+ const nodeInfo = this.getNodeInfo(node);
55
+ // Create node definition
56
+ this.nodes.push(`${nodeId}${nodeInfo.shape}`);
57
+ // Process children and create edges
58
+ this.processChildren(node, nodeId, depth);
59
+ return nodeId;
60
+ }
61
+ getNodeInfo(node) {
62
+ const position = this.options.showPosition ? `@${node.position}` : "";
63
+ switch (node.type) {
64
+ case nodes_1.NodeType.Assignment:
65
+ return createNodeInfo(`{"=${position}"}`, "=");
66
+ case nodes_1.NodeType.ArrayAccess:
67
+ return createNodeInfo(`["[]${position}"]`, "[]");
68
+ case nodes_1.NodeType.BinaryOperation:
69
+ return createNodeInfo(`{"\\${node.operator}${position}"}`, `${node.operator}`);
70
+ case nodes_1.NodeType.Conditional:
71
+ return createNodeInfo(`{"?:${position}"}`, "?:");
72
+ case nodes_1.NodeType.Literal:
73
+ return createNodeInfo(`["${node.value}${position}"]`, node.value);
74
+ case nodes_1.NodeType.Marker:
75
+ return createNodeInfo(`>"${node.token.type}${position}"]`, tokens_1.TokenType[node.token.type]);
76
+ case nodes_1.NodeType.NullishCoalescing:
77
+ return createNodeInfo(`{"??${position}"}`, "??");
78
+ case nodes_1.NodeType.StatementSequence:
79
+ return createNodeInfo(`[";${position}"]`, "sequence");
80
+ case nodes_1.NodeType.StringLiteral:
81
+ return createNodeInfo(`["'${node.value}'${position}"]`, `'${node.value}'`);
82
+ case nodes_1.NodeType.UnaryOperation:
83
+ return createNodeInfo(`{"${node.operator}${position}"}`, `${node.operator}`);
84
+ case nodes_1.NodeType.Variable:
85
+ const varName = node.names.join(".");
86
+ return createNodeInfo(`[["${node.scope}.${varName}${position}"]]`, `${node.scope}.${varName}`);
87
+ case nodes_1.NodeType.FunctionCall:
88
+ const funcName = node.names.join(".");
89
+ return createNodeInfo(`{{"${node.scope}.${funcName}()${position}"}}`, `${node.scope}.${funcName}()`);
90
+ case nodes_1.NodeType.ResourceReference:
91
+ const resName = node.names.join(".");
92
+ return createNodeInfo(`[/"${node.scope}.${resName}${position}"/]`, `${node.scope}.${resName}`);
93
+ default:
94
+ return {
95
+ shape: `["Unknown${position}"]`,
96
+ label: "Unknown",
97
+ };
98
+ }
99
+ }
100
+ processChildren(node, parentId, depth) {
101
+ const children = this.getChildren(node);
102
+ children.forEach(({ child, label }) => {
103
+ const childId = this.processNode(child, depth + 1);
104
+ const edgeLabel = label ? ` -->|${label}| ` : " --> ";
105
+ this.edges.push(`${parentId}${edgeLabel}${childId}`);
106
+ });
107
+ }
108
+ getChildren(node) {
109
+ switch (node.type) {
110
+ case nodes_1.NodeType.UnaryOperation:
111
+ return [{ child: node.operand, label: "operand" }];
112
+ case nodes_1.NodeType.BinaryOperation:
113
+ return [
114
+ { child: node.left, label: "left" },
115
+ { child: node.right, label: "right" },
116
+ ];
117
+ case nodes_1.NodeType.Assignment:
118
+ return [
119
+ { child: node.left, label: "target" },
120
+ { child: node.right, label: "value" },
121
+ ];
122
+ case nodes_1.NodeType.ArrayAccess:
123
+ return [
124
+ { child: node.array, label: "array" },
125
+ { child: node.index, label: "index" },
126
+ ];
127
+ case nodes_1.NodeType.Conditional:
128
+ const conditionalChildren = [
129
+ { child: node.condition, label: "condition" },
130
+ { child: node.trueExpression, label: "true" },
131
+ ];
132
+ if (node.falseExpression) {
133
+ conditionalChildren.push({ child: node.falseExpression, label: "false" });
134
+ }
135
+ return conditionalChildren;
136
+ case nodes_1.NodeType.NullishCoalescing:
137
+ return [
138
+ { child: node.left, label: "left" },
139
+ { child: node.right, label: "right" },
140
+ ];
141
+ case nodes_1.NodeType.FunctionCall:
142
+ return node.arguments.map((arg, index) => ({
143
+ child: arg,
144
+ label: `arg${index}`,
145
+ }));
146
+ case nodes_1.NodeType.StatementSequence:
147
+ return node.statements.map((stmt, index) => ({
148
+ child: stmt,
149
+ label: `stmt${index}`,
150
+ }));
151
+ default:
152
+ return [];
153
+ }
154
+ }
155
+ createLeafNode(label) {
156
+ const nodeId = `node${this.nodeCounter++}`;
157
+ this.nodes.push(`${nodeId}["${label}"]`);
158
+ return nodeId;
159
+ }
160
+ }
161
+ function createNodeInfo(shape, label) {
162
+ if (shape.length === 6 || shape.length === 5) {
163
+ if (shape.startsWith('{"') && shape.endsWith('"}')) {
164
+ shape = shape.replace('{"', '{"\\');
165
+ }
166
+ }
167
+ return { shape, label };
168
+ }
169
+ /**
170
+ * Generates a Mermaid flowchart diagram from an AST node
171
+ *
172
+ * @param rootNode - The root AST node to visualize
173
+ * @param options - Configuration options for the diagram
174
+ * @returns A Mermaid flowchart diagram as a string
175
+ *
176
+ * @example
177
+ * ```typescript
178
+ * const ast = BinaryOperationNode.create({
179
+ * operator: '+',
180
+ * left: LiteralNode.create({ value: '1', position: 0 }),
181
+ * right: LiteralNode.create({ value: '2', position: 2 }),
182
+ * position: 1
183
+ * });
184
+ *
185
+ * const diagram = generateMermaidDiagram(ast, {
186
+ * direction: 'TD',
187
+ * showPosition: true
188
+ * });
189
+ *
190
+ * console.log(diagram);
191
+ * // Output:
192
+ * // flowchart TD
193
+ * // node0{"+@1"}
194
+ * // node1["1@0"]
195
+ * // node2["2@2"]
196
+ * // node0 -->|left| node1
197
+ * // node0 -->|right| node2
198
+ * ```
199
+ */
200
+ function generateMermaidDiagram(rootNode, options = {}) {
201
+ const builder = new MermaidDiagramBuilder(options);
202
+ return builder.generateDiagram(rootNode);
203
+ }
204
+ /**
205
+ * Utility function to generate a compact Mermaid diagram
206
+ */
207
+ function generateCompactMermaidDiagram(rootNode, maxDepth = 3) {
208
+ return generateMermaidDiagram(rootNode, {
209
+ compactMode: true,
210
+ maxDepth,
211
+ direction: "LR",
212
+ });
213
+ }
214
+ /**
215
+ * Utility function to generate a detailed Mermaid diagram with positions
216
+ */
217
+ function generateDetailedMermaidDiagram(rootNode) {
218
+ return generateMermaidDiagram(rootNode, {
219
+ showPosition: true,
220
+ direction: "TD",
221
+ });
222
+ }
223
+ //# sourceMappingURL=mermaid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../../src/graph/mermaid.ts"],"names":[],"mappings":"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"}
package/lib/src/main.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- export * from "./MolangData";
2
- export * as Molang from "./Molang";
3
- export * from "./Types/Defined Using";
1
+ export * from "./data";
2
+ export * as Molang from "./molang";
package/lib/src/main.js CHANGED
@@ -37,7 +37,6 @@ var __importStar = (this && this.__importStar) || (function () {
37
37
  })();
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.Molang = void 0;
40
- __exportStar(require("./MolangData"), exports);
41
- exports.Molang = __importStar(require("./Molang"));
42
- __exportStar(require("./Types/Defined Using"), exports);
40
+ __exportStar(require("./data"), exports);
41
+ exports.Molang = __importStar(require("./molang"));
43
42
  //# sourceMappingURL=main.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,mDAAmC;AACnC,wDAAsC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAuB;AACvB,mDAAmC"}
@@ -0,0 +1,11 @@
1
+ import { OffsetWord } from "bc-minecraft-bedrock-types/lib/types";
2
+ import { ExpressionNode } from "./syntax";
3
+ export declare class MolangSyntaxCache {
4
+ private _data;
5
+ constructor();
6
+ build(code: OffsetWord): ExpressionNode[] | undefined;
7
+ clear(): void;
8
+ entries(): MapIterator<[string, ExpressionNode[]]>;
9
+ syntaxes(): MapIterator<string>;
10
+ expressions(): MapIterator<ExpressionNode[]>;
11
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MolangSyntaxCache = void 0;
4
+ const syntax_1 = require("./syntax");
5
+ class MolangSyntaxCache {
6
+ constructor() {
7
+ this._data = new Map();
8
+ }
9
+ build(code) {
10
+ const exp = this._data.get(code.text);
11
+ if (exp === undefined) {
12
+ const r = (0, syntax_1.parseMolang)(code);
13
+ this._data.set(code.text, r);
14
+ return r;
15
+ }
16
+ return exp;
17
+ }
18
+ clear() {
19
+ this._data.clear();
20
+ }
21
+ entries() {
22
+ return this._data.entries();
23
+ }
24
+ syntaxes() {
25
+ return this._data.keys();
26
+ }
27
+ expressions() {
28
+ return this._data.values();
29
+ }
30
+ }
31
+ exports.MolangSyntaxCache = MolangSyntaxCache;
32
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../src/molang/cache.ts"],"names":[],"mappings":";;;AACA,qCAAuD;AAEvD,MAAa,iBAAiB;IAG5B;QACE,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAgB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7B,CAAC;CACF;AAjCD,8CAiCC"}
@@ -14,7 +14,8 @@ export declare enum MolangType {
14
14
  * @param data The string to check
15
15
  * @returns The type of molang
16
16
  */
17
- export declare function IsMolangType(data: string): MolangType;
17
+ export declare function isMolangType(data: string): MolangType;
18
+ export declare function isMolang(data: string): boolean;
18
19
  /**
19
20
  * Already assumes that the given data is of type MolangType.event
20
21
  * @param data The text to parse
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MolangType = void 0;
4
- exports.IsMolangType = IsMolangType;
4
+ exports.isMolangType = isMolangType;
5
+ exports.isMolang = isMolang;
5
6
  exports.getEvent = getEvent;
6
7
  exports.isValidMolang = isValidMolang;
7
8
  exports.find = find;
@@ -26,7 +27,7 @@ const molangRegexp = /\b((query|math|variable|texture|temp|geometry|material|arr
26
27
  * @param data The string to check
27
28
  * @returns The type of molang
28
29
  */
29
- function IsMolangType(data) {
30
+ function isMolangType(data) {
30
31
  if (commandRegex.test(data))
31
32
  return MolangType.command;
32
33
  if (eventRegex.test(data))
@@ -35,6 +36,9 @@ function IsMolangType(data) {
35
36
  return MolangType.molang;
36
37
  return MolangType.unknown;
37
38
  }
39
+ function isMolang(data) {
40
+ return molangRegexp.test(data);
41
+ }
38
42
  /**
39
43
  * Already assumes that the given data is of type MolangType.event
40
44
  * @param data The text to parse
@@ -107,4 +111,4 @@ function find(molang, startIndex, find) {
107
111
  }
108
112
  return -1;
109
113
  }
110
- //# sourceMappingURL=Functions.js.map
114
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/molang/functions.ts"],"names":[],"mappings":";;;AAuBA,oCAMC;AAED,4BAEC;AAMD,4BAEC;AAOD,sCAwBC;AASD,oBAgCC;AAjHD,mCAAmC;AACnC,yBAAyB;AACzB,IAAY,UASX;AATD,WAAY,UAAU;IACpB,gBAAgB;IAChB,iDAAO,CAAA;IACP,eAAe;IACf,6CAAK,CAAA;IACL,qBAAqB;IACrB,+CAAM,CAAA;IACN,cAAc;IACd,iDAAO,CAAA;AACT,CAAC,EATW,UAAU,0BAAV,UAAU,QASrB;AAED,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,YAAY,GAAG,aAAa,CAAC;AACnC,MAAM,YAAY,GAChB,2GAA2G,CAAC;AAE9G;;;;GAIG;AACH,SAAgB,YAAY,CAAC,IAAY;IACvC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC;IACvD,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACnD,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC,MAAM,CAAC;IAEtD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,CAAC;AAED,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,SAAgB,aAAa,CAAC,MAAc;IAC1C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG;gBACN,KAAK,GAAG,CAAC,KAAK,CAAC;YAEjB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,IAAI,CAAC,KAAK;oBAAE,KAAK,EAAE,CAAC;gBACpB,MAAM;YAER,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,IAAI,CAAC,KAAK;oBAAE,KAAK,EAAE,CAAC;gBACpB,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC;AACxC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,IAAI,CAAC,MAAc,EAAE,UAAkB,EAAE,IAAY;IACnE,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzC,OAAO,CAAC,CAAC;YACX,CAAC;QACH,CAAC;QAED,QAAQ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAClB,KAAK,GAAG;gBACN,KAAK,GAAG,CAAC,KAAK,CAAC;YAEjB,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,IAAI,CAAC,KAAK;oBAAE,KAAK,EAAE,CAAC;gBACpB,MAAM;YAER,KAAK,GAAG,CAAC;YACT,KAAK,GAAG,CAAC;YACT,KAAK,GAAG;gBACN,IAAI,CAAC,KAAK;oBAAE,KAAK,EAAE,CAAC;gBACpB,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,CAAC,CAAC,CAAC;AACZ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./functions";
2
+ export * from "./molang-set";
3
+ export * from "./syntax";
4
+ export * from "./traverse";
@@ -1,5 +1,4 @@
1
1
  "use strict";
2
- /* Auto generated */
3
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
3
  if (k2 === undefined) k2 = k;
5
4
  var desc = Object.getOwnPropertyDescriptor(m, k);
@@ -15,7 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
16
15
  };
17
16
  Object.defineProperty(exports, "__esModule", { value: true });
18
- __exportStar(require("./Defined"), exports);
19
- __exportStar(require("./DefinedUsing"), exports);
20
- __exportStar(require("./Using"), exports);
17
+ /* Auto generated */
18
+ __exportStar(require("./functions"), exports);
19
+ __exportStar(require("./molang-set"), exports);
20
+ __exportStar(require("./syntax"), exports);
21
+ __exportStar(require("./traverse"), exports);
21
22
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/molang/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oBAAoB;AACpB,8CAA4B;AAC5B,+CAA6B;AAC7B,2CAAyB;AACzB,6CAA2B"}
@@ -0,0 +1,25 @@
1
+ import { OffsetWord } from "bc-minecraft-bedrock-types/lib/types";
2
+ import { MolangSyntaxCache } from "./cache";
3
+ import { FunctionCallNode, ResourceReferenceNode, VariableNode } from "./syntax";
4
+ /** The interface for the molang set */
5
+ export declare class MolangSet {
6
+ cache: MolangSyntaxCache;
7
+ assigned: Set<ResourceReferenceNode | VariableNode>;
8
+ functions: Set<FunctionCallNode>;
9
+ using: Set<ResourceReferenceNode | VariableNode>;
10
+ constructor();
11
+ /**
12
+ * adds the data from the molang code if it is valid molang
13
+ * @param molang
14
+ */
15
+ addIf(molang: OffsetWord): void;
16
+ /**
17
+ *
18
+ * @param molang
19
+ * @returns
20
+ */
21
+ add(molang: OffsetWord): void;
22
+ private walkFn;
23
+ private checkAssigned;
24
+ harvest(object: Record<string, any> | string, originalText: string): void;
25
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MolangSet = void 0;
4
+ const types_1 = require("bc-minecraft-bedrock-types/lib/types");
5
+ const cache_1 = require("./cache");
6
+ const functions_1 = require("./functions");
7
+ const syntax_1 = require("./syntax");
8
+ /** The interface for the molang set */
9
+ class MolangSet {
10
+ constructor() {
11
+ this.cache = new cache_1.MolangSyntaxCache();
12
+ this.assigned = new Set();
13
+ this.functions = new Set();
14
+ this.using = new Set();
15
+ }
16
+ /**
17
+ * adds the data from the molang code if it is valid molang
18
+ * @param molang
19
+ */
20
+ addIf(molang) {
21
+ if ((0, functions_1.isValidMolang)(molang.text))
22
+ this.add(molang);
23
+ }
24
+ /**
25
+ *
26
+ * @param molang
27
+ * @returns
28
+ */
29
+ add(molang) {
30
+ const exp = this.cache.build(molang);
31
+ if (exp === undefined)
32
+ return;
33
+ exp.forEach((e) => (0, syntax_1.walk)(e, this.walkFn.bind(this)));
34
+ }
35
+ walkFn(node) {
36
+ switch (node.type) {
37
+ case syntax_1.NodeType.Assignment:
38
+ this.checkAssigned(node.left);
39
+ break;
40
+ case syntax_1.NodeType.FunctionCall:
41
+ this.functions.add(node);
42
+ break;
43
+ case syntax_1.NodeType.ResourceReference:
44
+ case syntax_1.NodeType.Variable:
45
+ if (this.assigned.has(node))
46
+ break;
47
+ this.using.add(node);
48
+ break;
49
+ }
50
+ }
51
+ checkAssigned(node) {
52
+ switch (node.type) {
53
+ case syntax_1.NodeType.ResourceReference:
54
+ case syntax_1.NodeType.Variable:
55
+ this.assigned.add(node);
56
+ break;
57
+ }
58
+ }
59
+ harvest(object, originalText) {
60
+ if (typeof object === "string") {
61
+ if ((0, functions_1.isMolang)(object)) {
62
+ this.add(types_1.OffsetWord.create(object, originalText.indexOf(object)));
63
+ return;
64
+ }
65
+ }
66
+ for (const [, value] of Object.entries(object)) {
67
+ if (typeof value === "string") {
68
+ if ((0, functions_1.isMolang)(value)) {
69
+ this.add(types_1.OffsetWord.create(value, originalText.indexOf(value)));
70
+ }
71
+ }
72
+ else if (typeof value === "object") {
73
+ if (Array.isArray(value)) {
74
+ value.forEach((v) => this.harvest(v, originalText));
75
+ }
76
+ else {
77
+ this.harvest(value, originalText);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ }
83
+ exports.MolangSet = MolangSet;
84
+ //# sourceMappingURL=molang-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"molang-set.js","sourceRoot":"","sources":["../../../src/molang/molang-set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { ExpressionNode, StatementSequenceNode } from "./nodes";
2
+ export declare class SyntaxBuilder {
3
+ result: StatementSequenceNode;
4
+ /**
5
+ * Operators is a list of operators in the current statements found, used for optimization.
6
+ * Though false positives are possible as operators can be processed down into others.
7
+ */
8
+ operators: Record<string, boolean>;
9
+ constructor(position: number);
10
+ add<T extends ExpressionNode>(node: T): T;
11
+ recordOperatorUsage(node: ExpressionNode): void;
12
+ hasOperator(op: string): boolean;
13
+ remove<T extends ExpressionNode>(node: T): void;
14
+ replace<T extends ExpressionNode, U extends ExpressionNode>(original: T, newnode: U): U;
15
+ build(): ExpressionNode;
16
+ }
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SyntaxBuilder = void 0;
4
+ const nodes_1 = require("./nodes");
5
+ class SyntaxBuilder {
6
+ constructor(position) {
7
+ this.operators = {};
8
+ this.result = {
9
+ type: nodes_1.NodeType.StatementSequence,
10
+ statements: [],
11
+ position: position,
12
+ };
13
+ }
14
+ add(node) {
15
+ if (node) {
16
+ this.recordOperatorUsage(node);
17
+ this.result.statements.push(node);
18
+ }
19
+ return node;
20
+ }
21
+ recordOperatorUsage(node) {
22
+ switch (node.type) {
23
+ case nodes_1.NodeType.UnaryOperation:
24
+ case nodes_1.NodeType.BinaryOperation:
25
+ this.operators[node.operator] = true;
26
+ return;
27
+ case nodes_1.NodeType.NullishCoalescing:
28
+ this.operators["??"] = true;
29
+ return;
30
+ case nodes_1.NodeType.Conditional:
31
+ this.operators["?"] = true;
32
+ return;
33
+ }
34
+ }
35
+ hasOperator(op) {
36
+ return this.operators[op] === true;
37
+ }
38
+ remove(node) {
39
+ this.result.statements = this.result.statements.filter((item) => item !== node);
40
+ }
41
+ replace(original, newnode) {
42
+ this.result.statements.forEach((item, index, nodes) => {
43
+ if (item === original) {
44
+ nodes[index] = newnode;
45
+ }
46
+ });
47
+ return newnode;
48
+ }
49
+ build() {
50
+ if (this.result.statements.length === 1)
51
+ return this.result.statements[0];
52
+ return this.result;
53
+ }
54
+ }
55
+ exports.SyntaxBuilder = SyntaxBuilder;
56
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../../src/molang/syntax/builder.ts"],"names":[],"mappings":";;;AAAA,mCAA0E;AAE1E,MAAa,aAAa;IAQxB,YAAY,QAAgB;QAC1B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,GAAG;YACZ,IAAI,EAAE,gBAAQ,CAAC,iBAAiB;YAChC,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IAED,GAAG,CAA2B,IAAO;QACnC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAE/B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB,CAAC,IAAoB;QACtC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,gBAAQ,CAAC,cAAc,CAAC;YAC7B,KAAK,gBAAQ,CAAC,eAAe;gBAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gBACrC,OAAO;YACT,KAAK,gBAAQ,CAAC,iBAAiB;gBAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC5B,OAAO;YACT,KAAK,gBAAQ,CAAC,WAAW;gBACvB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBAC3B,OAAO;QACX,CAAC;IACH,CAAC;IAED,WAAW,CAAC,EAAU;QACpB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IACrC,CAAC;IAED,MAAM,CAA2B,IAAO;QACtC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CAAqD,QAAW,EAAE,OAAU;QACjF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACpD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;YACzB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,KAAK;QACH,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAE1E,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF;AA7DD,sCA6DC"}
@@ -0,0 +1,2 @@
1
+ import { ExpressionNode } from "./nodes";
2
+ export declare function collect<T extends ExpressionNode>(node: ExpressionNode, token: T["type"]): T[];
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.collect = collect;
4
+ const walk_1 = require("./walk");
5
+ function collect(node, token) {
6
+ const nodes = [];
7
+ (0, walk_1.walk)(node, (n) => {
8
+ if (n === undefined)
9
+ return;
10
+ if (n.type === token)
11
+ nodes.push(node);
12
+ });
13
+ return nodes;
14
+ }
15
+ //# sourceMappingURL=collect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collect.js","sourceRoot":"","sources":["../../../../src/molang/syntax/collect.ts"],"names":[],"mappings":";;AAGA,0BASC;AAXD,iCAA8B;AAE9B,SAAgB,OAAO,CAA2B,IAAoB,EAAE,KAAgB;IACtF,MAAM,KAAK,GAAQ,EAAE,CAAC;IAEtB,IAAA,WAAI,EAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE;QACf,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,IAAS,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Token } from "./tokens";
2
+ /** Represents a syntax error in the Molang code */
3
+ export declare class MolangSyntaxError extends Error {
4
+ position: number;
5
+ code: string;
6
+ constructor(message: string, position: number, code: string);
7
+ static fromToken(token: Token, message: string): MolangSyntaxError;
8
+ static fromTokens(tokens: Token[], message: string): MolangSyntaxError;
9
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MolangSyntaxError = void 0;
4
+ /** Represents a syntax error in the Molang code */
5
+ class MolangSyntaxError extends Error {
6
+ constructor(message, position, code) {
7
+ super(message);
8
+ this.position = position;
9
+ this.code = code;
10
+ this.name = "MolangSyntaxError";
11
+ }
12
+ static fromToken(token, message) {
13
+ return new MolangSyntaxError(message, token.position, token.value);
14
+ }
15
+ static fromTokens(tokens, message) {
16
+ return new MolangSyntaxError(message, tokens[0].position, tokens.map((i) => i.value).join(""));
17
+ }
18
+ }
19
+ exports.MolangSyntaxError = MolangSyntaxError;
20
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../src/molang/syntax/errors.ts"],"names":[],"mappings":";;;AAEA,mDAAmD;AACnD,MAAa,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,OAAe,EAAS,QAAgB,EAAS,IAAY;QACvE,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,aAAQ,GAAR,QAAQ,CAAQ;QAAS,SAAI,GAAJ,IAAI,CAAQ;QAEvE,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,KAAY,EAAE,OAAe;QAC5C,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,MAAe,EAAE,OAAe;QAChD,OAAO,IAAI,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjG,CAAC;CACF;AAZD,8CAYC"}
@@ -0,0 +1,2 @@
1
+ import { ExpressionNode } from "./nodes";
2
+ export declare function flatten(node: ExpressionNode): ExpressionNode[];