@traqula/core 0.0.23 → 0.0.25

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 (75) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/lib/AstCoreFactory.js +181 -149
  3. package/dist/cjs/lib/AstCoreFactory.js.map +1 -0
  4. package/dist/cjs/lib/generator-builder/builderTypes.js +2 -15
  5. package/dist/cjs/lib/generator-builder/builderTypes.js.map +1 -0
  6. package/dist/cjs/lib/generator-builder/dynamicGenerator.js +209 -200
  7. package/dist/cjs/lib/generator-builder/dynamicGenerator.js.map +1 -0
  8. package/dist/cjs/lib/generator-builder/generatorBuilder.js +103 -117
  9. package/dist/cjs/lib/generator-builder/generatorBuilder.js.map +1 -0
  10. package/dist/cjs/lib/generator-builder/generatorTypes.js +2 -15
  11. package/dist/cjs/lib/generator-builder/generatorTypes.js.map +1 -0
  12. package/dist/cjs/lib/index.js +39 -57
  13. package/dist/cjs/lib/index.js.map +1 -0
  14. package/dist/cjs/lib/indirection-builder/IndirBuilder.js +63 -85
  15. package/dist/cjs/lib/indirection-builder/IndirBuilder.js.map +1 -0
  16. package/dist/cjs/lib/indirection-builder/dynamicIndirected.js +28 -50
  17. package/dist/cjs/lib/indirection-builder/dynamicIndirected.js.map +1 -0
  18. package/dist/cjs/lib/indirection-builder/helpers.js +11 -31
  19. package/dist/cjs/lib/indirection-builder/helpers.js.map +1 -0
  20. package/dist/cjs/lib/lexer-builder/LexerBuilder.js +92 -114
  21. package/dist/cjs/lib/lexer-builder/LexerBuilder.js.map +1 -0
  22. package/dist/cjs/lib/parser-builder/builderTypes.js +2 -15
  23. package/dist/cjs/lib/parser-builder/builderTypes.js.map +1 -0
  24. package/dist/cjs/lib/parser-builder/dynamicParser.js +116 -136
  25. package/dist/cjs/lib/parser-builder/dynamicParser.js.map +1 -0
  26. package/dist/cjs/lib/parser-builder/parserBuilder.js +167 -169
  27. package/dist/cjs/lib/parser-builder/parserBuilder.js.map +1 -0
  28. package/dist/cjs/lib/parser-builder/ruleDefTypes.js +2 -15
  29. package/dist/cjs/lib/parser-builder/ruleDefTypes.js.map +1 -0
  30. package/dist/cjs/lib/transformers/TransformerObject.js +196 -198
  31. package/dist/cjs/lib/transformers/TransformerObject.js.map +1 -0
  32. package/dist/cjs/lib/transformers/TransformerSubTyped.js +110 -141
  33. package/dist/cjs/lib/transformers/TransformerSubTyped.js.map +1 -0
  34. package/dist/cjs/lib/transformers/TransformerTyped.js +87 -120
  35. package/dist/cjs/lib/transformers/TransformerTyped.js.map +1 -0
  36. package/dist/cjs/lib/types.js +2 -15
  37. package/dist/cjs/lib/types.js.map +1 -0
  38. package/dist/cjs/lib/utils.js +20 -34
  39. package/dist/cjs/lib/utils.js.map +1 -0
  40. package/dist/esm/lib/AstCoreFactory.d.ts +19 -7
  41. package/dist/esm/lib/AstCoreFactory.js +50 -5
  42. package/dist/esm/lib/AstCoreFactory.js.map +1 -1
  43. package/dist/esm/lib/generator-builder/dynamicGenerator.d.ts +5 -0
  44. package/dist/esm/lib/generator-builder/dynamicGenerator.js +20 -0
  45. package/dist/esm/lib/generator-builder/dynamicGenerator.js.map +1 -1
  46. package/dist/esm/lib/parser-builder/dynamicParser.js +1 -0
  47. package/dist/esm/lib/parser-builder/dynamicParser.js.map +1 -1
  48. package/dist/esm/lib/parser-builder/parserBuilder.js +2 -2
  49. package/dist/esm/lib/parser-builder/parserBuilder.js.map +1 -1
  50. package/dist/esm/lib/transformers/TransformerObject.d.ts +1 -1
  51. package/dist/esm/lib/transformers/TransformerObject.js.map +1 -1
  52. package/dist/esm/lib/transformers/TransformerSubTyped.d.ts +31 -22
  53. package/dist/esm/lib/transformers/TransformerSubTyped.js +30 -40
  54. package/dist/esm/lib/transformers/TransformerSubTyped.js.map +1 -1
  55. package/dist/esm/lib/transformers/TransformerTyped.d.ts +24 -20
  56. package/dist/esm/lib/transformers/TransformerTyped.js +23 -35
  57. package/dist/esm/lib/transformers/TransformerTyped.js.map +1 -1
  58. package/dist/esm/lib/types.d.ts +67 -5
  59. package/dist/esm/lib/types.js.map +1 -1
  60. package/dist/esm/lib/utils.d.ts +10 -0
  61. package/dist/esm/lib/utils.js +7 -0
  62. package/dist/esm/lib/utils.js.map +1 -1
  63. package/package.json +9 -9
  64. package/dist/cjs/test/generatorBuilder/generatorBuilder.types.test.js +0 -30
  65. package/dist/cjs/test/grammar-builder/parserBuilder.types.test.js +0 -27
  66. package/dist/cjs/test/transformer.test.js +0 -82
  67. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.d.ts +0 -1
  68. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js +0 -38
  69. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js.map +0 -1
  70. package/dist/esm/test/grammar-builder/parserBuilder.types.test.d.ts +0 -1
  71. package/dist/esm/test/grammar-builder/parserBuilder.types.test.js +0 -38
  72. package/dist/esm/test/grammar-builder/parserBuilder.types.test.js.map +0 -1
  73. package/dist/esm/test/transformer.test.d.ts +0 -1
  74. package/dist/esm/test/transformer.test.js +0 -82
  75. package/dist/esm/test/transformer.test.js.map +0 -1
@@ -1,55 +1,33 @@
1
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);
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamicIndirect = void 0;
24
4
  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
- });
5
+ rules;
6
+ __context = undefined;
7
+ constructor(rules) {
8
+ this.rules = rules;
9
+ for (const rule of Object.values(rules)) {
10
+ this[rule.name] = ((context, ...args) => {
11
+ this.setContext(context);
12
+ return this.subrule(rule, ...args);
13
+ });
14
+ }
34
15
  }
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`);
16
+ setContext(context) {
17
+ this.__context = context;
46
18
  }
47
- return def.fun({
48
- SUBRULE: this.subrule
49
- })(this.getSafeContext(), ...args);
50
- };
19
+ getSafeContext() {
20
+ return this.__context;
21
+ }
22
+ subrule = (cstDef, ...args) => {
23
+ const def = this.rules[cstDef.name];
24
+ if (!def) {
25
+ throw new Error(`Rule ${cstDef.name} not found`);
26
+ }
27
+ return def.fun({
28
+ SUBRULE: this.subrule,
29
+ })(this.getSafeContext(), ...args);
30
+ };
51
31
  }
52
- // Annotate the CommonJS export names for ESM import in node:
53
- 0 && (module.exports = {
54
- DynamicIndirect
55
- });
32
+ exports.DynamicIndirect = DynamicIndirect;
33
+ //# sourceMappingURL=dynamicIndirected.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamicIndirected.js","sourceRoot":"","sources":["../../../../lib/indirection-builder/dynamicIndirected.ts"],"names":[],"mappings":";;;AAEA,MAAa,eAAe;IAGG;IAFnB,SAAS,GAAwB,SAAS,CAAC;IAErD,YAA6B,KAAe;QAAf,UAAK,GAAL,KAAK,CAAU;QAC1C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAoC,KAAK,CAAC,EAAE,CAAC;YAC3E,IAAI,CAAsB,IAAI,CAAC,IAAI,CAAC,GAAS,CAAC,CAAC,OAAgB,EAAE,GAAG,IAAS,EAAO,EAAE;gBACpF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBACzB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEM,UAAU,CAAC,OAAgB;QAChC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IAC3B,CAAC;IAES,cAAc;QACtB,OAAiB,IAAI,CAAC,SAAS,CAAC;IAClC,CAAC;IAEkB,OAAO,GAA2B,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE;QACvE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAmB,MAAM,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC;QACnD,CAAC;QAED,OAAa,GAAG,CAAC,GAAG,CAAC;YACnB,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;CACH;AA9BD,0CA8BC","sourcesContent":["import type { IndirDef, IndirDefArg, IndirectionMap } from './helpers.js';\n\nexport class DynamicIndirect<Context, Names extends string, RuleDefs extends IndirectionMap<Names>> {\n protected __context: Context | undefined = undefined;\n\n public constructor(protected rules: RuleDefs) {\n for (const rule of Object.values(<Record<string, IndirDef<Context>>>rules)) {\n this[<keyof (typeof this)>rule.name] = <any> ((context: Context, ...args: any): any => {\n this.setContext(context);\n return this.subrule(rule, ...args);\n });\n }\n }\n\n public setContext(context: Context): void {\n this.__context = context;\n }\n\n protected getSafeContext(): Context {\n return <Context> this.__context;\n }\n\n protected readonly subrule: IndirDefArg['SUBRULE'] = (cstDef, ...args) => {\n const def = this.rules[<Names> <unknown> cstDef.name];\n if (!def) {\n throw new Error(`Rule ${cstDef.name} not found`);\n }\n\n return <any> def.fun({\n SUBRULE: this.subrule,\n })(this.getSafeContext(), ...args);\n };\n}\n"]}
@@ -1,34 +1,14 @@
1
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);
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.listToIndirectionMap = listToIndirectionMap;
4
+ /**
5
+ * Converts a list of ruledefs to a record mapping a name to the corresponding ruledef.
6
+ */
24
7
  function listToIndirectionMap(rules) {
25
- const newRules = {};
26
- for (const rule of rules) {
27
- newRules[rule.name] = rule;
28
- }
29
- return newRules;
8
+ const newRules = {};
9
+ for (const rule of rules) {
10
+ newRules[rule.name] = rule;
11
+ }
12
+ return newRules;
30
13
  }
31
- // Annotate the CommonJS export names for ESM import in node:
32
- 0 && (module.exports = {
33
- listToIndirectionMap
34
- });
14
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../lib/indirection-builder/helpers.ts"],"names":[],"mappings":";;AA2BA,oDAMC;AATD;;GAEG;AACH,SAAgB,oBAAoB,CAAgC,KAAQ;IAC1E,MAAM,QAAQ,GAA6B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,OAA+B,QAAQ,CAAC;AAC1C,CAAC","sourcesContent":["import type { ParseNamesFromList } from '../parser-builder/builderTypes.js';\n\nexport type IndirDef<\n Context = any,\n NameType extends string = string,\n ReturnType = unknown,\n ParamType extends any[] = any[],\n> = {\n name: NameType;\n fun: (def: IndirDefArg) => (c: Context, ...params: ParamType) => ReturnType;\n};\n\nexport type IndirDefArg = {\n /**\n * Calls another rule using the provided arguments.\n * @param rule\n * @param arg\n * @constructor\n */\n SUBRULE: <T, U extends any[]>(rule: IndirDef<any, any, T, U>, ...arg: U) => T;\n};\n\nexport type IndirectionMap<RuleNames extends string> = {[Key in RuleNames]: IndirDef<any, Key> };\n\n/**\n * Converts a list of ruledefs to a record mapping a name to the corresponding ruledef.\n */\nexport function listToIndirectionMap<T extends readonly IndirDef[]>(rules: T): ParseIndirsToObject<T> {\n const newRules: Record<string, IndirDef> = {};\n for (const rule of rules) {\n newRules[rule.name] = rule;\n }\n return <ParseIndirsToObject<T>>newRules;\n}\n\n/**\n * Convert a list of IndirDefs to a Record with the name of the IndirDef as the key, matching the IndirectionMap type.\n */\nexport type ParseIndirsToObject<\n T extends readonly IndirDef[],\n Names extends string = ParseNamesFromList<T>,\n Agg extends Record<string, IndirDef> = Record<never, never>,\n> = T extends readonly [infer First, ...infer Rest] ? (\n First extends IndirDef ? (\n Rest extends readonly IndirDef[] ? (\n ParseIndirsToObject<Rest, Names, {[K in keyof Agg | First['name']]: K extends First['name'] ? First : Agg[K] }>\n ) : never\n ) : never\n) : IndirectionMap<Names> & Agg;\n\nexport type IndirectObjFromIndirDefs<Context, Names extends string, RuleDefs extends IndirectionMap<Names>> = {\n [K in Names]: RuleDefs[K] extends IndirDef<Context, K, infer RET, infer ARGS> ?\n (context: Context, ...args: ARGS) => RET : never\n};\n"]}
@@ -1,123 +1,101 @@
1
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");
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LexerBuilder = void 0;
4
+ const chevrotain_1 = require("@traqula/chevrotain");
25
5
  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.`);
6
+ tokens;
7
+ static create(starter) {
8
+ return new LexerBuilder(starter);
9
+ }
10
+ constructor(starter) {
11
+ this.tokens = starter?.tokens ? [...starter.tokens] : [];
12
+ }
13
+ merge(merge, overwrite = []) {
14
+ const extraTokens = merge.tokens.filter((token) => {
15
+ const overwriteToken = overwrite.find(t => t.name === token.name);
16
+ if (overwriteToken) {
17
+ return false;
18
+ }
19
+ const match = this.tokens.find(t => t.name === token.name);
20
+ if (match) {
21
+ if (match !== token) {
22
+ throw new Error(`Token with name ${token.name} already exists. Implementation is different and no overwrite was provided.`);
23
+ }
24
+ return false;
25
+ }
26
+ return true;
27
+ });
28
+ this.tokens.push(...extraTokens);
29
+ return this;
30
+ }
31
+ add(...token) {
32
+ this.tokens.push(...token);
33
+ return this;
34
+ }
35
+ addBefore(before, ...token) {
36
+ const index = this.tokens.indexOf(before);
37
+ if (index === -1) {
38
+ throw new Error('Token not found');
43
39
  }
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");
40
+ this.tokens.splice(index, 0, ...token);
41
+ return this;
59
42
  }
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");
43
+ moveBeforeOrAfter(beforeOrAfter, before, ...tokens) {
44
+ const beforeIndex = this.tokens.indexOf(before) + (beforeOrAfter === 'before' ? 0 : 1);
45
+ if (beforeIndex === -1) {
46
+ throw new Error('BeforeToken not found');
47
+ }
48
+ for (const token of tokens) {
49
+ const tokenIndex = this.tokens.indexOf(token);
50
+ if (tokenIndex === -1) {
51
+ throw new Error('Token not found');
52
+ }
53
+ this.tokens.splice(tokenIndex, 1);
54
+ this.tokens.splice(beforeIndex, 0, token);
55
+ }
56
+ return this;
67
57
  }
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);
58
+ /**
59
+ * @param before token to move rest before
60
+ * @param tokens tokens to move before the first token
61
+ */
62
+ moveBefore(before, ...tokens) {
63
+ return this.moveBeforeOrAfter('before', before, ...tokens);
64
+ }
65
+ moveAfter(after, ...tokens) {
66
+ return this.moveBeforeOrAfter('after', after, ...tokens);
67
+ }
68
+ addAfter(after, ...token) {
69
+ const index = this.tokens.indexOf(after);
70
+ if (index === -1) {
71
+ throw new Error('Token not found');
72
+ }
73
+ this.tokens.splice(index + 1, 0, ...token);
74
+ return this;
75
+ }
76
+ delete(...token) {
77
+ for (const t of token) {
78
+ const index = this.tokens.indexOf(t);
79
+ if (index === -1) {
80
+ throw new Error('Token not found');
81
+ }
82
+ this.tokens.splice(index, 1);
83
+ }
84
+ return this;
75
85
  }
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");
86
+ build(lexerConfig) {
87
+ return new chevrotain_1.Lexer(this.tokens, {
88
+ positionTracking: 'onlyStart',
89
+ recoveryEnabled: false,
90
+ ensureOptimizations: true,
91
+ // SafeMode: true,
92
+ // SkipValidations: true,
93
+ ...lexerConfig,
94
+ });
92
95
  }
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);
96
+ get tokenVocabulary() {
97
+ return this.tokens;
103
98
  }
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
99
  }
120
- // Annotate the CommonJS export names for ESM import in node:
121
- 0 && (module.exports = {
122
- LexerBuilder
123
- });
100
+ exports.LexerBuilder = LexerBuilder;
101
+ //# sourceMappingURL=LexerBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LexerBuilder.js","sourceRoot":"","sources":["../../../../lib/lexer-builder/LexerBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ILexerConfig, TokenType } from '@traqula/chevrotain';\nimport { Lexer } from '@traqula/chevrotain';\nimport type { CheckOverlap, NamedToken } from '../utils.js';\n\nexport class LexerBuilder<NAMES extends string = string> {\n private readonly tokens: TokenType[];\n\n public static create<U extends LexerBuilder<T>, T extends string = never>(starter?: U): U {\n return <U> new LexerBuilder(starter);\n }\n\n private constructor(starter?: LexerBuilder<NAMES>) {\n this.tokens = starter?.tokens ? [ ...starter.tokens ] : [];\n }\n\n public merge<OtherNames extends string, OW extends string>(\n merge: LexerBuilder<OtherNames>,\n overwrite: NamedToken<OW>[] = [],\n ):\n LexerBuilder<NAMES | OtherNames> {\n const extraTokens = merge.tokens.filter((token) => {\n const overwriteToken = overwrite.find(t => t.name === token.name);\n if (overwriteToken) {\n return false;\n }\n const match = this.tokens.find(t => t.name === token.name);\n if (match) {\n if (match !== token) {\n throw new Error(`Token with name ${token.name} already exists. Implementation is different and no overwrite was provided.`);\n }\n return false;\n }\n return true;\n });\n this.tokens.push(...extraTokens);\n return this;\n }\n\n public add<Name extends string>(...token: CheckOverlap<Name, NAMES, NamedToken<Name>[]>):\n LexerBuilder<Name | NAMES> {\n this.tokens.push(...token);\n return this;\n }\n\n public addBefore<Name extends string>(\n before: NamedToken<NAMES>,\n ...token: CheckOverlap<Name, NAMES, NamedToken<Name>[]>\n ): LexerBuilder<NAMES | Name> {\n const index = this.tokens.indexOf(before);\n if (index === -1) {\n throw new Error('Token not found');\n }\n this.tokens.splice(index, 0, ...token);\n return this;\n }\n\n private moveBeforeOrAfter<Name extends string>(\n beforeOrAfter: 'before' | 'after',\n before: NamedToken<NAMES>,\n ...tokens: CheckOverlap<Name, NAMES, never, NamedToken<Name>[]>\n ): LexerBuilder<NAMES> {\n const beforeIndex = this.tokens.indexOf(before) + (beforeOrAfter === 'before' ? 0 : 1);\n if (beforeIndex === -1) {\n throw new Error('BeforeToken not found');\n }\n for (const token of tokens) {\n const tokenIndex = this.tokens.indexOf(token);\n if (tokenIndex === -1) {\n throw new Error('Token not found');\n }\n this.tokens.splice(tokenIndex, 1);\n this.tokens.splice(beforeIndex, 0, token);\n }\n return this;\n }\n\n /**\n * @param before token to move rest before\n * @param tokens tokens to move before the first token\n */\n public moveBefore<Name extends string>(\n before: NamedToken<NAMES>,\n ...tokens: CheckOverlap<Name, NAMES, never, NamedToken<Name>[]>\n ): LexerBuilder<NAMES> {\n return this.moveBeforeOrAfter('before', before, ...tokens);\n }\n\n public moveAfter<Name extends string>(\n after: NamedToken<NAMES>,\n ...tokens: CheckOverlap<Name, NAMES, never, NamedToken<Name>[]>\n ): LexerBuilder<NAMES> {\n return this.moveBeforeOrAfter('after', after, ...tokens);\n }\n\n public addAfter<Name extends string>(\n after: NamedToken<NAMES>,\n ...token: CheckOverlap<Name, NAMES, never, NamedToken<Name>[]>\n ): LexerBuilder<NAMES | Name> {\n const index = this.tokens.indexOf(after);\n if (index === -1) {\n throw new Error('Token not found');\n }\n this.tokens.splice(index + 1, 0, ...token);\n return this;\n }\n\n public delete<Name extends NAMES>(...token: NamedToken<Name>[]): LexerBuilder<Exclude<NAMES, Name>> {\n for (const t of token) {\n const index = this.tokens.indexOf(t);\n if (index === -1) {\n throw new Error('Token not found');\n }\n this.tokens.splice(index, 1);\n }\n return this;\n }\n\n public build(lexerConfig?: ILexerConfig): Lexer {\n return new Lexer(this.tokens, {\n positionTracking: 'onlyStart',\n recoveryEnabled: false,\n ensureOptimizations: true,\n // SafeMode: true,\n // SkipValidations: true,\n ...lexerConfig,\n });\n }\n\n public get tokenVocabulary(): readonly TokenType[] {\n return this.tokens;\n }\n}\n"]}
@@ -1,16 +1,3 @@
1
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);
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=builderTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builderTypes.js","sourceRoot":"","sources":["../../../../lib/parser-builder/builderTypes.ts"],"names":[],"mappings":"","sourcesContent":["import type { ParserMethod } from '@traqula/chevrotain';\nimport type { ParserRule } from './ruleDefTypes.js';\n\n/**\n * Get union-type of names used in list of ruledefs.\n */\nexport type ParseNamesFromList<T extends readonly { name: string }[]> = T[number]['name'];\n\n/**\n * Convert a list of ruledefs to a record that maps each rule name to its definition.\n */\nexport type ParseRuleMap<RuleNames extends string> = {[Key in RuleNames]: ParserRule<any, Key> };\n\n/**\n * Convert a list of RuleDefs to a Record with the name of the RuleDef as the key, matching the RuleDefMap type.\n */\nexport type ParseRulesToObject<\n T extends readonly ParserRule[],\n Names extends string = ParseNamesFromList<T>,\n Agg extends Record<string, ParserRule> = Record<never, never>,\n> = T extends readonly [infer First, ...infer Rest] ? (\n First extends ParserRule ? (\n Rest extends readonly ParserRule[] ? (\n ParseRulesToObject<Rest, Names, {[K in keyof Agg | First['name']]: K extends First['name'] ? First : Agg[K] }>\n ) : never\n ) : never\n) : ParseRuleMap<Names> & Agg;\n\nexport type ParserFromRules<Context, Names extends string, RuleDefs extends ParseRuleMap<Names>> = {\n [K in Names]: RuleDefs[K] extends ParserRule<Context, K, infer RET, infer ARGS> ?\n (input: string, context: Context, ...args: ARGS) => RET : never\n};\n\nexport type ParseMethodsFromRules<Context, Names extends string, RuleDefs extends ParseRuleMap<Names>> = {\n [K in Names]: RuleDefs[K] extends ParserRule<Context, K, infer RET, infer ARGS> ?\n ParserMethod<[Context, ...ARGS], RET> : never\n};\n"]}