@bikky/replication 1.0.3 → 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 (76) hide show
  1. package/.idea/Replication.iml +12 -0
  2. package/.idea/compiler.xml +6 -0
  3. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  4. package/.idea/modules.xml +8 -0
  5. package/.idea/vcs.xml +3 -1
  6. package/Expressions/Compiler/Grammar/Accessors.d.ts +32 -0
  7. package/Expressions/Compiler/Grammar/Accessors.js +227 -0
  8. package/Expressions/Compiler/Grammar/Accessors.js.map +1 -0
  9. package/Expressions/Compiler/Grammar/ControlFlow.d.ts +38 -0
  10. package/Expressions/Compiler/Grammar/ControlFlow.js +178 -0
  11. package/Expressions/Compiler/Grammar/ControlFlow.js.map +1 -0
  12. package/Expressions/Compiler/Grammar/Declarations.d.ts +22 -0
  13. package/Expressions/Compiler/Grammar/Declarations.js +84 -0
  14. package/Expressions/Compiler/Grammar/Declarations.js.map +1 -0
  15. package/Expressions/Compiler/Grammar/Function.d.ts +30 -0
  16. package/Expressions/Compiler/Grammar/Function.js +292 -0
  17. package/Expressions/Compiler/Grammar/Function.js.map +1 -0
  18. package/Expressions/Compiler/Grammar/General.d.ts +55 -0
  19. package/Expressions/Compiler/Grammar/General.js +248 -0
  20. package/Expressions/Compiler/Grammar/General.js.map +1 -0
  21. package/Expressions/Compiler/Grammar/Maths.d.ts +26 -0
  22. package/Expressions/Compiler/Grammar/Maths.js +164 -0
  23. package/Expressions/Compiler/Grammar/Maths.js.map +1 -0
  24. package/Expressions/Compiler/Grammar/Misc.d.ts +20 -0
  25. package/Expressions/Compiler/Grammar/Misc.js +50 -0
  26. package/Expressions/Compiler/Grammar/Misc.js.map +1 -0
  27. package/Expressions/Compiler/Grammar/Preprocessors.d.ts +18 -0
  28. package/Expressions/Compiler/Grammar/Preprocessors.js +43 -0
  29. package/Expressions/Compiler/Grammar/Preprocessors.js.map +1 -0
  30. package/Expressions/Compiler/Grammar/Struct.d.ts +21 -0
  31. package/Expressions/Compiler/Grammar/Struct.js +42 -0
  32. package/Expressions/Compiler/Grammar/Struct.js.map +1 -0
  33. package/Expressions/Compiler/Grammar/Tokens.d.ts +7 -0
  34. package/Expressions/Compiler/Grammar/Tokens.js +270 -0
  35. package/Expressions/Compiler/Grammar/Tokens.js.map +1 -0
  36. package/Expressions/Compiler/Grammar/Types.d.ts +35 -0
  37. package/Expressions/Compiler/Grammar/Types.js +230 -0
  38. package/Expressions/Compiler/Grammar/Types.js.map +1 -0
  39. package/Expressions/Compiler/GrammarRegistry.d.ts +20 -0
  40. package/Expressions/Compiler/GrammarRegistry.js +51 -0
  41. package/Expressions/Compiler/GrammarRegistry.js.map +1 -0
  42. package/Expressions/Compiler/Parser/Checks.d.ts +8 -0
  43. package/Expressions/Compiler/Parser/Checks.js +40 -0
  44. package/Expressions/Compiler/Parser/Checks.js.map +1 -0
  45. package/Expressions/Compiler/Parser/Enums.d.ts +73 -0
  46. package/Expressions/Compiler/Parser/Enums.js +77 -0
  47. package/Expressions/Compiler/Parser/Enums.js.map +1 -0
  48. package/Expressions/Compiler/Parser/Interfaces.d.ts +118 -0
  49. package/Expressions/Compiler/Parser/Interfaces.js +112 -0
  50. package/Expressions/Compiler/Parser/Interfaces.js.map +1 -0
  51. package/Expressions/Compiler/Parser/MatchGrammar.d.ts +15 -0
  52. package/Expressions/Compiler/Parser/MatchGrammar.js +128 -0
  53. package/Expressions/Compiler/Parser/MatchGrammar.js.map +1 -0
  54. package/Expressions/Compiler/Parser/MatchRepeatingRule.d.ts +4 -0
  55. package/Expressions/Compiler/Parser/MatchRepeatingRule.js +51 -0
  56. package/Expressions/Compiler/Parser/MatchRepeatingRule.js.map +1 -0
  57. package/Expressions/Compiler/Parser/MatchRule.d.ts +4 -0
  58. package/Expressions/Compiler/Parser/MatchRule.js +57 -0
  59. package/Expressions/Compiler/Parser/MatchRule.js.map +1 -0
  60. package/Expressions/Compiler/Parser/Parser.d.ts +26 -0
  61. package/Expressions/Compiler/Parser/Parser.js +67 -0
  62. package/Expressions/Compiler/Parser/Parser.js.map +1 -0
  63. package/Expressions/Compiler/Parser/Tokenizer.d.ts +12 -0
  64. package/Expressions/Compiler/Parser/Tokenizer.js +138 -0
  65. package/Expressions/Compiler/Parser/Tokenizer.js.map +1 -0
  66. package/Expressions/Compiler/Parser/TypesAndPrint.d.ts +29 -0
  67. package/Expressions/Compiler/Parser/TypesAndPrint.js +15 -0
  68. package/Expressions/Compiler/Parser/TypesAndPrint.js.map +1 -0
  69. package/Expressions/Compiler/Parser/Updates.d.ts +10 -0
  70. package/Expressions/Compiler/Parser/Updates.js +79 -0
  71. package/Expressions/Compiler/Parser/Updates.js.map +1 -0
  72. package/Networking.d.ts +3 -0
  73. package/Networking.js +19 -5
  74. package/Networking.js.map +1 -1
  75. package/package.json +28 -28
  76. package/tsconfig.tsbuildinfo +1 -1
@@ -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[];
@@ -0,0 +1,138 @@
1
+ import { GetVersionIndex } from "../../../Constants/Versions.js";
2
+ import { EAST_Tokens } from "../Grammar/Tokens.js";
3
+ import { TokenType } from "./Enums.js";
4
+ let debug = false;
5
+ export function getEASTTokenValues(fileVersion, category) {
6
+ let index = GetVersionIndex(fileVersion);
7
+ if (index < 0)
8
+ throw new Error(`Can't parse file using version that isn't supported: ${fileVersion}`);
9
+ let vals = new Set();
10
+ for (; index >= 0; index--) {
11
+ let thisVersionVals = category.versions[index];
12
+ if (thisVersionVals instanceof RegExp) {
13
+ if (vals.size == 0) {
14
+ throw new Error(`Token is regexp not values.`);
15
+ }
16
+ else {
17
+ break;
18
+ }
19
+ }
20
+ for (let val of thisVersionVals) {
21
+ vals.add(val);
22
+ }
23
+ }
24
+ return vals;
25
+ }
26
+ function getEASTTokenRegex(fileVersion, category) {
27
+ let index = GetVersionIndex(fileVersion);
28
+ if (index < 0)
29
+ throw new Error(`Can't parse file using version that isn't supported: ${fileVersion}`);
30
+ let vals = new Set();
31
+ for (; index >= 0; index--) {
32
+ let thisVersionVals = category.versions[index];
33
+ //Regular expression overrides all previously defined syntax.
34
+ if (thisVersionVals instanceof RegExp) {
35
+ if (vals.size == 0) {
36
+ return thisVersionVals;
37
+ }
38
+ else {
39
+ break;
40
+ }
41
+ }
42
+ else if (thisVersionVals) {
43
+ for (let val of thisVersionVals) {
44
+ vals.add(val);
45
+ }
46
+ }
47
+ }
48
+ return new RegExp([...vals].map((e) => {
49
+ return "[.*+?^${}()|[]\\]".includes(e) ? "\\" + e : e;
50
+ }).join("|"), "g");
51
+ }
52
+ function makeVersionParser(version) {
53
+ let parser = [];
54
+ for (let category of Object.values(EAST_Tokens)) {
55
+ parser.push({
56
+ type: category.type,
57
+ regex: getEASTTokenRegex(version, category),
58
+ execute: category.execution,
59
+ precedence: category.precedence,
60
+ name: category.debug_name
61
+ });
62
+ }
63
+ return parser;
64
+ }
65
+ let Parsers = new Map();
66
+ /**
67
+ *
68
+ * @param expression The whole string
69
+ * @param version The version of the expression language this was compiled against
70
+ * @param offset The offset from the start of the file that this expression occurred within.
71
+ * @constructor
72
+ */
73
+ export function TokenizeExpression(expression, version, offset = 0) {
74
+ let rawTokens = [];
75
+ if (!Parsers.has(version))
76
+ Parsers.set(version, makeVersionParser(version));
77
+ let parser = Parsers.get(version);
78
+ for (let category of parser) {
79
+ let matches = expression.matchAll(category.regex);
80
+ debug && console.log(TokenType[category.type], category.precedence);
81
+ for (let match of matches) {
82
+ rawTokens.push({
83
+ data: match[0],
84
+ position: match.index,
85
+ length: match[0].length,
86
+ execute: category.execute,
87
+ precedence: category.precedence,
88
+ type: category.type
89
+ });
90
+ }
91
+ }
92
+ //Newlines are stored based on the last character in that line, once a line's position exceeds the node's position we know we're
93
+ // at a line that contains this given node.
94
+ let newlines = [...expression.matchAll(/\r\n|\n|\r/g)].map((e) => e.index);
95
+ newlines.unshift(0);
96
+ //Add one more line for anything left-over.
97
+ newlines.push(expression.length);
98
+ /**
99
+ * The first token takes precedence, but if multiple start at the same time then we sort
100
+ * by precedence.
101
+ */
102
+ rawTokens = rawTokens.sort((a, b) => {
103
+ let offset = a.position - b.position;
104
+ if (offset == 0) {
105
+ return a.precedence - b.precedence;
106
+ }
107
+ return offset;
108
+ });
109
+ let lastToken;
110
+ let tokens = [];
111
+ for (let rtoken of rawTokens) {
112
+ if (lastToken && lastToken.position + lastToken.length > rtoken.position) {
113
+ //We are in the middle of a different kind of identifier, so skip
114
+ // this token.
115
+ //console.log("Discarding", TokenType[token.type], token.data, token.precedence, "because of", TokenType[lastToken.type], lastToken.data, token.precedence);
116
+ continue;
117
+ }
118
+ let line;
119
+ for (let i = 0; i < newlines.length; i++) {
120
+ if (newlines[i] > rtoken.position + offset) {
121
+ line = i;
122
+ }
123
+ }
124
+ tokens.push({
125
+ data: rtoken.data,
126
+ type: rtoken.type,
127
+ execute: rtoken.execute,
128
+ //Add an offset, since multiple expressions can exist in the same string.
129
+ position: rtoken.position + offset,
130
+ length: rtoken.length,
131
+ line: line,
132
+ column: rtoken.position + offset - newlines[line - 1]
133
+ });
134
+ lastToken = rtoken;
135
+ }
136
+ return tokens;
137
+ }
138
+ //# sourceMappingURL=Tokenizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tokenizer.js","sourceRoot":"","sources":["Tokenizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { ExpressionParser } from "./Parser.js";
2
+ import { NodeType, TokenType } from "./Enums.js";
3
+ import { GrammarInterfaces } from "./Interfaces.js";
4
+ import NodeExecution = GrammarInterfaces.NodeExecution;
5
+ import EAST_Token = GrammarInterfaces.EAST_Token;
6
+ import EAST_Complex_Node = GrammarInterfaces.EAST_Complex_Node;
7
+ import SpecialType = GrammarInterfaces.SpecialType;
8
+ import Token = GrammarInterfaces.Token;
9
+ import Node = GrammarInterfaces.Node;
10
+ export interface PartialEASTNode {
11
+ type: NodeType;
12
+ debugName: string;
13
+ startTokenIndex: number;
14
+ execute: NodeExecution;
15
+ values: {
16
+ [name: string]: EAST_Token | EAST_Complex_Node | (EAST_Token | EAST_Complex_Node)[];
17
+ };
18
+ }
19
+ export interface NextMatchDetails {
20
+ parser: ExpressionParser;
21
+ extraTypes: (TokenType | NodeType | SpecialType)[];
22
+ debugTabs: string;
23
+ }
24
+ export interface MatchSuccess<T extends EAST_Complex_Node | PartialEASTNode> {
25
+ result: T | null;
26
+ cachable: boolean;
27
+ }
28
+ export declare function PrintNodeName(value: Token | Node | PartialEASTNode): string;
29
+ export declare function PrintTokenText(token: Token): string;
@@ -0,0 +1,15 @@
1
+ import { NodeType, TokenType } from "./Enums.js";
2
+ import { isToken } from "../Grammar/Tokens.js";
3
+ export function PrintNodeName(value) {
4
+ if (isToken(value)) {
5
+ return TokenType[value.type];
6
+ }
7
+ return NodeType[value.type];
8
+ }
9
+ export function PrintTokenText(token) {
10
+ if (token.data.length > 20) {
11
+ return token.data.slice(0, 20) + "...";
12
+ }
13
+ return token.data;
14
+ }
15
+ //# sourceMappingURL=TypesAndPrint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TypesAndPrint.js","sourceRoot":"","sources":["TypesAndPrint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQjD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AA0B/C,MAAM,UAAU,aAAa,CAAC,KAAqC;IAClE,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAY;IAC1C,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC;AACnB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { NextMatchDetails, PartialEASTNode } from "./TypesAndPrint.js";
2
+ import { GrammarInterfaces } from "./Interfaces.js";
3
+ import { NodeType, TokenType } from "./Enums.js";
4
+ import SpecialType = GrammarInterfaces.SpecialType;
5
+ export declare function ComputeValidTypes(rule: GrammarInterfaces.Rule, extraTypes: (TokenType | NodeType | SpecialType)[]): (NodeType | TokenType | GrammarInterfaces.SpecialType)[];
6
+ export declare function ComputeChildInputs(rule: GrammarInterfaces.Rule, extraTypes: (TokenType | NodeType | SpecialType)[]): (NodeType | TokenType | GrammarInterfaces.SpecialType)[];
7
+ export declare function MakeNewNodeFrom(details: NextMatchDetails, value: GrammarInterfaces.Token | GrammarInterfaces.Node): GrammarInterfaces.EAST_Complex_Node;
8
+ export declare function AddToPartialEASTNode(details: NextMatchDetails, rule: GrammarInterfaces.Rule, progress: PartialEASTNode, value: GrammarInterfaces.Token | (GrammarInterfaces.Node & {
9
+ values?: any;
10
+ })): void;
@@ -0,0 +1,79 @@
1
+ import { PrintNodeName } from "./TypesAndPrint.js";
2
+ import { GrammarInterfaces } from "./Interfaces.js";
3
+ import { NodeType } from "./Enums.js";
4
+ var SpecialType = GrammarInterfaces.SpecialType;
5
+ import { isToken } from "../Grammar/Tokens.js";
6
+ export function ComputeValidTypes(rule, extraTypes) {
7
+ let validTypes = Array.isArray(rule.type) ? [...rule.type] : [rule.type];
8
+ if (validTypes.includes(SpecialType.INPUT_TYPES)) {
9
+ console.debug(`* adding ${extraTypes.map((e) => NodeType[e])} to ${NodeType[rule.type]}`);
10
+ validTypes.splice(validTypes.indexOf(SpecialType.INPUT_TYPES), 1, ...extraTypes);
11
+ }
12
+ return validTypes;
13
+ }
14
+ export function ComputeChildInputs(rule, extraTypes) {
15
+ let childInputs = rule.input ?? [];
16
+ if (childInputs.includes(SpecialType.INPUT_TYPES)) {
17
+ console.debug(`** sending ${extraTypes.map((e) => NodeType[e])} to child`);
18
+ childInputs.splice(childInputs.indexOf(SpecialType.INPUT_TYPES), 1, ...extraTypes);
19
+ }
20
+ return childInputs;
21
+ }
22
+ export function MakeNewNodeFrom(details, value) {
23
+ //If it's a token, make a copy and add a file reference to convert it to a node.
24
+ if (isToken(value)) {
25
+ return {
26
+ ...value,
27
+ file: details.parser.file
28
+ };
29
+ }
30
+ //Otherwise add it as-is.
31
+ else {
32
+ return value;
33
+ }
34
+ }
35
+ //Sets the node's values object to equal the values specified by the rule.
36
+ export function AddToPartialEASTNode(details, rule, progress, value) {
37
+ //Set the values to a particular name.
38
+ if (rule.name) {
39
+ console.debug(`${details.debugTabs}Adding ${PrintNodeName(value)} ${rule.repeat ? "to" : "as"} ${rule.name}`);
40
+ //Repeated rules are stored as arrays
41
+ if (rule.repeat) {
42
+ if (rule.unroll) {
43
+ throw new Error(`Can't unroll repeated grammar rule.`);
44
+ }
45
+ //Create the array if it doesn't exist.
46
+ if (!progress.values[rule.name]) {
47
+ progress.values[rule.name] = [];
48
+ }
49
+ //Ensure the array is an array.
50
+ if (!Array.isArray(progress.values[rule.name])) {
51
+ throw new Error(`Node ${PrintNodeName(progress)}'s ${rule.name} should be an array but isn't.`);
52
+ }
53
+ progress.values[rule.name]
54
+ .push(MakeNewNodeFrom(details, value));
55
+ }
56
+ else {
57
+ progress.values[rule.name] = MakeNewNodeFrom(details, value);
58
+ }
59
+ }
60
+ else {
61
+ if (rule.unroll) {
62
+ if (!("values" in value)) {
63
+ throw new Error("Can't unroll tokens.");
64
+ }
65
+ console.debug(`${details.debugTabs} - Unrolling ${Object.keys(value.values)} to `
66
+ + `${PrintNodeName(progress)}'s ${Object.keys(progress.values)}`);
67
+ progress.values = {
68
+ ...value.values,
69
+ ...progress.values
70
+ };
71
+ }
72
+ // Skip any rule that isn't given a name or unroll, since it's not meant to be stored.
73
+ }
74
+ //Only increment token position if token.
75
+ if (isToken(value)) {
76
+ details.parser.consumeToken();
77
+ }
78
+ }
79
+ //# sourceMappingURL=Updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Updates.js","sourceRoot":"","sources":["Updates.ts"],"names":[],"mappings":"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"}
package/Networking.d.ts CHANGED
@@ -25,6 +25,9 @@ export declare namespace Messenger {
25
25
  reason: string;
26
26
  }) => void) | null;
27
27
  send(data: any): void;
28
+ } | {
29
+ on(channel: "message", handler: (event: any, data: any) => void): void;
30
+ emit(channel: "message", data: any): void;
28
31
  };
29
32
  export interface ConnectionDetails<Remote = any> {
30
33
  connection: Remote;
package/Networking.js CHANGED
@@ -22,7 +22,7 @@ var Connections;
22
22
  this.messages = [];
23
23
  this.id = id;
24
24
  this.socket = connection;
25
- if ("on" in this.socket) {
25
+ if ("on" in this.socket && !("emit" in this.socket)) {
26
26
  this.socket.on("message", (body) => {
27
27
  var data = JSON.parse(body);
28
28
  this.recieveMessages(data, id);
@@ -31,6 +31,12 @@ var Connections;
31
31
  this.handleDisconnect();
32
32
  });
33
33
  }
34
+ if ("on" in this.socket) {
35
+ this.socket.on("message", (event, body) => {
36
+ var data = JSON.parse(body);
37
+ this.recieveMessages(data, id);
38
+ });
39
+ }
34
40
  else {
35
41
  this.socket.onmessage = (event) => {
36
42
  var body = event.data;
@@ -83,10 +89,18 @@ var Connections;
83
89
  }
84
90
  sendMessages() {
85
91
  try {
86
- this.socket.send(JSON.stringify({
87
- time: LocalTime,
88
- messages: this.messages
89
- }));
92
+ if ("send" in this.socket) {
93
+ this.socket.send(JSON.stringify({
94
+ time: LocalTime,
95
+ messages: this.messages
96
+ }));
97
+ }
98
+ else {
99
+ this.socket.emit("message", JSON.stringify({
100
+ time: LocalTime,
101
+ messages: this.messages
102
+ }));
103
+ }
90
104
  this.messages = [];
91
105
  }
92
106
  catch (e) {