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

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 +5 -0
  56. package/lib/src/{Types/Defined Using/index.js → molang/index.js} +6 -4
  57. package/lib/src/molang/index.js.map +1 -0
  58. package/lib/src/molang/molang-set.d.ts +26 -0
  59. package/lib/src/molang/molang-set.js +88 -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,264 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMolang = parseMolang;
4
+ const nodes_1 = require("./nodes");
5
+ const tokens_1 = require("./tokens");
6
+ const util_1 = require("./util");
7
+ const builder_1 = require("./builder");
8
+ const errors_1 = require("./errors");
9
+ const operators_1 = require("./operators");
10
+ /** Main function to parse Molang code into a syntax tree */
11
+ function parseMolang(line) {
12
+ const tokens = (0, tokens_1.tokenize)(line.text);
13
+ const statements = splitTokens(tokens, (item) => item.type === tokens_1.TokenType.Semicolon).filter((t) => t.length > 0);
14
+ // Parse each statement
15
+ return statements
16
+ .map(trimEnding)
17
+ .filter((item) => item.length > 0 && item[0].type !== tokens_1.TokenType.EOF)
18
+ .map(parseTokens);
19
+ }
20
+ /**
21
+ * Converts the given tokens into nodes
22
+ * @param tokens
23
+ * @returns
24
+ */
25
+ function parseTokens(tokens) {
26
+ var _a, _b;
27
+ tokens = trimBraces(tokens);
28
+ tokens = trimEnding(tokens);
29
+ if (tokens.length === 1)
30
+ return (_a = convertToken(tokens[0])) !== null && _a !== void 0 ? _a : costlyConvertToken(tokens, 0).node;
31
+ const builder = new builder_1.SyntaxBuilder((_b = tokens[0].position) !== null && _b !== void 0 ? _b : 0);
32
+ for (let i = 0; i < tokens.length; i++) {
33
+ const t = tokens[i];
34
+ const c = convertToken(t);
35
+ let n;
36
+ if (c) {
37
+ n = c;
38
+ }
39
+ else {
40
+ const cdata = costlyConvertToken(tokens, i);
41
+ i = cdata.startIndex - 1;
42
+ n = cdata.node;
43
+ }
44
+ builder.add(n);
45
+ // Check for parenthese, brackets and braces
46
+ if (tokens_1.Token.oneOfType(t, tokens_1.TokenType.NamespacedIdentifier) &&
47
+ tokens_1.Token.oneOfType(tokens[i + 1], tokens_1.TokenType.OpenBrace, tokens_1.TokenType.OpenBracket, tokens_1.TokenType.OpenParen)) {
48
+ const code = (0, util_1.getMatchingTokenSlice)(tokens, i + 1);
49
+ const inner = trimBraces(code);
50
+ const params = splitTokens(inner, (item) => item.type === tokens_1.TokenType.Comma);
51
+ const bracketArgs = params.map(parseTokens);
52
+ i += code.length; // move index to end
53
+ switch (n.type) {
54
+ case nodes_1.NodeType.FunctionCall:
55
+ n.arguments = bracketArgs;
56
+ break;
57
+ case nodes_1.NodeType.ResourceReference:
58
+ if (bracketArgs.length > 0) {
59
+ throw errors_1.MolangSyntaxError.fromToken(t, "unexpected function call after resource access");
60
+ }
61
+ break;
62
+ case nodes_1.NodeType.Variable:
63
+ if (bracketArgs.length > 1) {
64
+ throw errors_1.MolangSyntaxError.fromToken(t, "unexpected amount of parameters for array access");
65
+ }
66
+ if (!tokens_1.Token.oneOfType(code[0], tokens_1.TokenType.OpenBracket)) {
67
+ throw errors_1.MolangSyntaxError.fromToken(t, "unexpected function call after resource access");
68
+ }
69
+ builder.replace(n, nodes_1.ArrayAccessNode.create({
70
+ position: n.position,
71
+ array: n,
72
+ index: bracketArgs[0],
73
+ }));
74
+ break;
75
+ }
76
+ }
77
+ }
78
+ //
79
+ (0, operators_1.processOperators)(builder);
80
+ return builder.build();
81
+ }
82
+ /** Filter () {} [] from start or finish if they match */
83
+ function trimBraces(tokens) {
84
+ if (tokens.length <= 1)
85
+ return tokens;
86
+ while ((tokens[0].type === tokens_1.TokenType.OpenBrace && tokens[tokens.length - 1].type === tokens_1.TokenType.CloseBrace) ||
87
+ (tokens[0].type === tokens_1.TokenType.OpenBracket && tokens[tokens.length - 1].type === tokens_1.TokenType.CloseBracket) ||
88
+ (tokens[0].type === tokens_1.TokenType.OpenParen && tokens[tokens.length - 1].type === tokens_1.TokenType.CloseParen)) {
89
+ tokens = tokens.slice(1, tokens.length - 1);
90
+ if (tokens.length === 0)
91
+ return tokens;
92
+ }
93
+ return tokens;
94
+ }
95
+ function trimEnding(tokens) {
96
+ // Filter off
97
+ while (tokens[tokens.length - 1].type === tokens_1.TokenType.EOF || tokens[tokens.length - 1].type === tokens_1.TokenType.Semicolon) {
98
+ tokens = tokens.slice(0, tokens.length - 1);
99
+ if (tokens.length === 0)
100
+ return tokens;
101
+ }
102
+ return tokens;
103
+ }
104
+ /**
105
+ * Cheap converserions from tokens to nodes
106
+ * @param token
107
+ * @returns
108
+ */
109
+ function convertToken(token) {
110
+ switch (token.type) {
111
+ case tokens_1.TokenType.NamespacedIdentifier:
112
+ const parts = token.value.split(".");
113
+ switch (parts[0]) {
114
+ case "q":
115
+ case "math":
116
+ case "query":
117
+ return nodes_1.FunctionCallNode.create({
118
+ names: parts.slice(1),
119
+ scope: parts[0],
120
+ arguments: [],
121
+ position: token.position,
122
+ });
123
+ case "texture":
124
+ case "material":
125
+ case "geometry":
126
+ return nodes_1.ResourceReferenceNode.create({
127
+ position: token.position,
128
+ scope: parts[0],
129
+ names: parts.slice(1),
130
+ });
131
+ case "temp":
132
+ case "t":
133
+ case "variable":
134
+ case "v":
135
+ case "context":
136
+ case "c":
137
+ case "array":
138
+ return nodes_1.VariableNode.create({
139
+ names: parts.slice(1),
140
+ position: token.position,
141
+ scope: parts[0],
142
+ });
143
+ }
144
+ break;
145
+ case tokens_1.TokenType.Number:
146
+ return nodes_1.LiteralNode.create({
147
+ position: token.position,
148
+ value: token.value,
149
+ });
150
+ case tokens_1.TokenType.StringLiteral:
151
+ return nodes_1.StringLiteralNode.create({
152
+ position: token.position,
153
+ value: token.value,
154
+ });
155
+ case tokens_1.TokenType.Operator:
156
+ return nodes_1.BinaryOperationNode.create({
157
+ operator: token.value,
158
+ position: token.position,
159
+ left: {},
160
+ right: {},
161
+ });
162
+ case tokens_1.TokenType.UnaryOperator:
163
+ return nodes_1.UnaryOperationNode.create({
164
+ operator: token.value,
165
+ position: token.position,
166
+ operand: {},
167
+ });
168
+ case tokens_1.TokenType.Assignment:
169
+ return nodes_1.AssignmentNode.create({
170
+ position: token.position,
171
+ left: {},
172
+ right: {},
173
+ });
174
+ case tokens_1.TokenType.QuestionMark:
175
+ return nodes_1.ConditionalExpressionNode.create({
176
+ position: token.position,
177
+ condition: {},
178
+ falseExpression: {},
179
+ trueExpression: {},
180
+ });
181
+ case tokens_1.TokenType.Colon:
182
+ return nodes_1.MarkerNode.create({
183
+ position: token.position,
184
+ token: token,
185
+ });
186
+ case tokens_1.TokenType.NullishCoalescing:
187
+ return nodes_1.NullishCoalescingNode.create({
188
+ position: token.position,
189
+ left: {},
190
+ right: {},
191
+ });
192
+ }
193
+ return undefined;
194
+ }
195
+ /**
196
+ * The more costly conversions, and the last restort, will throw an error if doesn't know what to do
197
+ * @param tokens
198
+ * @param startIndex
199
+ */
200
+ function costlyConvertToken(tokens, startIndex) {
201
+ const current = tokens[startIndex];
202
+ switch (current.type) {
203
+ case tokens_1.TokenType.OpenBrace:
204
+ case tokens_1.TokenType.OpenBracket:
205
+ case tokens_1.TokenType.OpenParen:
206
+ const code = (0, util_1.getMatchingTokenSlice)(tokens, startIndex);
207
+ return {
208
+ node: parseTokens(code),
209
+ startIndex: startIndex + code.length,
210
+ };
211
+ }
212
+ throw errors_1.MolangSyntaxError.fromToken(current, `don't know how to process this token: ${current.value} ${tokens_1.TokenType[current.type]}`);
213
+ }
214
+ function splitTokens(tokens, predicate) {
215
+ const result = [];
216
+ let startIndex = 0;
217
+ let bracketIndex = 0;
218
+ let parentIndex = 0;
219
+ let braceIndex = 0;
220
+ //loop
221
+ for (let i = 0; i < tokens.length; i++) {
222
+ const t = tokens[i];
223
+ switch (t.type) {
224
+ case tokens_1.TokenType.OpenBrace:
225
+ braceIndex++;
226
+ break;
227
+ case tokens_1.TokenType.OpenParen:
228
+ parentIndex++;
229
+ break;
230
+ case tokens_1.TokenType.OpenBracket:
231
+ bracketIndex++;
232
+ break;
233
+ case tokens_1.TokenType.CloseBrace:
234
+ braceIndex--;
235
+ break;
236
+ case tokens_1.TokenType.CloseParen:
237
+ parentIndex--;
238
+ break;
239
+ case tokens_1.TokenType.CloseBracket:
240
+ bracketIndex--;
241
+ break;
242
+ }
243
+ if (bracketIndex > 0 || parentIndex > 0 || braceIndex > 0)
244
+ continue;
245
+ if (predicate(t)) {
246
+ const left = tokens.slice(startIndex, i);
247
+ result.push(left);
248
+ startIndex = i + 1;
249
+ }
250
+ }
251
+ // Validate
252
+ if (bracketIndex > 0)
253
+ throw errors_1.MolangSyntaxError.fromTokens(tokens, "couldn't find the closing {");
254
+ if (parentIndex > 0)
255
+ throw errors_1.MolangSyntaxError.fromTokens(tokens, "couldn't find the closing (");
256
+ if (braceIndex > 0)
257
+ throw errors_1.MolangSyntaxError.fromTokens(tokens, "couldn't find the closing [");
258
+ if (startIndex < tokens.length) {
259
+ const left = tokens.slice(startIndex);
260
+ result.push(left);
261
+ }
262
+ return result;
263
+ }
264
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../../src/molang/syntax/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** Represents a token in the Molang code */
2
+ export interface Token {
3
+ type: TokenType;
4
+ value: string;
5
+ position: number;
6
+ }
7
+ export declare namespace Token {
8
+ function oneOfType(t: Pick<Token, "type"> | undefined, ...params: TokenType[]): boolean;
9
+ }
10
+ export declare enum TokenType {
11
+ ArrayAccess = 0,
12
+ Arrow = 1,
13
+ Assignment = 2,
14
+ CloseBrace = 3,
15
+ CloseBracket = 4,
16
+ CloseParen = 5,
17
+ Colon = 6,
18
+ Comma = 7,
19
+ Dot = 8,
20
+ Identifier = 9,
21
+ NamespacedIdentifier = 10,
22
+ NullishCoalescing = 11,
23
+ Number = 12,
24
+ OpenBrace = 13,
25
+ OpenBracket = 14,
26
+ OpenParen = 15,
27
+ Operator = 16,
28
+ QuestionMark = 17,
29
+ Semicolon = 18,
30
+ StringLiteral = 19,
31
+ UnaryOperator = 20,
32
+ EOF = 21
33
+ }
34
+ /** Tokenizes Molang code into a sequence of tokens */
35
+ export declare function tokenize(input: string): Token[];
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TokenType = exports.Token = void 0;
4
+ exports.tokenize = tokenize;
5
+ var Token;
6
+ (function (Token) {
7
+ function oneOfType(t, ...params) {
8
+ if (t === undefined)
9
+ return false;
10
+ return params.includes(t.type);
11
+ }
12
+ Token.oneOfType = oneOfType;
13
+ })(Token || (exports.Token = Token = {}));
14
+ var TokenType;
15
+ (function (TokenType) {
16
+ TokenType[TokenType["ArrayAccess"] = 0] = "ArrayAccess";
17
+ TokenType[TokenType["Arrow"] = 1] = "Arrow";
18
+ TokenType[TokenType["Assignment"] = 2] = "Assignment";
19
+ TokenType[TokenType["CloseBrace"] = 3] = "CloseBrace";
20
+ TokenType[TokenType["CloseBracket"] = 4] = "CloseBracket";
21
+ TokenType[TokenType["CloseParen"] = 5] = "CloseParen";
22
+ TokenType[TokenType["Colon"] = 6] = "Colon";
23
+ TokenType[TokenType["Comma"] = 7] = "Comma";
24
+ TokenType[TokenType["Dot"] = 8] = "Dot";
25
+ TokenType[TokenType["Identifier"] = 9] = "Identifier";
26
+ TokenType[TokenType["NamespacedIdentifier"] = 10] = "NamespacedIdentifier";
27
+ TokenType[TokenType["NullishCoalescing"] = 11] = "NullishCoalescing";
28
+ TokenType[TokenType["Number"] = 12] = "Number";
29
+ TokenType[TokenType["OpenBrace"] = 13] = "OpenBrace";
30
+ TokenType[TokenType["OpenBracket"] = 14] = "OpenBracket";
31
+ TokenType[TokenType["OpenParen"] = 15] = "OpenParen";
32
+ TokenType[TokenType["Operator"] = 16] = "Operator";
33
+ TokenType[TokenType["QuestionMark"] = 17] = "QuestionMark";
34
+ TokenType[TokenType["Semicolon"] = 18] = "Semicolon";
35
+ TokenType[TokenType["StringLiteral"] = 19] = "StringLiteral";
36
+ TokenType[TokenType["UnaryOperator"] = 20] = "UnaryOperator";
37
+ TokenType[TokenType["EOF"] = 21] = "EOF";
38
+ })(TokenType || (exports.TokenType = TokenType = {}));
39
+ function isDigit(ch) {
40
+ const code = ch.charCodeAt(0);
41
+ return code >= 48 && code <= 57; // 0-9
42
+ }
43
+ function isAlpha(ch) {
44
+ const code = ch.charCodeAt(0);
45
+ return ((code >= 65 && code <= 90) || // A-Z
46
+ (code >= 97 && code <= 122) || // a-z
47
+ ch === "_");
48
+ }
49
+ function isAlphaNumeric(ch) {
50
+ return isAlpha(ch) || isDigit(ch);
51
+ }
52
+ /** Tokenizes Molang code into a sequence of tokens */
53
+ function tokenize(input) {
54
+ const tokens = [];
55
+ let pos = 0;
56
+ while (pos < input.length) {
57
+ const char = input[pos];
58
+ // Skip whitespace
59
+ switch (char) {
60
+ case " ":
61
+ case "\t":
62
+ case "\r":
63
+ case "\n":
64
+ pos++;
65
+ continue;
66
+ }
67
+ // Numbers
68
+ if (isDigit(char)) {
69
+ let value = "";
70
+ const start = pos;
71
+ while (pos < input.length && (isDigit(input[pos]) || input[pos] === ".")) {
72
+ value += input[pos];
73
+ pos++;
74
+ }
75
+ tokens.push({ type: TokenType.Number, value, position: start });
76
+ continue;
77
+ }
78
+ // Identifiers (including namespaced ones like math.sin and minecraft:state)
79
+ if (isAlpha(char)) {
80
+ let value = "";
81
+ const start = pos;
82
+ while (pos < input.length) {
83
+ const ch = input[pos];
84
+ // Allow alphanumeric, dots, underscores, and colons in identifiers
85
+ if (isAlphaNumeric(ch) || ch === "." || ch === ":") {
86
+ value += ch;
87
+ pos++;
88
+ }
89
+ else {
90
+ break;
91
+ }
92
+ }
93
+ // If it contains a dot, it's a namespaced identifier
94
+ if (value.includes(".")) {
95
+ tokens.push({ type: TokenType.NamespacedIdentifier, value: value.toLowerCase(), position: start });
96
+ }
97
+ else {
98
+ tokens.push({ type: TokenType.Identifier, value: value.toLowerCase(), position: start });
99
+ }
100
+ continue;
101
+ }
102
+ // Multi-character operators
103
+ const threeCharOp = input.slice(pos, pos + 3);
104
+ if (threeCharOp === "???") {
105
+ tokens.push({ type: TokenType.NullishCoalescing, value: threeCharOp, position: pos });
106
+ pos += 3;
107
+ continue;
108
+ }
109
+ const twoCharOp = input.slice(pos, pos + 2);
110
+ switch (twoCharOp) {
111
+ case "&&":
112
+ case "||":
113
+ case "==":
114
+ case "!=":
115
+ case "<=":
116
+ case ">=":
117
+ case "->":
118
+ tokens.push({ type: TokenType.Operator, value: twoCharOp, position: pos });
119
+ pos += 2;
120
+ continue;
121
+ case "??":
122
+ tokens.push({ type: TokenType.NullishCoalescing, value: twoCharOp, position: pos });
123
+ pos += 2;
124
+ continue;
125
+ default:
126
+ }
127
+ // Single-character operators and punctuation
128
+ switch (char) {
129
+ case "(":
130
+ tokens.push({ type: TokenType.OpenParen, value: char, position: pos });
131
+ break;
132
+ case ")":
133
+ tokens.push({ type: TokenType.CloseParen, value: char, position: pos });
134
+ break;
135
+ case "{":
136
+ tokens.push({ type: TokenType.OpenBrace, value: char, position: pos });
137
+ break;
138
+ case "}":
139
+ tokens.push({ type: TokenType.CloseBrace, value: char, position: pos });
140
+ break;
141
+ case "[":
142
+ tokens.push({ type: TokenType.OpenBracket, value: char, position: pos });
143
+ break;
144
+ case "]":
145
+ tokens.push({ type: TokenType.CloseBracket, value: char, position: pos });
146
+ break;
147
+ case ";":
148
+ tokens.push({ type: TokenType.Semicolon, value: char, position: pos });
149
+ break;
150
+ case "?":
151
+ tokens.push({ type: TokenType.QuestionMark, value: char, position: pos });
152
+ break;
153
+ case ":":
154
+ tokens.push({ type: TokenType.Colon, value: char, position: pos });
155
+ break;
156
+ case ".":
157
+ tokens.push({ type: TokenType.Dot, value: char, position: pos });
158
+ break;
159
+ case "=":
160
+ tokens.push({ type: TokenType.Assignment, value: char, position: pos });
161
+ break;
162
+ case "!":
163
+ tokens.push({ type: TokenType.UnaryOperator, value: char, position: pos });
164
+ break;
165
+ case "+":
166
+ case "-":
167
+ case "*":
168
+ case "/":
169
+ case "<":
170
+ case ">":
171
+ tokens.push({ type: TokenType.Operator, value: char, position: pos });
172
+ break;
173
+ case ",":
174
+ tokens.push({ type: TokenType.Comma, value: char, position: pos });
175
+ break;
176
+ case "'":
177
+ case '"':
178
+ // Handle string literals
179
+ const quote = char;
180
+ const start = pos;
181
+ pos++;
182
+ let value = "";
183
+ while (pos < input.length && input[pos] !== quote) {
184
+ // Capture everything inside quotes including special characters
185
+ value += input[pos];
186
+ pos++;
187
+ }
188
+ if (pos >= input.length) {
189
+ throw new Error(`Unterminated string literal starting at position ${start}`);
190
+ }
191
+ pos++; // Skip closing quote
192
+ tokens.push({
193
+ type: TokenType.StringLiteral,
194
+ value: value, // Use accumulated value instead of slicing
195
+ position: start,
196
+ });
197
+ continue; // Use continue instead of break to avoid the pos++ at the end of switch
198
+ default:
199
+ throw new Error(`Unexpected character at position ${pos}: ${char}`);
200
+ }
201
+ pos++;
202
+ continue;
203
+ }
204
+ // Always add an EOF token at the end
205
+ tokens.push({ type: TokenType.EOF, value: " ", position: pos });
206
+ // Check for unary operators
207
+ tokens.forEach(checkUnaryOperators);
208
+ return tokens;
209
+ }
210
+ function checkUnaryOperators(item, index, items) {
211
+ if (item.type !== TokenType.Operator && item.value !== "-")
212
+ return;
213
+ if (index === 0) {
214
+ item.type = TokenType.UnaryOperator;
215
+ return;
216
+ }
217
+ const previous = items[index - 1];
218
+ switch (previous.type) {
219
+ case TokenType.Comma:
220
+ case TokenType.Operator:
221
+ case TokenType.OpenBrace:
222
+ case TokenType.OpenBracket:
223
+ case TokenType.OpenParen:
224
+ item.type = TokenType.UnaryOperator;
225
+ break;
226
+ default:
227
+ }
228
+ }
229
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../../src/molang/syntax/tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Token } from './tokens';
2
+ /**
3
+ * Gets a slice tokens from ( to ) (or for {}, [])
4
+ * @param tokens
5
+ * @param startIndex
6
+ * @returns
7
+ */
8
+ export declare function getMatchingTokenSlice(tokens: Token[], startIndex: number): Token[];
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMatchingTokenSlice = getMatchingTokenSlice;
4
+ const tokens_1 = require("./tokens");
5
+ /**
6
+ * Gets a slice tokens from ( to ) (or for {}, [])
7
+ * @param tokens
8
+ * @param startIndex
9
+ * @returns
10
+ */
11
+ function getMatchingTokenSlice(tokens, startIndex) {
12
+ if (startIndex >= tokens.length) {
13
+ throw new Error("Start index is out of bounds");
14
+ }
15
+ const startToken = tokens[startIndex];
16
+ let targetType;
17
+ let counterType;
18
+ // Determine what we're looking for based on the starting token
19
+ switch (startToken.type) {
20
+ case tokens_1.TokenType.OpenBrace:
21
+ targetType = tokens_1.TokenType.CloseBrace;
22
+ counterType = tokens_1.TokenType.OpenBrace;
23
+ break;
24
+ case tokens_1.TokenType.OpenParen:
25
+ targetType = tokens_1.TokenType.CloseParen;
26
+ counterType = tokens_1.TokenType.OpenParen;
27
+ break;
28
+ case tokens_1.TokenType.OpenBracket:
29
+ targetType = tokens_1.TokenType.CloseBracket;
30
+ counterType = tokens_1.TokenType.OpenBracket;
31
+ break;
32
+ default:
33
+ throw new Error(`Token at index ${startIndex} is not an opening bracket, brace, or parenthesis`);
34
+ }
35
+ let level = 1; // We start with level 1 since we found the opening token
36
+ let endIndex = -1;
37
+ // Search for the matching closing token
38
+ for (let i = startIndex + 1; i < tokens.length; i++) {
39
+ const token = tokens[i];
40
+ if (token.type === counterType) {
41
+ level++;
42
+ }
43
+ else if (token.type === targetType) {
44
+ level--;
45
+ if (level === 0) {
46
+ endIndex = i;
47
+ break;
48
+ }
49
+ }
50
+ }
51
+ // Validate that we found the matching closing token
52
+ if (endIndex === -1) {
53
+ const tokenName = startToken.type === tokens_1.TokenType.OpenBrace ? "{" : startToken.type === tokens_1.TokenType.OpenParen ? "(" : "[";
54
+ const closingName = targetType === tokens_1.TokenType.CloseBrace ? "}" : targetType === tokens_1.TokenType.CloseParen ? ")" : "]";
55
+ throw new Error(`Couldn't find the matching closing ${closingName} for ${tokenName} at index ${startIndex}`);
56
+ }
57
+ // Return the slice including both opening and closing tokens
58
+ return tokens.slice(startIndex, endIndex + 1);
59
+ }
60
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/molang/syntax/util.ts"],"names":[],"mappings":";;AAQA,sDAuDC;AA/DD,qCAA4C;AAE5C;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAC,MAAe,EAAE,UAAkB;IACvE,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,UAAqB,CAAC;IAC1B,IAAI,WAAsB,CAAC;IAE3B,+DAA+D;IAC/D,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,kBAAS,CAAC,SAAS;YACtB,UAAU,GAAG,kBAAS,CAAC,UAAU,CAAC;YAClC,WAAW,GAAG,kBAAS,CAAC,SAAS,CAAC;YAClC,MAAM;QACR,KAAK,kBAAS,CAAC,SAAS;YACtB,UAAU,GAAG,kBAAS,CAAC,UAAU,CAAC;YAClC,WAAW,GAAG,kBAAS,CAAC,SAAS,CAAC;YAClC,MAAM;QACR,KAAK,kBAAS,CAAC,WAAW;YACxB,UAAU,GAAG,kBAAS,CAAC,YAAY,CAAC;YACpC,WAAW,GAAG,kBAAS,CAAC,WAAW,CAAC;YACpC,MAAM;QACR;YACE,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,mDAAmD,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,yDAAyD;IACxE,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC;IAElB,wCAAwC;IACxC,KAAK,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAExB,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,KAAK,EAAE,CAAC;QACV,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;gBAChB,QAAQ,GAAG,CAAC,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,MAAM,SAAS,GACb,UAAU,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,KAAK,kBAAS,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QACtG,MAAM,WAAW,GAAG,UAAU,KAAK,kBAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,KAAK,kBAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAChH,MAAM,IAAI,KAAK,CAAC,sCAAsC,WAAW,QAAQ,SAAS,aAAa,UAAU,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,6DAA6D;IAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ExpressionNode } from "./nodes";
2
+ export declare function walk(exp: ExpressionNode, callback: (node: ExpressionNode) => void): void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.walk = walk;
4
+ const nodes_1 = require("./nodes");
5
+ function walk(exp, callback) {
6
+ const objs = [exp];
7
+ for (let i = 0; i < objs.length; i++) {
8
+ const node = objs[i];
9
+ if (node === undefined)
10
+ continue;
11
+ callback(node);
12
+ objs.push(...nodes_1.ExpressionNode.getChildern(node));
13
+ }
14
+ }
15
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../../../src/molang/syntax/walk.ts"],"names":[],"mappings":";;AAEA,oBAUC;AAZD,mCAAyC;AAEzC,SAAgB,IAAI,CAAC,GAAmB,EAAE,QAAwC;IAChF,MAAM,IAAI,GAAqB,CAAC,GAAG,CAAC,CAAC;IAErC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,SAAS;YAAE,SAAS;QACjC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,IAAI,CAAC,IAAI,CAAC,GAAG,sBAAc,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}