@traqula/core 0.0.21 → 0.0.23

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 (111) hide show
  1. package/dist/cjs/lib/AstCoreFactory.js +152 -0
  2. package/dist/cjs/lib/generator-builder/builderTypes.js +16 -0
  3. package/dist/cjs/lib/generator-builder/dynamicGenerator.js +207 -0
  4. package/dist/cjs/lib/generator-builder/generatorBuilder.js +126 -0
  5. package/dist/cjs/lib/generator-builder/generatorTypes.js +16 -0
  6. package/dist/cjs/lib/index.js +59 -0
  7. package/dist/cjs/lib/indirection-builder/IndirBuilder.js +90 -0
  8. package/dist/cjs/lib/indirection-builder/dynamicIndirected.js +55 -0
  9. package/dist/cjs/lib/indirection-builder/helpers.js +34 -0
  10. package/dist/cjs/lib/lexer-builder/LexerBuilder.js +123 -0
  11. package/dist/cjs/lib/parser-builder/builderTypes.js +16 -0
  12. package/dist/cjs/lib/parser-builder/dynamicParser.js +139 -0
  13. package/dist/cjs/lib/parser-builder/parserBuilder.js +182 -0
  14. package/dist/cjs/lib/parser-builder/ruleDefTypes.js +16 -0
  15. package/dist/cjs/lib/transformers/TransformerObject.js +213 -0
  16. package/dist/cjs/lib/transformers/TransformerSubTyped.js +144 -0
  17. package/dist/cjs/lib/transformers/TransformerTyped.js +123 -0
  18. package/dist/cjs/lib/types.js +16 -0
  19. package/dist/cjs/lib/utils.js +39 -0
  20. package/dist/cjs/package.json +1 -0
  21. package/dist/cjs/test/generatorBuilder/generatorBuilder.types.test.js +30 -0
  22. package/dist/cjs/test/grammar-builder/parserBuilder.types.test.js +27 -0
  23. package/dist/cjs/test/transformer.test.js +82 -0
  24. package/{lib → dist/esm/lib}/AstCoreFactory.d.ts +2 -9
  25. package/dist/esm/lib/AstCoreFactory.js.map +1 -0
  26. package/dist/esm/lib/generator-builder/builderTypes.js.map +1 -0
  27. package/dist/esm/lib/generator-builder/dynamicGenerator.js.map +1 -0
  28. package/dist/esm/lib/generator-builder/generatorBuilder.js.map +1 -0
  29. package/{lib → dist/esm/lib}/generator-builder/generatorTypes.d.ts +1 -1
  30. package/dist/esm/lib/generator-builder/generatorTypes.js.map +1 -0
  31. package/{lib → dist/esm/lib}/index.d.ts +4 -4
  32. package/{lib → dist/esm/lib}/index.js +4 -4
  33. package/dist/esm/lib/index.js.map +1 -0
  34. package/dist/esm/lib/indirection-builder/IndirBuilder.js.map +1 -0
  35. package/dist/esm/lib/indirection-builder/dynamicIndirected.js.map +1 -0
  36. package/dist/esm/lib/indirection-builder/helpers.js.map +1 -0
  37. package/{lib → dist/esm/lib}/lexer-builder/LexerBuilder.d.ts +2 -3
  38. package/{lib → dist/esm/lib}/lexer-builder/LexerBuilder.js +1 -1
  39. package/dist/esm/lib/lexer-builder/LexerBuilder.js.map +1 -0
  40. package/{lib → dist/esm/lib}/parser-builder/builderTypes.d.ts +1 -1
  41. package/dist/esm/lib/parser-builder/builderTypes.js.map +1 -0
  42. package/{lib → dist/esm/lib}/parser-builder/dynamicParser.d.ts +2 -2
  43. package/{lib → dist/esm/lib}/parser-builder/dynamicParser.js +1 -1
  44. package/dist/esm/lib/parser-builder/dynamicParser.js.map +1 -0
  45. package/{lib → dist/esm/lib}/parser-builder/parserBuilder.d.ts +1 -2
  46. package/dist/esm/lib/parser-builder/parserBuilder.js.map +1 -0
  47. package/{lib → dist/esm/lib}/parser-builder/ruleDefTypes.d.ts +1 -2
  48. package/dist/esm/lib/parser-builder/ruleDefTypes.js.map +1 -0
  49. package/dist/esm/lib/transformers/TransformerObject.js.map +1 -0
  50. package/{lib → dist/esm/lib/transformers}/TransformerSubTyped.d.ts +14 -50
  51. package/dist/esm/lib/transformers/TransformerSubTyped.js.map +1 -0
  52. package/{lib → dist/esm/lib/transformers}/TransformerTyped.d.ts +8 -20
  53. package/dist/esm/lib/transformers/TransformerTyped.js.map +1 -0
  54. package/{lib/nodeTypings.d.ts → dist/esm/lib/types.d.ts} +8 -3
  55. package/dist/esm/lib/types.js +2 -0
  56. package/dist/esm/lib/types.js.map +1 -0
  57. package/{lib → dist/esm/lib}/utils.d.ts +1 -1
  58. package/{lib → dist/esm/lib}/utils.js +1 -1
  59. package/dist/esm/lib/utils.js.map +1 -0
  60. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.d.ts +1 -0
  61. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js +38 -0
  62. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js.map +1 -0
  63. package/dist/esm/test/grammar-builder/parserBuilder.types.test.d.ts +1 -0
  64. package/dist/esm/test/grammar-builder/parserBuilder.types.test.js +38 -0
  65. package/dist/esm/test/grammar-builder/parserBuilder.types.test.js.map +1 -0
  66. package/dist/esm/test/transformer.test.d.ts +1 -0
  67. package/dist/esm/test/transformer.test.js +82 -0
  68. package/dist/esm/test/transformer.test.js.map +1 -0
  69. package/package.json +13 -17
  70. package/lib/AstCoreFactory.js.map +0 -1
  71. package/lib/TransformerObject.js.map +0 -1
  72. package/lib/TransformerSubTyped.js.map +0 -1
  73. package/lib/TransformerTyped.js.map +0 -1
  74. package/lib/generator-builder/builderTypes.js.map +0 -1
  75. package/lib/generator-builder/dynamicGenerator.js.map +0 -1
  76. package/lib/generator-builder/generatorBuilder.js.map +0 -1
  77. package/lib/generator-builder/generatorTypes.js.map +0 -1
  78. package/lib/index.cjs +0 -10553
  79. package/lib/index.js.map +0 -1
  80. package/lib/indirection-builder/IndirBuilder.js.map +0 -1
  81. package/lib/indirection-builder/dynamicIndirected.js.map +0 -1
  82. package/lib/indirection-builder/helpers.js.map +0 -1
  83. package/lib/lexer-builder/LexerBuilder.js.map +0 -1
  84. package/lib/nodeTypings.js +0 -2
  85. package/lib/nodeTypings.js.map +0 -1
  86. package/lib/parser-builder/builderTypes.js.map +0 -1
  87. package/lib/parser-builder/dynamicParser.js.map +0 -1
  88. package/lib/parser-builder/parserBuilder.js.map +0 -1
  89. package/lib/parser-builder/ruleDefTypes.js.map +0 -1
  90. package/lib/utils.js.map +0 -1
  91. /package/{lib → dist/esm/lib}/AstCoreFactory.js +0 -0
  92. /package/{lib → dist/esm/lib}/generator-builder/builderTypes.d.ts +0 -0
  93. /package/{lib → dist/esm/lib}/generator-builder/builderTypes.js +0 -0
  94. /package/{lib → dist/esm/lib}/generator-builder/dynamicGenerator.d.ts +0 -0
  95. /package/{lib → dist/esm/lib}/generator-builder/dynamicGenerator.js +0 -0
  96. /package/{lib → dist/esm/lib}/generator-builder/generatorBuilder.d.ts +0 -0
  97. /package/{lib → dist/esm/lib}/generator-builder/generatorBuilder.js +0 -0
  98. /package/{lib → dist/esm/lib}/generator-builder/generatorTypes.js +0 -0
  99. /package/{lib → dist/esm/lib}/indirection-builder/IndirBuilder.d.ts +0 -0
  100. /package/{lib → dist/esm/lib}/indirection-builder/IndirBuilder.js +0 -0
  101. /package/{lib → dist/esm/lib}/indirection-builder/dynamicIndirected.d.ts +0 -0
  102. /package/{lib → dist/esm/lib}/indirection-builder/dynamicIndirected.js +0 -0
  103. /package/{lib → dist/esm/lib}/indirection-builder/helpers.d.ts +0 -0
  104. /package/{lib → dist/esm/lib}/indirection-builder/helpers.js +0 -0
  105. /package/{lib → dist/esm/lib}/parser-builder/builderTypes.js +0 -0
  106. /package/{lib → dist/esm/lib}/parser-builder/parserBuilder.js +0 -0
  107. /package/{lib → dist/esm/lib}/parser-builder/ruleDefTypes.js +0 -0
  108. /package/{lib → dist/esm/lib/transformers}/TransformerObject.d.ts +0 -0
  109. /package/{lib → dist/esm/lib/transformers}/TransformerObject.js +0 -0
  110. /package/{lib → dist/esm/lib/transformers}/TransformerSubTyped.js +0 -0
  111. /package/{lib → dist/esm/lib/transformers}/TransformerTyped.js +0 -0
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var dynamicIndirected_exports = {};
20
+ __export(dynamicIndirected_exports, {
21
+ DynamicIndirect: () => DynamicIndirect
22
+ });
23
+ module.exports = __toCommonJS(dynamicIndirected_exports);
24
+ class DynamicIndirect {
25
+ rules;
26
+ __context = void 0;
27
+ constructor(rules) {
28
+ this.rules = rules;
29
+ for (const rule of Object.values(rules)) {
30
+ this[rule.name] = ((context, ...args) => {
31
+ this.setContext(context);
32
+ return this.subrule(rule, ...args);
33
+ });
34
+ }
35
+ }
36
+ setContext(context) {
37
+ this.__context = context;
38
+ }
39
+ getSafeContext() {
40
+ return this.__context;
41
+ }
42
+ subrule = (cstDef, ...args) => {
43
+ const def = this.rules[cstDef.name];
44
+ if (!def) {
45
+ throw new Error(`Rule ${cstDef.name} not found`);
46
+ }
47
+ return def.fun({
48
+ SUBRULE: this.subrule
49
+ })(this.getSafeContext(), ...args);
50
+ };
51
+ }
52
+ // Annotate the CommonJS export names for ESM import in node:
53
+ 0 && (module.exports = {
54
+ DynamicIndirect
55
+ });
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var helpers_exports = {};
20
+ __export(helpers_exports, {
21
+ listToIndirectionMap: () => listToIndirectionMap
22
+ });
23
+ module.exports = __toCommonJS(helpers_exports);
24
+ function listToIndirectionMap(rules) {
25
+ const newRules = {};
26
+ for (const rule of rules) {
27
+ newRules[rule.name] = rule;
28
+ }
29
+ return newRules;
30
+ }
31
+ // Annotate the CommonJS export names for ESM import in node:
32
+ 0 && (module.exports = {
33
+ listToIndirectionMap
34
+ });
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var LexerBuilder_exports = {};
20
+ __export(LexerBuilder_exports, {
21
+ LexerBuilder: () => LexerBuilder
22
+ });
23
+ module.exports = __toCommonJS(LexerBuilder_exports);
24
+ var import_chevrotain = require("@traqula/chevrotain");
25
+ class LexerBuilder {
26
+ tokens;
27
+ static create(starter) {
28
+ return new LexerBuilder(starter);
29
+ }
30
+ constructor(starter) {
31
+ this.tokens = starter?.tokens ? [...starter.tokens] : [];
32
+ }
33
+ merge(merge, overwrite = []) {
34
+ const extraTokens = merge.tokens.filter((token) => {
35
+ const overwriteToken = overwrite.find((t) => t.name === token.name);
36
+ if (overwriteToken) {
37
+ return false;
38
+ }
39
+ const match = this.tokens.find((t) => t.name === token.name);
40
+ if (match) {
41
+ if (match !== token) {
42
+ throw new Error(`Token with name ${token.name} already exists. Implementation is different and no overwrite was provided.`);
43
+ }
44
+ return false;
45
+ }
46
+ return true;
47
+ });
48
+ this.tokens.push(...extraTokens);
49
+ return this;
50
+ }
51
+ add(...token) {
52
+ this.tokens.push(...token);
53
+ return this;
54
+ }
55
+ addBefore(before, ...token) {
56
+ const index = this.tokens.indexOf(before);
57
+ if (index === -1) {
58
+ throw new Error("Token not found");
59
+ }
60
+ this.tokens.splice(index, 0, ...token);
61
+ return this;
62
+ }
63
+ moveBeforeOrAfter(beforeOrAfter, before, ...tokens) {
64
+ const beforeIndex = this.tokens.indexOf(before) + (beforeOrAfter === "before" ? 0 : 1);
65
+ if (beforeIndex === -1) {
66
+ throw new Error("BeforeToken not found");
67
+ }
68
+ for (const token of tokens) {
69
+ const tokenIndex = this.tokens.indexOf(token);
70
+ if (tokenIndex === -1) {
71
+ throw new Error("Token not found");
72
+ }
73
+ this.tokens.splice(tokenIndex, 1);
74
+ this.tokens.splice(beforeIndex, 0, token);
75
+ }
76
+ return this;
77
+ }
78
+ /**
79
+ * @param before token to move rest before
80
+ * @param tokens tokens to move before the first token
81
+ */
82
+ moveBefore(before, ...tokens) {
83
+ return this.moveBeforeOrAfter("before", before, ...tokens);
84
+ }
85
+ moveAfter(after, ...tokens) {
86
+ return this.moveBeforeOrAfter("after", after, ...tokens);
87
+ }
88
+ addAfter(after, ...token) {
89
+ const index = this.tokens.indexOf(after);
90
+ if (index === -1) {
91
+ throw new Error("Token not found");
92
+ }
93
+ this.tokens.splice(index + 1, 0, ...token);
94
+ return this;
95
+ }
96
+ delete(...token) {
97
+ for (const t of token) {
98
+ const index = this.tokens.indexOf(t);
99
+ if (index === -1) {
100
+ throw new Error("Token not found");
101
+ }
102
+ this.tokens.splice(index, 1);
103
+ }
104
+ return this;
105
+ }
106
+ build(lexerConfig) {
107
+ return new import_chevrotain.Lexer(this.tokens, {
108
+ positionTracking: "onlyStart",
109
+ recoveryEnabled: false,
110
+ ensureOptimizations: true,
111
+ // SafeMode: true,
112
+ // SkipValidations: true,
113
+ ...lexerConfig
114
+ });
115
+ }
116
+ get tokenVocabulary() {
117
+ return this.tokens;
118
+ }
119
+ }
120
+ // Annotate the CommonJS export names for ESM import in node:
121
+ 0 && (module.exports = {
122
+ LexerBuilder
123
+ });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var builderTypes_exports = {};
16
+ module.exports = __toCommonJS(builderTypes_exports);
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var dynamicParser_exports = {};
20
+ __export(dynamicParser_exports, {
21
+ DynamicParser: () => DynamicParser
22
+ });
23
+ module.exports = __toCommonJS(dynamicParser_exports);
24
+ var import_chevrotain = require("@traqula/chevrotain");
25
+ class DynamicParser extends import_chevrotain.EmbeddedActionsParser {
26
+ context;
27
+ setContext(context) {
28
+ this.context = context;
29
+ }
30
+ constructor(rules, tokenVocabulary, config = {}) {
31
+ super(tokenVocabulary, {
32
+ // RecoveryEnabled: true,
33
+ maxLookahead: 1,
34
+ skipValidations: true,
35
+ ...config
36
+ });
37
+ this.context = void 0;
38
+ const selfRef = this.constructSelfRef();
39
+ const implArgs = {
40
+ ...selfRef,
41
+ cache: /* @__PURE__ */ new WeakMap()
42
+ };
43
+ for (const rule of Object.values(rules)) {
44
+ this[rule.name] = this.RULE(rule.name, rule.impl(implArgs));
45
+ }
46
+ this.performSelfAnalysis();
47
+ }
48
+ constructSelfRef() {
49
+ const subRuleImpl = (chevrotainSubrule) => ((cstDef, ...arg) => chevrotainSubrule(this[cstDef.name], { ARGS: [this.context, ...arg] }));
50
+ return {
51
+ CONSUME: (tokenType, option) => this.CONSUME(tokenType, option),
52
+ CONSUME1: (tokenType, option) => this.CONSUME1(tokenType, option),
53
+ CONSUME2: (tokenType, option) => this.CONSUME2(tokenType, option),
54
+ CONSUME3: (tokenType, option) => this.CONSUME3(tokenType, option),
55
+ CONSUME4: (tokenType, option) => this.CONSUME4(tokenType, option),
56
+ CONSUME5: (tokenType, option) => this.CONSUME5(tokenType, option),
57
+ CONSUME6: (tokenType, option) => this.CONSUME6(tokenType, option),
58
+ CONSUME7: (tokenType, option) => this.CONSUME7(tokenType, option),
59
+ CONSUME8: (tokenType, option) => this.CONSUME8(tokenType, option),
60
+ CONSUME9: (tokenType, option) => this.CONSUME9(tokenType, option),
61
+ OPTION: (actionORMethodDef) => this.OPTION(actionORMethodDef),
62
+ OPTION1: (actionORMethodDef) => this.OPTION1(actionORMethodDef),
63
+ OPTION2: (actionORMethodDef) => this.OPTION2(actionORMethodDef),
64
+ OPTION3: (actionORMethodDef) => this.OPTION3(actionORMethodDef),
65
+ OPTION4: (actionORMethodDef) => this.OPTION4(actionORMethodDef),
66
+ OPTION5: (actionORMethodDef) => this.OPTION5(actionORMethodDef),
67
+ OPTION6: (actionORMethodDef) => this.OPTION6(actionORMethodDef),
68
+ OPTION7: (actionORMethodDef) => this.OPTION7(actionORMethodDef),
69
+ OPTION8: (actionORMethodDef) => this.OPTION8(actionORMethodDef),
70
+ OPTION9: (actionORMethodDef) => this.OPTION9(actionORMethodDef),
71
+ OR: (altsOrOpts) => this.OR(altsOrOpts),
72
+ OR1: (altsOrOpts) => this.OR1(altsOrOpts),
73
+ OR2: (altsOrOpts) => this.OR2(altsOrOpts),
74
+ OR3: (altsOrOpts) => this.OR3(altsOrOpts),
75
+ OR4: (altsOrOpts) => this.OR4(altsOrOpts),
76
+ OR5: (altsOrOpts) => this.OR5(altsOrOpts),
77
+ OR6: (altsOrOpts) => this.OR6(altsOrOpts),
78
+ OR7: (altsOrOpts) => this.OR7(altsOrOpts),
79
+ OR8: (altsOrOpts) => this.OR8(altsOrOpts),
80
+ OR9: (altsOrOpts) => this.OR9(altsOrOpts),
81
+ MANY: (actionORMethodDef) => this.MANY(actionORMethodDef),
82
+ MANY1: (actionORMethodDef) => this.MANY1(actionORMethodDef),
83
+ MANY2: (actionORMethodDef) => this.MANY2(actionORMethodDef),
84
+ MANY3: (actionORMethodDef) => this.MANY3(actionORMethodDef),
85
+ MANY4: (actionORMethodDef) => this.MANY4(actionORMethodDef),
86
+ MANY5: (actionORMethodDef) => this.MANY5(actionORMethodDef),
87
+ MANY6: (actionORMethodDef) => this.MANY6(actionORMethodDef),
88
+ MANY7: (actionORMethodDef) => this.MANY7(actionORMethodDef),
89
+ MANY8: (actionORMethodDef) => this.MANY8(actionORMethodDef),
90
+ MANY9: (actionORMethodDef) => this.MANY9(actionORMethodDef),
91
+ MANY_SEP: (options) => this.MANY_SEP(options),
92
+ MANY_SEP1: (options) => this.MANY_SEP1(options),
93
+ MANY_SEP2: (options) => this.MANY_SEP2(options),
94
+ MANY_SEP3: (options) => this.MANY_SEP3(options),
95
+ MANY_SEP4: (options) => this.MANY_SEP4(options),
96
+ MANY_SEP5: (options) => this.MANY_SEP5(options),
97
+ MANY_SEP6: (options) => this.MANY_SEP6(options),
98
+ MANY_SEP7: (options) => this.MANY_SEP7(options),
99
+ MANY_SEP8: (options) => this.MANY_SEP8(options),
100
+ MANY_SEP9: (options) => this.MANY_SEP9(options),
101
+ AT_LEAST_ONE: (actionORMethodDef) => this.AT_LEAST_ONE(actionORMethodDef),
102
+ AT_LEAST_ONE1: (actionORMethodDef) => this.AT_LEAST_ONE1(actionORMethodDef),
103
+ AT_LEAST_ONE2: (actionORMethodDef) => this.AT_LEAST_ONE2(actionORMethodDef),
104
+ AT_LEAST_ONE3: (actionORMethodDef) => this.AT_LEAST_ONE3(actionORMethodDef),
105
+ AT_LEAST_ONE4: (actionORMethodDef) => this.AT_LEAST_ONE4(actionORMethodDef),
106
+ AT_LEAST_ONE5: (actionORMethodDef) => this.AT_LEAST_ONE5(actionORMethodDef),
107
+ AT_LEAST_ONE6: (actionORMethodDef) => this.AT_LEAST_ONE6(actionORMethodDef),
108
+ AT_LEAST_ONE7: (actionORMethodDef) => this.AT_LEAST_ONE7(actionORMethodDef),
109
+ AT_LEAST_ONE8: (actionORMethodDef) => this.AT_LEAST_ONE8(actionORMethodDef),
110
+ AT_LEAST_ONE9: (actionORMethodDef) => this.AT_LEAST_ONE9(actionORMethodDef),
111
+ AT_LEAST_ONE_SEP: (options) => this.AT_LEAST_ONE_SEP(options),
112
+ AT_LEAST_ONE_SEP1: (options) => this.AT_LEAST_ONE_SEP1(options),
113
+ AT_LEAST_ONE_SEP2: (options) => this.AT_LEAST_ONE_SEP2(options),
114
+ AT_LEAST_ONE_SEP3: (options) => this.AT_LEAST_ONE_SEP3(options),
115
+ AT_LEAST_ONE_SEP4: (options) => this.AT_LEAST_ONE_SEP4(options),
116
+ AT_LEAST_ONE_SEP5: (options) => this.AT_LEAST_ONE_SEP5(options),
117
+ AT_LEAST_ONE_SEP6: (options) => this.AT_LEAST_ONE_SEP6(options),
118
+ AT_LEAST_ONE_SEP7: (options) => this.AT_LEAST_ONE_SEP7(options),
119
+ AT_LEAST_ONE_SEP8: (options) => this.AT_LEAST_ONE_SEP8(options),
120
+ AT_LEAST_ONE_SEP9: (options) => this.AT_LEAST_ONE_SEP9(options),
121
+ ACTION: (func) => this.ACTION(func),
122
+ BACKTRACK: (cstDef, ...args) => this.BACKTRACK(this[cstDef.name], { ARGS: args }),
123
+ SUBRULE: subRuleImpl((rule, args) => this.SUBRULE(rule, args)),
124
+ SUBRULE1: subRuleImpl((rule, args) => this.SUBRULE1(rule, args)),
125
+ SUBRULE2: subRuleImpl((rule, args) => this.SUBRULE2(rule, args)),
126
+ SUBRULE3: subRuleImpl((rule, args) => this.SUBRULE3(rule, args)),
127
+ SUBRULE4: subRuleImpl((rule, args) => this.SUBRULE4(rule, args)),
128
+ SUBRULE5: subRuleImpl((rule, args) => this.SUBRULE5(rule, args)),
129
+ SUBRULE6: subRuleImpl((rule, args) => this.SUBRULE6(rule, args)),
130
+ SUBRULE7: subRuleImpl((rule, args) => this.SUBRULE7(rule, args)),
131
+ SUBRULE8: subRuleImpl((rule, args) => this.SUBRULE8(rule, args)),
132
+ SUBRULE9: subRuleImpl((rule, args) => this.SUBRULE9(rule, args))
133
+ };
134
+ }
135
+ }
136
+ // Annotate the CommonJS export names for ESM import in node:
137
+ 0 && (module.exports = {
138
+ DynamicParser
139
+ });
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var parserBuilder_exports = {};
20
+ __export(parserBuilder_exports, {
21
+ ParserBuilder: () => ParserBuilder
22
+ });
23
+ module.exports = __toCommonJS(parserBuilder_exports);
24
+ var import_LexerBuilder = require("../lexer-builder/LexerBuilder.js");
25
+ var import_dynamicParser = require("./dynamicParser.js");
26
+ function listToRuleDefMap(rules) {
27
+ const newRules = {};
28
+ for (const rule of rules) {
29
+ newRules[rule.name] = rule;
30
+ }
31
+ return newRules;
32
+ }
33
+ class ParserBuilder {
34
+ /**
35
+ * Create a builder from some initial grammar rules or an existing builder.
36
+ * If a builder is provided, a new copy will be created.
37
+ */
38
+ static create(start) {
39
+ if (Array.isArray(start)) {
40
+ return new ParserBuilder(listToRuleDefMap(start));
41
+ }
42
+ return new ParserBuilder({ ...start.rules });
43
+ }
44
+ rules;
45
+ constructor(startRules) {
46
+ this.rules = startRules;
47
+ }
48
+ widenContext() {
49
+ return this;
50
+ }
51
+ typePatch() {
52
+ return this;
53
+ }
54
+ /**
55
+ * Change the implementation of an existing grammar rule.
56
+ */
57
+ patchRule(patch) {
58
+ const self = this;
59
+ self.rules[patch.name] = patch;
60
+ return self;
61
+ }
62
+ /**
63
+ * Add a rule to the grammar. If the rule already exists, but the implementation differs, an error will be thrown.
64
+ */
65
+ addRuleRedundant(rule) {
66
+ const self = this;
67
+ const rules = self.rules;
68
+ if (rules[rule.name] !== void 0 && rules[rule.name] !== rule) {
69
+ throw new Error(`Rule ${rule.name} already exists in the builder`);
70
+ }
71
+ rules[rule.name] = rule;
72
+ return self;
73
+ }
74
+ /**
75
+ * Add a rule to the grammar. Will raise a typescript error if the rule already exists in the grammar.
76
+ */
77
+ addRule(rule) {
78
+ return this.addRuleRedundant(rule);
79
+ }
80
+ addMany(...rules) {
81
+ this.rules = { ...this.rules, ...listToRuleDefMap(rules) };
82
+ return this;
83
+ }
84
+ /**
85
+ * Delete a grammar rule by its name.
86
+ */
87
+ deleteRule(ruleName) {
88
+ delete this.rules[ruleName];
89
+ return this;
90
+ }
91
+ getRule(ruleName) {
92
+ return this.rules[ruleName];
93
+ }
94
+ /**
95
+ * Merge this grammar builder with another.
96
+ * It is best to merge the bigger grammar with the smaller one.
97
+ * If the two builders both have a grammar rule with the same name,
98
+ * no error will be thrown case they map to the same ruledef object.
99
+ * If they map to a different object, an error will be thrown.
100
+ * To fix this problem, the overridingRules array should contain a rule with the same conflicting name,
101
+ * this rule implementation will be used.
102
+ */
103
+ merge(builder, overridingRules) {
104
+ const otherRules = { ...builder.rules };
105
+ const myRules = this.rules;
106
+ for (const rule of Object.values(myRules)) {
107
+ if (otherRules[rule.name] === void 0) {
108
+ otherRules[rule.name] = rule;
109
+ } else {
110
+ const existingRule = otherRules[rule.name];
111
+ if (existingRule !== rule) {
112
+ const override = overridingRules.find((x) => x.name === rule.name);
113
+ if (override) {
114
+ otherRules[rule.name] = override;
115
+ } else {
116
+ throw new Error(`Rule with name "${rule.name}" already exists in the builder, specify an override to resolve conflict`);
117
+ }
118
+ }
119
+ }
120
+ }
121
+ this.rules = otherRules;
122
+ return this;
123
+ }
124
+ defaultErrorHandler(input, errors) {
125
+ const firstError = errors[0];
126
+ const messageBuilder = ["Parse error"];
127
+ const lineIdx = firstError.token.startLine;
128
+ if (lineIdx !== void 0 && !Number.isNaN(lineIdx)) {
129
+ const errorLine = input.split("\n")[lineIdx - 1];
130
+ messageBuilder.push(` on line ${lineIdx}
131
+ ${errorLine}`);
132
+ const columnIdx = firstError.token.startColumn;
133
+ if (columnIdx !== void 0) {
134
+ messageBuilder.push(`
135
+ ${"-".repeat(columnIdx - 1)}^`);
136
+ }
137
+ }
138
+ messageBuilder.push(`
139
+ ${firstError.message}`);
140
+ throw new Error(messageBuilder.join(""));
141
+ }
142
+ build({ tokenVocabulary, parserConfig = {}, lexerConfig = {}, queryPreProcessor = (s) => s, errorHandler }) {
143
+ const lexer = import_LexerBuilder.LexerBuilder.create().add(...tokenVocabulary).build({
144
+ positionTracking: "full",
145
+ recoveryEnabled: false,
146
+ ensureOptimizations: true,
147
+ safeMode: false,
148
+ skipValidations: true,
149
+ ...lexerConfig
150
+ });
151
+ const parser = this.consume({
152
+ tokenVocabulary,
153
+ config: parserConfig
154
+ });
155
+ const selfSufficientParser = {};
156
+ for (const rule of Object.values(this.rules)) {
157
+ selfSufficientParser[rule.name] = ((input, context, ...args) => {
158
+ const processedInput = queryPreProcessor(input);
159
+ const lexResult = lexer.tokenize(processedInput);
160
+ parser.input = lexResult.tokens;
161
+ parser.setContext(context);
162
+ const result = parser[rule.name](context, ...args);
163
+ if (parser.errors.length > 0) {
164
+ if (errorHandler) {
165
+ errorHandler(parser.errors);
166
+ } else {
167
+ this.defaultErrorHandler(processedInput, parser.errors);
168
+ }
169
+ }
170
+ return result;
171
+ });
172
+ }
173
+ return selfSufficientParser;
174
+ }
175
+ consume({ tokenVocabulary, config = {} }) {
176
+ return new import_dynamicParser.DynamicParser(this.rules, tokenVocabulary, config);
177
+ }
178
+ }
179
+ // Annotate the CommonJS export names for ESM import in node:
180
+ 0 && (module.exports = {
181
+ ParserBuilder
182
+ });
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var ruleDefTypes_exports = {};
16
+ module.exports = __toCommonJS(ruleDefTypes_exports);