@bikky/replication 1.0.2 → 1.0.4

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 (236) hide show
  1. package/.idea/Replication.iml +12 -0
  2. package/.idea/compiler.xml +6 -0
  3. package/.idea/encodings.xml +4 -0
  4. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  5. package/.idea/modules.xml +8 -0
  6. package/.idea/vcs.xml +6 -0
  7. package/Constants/Errors.js +1 -0
  8. package/Constants/Errors.js.map +1 -0
  9. package/Constants/Logging.d.ts +1 -0
  10. package/Constants/Logging.js +2 -2
  11. package/Constants/Logging.js.map +1 -0
  12. package/Constants/ReplicableRegistry.d.ts +4 -3
  13. package/Constants/ReplicableRegistry.js +7 -8
  14. package/Constants/ReplicableRegistry.js.map +1 -0
  15. package/Constants/SerialisationTypes.js +4 -4
  16. package/Constants/SerialisationTypes.js.map +1 -0
  17. package/Constants/SourceMaps.js +1 -0
  18. package/Constants/SourceMaps.js.map +1 -0
  19. package/Constants/TraversalStep.js +1 -0
  20. package/Constants/TraversalStep.js.map +1 -0
  21. package/Constants/Versions.d.ts +2 -1
  22. package/Constants/Versions.js +1 -0
  23. package/Constants/Versions.js.map +1 -0
  24. package/Expressions/Compiler/BuiltinGrammar.js +1 -0
  25. package/Expressions/Compiler/BuiltinGrammar.js.map +1 -0
  26. package/Expressions/Compiler/ExpressionGrammar.js +1 -0
  27. package/Expressions/Compiler/ExpressionGrammar.js.map +1 -0
  28. package/Expressions/Compiler/Grammar/Accessors.d.ts +32 -0
  29. package/Expressions/Compiler/Grammar/Accessors.js +227 -0
  30. package/Expressions/Compiler/Grammar/Accessors.js.map +1 -0
  31. package/Expressions/Compiler/Grammar/ControlFlow.d.ts +38 -0
  32. package/Expressions/Compiler/Grammar/ControlFlow.js +178 -0
  33. package/Expressions/Compiler/Grammar/ControlFlow.js.map +1 -0
  34. package/Expressions/Compiler/Grammar/Declarations.d.ts +22 -0
  35. package/Expressions/Compiler/Grammar/Declarations.js +84 -0
  36. package/Expressions/Compiler/Grammar/Declarations.js.map +1 -0
  37. package/Expressions/Compiler/Grammar/Function.d.ts +30 -0
  38. package/Expressions/Compiler/Grammar/Function.js +292 -0
  39. package/Expressions/Compiler/Grammar/Function.js.map +1 -0
  40. package/Expressions/Compiler/Grammar/General.d.ts +55 -0
  41. package/Expressions/Compiler/Grammar/General.js +248 -0
  42. package/Expressions/Compiler/Grammar/General.js.map +1 -0
  43. package/Expressions/Compiler/Grammar/Maths.d.ts +26 -0
  44. package/Expressions/Compiler/Grammar/Maths.js +164 -0
  45. package/Expressions/Compiler/Grammar/Maths.js.map +1 -0
  46. package/Expressions/Compiler/Grammar/Misc.d.ts +20 -0
  47. package/Expressions/Compiler/Grammar/Misc.js +50 -0
  48. package/Expressions/Compiler/Grammar/Misc.js.map +1 -0
  49. package/Expressions/Compiler/Grammar/Preprocessors.d.ts +18 -0
  50. package/Expressions/Compiler/Grammar/Preprocessors.js +43 -0
  51. package/Expressions/Compiler/Grammar/Preprocessors.js.map +1 -0
  52. package/Expressions/Compiler/Grammar/Struct.d.ts +21 -0
  53. package/Expressions/Compiler/Grammar/Struct.js +42 -0
  54. package/Expressions/Compiler/Grammar/Struct.js.map +1 -0
  55. package/Expressions/Compiler/Grammar/Tokens.d.ts +7 -0
  56. package/Expressions/Compiler/Grammar/Tokens.js +270 -0
  57. package/Expressions/Compiler/Grammar/Tokens.js.map +1 -0
  58. package/Expressions/Compiler/Grammar/Types.d.ts +35 -0
  59. package/Expressions/Compiler/Grammar/Types.js +230 -0
  60. package/Expressions/Compiler/Grammar/Types.js.map +1 -0
  61. package/Expressions/Compiler/GrammarRegistry.d.ts +20 -0
  62. package/Expressions/Compiler/GrammarRegistry.js +51 -0
  63. package/Expressions/Compiler/GrammarRegistry.js.map +1 -0
  64. package/Expressions/Compiler/Parser/Checks.d.ts +8 -0
  65. package/Expressions/Compiler/Parser/Checks.js +40 -0
  66. package/Expressions/Compiler/Parser/Checks.js.map +1 -0
  67. package/Expressions/Compiler/Parser/Enums.d.ts +73 -0
  68. package/Expressions/Compiler/Parser/Enums.js +77 -0
  69. package/Expressions/Compiler/Parser/Enums.js.map +1 -0
  70. package/Expressions/Compiler/Parser/Interfaces.d.ts +118 -0
  71. package/Expressions/Compiler/Parser/Interfaces.js +112 -0
  72. package/Expressions/Compiler/Parser/Interfaces.js.map +1 -0
  73. package/Expressions/Compiler/Parser/MatchGrammar.d.ts +15 -0
  74. package/Expressions/Compiler/Parser/MatchGrammar.js +128 -0
  75. package/Expressions/Compiler/Parser/MatchGrammar.js.map +1 -0
  76. package/Expressions/Compiler/Parser/MatchRepeatingRule.d.ts +4 -0
  77. package/Expressions/Compiler/Parser/MatchRepeatingRule.js +51 -0
  78. package/Expressions/Compiler/Parser/MatchRepeatingRule.js.map +1 -0
  79. package/Expressions/Compiler/Parser/MatchRule.d.ts +4 -0
  80. package/Expressions/Compiler/Parser/MatchRule.js +57 -0
  81. package/Expressions/Compiler/Parser/MatchRule.js.map +1 -0
  82. package/Expressions/Compiler/Parser/Parser.d.ts +26 -0
  83. package/Expressions/Compiler/Parser/Parser.js +67 -0
  84. package/Expressions/Compiler/Parser/Parser.js.map +1 -0
  85. package/Expressions/Compiler/Parser/Tokenizer.d.ts +12 -0
  86. package/Expressions/Compiler/Parser/Tokenizer.js +138 -0
  87. package/Expressions/Compiler/Parser/Tokenizer.js.map +1 -0
  88. package/Expressions/Compiler/Parser/TypesAndPrint.d.ts +29 -0
  89. package/Expressions/Compiler/Parser/TypesAndPrint.js +15 -0
  90. package/Expressions/Compiler/Parser/TypesAndPrint.js.map +1 -0
  91. package/Expressions/Compiler/Parser/Updates.d.ts +10 -0
  92. package/Expressions/Compiler/Parser/Updates.js +79 -0
  93. package/Expressions/Compiler/Parser/Updates.js.map +1 -0
  94. package/Expressions/Compiler/Parser.js +27 -18
  95. package/Expressions/Compiler/Parser.js.map +1 -0
  96. package/Expressions/Compiler/Tokenizer.js +1 -0
  97. package/Expressions/Compiler/Tokenizer.js.map +1 -0
  98. package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.js +1 -0
  99. package/Expressions/Compiler/__tests__/Replicable.Expressions.Parser.test.js.map +1 -0
  100. package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.js +1 -0
  101. package/Expressions/Compiler/__tests__/Replicable.Expressions.Tokenizer.test.js.map +1 -0
  102. package/Expressions/CreateEvaluator.js +1 -0
  103. package/Expressions/CreateEvaluator.js.map +1 -0
  104. package/Expressions/EvaluatorChain.js +6 -1
  105. package/Expressions/EvaluatorChain.js.map +1 -0
  106. package/Expressions/EvaluatorSteps.js +1 -0
  107. package/Expressions/EvaluatorSteps.js.map +1 -0
  108. package/Expressions/EvaluatorString.js +1 -0
  109. package/Expressions/EvaluatorString.js.map +1 -0
  110. package/Expressions/Expression.js +10 -3
  111. package/Expressions/Expression.js.map +1 -0
  112. package/Expressions/Traverser.js +2 -2
  113. package/Expressions/Traverser.js.map +1 -0
  114. package/Expressions/TypeRegistry/Accessors.js +1 -0
  115. package/Expressions/TypeRegistry/Accessors.js.map +1 -0
  116. package/Expressions/TypeRegistry/ChainCollections.js +1 -0
  117. package/Expressions/TypeRegistry/ChainCollections.js.map +1 -0
  118. package/Expressions/TypeRegistry/ChainTypes.js +1 -0
  119. package/Expressions/TypeRegistry/ChainTypes.js.map +1 -0
  120. package/Expressions/TypeRegistry/CustomAPI.d.ts +6 -4
  121. package/Expressions/TypeRegistry/CustomAPI.js +16 -34
  122. package/Expressions/TypeRegistry/CustomAPI.js.map +1 -0
  123. package/Expressions/TypeRegistry/Primitive.js +1 -0
  124. package/Expressions/TypeRegistry/Primitive.js.map +1 -0
  125. package/Expressions/TypeRegistry/Registry.js +6 -6
  126. package/Expressions/TypeRegistry/Registry.js.map +1 -0
  127. package/Expressions/TypeRegistry/ReplAPI.d.ts +7 -5
  128. package/Expressions/TypeRegistry/ReplAPI.js +9 -22
  129. package/Expressions/TypeRegistry/ReplAPI.js.map +1 -0
  130. package/Expressions/TypeRegistry/Scope.js +1 -0
  131. package/Expressions/TypeRegistry/Scope.js.map +1 -0
  132. package/Expressions/TypeRegistry/Types.js +1 -0
  133. package/Expressions/TypeRegistry/Types.js.map +1 -0
  134. package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.js +1 -0
  135. package/Expressions/TypeRegistry/__tests__/Replicable.Expressions.Accessors.test.js.map +1 -0
  136. package/Expressions/__tests__/ExpressionExamples.js +1 -0
  137. package/Expressions/__tests__/ExpressionExamples.js.map +1 -0
  138. package/Expressions/__tests__/Replicable.Expressions.Expressions.test.js +4 -3
  139. package/Expressions/__tests__/Replicable.Expressions.Expressions.test.js.map +1 -0
  140. package/IDPool.data.d.ts +2 -0
  141. package/IDPool.js +1 -0
  142. package/IDPool.js.map +1 -0
  143. package/Main.js +1 -0
  144. package/Main.js.map +1 -0
  145. package/Networking.d.ts +3 -0
  146. package/Networking.js +22 -9
  147. package/Networking.js.map +1 -0
  148. package/Replicatable.js +5 -6
  149. package/Replicatable.js.map +1 -0
  150. package/Tracking/Buffable.d.ts +3 -2
  151. package/Tracking/Buffable.js +1 -0
  152. package/Tracking/Buffable.js.map +1 -0
  153. package/Tracking/Class.d.ts +6 -4
  154. package/Tracking/Class.js +37 -19
  155. package/Tracking/Class.js.map +1 -0
  156. package/Tracking/Functions.js +3 -2
  157. package/Tracking/Functions.js.map +1 -0
  158. package/Tracking/GlobalGroup.js +2 -2
  159. package/Tracking/GlobalGroup.js.map +1 -0
  160. package/Tracking/Property.d.ts +3 -2
  161. package/Tracking/Property.js +9 -5
  162. package/Tracking/Property.js.map +1 -0
  163. package/Tracking/Types.js +1 -0
  164. package/Tracking/Types.js.map +1 -0
  165. package/Tracking/__tests__/Replicable.Tracking.Decorator.test.js +1 -0
  166. package/Tracking/__tests__/Replicable.Tracking.Decorator.test.js.map +1 -0
  167. package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.js +1 -0
  168. package/Tracking/__tests__/Replicable.Tracking.Deserialisation.test.js.map +1 -0
  169. package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.js +1 -0
  170. package/Tracking/__tests__/Replicable.Tracking.MixinSchemaGeneration.test.js.map +1 -0
  171. package/Tracking/__tests__/Replicable.Tracking.Struct.test.js +1 -0
  172. package/Tracking/__tests__/Replicable.Tracking.Struct.test.js.map +1 -0
  173. package/Tracking/__tests__/Replicable.Tracking.Type.test.js +1 -0
  174. package/Tracking/__tests__/Replicable.Tracking.Type.test.js.map +1 -0
  175. package/Transformers/Configurer.d.ts +15 -1
  176. package/Transformers/Configurer.js +130 -21
  177. package/Transformers/Configurer.js.map +1 -0
  178. package/Transformers/Constructor.js +1 -0
  179. package/Transformers/Constructor.js.map +1 -0
  180. package/Transformers/Definitions.d.ts +3 -3
  181. package/Transformers/Definitions.js +41 -21
  182. package/Transformers/Definitions.js.map +1 -0
  183. package/Transformers/Loader.js +21 -11
  184. package/Transformers/Loader.js.map +1 -0
  185. package/Transformers/Progress.js +19 -13
  186. package/Transformers/Progress.js.map +1 -0
  187. package/Transformers/Reference.js +3 -2
  188. package/Transformers/Reference.js.map +1 -0
  189. package/Transformers/SchemaGenerator.d.ts +2 -2
  190. package/Transformers/SchemaGenerator.js +89 -7
  191. package/Transformers/SchemaGenerator.js.map +1 -0
  192. package/Transformers/Serialiser.js +1 -0
  193. package/Transformers/Serialiser.js.map +1 -0
  194. package/Transformers/Utils.d.ts +1 -1
  195. package/Transformers/Utils.js +43 -26
  196. package/Transformers/Utils.js.map +1 -0
  197. package/Transformers/__tests__/Examples.d.ts +36 -0
  198. package/Transformers/__tests__/Examples.js +40 -0
  199. package/Transformers/__tests__/Examples.js.map +1 -0
  200. package/Transformers/__tests__/Replicable.Transformers.Definitions.test.js +18 -16
  201. package/Transformers/__tests__/Replicable.Transformers.Definitions.test.js.map +1 -0
  202. package/Transformers/__tests__/Replicable.Transformers.Loader.test.js +2 -0
  203. package/Transformers/__tests__/Replicable.Transformers.Loader.test.js.map +1 -0
  204. package/Transformers/__tests__/Replicable.Transformers.Progress.test.js +1 -0
  205. package/Transformers/__tests__/Replicable.Transformers.Progress.test.js.map +1 -0
  206. package/Transformers/__tests__/Replicable.Transformers.Reference.test.js +1 -0
  207. package/Transformers/__tests__/Replicable.Transformers.Reference.test.js.map +1 -0
  208. package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.js +14 -2
  209. package/Transformers/__tests__/Replicable.Transformers.SchemaGenerator.test.js.map +1 -0
  210. package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.js +1 -0
  211. package/Transformers/__tests__/Replicable.Transformers.SchemaGeneratorOutput.test.js.map +1 -0
  212. package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.js +11 -2
  213. package/Transformers/__tests__/Replicable.Transformers.Serialiser.test.js.map +1 -0
  214. package/Transformers/__tests__/Replicable.Transformers.Utils.test.js +95 -82
  215. package/Transformers/__tests__/Replicable.Transformers.Utils.test.js.map +1 -0
  216. package/__tests__/Configuration/Mocks.d.ts +2 -0
  217. package/__tests__/Configuration/Mocks.js +98 -0
  218. package/__tests__/Configuration/Mocks.js.map +1 -0
  219. package/__tests__/Configuration/Setup.d.ts +1 -0
  220. package/__tests__/Configuration/Setup.js +14 -0
  221. package/__tests__/Configuration/Setup.js.map +1 -0
  222. package/__tests__/Configuration/TestTypes.d.ts +33 -0
  223. package/__tests__/Replicable.Expressions.test.js +1 -0
  224. package/__tests__/Replicable.Expressions.test.js.map +1 -0
  225. package/__tests__/Replicable.IDPool.test.js +1 -0
  226. package/__tests__/Replicable.IDPool.test.js.map +1 -0
  227. package/__tests__/Replicable.ReplicableRegistry.test.js +23 -13
  228. package/__tests__/Replicable.ReplicableRegistry.test.js.map +1 -0
  229. package/__tests__/Replicable.Serialisation.test.js +1 -0
  230. package/__tests__/Replicable.Serialisation.test.js.map +1 -0
  231. package/package.json +28 -18
  232. package/tsconfig.json +7 -4
  233. package/tsconfig.tsbuildinfo +1 -0
  234. package/vitest.config.d.ts +2 -0
  235. package/vitest.config.js +32 -0
  236. package/vitest.config.js.map +1 -0
@@ -0,0 +1,112 @@
1
+ import { ErrorStack } from "../../../Constants/Errors.js";
2
+ import { GrammarRegistry } from "../GrammarRegistry.js";
3
+ export var GrammarInterfaces;
4
+ (function (GrammarInterfaces) {
5
+ var ExpressionSyntaxError = GrammarRegistry.ExpressionSyntaxError;
6
+ function isFunctionOutputType(type) {
7
+ return type.kind === "function";
8
+ }
9
+ GrammarInterfaces.isFunctionOutputType = isFunctionOutputType;
10
+ function isAssignableCompile(version, to, from, node, stack) {
11
+ let errors = new ErrorStack({ Version: version, SourceFile: node.file.sourceLocation });
12
+ if (!to || !from) {
13
+ if (!to) {
14
+ errors.syntaxError(`GI_AIAS_1B`, `Type is not assignable to null.`, node);
15
+ }
16
+ if (!from) {
17
+ errors.syntaxError(`GI_AIAS_2B`, `Null is not assignable to type.`, node);
18
+ }
19
+ }
20
+ else {
21
+ //Make sure each from is assignable to at least one to.
22
+ for (let fromEntry of from) {
23
+ let paramErrors = new ErrorStack({ Version: version, SourceFile: node.file.sourceLocation });
24
+ let success = false;
25
+ for (let toEntry of to) {
26
+ success = true;
27
+ if (isFunctionOutputType(toEntry) && isFunctionOutputType(fromEntry)) {
28
+ if (fromEntry.parameters.length !== toEntry.parameters.length) {
29
+ paramErrors.syntaxError(`GI_AIAS_01`, `Function is not assignable to function, provided ${fromEntry.parameters.length}` +
30
+ ` but expected ${toEntry.parameters.length}.`, node);
31
+ success = false;
32
+ }
33
+ else {
34
+ for (let i = 0; i < toEntry.parameters.length; i++) {
35
+ let subErrors = new ErrorStack({ Version: version, SourceFile: node.file.sourceLocation });
36
+ if (!isAssignableCompile(version, toEntry.parameters[i].type, fromEntry.parameters[i].type, node, subErrors)) {
37
+ paramErrors.appendAndIndent(subErrors);
38
+ paramErrors.syntaxError(`GI_AIAS_02`, `Function is not assignable to function, parameter ${i} (${toEntry.parameters[i].assignmentName}) doesn't match.`, node);
39
+ success = false;
40
+ }
41
+ }
42
+ }
43
+ let subErrors = new ErrorStack({ Version: version, SourceFile: node.file.sourceLocation });
44
+ if (!isAssignableCompile(version, toEntry.returnType, fromEntry.returnType, node, subErrors)) {
45
+ paramErrors.appendAndIndent(subErrors);
46
+ paramErrors.syntaxError(`GI_AIAS_03`, `Function is not assignable to function, return type doesn't match.`, node);
47
+ success = false;
48
+ }
49
+ }
50
+ else if (!isFunctionOutputType(toEntry) && !isFunctionOutputType(fromEntry)) {
51
+ if (!toEntry.isAssignableCompile(version, fromEntry)) {
52
+ paramErrors.syntaxError(`GI_AIAS_04`, `${fromEntry.debugName} is not assignable to ${toEntry.debugName}.`, node);
53
+ success = false;
54
+ }
55
+ }
56
+ else {
57
+ paramErrors.syntaxError(`GI_AIAS_05`, `Function is not assignable to non-function, types don't match.`, node);
58
+ success = false;
59
+ }
60
+ if (success) {
61
+ break;
62
+ }
63
+ }
64
+ if (!success) {
65
+ errors.appendWithoutIndent(paramErrors);
66
+ }
67
+ }
68
+ }
69
+ stack.appendWithoutIndent(errors);
70
+ return errors.hasErrors();
71
+ }
72
+ GrammarInterfaces.isAssignableCompile = isAssignableCompile;
73
+ function collapseTypeLive(scope, node, value, types) {
74
+ if (!types)
75
+ return null;
76
+ let stack = new ErrorStack({ Version: scope.version, SourceFile: node.file.sourceLocation });
77
+ for (let type of types) {
78
+ if (type.kind === "value") {
79
+ //TODO: Handle collections
80
+ if (!type.isAssignable(scope.version, !!scope.data, value, stack)) {
81
+ continue;
82
+ }
83
+ return type;
84
+ }
85
+ else if (type.kind === "function") {
86
+ if (typeof value !== "function") {
87
+ continue;
88
+ }
89
+ if (value.type != type) {
90
+ continue;
91
+ }
92
+ return type;
93
+ }
94
+ }
95
+ throw new ExpressionSyntaxError(`Value is not assignable to any of the expected types.\n` + stack.toString(`EXP_GI_CTL_01`), node);
96
+ }
97
+ GrammarInterfaces.collapseTypeLive = collapseTypeLive;
98
+ function dedupeTypes(types) {
99
+ const seen = new Set(types);
100
+ return [...seen];
101
+ }
102
+ GrammarInterfaces.dedupeTypes = dedupeTypes;
103
+ let SpecialType;
104
+ (function (SpecialType) {
105
+ /**
106
+ * Allow extra types to be input by the parent. Used as a placeholder for blocks so that the expression
107
+ * lines from the parent are used in the evaluation of this grammar rule.
108
+ **/
109
+ SpecialType[SpecialType["INPUT_TYPES"] = 1000] = "INPUT_TYPES";
110
+ })(SpecialType = GrammarInterfaces.SpecialType || (GrammarInterfaces.SpecialType = {}));
111
+ })(GrammarInterfaces || (GrammarInterfaces = {}));
112
+ //# sourceMappingURL=Interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Interfaces.js","sourceRoot":"","sources":["Interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { MatchSuccess, NextMatchDetails } from "./TypesAndPrint.js";
2
+ import { NodeType } from "./Enums.js";
3
+ import { GrammarInterfaces } from "./Interfaces.js";
4
+ import EAST_Complex_Node = GrammarInterfaces.EAST_Complex_Node;
5
+ /**
6
+ * Given the current location and a list of possible rules for what could come next, iterate through each rule and evaluate
7
+ * it.
8
+ * We do track which rules we've already started evaluating on this node, because in the case of expressions referencing each
9
+ * other in the first node, we might infinite loop on the evaluation if we don't bail. If we do bail we need to not remember
10
+ * that we bailed due to an infinite loop, because a valid binary expression could still be a valid expression (even though
11
+ * it was skipped when the expression was evaluated).
12
+ * Example of an infinite loop:
13
+ * Binary Expression -> Expression -> Binary Expression -> Expression -> ...
14
+ */
15
+ export declare function MatchGrammar(details: NextMatchDetails, grammarType: NodeType, historicalMatches: NodeType[]): MatchSuccess<EAST_Complex_Node>;
@@ -0,0 +1,128 @@
1
+ import { PrintNodeName } from "./TypesAndPrint.js";
2
+ import { GrammarRegistry } from "../GrammarRegistry.js";
3
+ import { MatchRepeatingRule } from "./MatchRepeatingRule.js";
4
+ import { MatchRule } from "./MatchRule.js";
5
+ import { CheckRuleDone, IsRuleSkippable } from "./Checks.js";
6
+ import { NodeType } from "./Enums.js";
7
+ /**
8
+ * Given the current location and a list of possible rules for what could come next, iterate through each rule and evaluate
9
+ * it.
10
+ * We do track which rules we've already started evaluating on this node, because in the case of expressions referencing each
11
+ * other in the first node, we might infinite loop on the evaluation if we don't bail. If we do bail we need to not remember
12
+ * that we bailed due to an infinite loop, because a valid binary expression could still be a valid expression (even though
13
+ * it was skipped when the expression was evaluated).
14
+ * Example of an infinite loop:
15
+ * Binary Expression -> Expression -> Binary Expression -> Expression -> ...
16
+ */
17
+ export function MatchGrammar(details, grammarType, historicalMatches) {
18
+ let grammar = GrammarRegistry.getRule(details.parser.versionIndex, grammarType);
19
+ let tokenIndexAtStartOfNode = details.parser.currentNodeIndex;
20
+ let previousRuleMatched = true;
21
+ let start = details.parser.token.position;
22
+ let column = details.parser.token.column;
23
+ let line = details.parser.token.line;
24
+ let cached = details.parser.partialEvaluationResults.get2D(grammarType, tokenIndexAtStartOfNode);
25
+ if (typeof cached !== "undefined") {
26
+ if (cached === null) {
27
+ console.debug(`Cache for rule ${NodeType[grammarType]} at ${tokenIndexAtStartOfNode}`
28
+ + ` is recorded as having failed, so returning failure and skipping resolution.`);
29
+ }
30
+ else {
31
+ console.debug(`Retrieving cached node for ${PrintNodeName(cached)}`);
32
+ }
33
+ return {
34
+ result: cached,
35
+ cachable: true
36
+ };
37
+ }
38
+ // We've hit a loop - we've already tried to evaluate this grammar type for this node.
39
+ // We should only need to do this for the first rule in a grammar, because it's fine for
40
+ // rules to be recursive after the first entry (e.g. having multiple parenthesised expressions
41
+ // starting with multiple '('s ).
42
+ if (historicalMatches.includes(grammar.ID)) {
43
+ // Don't cache nodes that failed due to recursion, because we can't guarantee that
44
+ // that they will fail again next time.
45
+ return {
46
+ result: null,
47
+ cachable: false
48
+ };
49
+ }
50
+ let cachable = true;
51
+ let node = null;
52
+ let childDetails = { ...details, debugTabs: details.debugTabs + "\t" };
53
+ let ruleMatchSuccess = false;
54
+ //Must match one rule cluster.
55
+ MatchOneRuleCluster: for (let ruleClusterIndex = 0; ruleClusterIndex < grammar.rules.length; ruleClusterIndex++) {
56
+ node = {
57
+ type: grammarType,
58
+ execute: grammar.execute,
59
+ values: {},
60
+ startTokenIndex: tokenIndexAtStartOfNode,
61
+ debugName: PrintNodeName({ type: grammarType })
62
+ };
63
+ //Must match each rule in the cluster.
64
+ MatchEachRule: for (let grammarRuleIndex = 0; grammarRuleIndex < grammar.rules[ruleClusterIndex].length; grammarRuleIndex++) {
65
+ if (details.parser.done) {
66
+ if (CheckRuleDone(grammar, grammar.rules[ruleClusterIndex], grammarRuleIndex)) {
67
+ ruleMatchSuccess = true;
68
+ break MatchOneRuleCluster;
69
+ }
70
+ else {
71
+ details.parser.resetToken(tokenIndexAtStartOfNode);
72
+ continue MatchOneRuleCluster;
73
+ }
74
+ }
75
+ let rule = grammar.rules[ruleClusterIndex][grammarRuleIndex];
76
+ let ruleSkippable = IsRuleSkippable(rule, previousRuleMatched);
77
+ let ruleRepeat = !!rule.repeat;
78
+ let history = details.parser.currentNodeIndex == tokenIndexAtStartOfNode ? [...historicalMatches, grammar.ID] : [];
79
+ let success = ruleRepeat ? MatchRepeatingRule(childDetails, rule, node, history) : MatchRule(childDetails, rule, node, history);
80
+ // Should this propagate cacheability or not?
81
+ // Sometimes! - If we've correctly parsed the first token when we've gotten to this point then we can
82
+ // ignore the cache.
83
+ // And it's only recursion on the first token that is a danger for causing infinite loops, so it's the
84
+ // only failure we guard against with the history check. All other failures are going to be the same
85
+ // regardless of which node starts evaluating them.
86
+ if (details.parser.currentNodeIndex == tokenIndexAtStartOfNode && !success.cachable) {
87
+ cachable = false;
88
+ }
89
+ if (!success.result && !ruleSkippable) {
90
+ continue MatchOneRuleCluster;
91
+ }
92
+ }
93
+ }
94
+ if (!ruleMatchSuccess) {
95
+ return {
96
+ result: null,
97
+ cachable
98
+ };
99
+ }
100
+ if (!node) {
101
+ if (cachable) {
102
+ details.parser.partialEvaluationResults.set2D(grammarType, tokenIndexAtStartOfNode, null);
103
+ }
104
+ details.parser.resetToken(tokenIndexAtStartOfNode);
105
+ return {
106
+ result: null,
107
+ cachable: true
108
+ };
109
+ }
110
+ let lastToken = details.parser.token ? details.parser.token : details.parser.tokens[details.parser.tokens.length - 1];
111
+ let finishedNode = {
112
+ ...node,
113
+ file: details.parser.file,
114
+ position: start,
115
+ version: details.parser.version,
116
+ column: column,
117
+ line: line,
118
+ length: lastToken.position + lastToken.length - start
119
+ };
120
+ if (cachable) {
121
+ details.parser.partialEvaluationResults.set2D(grammarType, tokenIndexAtStartOfNode, finishedNode);
122
+ }
123
+ return {
124
+ result: finishedNode,
125
+ cachable: true
126
+ };
127
+ }
128
+ //# sourceMappingURL=MatchGrammar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatchGrammar.js","sourceRoot":"","sources":["MatchGrammar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { MatchSuccess, NextMatchDetails, PartialEASTNode } from "./TypesAndPrint.js";
2
+ import { NodeType } from "./Enums.js";
3
+ import { GrammarInterfaces } from "./Interfaces.js";
4
+ export declare function MatchRepeatingRule(details: NextMatchDetails, rule: GrammarInterfaces.Rule, progress: PartialEASTNode, historicalMatches: NodeType[]): MatchSuccess<PartialEASTNode>;
@@ -0,0 +1,51 @@
1
+ import { PrintNodeName } from "./TypesAndPrint.js";
2
+ import { MatchRule } from "./MatchRule.js";
3
+ import { TokenDataMatchesRule } from "./Checks.js";
4
+ export function MatchRepeatingRule(details, rule, progress, historicalMatches) {
5
+ let ruleCurrentRepeatNumber = 0;
6
+ let cachable = true;
7
+ do {
8
+ //Consume repeat token if present!
9
+ if (rule.repeatSeparator && ruleCurrentRepeatNumber > 0) {
10
+ if (rule.repeatSeparator.optional == "previous") {
11
+ throw new Error(`Repeat separator's optionality can't be based on previous rule.`);
12
+ }
13
+ if (details.parser.token.type == rule.repeatSeparator.type
14
+ && TokenDataMatchesRule(details.parser.version, rule.repeatSeparator, details.parser.token)) {
15
+ console.debug(`${details.debugTabs}Skipping ${PrintNodeName(details.parser.token)} ${details.parser.token.data}`);
16
+ details.parser.consumeToken();
17
+ }
18
+ else {
19
+ break;
20
+ }
21
+ }
22
+ // Finished repeats - so return success.
23
+ if (details.parser.done) {
24
+ break;
25
+ }
26
+ //For each type that may be next, there is an early exit if repeating but no more tokens.
27
+ let valid = MatchRule(details, rule, progress, historicalMatches);
28
+ if (details.parser.currentNodeIndex === progress.startTokenIndex) {
29
+ cachable &&= valid.cachable;
30
+ }
31
+ if (!valid.result) {
32
+ //Didn't repeat enough, so die in a fire!
33
+ if (ruleCurrentRepeatNumber < rule.repeat[0]) {
34
+ console.debug(`${details.debugTabs}Repeated ${ruleCurrentRepeatNumber} times, which is less than ${rule.repeat[0]}!`);
35
+ return { result: null, cachable };
36
+ }
37
+ //We hit the minimum needed repeats, so we can stop with a valid node here.
38
+ break;
39
+ }
40
+ ruleCurrentRepeatNumber++;
41
+ //Repeat too much, so force continue.
42
+ if (ruleCurrentRepeatNumber >= rule.repeat[1]) {
43
+ break;
44
+ }
45
+ } while (true);
46
+ return {
47
+ result: progress,
48
+ cachable
49
+ };
50
+ }
51
+ //# sourceMappingURL=MatchRepeatingRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatchRepeatingRule.js","sourceRoot":"","sources":["MatchRepeatingRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmD,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACpG,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAInD,MAAM,UAAU,kBAAkB,CAAC,OAAyB,EAAE,IAA4B,EAAE,QAAyB,EAAE,iBAA6B;IACnJ,IAAI,uBAAuB,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,GAAG,CAAC;QACH,kCAAkC;QAClC,IAAI,IAAI,CAAC,eAAe,IAAI,uBAAuB,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,eAAe,CAAC,QAAQ,IAAI,UAAU,EAAE,CAAC;gBACjD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACpF,CAAC;YACD,IACC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI;mBACnD,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAC1F,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,YAAY,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClH,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC/B,CAAC;iBACI,CAAC;gBACL,MAAM;YACP,CAAC;QACF,CAAC;QAED,wCAAwC;QACxC,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM;QACP,CAAC;QAED,yFAAyF;QACzF,IAAI,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC,MAAM,CAAC,gBAAgB,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC;YAClE,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACnB,yCAAyC;YACzC,IAAI,uBAAuB,GAAG,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,SAAS,YAAY,uBAAuB,8BAA8B,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACvH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACnC,CAAC;YACD,2EAA2E;YAC3E,MAAM;QACP,CAAC;QAED,uBAAuB,EAAE,CAAC;QAE1B,qCAAqC;QACrC,IAAI,uBAAuB,IAAI,IAAI,CAAC,MAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,MAAM;QACP,CAAC;IACF,CAAC,QAAQ,IAAI,EAAE;IAEf,OAAO;QACN,MAAM,EAAE,QAAQ;QAChB,QAAQ;KACR,CAAA;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { MatchSuccess, NextMatchDetails, PartialEASTNode } from "./TypesAndPrint.js";
2
+ import { GrammarInterfaces } from "./Interfaces.js";
3
+ import { NodeType } from "./Enums.js";
4
+ export declare function MatchRule(details: NextMatchDetails, rule: GrammarInterfaces.Rule, progress: PartialEASTNode, historicalMatches: NodeType[]): MatchSuccess<PartialEASTNode>;
@@ -0,0 +1,57 @@
1
+ import { PrintNodeName, PrintTokenText } from "./TypesAndPrint.js";
2
+ import { AddToPartialEASTNode, ComputeChildInputs, ComputeValidTypes } from "./Updates.js";
3
+ import { TokenDataMatchesRule } from "./Checks.js";
4
+ import { MatchGrammar } from "./MatchGrammar.js";
5
+ import { NodeType, TokenType } from "./Enums.js";
6
+ export function MatchRule(details, rule, progress, historicalMatches) {
7
+ let validTypes = ComputeValidTypes(rule, details.extraTypes);
8
+ let childInputs = ComputeChildInputs(rule, details.extraTypes);
9
+ let cachable = true;
10
+ if ("value" in rule || "values" in rule) {
11
+ if (!TokenDataMatchesRule(details.parser.version, rule, details.parser.token)) {
12
+ console.debug(`${details.debugTabs} - Token data ${PrintTokenText(details.parser.token)} is undesirable, skipping type.`);
13
+ // Value mismatch, assuming this tokenType can only ever match one value it's safe to break.
14
+ return {
15
+ result: null,
16
+ cachable
17
+ };
18
+ }
19
+ }
20
+ for (let type of validTypes) {
21
+ //Check if type is the current valid type.
22
+ if (type == details.parser.token.type) {
23
+ console.debug(`${details.debugTabs} - Matched a ${TokenType[type]} ${PrintTokenText(details.parser.token)}`);
24
+ AddToPartialEASTNode(details, rule, progress, details.parser.token);
25
+ return {
26
+ result: progress,
27
+ cachable
28
+ };
29
+ }
30
+ //Or if we're currently looking at a compound node type, we'll see if we can create it!
31
+ else if (type in NodeType) {
32
+ console.debug(`${details.debugTabs} - Trying to make a ${NodeType[type]}`);
33
+ //Try make a node.
34
+ //Run through all of the rules of a possible compound rule.
35
+ //If the rules match, then make a new node.
36
+ let subMatch = MatchGrammar({ ...details, extraTypes: childInputs }, type, historicalMatches);
37
+ if (!subMatch.cachable && details.parser.currentNodeIndex == progress.startTokenIndex) {
38
+ cachable = false;
39
+ }
40
+ //Node succeeded, continue.
41
+ if (subMatch.result) {
42
+ console.debug(`${details.debugTabs}Made a ${NodeType[type]}`);
43
+ AddToPartialEASTNode(details, rule, progress, subMatch.result);
44
+ return {
45
+ result: progress,
46
+ cachable
47
+ };
48
+ }
49
+ }
50
+ }
51
+ console.debug(`${details.debugTabs}Failed to create a ${PrintNodeName(progress)}, '${details.parser.token.data}' != '${rule.debug_name ?? rule.value ?? rule.values}'`);
52
+ return {
53
+ result: null,
54
+ cachable
55
+ };
56
+ }
57
+ //# sourceMappingURL=MatchRule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MatchRule.js","sourceRoot":"","sources":["MatchRule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { Map2D } from "@bikky/smart-collections";
2
+ import { FileNode } from "../Grammar/General.js";
3
+ import { GrammarInterfaces } from "./Interfaces.js";
4
+ import Token = GrammarInterfaces.Token;
5
+ export declare class ExpressionParser {
6
+ tokens: Token[];
7
+ version: string;
8
+ versionIndex: number;
9
+ currentNodeIndex: number;
10
+ done: boolean;
11
+ token: Token;
12
+ file: Partial<FileNode>;
13
+ sourceLocation: string;
14
+ partialEvaluationResults: Map2D<number, GrammarInterfaces.EAST_Complex_Node | null>;
15
+ constructor(version: string, code: string, sourceLocation: string, start: {
16
+ line: number;
17
+ column: number;
18
+ });
19
+ consumeToken(): void;
20
+ resetToken(index: number): void;
21
+ run(): FileNode | null;
22
+ }
23
+ export declare function CreateASTFromString(version: string, lines: string, sourceLocation: string, start: {
24
+ line: number;
25
+ column: number;
26
+ }): FileNode | null;
@@ -0,0 +1,67 @@
1
+ import { TokenizeExpression } from "./Tokenizer.js";
2
+ import { GetVersionIndex } from "../../../Constants/Versions.js";
3
+ import { MatchGrammar } from "./MatchGrammar.js";
4
+ import { Map2D } from "@bikky/smart-collections";
5
+ import { NodeType, TokenType } from "./Enums.js";
6
+ let debug = false;
7
+ export class ExpressionParser {
8
+ constructor(version, code, sourceLocation, start) {
9
+ // Keeps track of successful and failed partial evaluations to speed up compilation.
10
+ this.partialEvaluationResults = new Map2D();
11
+ this.tokens = TokenizeExpression(code, version);
12
+ this.versionIndex = GetVersionIndex(version);
13
+ this.version = version;
14
+ this.sourceLocation = sourceLocation;
15
+ this.currentNodeIndex = 0;
16
+ this.done = false;
17
+ this.token = this.tokens[0];
18
+ if (this.token.type == TokenType.WHITESPACE)
19
+ this.consumeToken();
20
+ this.file = {
21
+ text: code,
22
+ line: start.line,
23
+ column: start.column,
24
+ sourceLocation: sourceLocation
25
+ };
26
+ }
27
+ consumeToken() {
28
+ this.currentNodeIndex++;
29
+ while (this.tokens[this.currentNodeIndex]?.type == TokenType.WHITESPACE) {
30
+ this.currentNodeIndex++;
31
+ }
32
+ this.token = this.tokens[this.currentNodeIndex];
33
+ if (this.token) {
34
+ debug &&
35
+ console.log(`[New token is ${this.currentNodeIndex}: ${TokenType[this.token.type]} '${this.token.data.slice(0, Math.min(this.token.data.length, 20))}']`);
36
+ }
37
+ this.done = this.currentNodeIndex >= this.tokens.length;
38
+ }
39
+ //We reset if we fail to generate a node.
40
+ resetToken(index) {
41
+ this.currentNodeIndex = index;
42
+ this.token = this.tokens[this.currentNodeIndex];
43
+ console.debug(`[Reset token to ${this.currentNodeIndex}: ${TokenType[this.token.type]} '${this.token.data.slice(0, Math.min(this.token.data.length, 20))}']`);
44
+ this.done = this.currentNodeIndex >= this.tokens.length;
45
+ }
46
+ run() {
47
+ if (this.token.type == TokenType.WHITESPACE)
48
+ this.consumeToken();
49
+ //Start with a file :]
50
+ let node = MatchGrammar({
51
+ parser: this,
52
+ extraTypes: [],
53
+ debugTabs: ""
54
+ }, NodeType.FILE, []).result;
55
+ if (node == null)
56
+ return null;
57
+ let prop;
58
+ for (prop in node) {
59
+ this.file[prop] = node[prop];
60
+ }
61
+ return this.file;
62
+ }
63
+ }
64
+ export function CreateASTFromString(version, lines, sourceLocation, start) {
65
+ return new ExpressionParser(version, lines, sourceLocation, start).run();
66
+ }
67
+ //# sourceMappingURL=Parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parser.js","sourceRoot":"","sources":["Parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { GrammarInterfaces } from "./Interfaces.js";
2
+ import TokenCategoryRule = GrammarInterfaces.TokenCategoryRule;
3
+ import Token = GrammarInterfaces.Token;
4
+ export declare function getEASTTokenValues(fileVersion: string, category: TokenCategoryRule): Set<string>;
5
+ /**
6
+ *
7
+ * @param expression The whole string
8
+ * @param version The version of the expression language this was compiled against
9
+ * @param offset The offset from the start of the file that this expression occurred within.
10
+ * @constructor
11
+ */
12
+ export declare function TokenizeExpression(expression: string, version: string, offset?: number): Token[];