@traqula/core 0.0.21 → 0.0.22

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 (110) 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/test/generatorBuilder/generatorBuilder.types.test.js +30 -0
  21. package/dist/cjs/test/grammar-builder/parserBuilder.types.test.js +27 -0
  22. package/dist/cjs/test/transformer.test.js +82 -0
  23. package/{lib → dist/esm/lib}/AstCoreFactory.d.ts +2 -9
  24. package/dist/esm/lib/AstCoreFactory.js.map +1 -0
  25. package/dist/esm/lib/generator-builder/builderTypes.js.map +1 -0
  26. package/dist/esm/lib/generator-builder/dynamicGenerator.js.map +1 -0
  27. package/dist/esm/lib/generator-builder/generatorBuilder.js.map +1 -0
  28. package/{lib → dist/esm/lib}/generator-builder/generatorTypes.d.ts +1 -1
  29. package/dist/esm/lib/generator-builder/generatorTypes.js.map +1 -0
  30. package/{lib → dist/esm/lib}/index.d.ts +4 -4
  31. package/{lib → dist/esm/lib}/index.js +4 -4
  32. package/dist/esm/lib/index.js.map +1 -0
  33. package/dist/esm/lib/indirection-builder/IndirBuilder.js.map +1 -0
  34. package/dist/esm/lib/indirection-builder/dynamicIndirected.js.map +1 -0
  35. package/dist/esm/lib/indirection-builder/helpers.js.map +1 -0
  36. package/{lib → dist/esm/lib}/lexer-builder/LexerBuilder.d.ts +2 -3
  37. package/{lib → dist/esm/lib}/lexer-builder/LexerBuilder.js +1 -1
  38. package/dist/esm/lib/lexer-builder/LexerBuilder.js.map +1 -0
  39. package/{lib → dist/esm/lib}/parser-builder/builderTypes.d.ts +1 -1
  40. package/dist/esm/lib/parser-builder/builderTypes.js.map +1 -0
  41. package/{lib → dist/esm/lib}/parser-builder/dynamicParser.d.ts +2 -2
  42. package/{lib → dist/esm/lib}/parser-builder/dynamicParser.js +1 -1
  43. package/dist/esm/lib/parser-builder/dynamicParser.js.map +1 -0
  44. package/{lib → dist/esm/lib}/parser-builder/parserBuilder.d.ts +1 -2
  45. package/dist/esm/lib/parser-builder/parserBuilder.js.map +1 -0
  46. package/{lib → dist/esm/lib}/parser-builder/ruleDefTypes.d.ts +1 -2
  47. package/dist/esm/lib/parser-builder/ruleDefTypes.js.map +1 -0
  48. package/dist/esm/lib/transformers/TransformerObject.js.map +1 -0
  49. package/{lib → dist/esm/lib/transformers}/TransformerSubTyped.d.ts +14 -50
  50. package/dist/esm/lib/transformers/TransformerSubTyped.js.map +1 -0
  51. package/{lib → dist/esm/lib/transformers}/TransformerTyped.d.ts +8 -20
  52. package/dist/esm/lib/transformers/TransformerTyped.js.map +1 -0
  53. package/{lib/nodeTypings.d.ts → dist/esm/lib/types.d.ts} +8 -3
  54. package/dist/esm/lib/types.js +2 -0
  55. package/dist/esm/lib/types.js.map +1 -0
  56. package/{lib → dist/esm/lib}/utils.d.ts +1 -1
  57. package/{lib → dist/esm/lib}/utils.js +1 -1
  58. package/dist/esm/lib/utils.js.map +1 -0
  59. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.d.ts +1 -0
  60. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js +38 -0
  61. package/dist/esm/test/generatorBuilder/generatorBuilder.types.test.js.map +1 -0
  62. package/dist/esm/test/grammar-builder/parserBuilder.types.test.d.ts +1 -0
  63. package/dist/esm/test/grammar-builder/parserBuilder.types.test.js +38 -0
  64. package/dist/esm/test/grammar-builder/parserBuilder.types.test.js.map +1 -0
  65. package/dist/esm/test/transformer.test.d.ts +1 -0
  66. package/dist/esm/test/transformer.test.js +82 -0
  67. package/dist/esm/test/transformer.test.js.map +1 -0
  68. package/package.json +12 -17
  69. package/lib/AstCoreFactory.js.map +0 -1
  70. package/lib/TransformerObject.js.map +0 -1
  71. package/lib/TransformerSubTyped.js.map +0 -1
  72. package/lib/TransformerTyped.js.map +0 -1
  73. package/lib/generator-builder/builderTypes.js.map +0 -1
  74. package/lib/generator-builder/dynamicGenerator.js.map +0 -1
  75. package/lib/generator-builder/generatorBuilder.js.map +0 -1
  76. package/lib/generator-builder/generatorTypes.js.map +0 -1
  77. package/lib/index.cjs +0 -10553
  78. package/lib/index.js.map +0 -1
  79. package/lib/indirection-builder/IndirBuilder.js.map +0 -1
  80. package/lib/indirection-builder/dynamicIndirected.js.map +0 -1
  81. package/lib/indirection-builder/helpers.js.map +0 -1
  82. package/lib/lexer-builder/LexerBuilder.js.map +0 -1
  83. package/lib/nodeTypings.js +0 -2
  84. package/lib/nodeTypings.js.map +0 -1
  85. package/lib/parser-builder/builderTypes.js.map +0 -1
  86. package/lib/parser-builder/dynamicParser.js.map +0 -1
  87. package/lib/parser-builder/parserBuilder.js.map +0 -1
  88. package/lib/parser-builder/ruleDefTypes.js.map +0 -1
  89. package/lib/utils.js.map +0 -1
  90. /package/{lib → dist/esm/lib}/AstCoreFactory.js +0 -0
  91. /package/{lib → dist/esm/lib}/generator-builder/builderTypes.d.ts +0 -0
  92. /package/{lib → dist/esm/lib}/generator-builder/builderTypes.js +0 -0
  93. /package/{lib → dist/esm/lib}/generator-builder/dynamicGenerator.d.ts +0 -0
  94. /package/{lib → dist/esm/lib}/generator-builder/dynamicGenerator.js +0 -0
  95. /package/{lib → dist/esm/lib}/generator-builder/generatorBuilder.d.ts +0 -0
  96. /package/{lib → dist/esm/lib}/generator-builder/generatorBuilder.js +0 -0
  97. /package/{lib → dist/esm/lib}/generator-builder/generatorTypes.js +0 -0
  98. /package/{lib → dist/esm/lib}/indirection-builder/IndirBuilder.d.ts +0 -0
  99. /package/{lib → dist/esm/lib}/indirection-builder/IndirBuilder.js +0 -0
  100. /package/{lib → dist/esm/lib}/indirection-builder/dynamicIndirected.d.ts +0 -0
  101. /package/{lib → dist/esm/lib}/indirection-builder/dynamicIndirected.js +0 -0
  102. /package/{lib → dist/esm/lib}/indirection-builder/helpers.d.ts +0 -0
  103. /package/{lib → dist/esm/lib}/indirection-builder/helpers.js +0 -0
  104. /package/{lib → dist/esm/lib}/parser-builder/builderTypes.js +0 -0
  105. /package/{lib → dist/esm/lib}/parser-builder/parserBuilder.js +0 -0
  106. /package/{lib → dist/esm/lib}/parser-builder/ruleDefTypes.js +0 -0
  107. /package/{lib → dist/esm/lib/transformers}/TransformerObject.d.ts +0 -0
  108. /package/{lib → dist/esm/lib/transformers}/TransformerObject.js +0 -0
  109. /package/{lib → dist/esm/lib/transformers}/TransformerSubTyped.js +0 -0
  110. /package/{lib → dist/esm/lib/transformers}/TransformerTyped.js +0 -0
@@ -0,0 +1,152 @@
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 AstCoreFactory_exports = {};
20
+ __export(AstCoreFactory_exports, {
21
+ AstCoreFactory: () => AstCoreFactory
22
+ });
23
+ module.exports = __toCommonJS(AstCoreFactory_exports);
24
+ class AstCoreFactory {
25
+ wrap(val, loc) {
26
+ return { val, loc };
27
+ }
28
+ isLocalized(obj) {
29
+ return typeof obj === "object" && obj !== null && "loc" in obj && typeof obj.loc === "object" && obj.loc !== null && "sourceLocationType" in obj.loc;
30
+ }
31
+ sourceLocation(...elements) {
32
+ const pureElements = elements.filter((x) => x !== void 0);
33
+ if (pureElements.length === 0) {
34
+ return this.sourceLocationNoMaterialize();
35
+ }
36
+ const filtered = pureElements.filter((element) => !this.isLocalized(element) || this.isSourceLocationSource(element.loc) || this.isSourceLocationStringReplace(element.loc) || this.isSourceLocationNodeReplace(element.loc));
37
+ if (filtered.length === 0) {
38
+ return this.gen();
39
+ }
40
+ const first = filtered.at(0);
41
+ const last = filtered.at(-1);
42
+ return {
43
+ sourceLocationType: "source",
44
+ start: this.isLocalized(first) ? first.loc.start : first.startOffset,
45
+ end: this.isLocalized(last) ? last.loc.end : last.endOffset + 1
46
+ };
47
+ }
48
+ sourceLocationNoMaterialize() {
49
+ return { sourceLocationType: "noMaterialize" };
50
+ }
51
+ /**
52
+ * Returns a copy of the argument that is not materialized
53
+ */
54
+ dematerialized(arg) {
55
+ return { ...arg, loc: this.sourceLocationNoMaterialize() };
56
+ }
57
+ safeObjectTransform(value, mapper) {
58
+ if (value && typeof value === "object") {
59
+ if (Array.isArray(value)) {
60
+ return value.map((x) => this.safeObjectTransform(x, mapper));
61
+ }
62
+ return mapper(value);
63
+ }
64
+ return value;
65
+ }
66
+ forcedAutoGenTree(obj) {
67
+ const copy = { ...obj };
68
+ for (const [key, value] of Object.entries(copy)) {
69
+ copy[key] = this.safeObjectTransform(value, (obj2) => this.forcedAutoGenTree(obj2));
70
+ }
71
+ if (this.isLocalized(copy)) {
72
+ copy.loc = this.gen();
73
+ }
74
+ return copy;
75
+ }
76
+ forceMaterialized(arg) {
77
+ if (this.isSourceLocationNoMaterialize(arg.loc)) {
78
+ return this.forcedAutoGenTree(arg);
79
+ }
80
+ return { ...arg };
81
+ }
82
+ isSourceLocation(loc) {
83
+ return "sourceLocationType" in loc;
84
+ }
85
+ sourceLocationSource(start, end) {
86
+ return {
87
+ sourceLocationType: "source",
88
+ start,
89
+ end
90
+ };
91
+ }
92
+ gen() {
93
+ return { sourceLocationType: "autoGenerate" };
94
+ }
95
+ isSourceLocationSource(loc) {
96
+ return this.isSourceLocation(loc) && loc.sourceLocationType === "source";
97
+ }
98
+ isSourceLocationStringReplace(loc) {
99
+ return this.isSourceLocation(loc) && loc.sourceLocationType === "stringReplace";
100
+ }
101
+ sourceLocationNodeReplaceUnsafe(loc) {
102
+ if (this.isSourceLocationSource(loc)) {
103
+ return this.sourceLocationNodeReplace(loc);
104
+ }
105
+ throw new Error("not possible");
106
+ }
107
+ sourceLocationNodeReplace(startOrLoc, end) {
108
+ let starting;
109
+ let ending;
110
+ if (typeof startOrLoc === "number") {
111
+ starting = startOrLoc;
112
+ ending = end;
113
+ } else {
114
+ starting = startOrLoc.start;
115
+ ending = startOrLoc.end;
116
+ }
117
+ return {
118
+ sourceLocationType: "nodeReplace",
119
+ start: starting,
120
+ end: ending
121
+ };
122
+ }
123
+ isSourceLocationNodeReplace(loc) {
124
+ return this.isSourceLocation(loc) && loc.sourceLocationType === "nodeReplace";
125
+ }
126
+ isSourceLocationNodeAutoGenerate(loc) {
127
+ return this.isSourceLocation(loc) && loc.sourceLocationType === "autoGenerate";
128
+ }
129
+ nodeShouldPrint(node) {
130
+ return this.isSourceLocationNodeReplace(node.loc) || this.isSourceLocationNodeAutoGenerate(node.loc);
131
+ }
132
+ printFilter(node, callback) {
133
+ if (this.nodeShouldPrint(node)) {
134
+ callback();
135
+ }
136
+ }
137
+ isSourceLocationNoMaterialize(loc) {
138
+ return this.isSourceLocation(loc) && loc.sourceLocationType === "noMaterialize";
139
+ }
140
+ isOfType(obj, type) {
141
+ const casted = obj;
142
+ return casted.type === type;
143
+ }
144
+ isOfSubType(obj, type, subType) {
145
+ const temp = obj;
146
+ return temp.type === type && temp.subType === subType;
147
+ }
148
+ }
149
+ // Annotate the CommonJS export names for ESM import in node:
150
+ 0 && (module.exports = {
151
+ AstCoreFactory
152
+ });
@@ -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,207 @@
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 dynamicGenerator_exports = {};
20
+ __export(dynamicGenerator_exports, {
21
+ DynamicGenerator: () => DynamicGenerator
22
+ });
23
+ module.exports = __toCommonJS(dynamicGenerator_exports);
24
+ var import_AstCoreFactory = require("../AstCoreFactory.js");
25
+ var import_utils = require("../utils.js");
26
+ class DynamicGenerator {
27
+ rules;
28
+ factory = new import_AstCoreFactory.AstCoreFactory();
29
+ __context = void 0;
30
+ origSource = "";
31
+ generatedUntil = 0;
32
+ toEnsure = [];
33
+ /**
34
+ * Should not contain empty strings
35
+ * @protected
36
+ */
37
+ stringBuilder = [];
38
+ constructor(rules) {
39
+ this.rules = rules;
40
+ for (const rule of Object.values(rules)) {
41
+ this[rule.name] = ((input, context, args) => {
42
+ this.stringBuilder.length = 0;
43
+ this.origSource = context.origSource;
44
+ this.generatedUntil = context?.offset ?? 0;
45
+ this.setContext(context);
46
+ this.subrule(rule, input, args);
47
+ this.catchup(this.origSource.length);
48
+ return this.stringBuilder.join("");
49
+ });
50
+ }
51
+ }
52
+ setContext(context) {
53
+ this.__context = context;
54
+ }
55
+ getSafeContext() {
56
+ return this.__context;
57
+ }
58
+ subrule = (cstDef, ast, ...arg) => {
59
+ const def = this.rules[cstDef.name];
60
+ if (!def) {
61
+ throw new Error(`Rule ${cstDef.name} not found`);
62
+ }
63
+ const generate = () => def.gImpl({
64
+ SUBRULE: this.subrule,
65
+ PRINT: this.print,
66
+ ENSURE: this.ensure,
67
+ ENSURE_EITHER: this.ensureEither,
68
+ NEW_LINE: this.newLine,
69
+ HANDLE_LOC: this.handleLoc,
70
+ CATCHUP: this.catchup,
71
+ PRINT_WORD: this.printWord,
72
+ PRINT_WORDS: this.printWords,
73
+ PRINT_ON_EMPTY: this.printOnEmpty,
74
+ PRINT_ON_OWN_LINE: this.printOnOwnLine
75
+ })(ast, this.getSafeContext(), ...arg);
76
+ if (this.factory.isLocalized(ast)) {
77
+ this.handleLoc(ast, generate);
78
+ } else {
79
+ generate();
80
+ }
81
+ };
82
+ handleLoc = (localized, handle) => {
83
+ if (this.factory.isSourceLocationNoMaterialize(localized.loc)) {
84
+ return;
85
+ }
86
+ if (this.factory.isSourceLocationStringReplace(localized.loc)) {
87
+ this.catchup(localized.loc.start);
88
+ this.print(localized.loc.newSource);
89
+ this.generatedUntil = localized.loc.end;
90
+ return;
91
+ }
92
+ if (this.factory.isSourceLocationNodeReplace(localized.loc)) {
93
+ this.catchup(localized.loc.start);
94
+ this.generatedUntil = localized.loc.end;
95
+ }
96
+ if (this.factory.isSourceLocationSource(localized.loc)) {
97
+ this.catchup(localized.loc.start);
98
+ }
99
+ const ret = handle();
100
+ if (this.factory.isSourceLocationSource(localized.loc)) {
101
+ this.catchup(localized.loc.end);
102
+ }
103
+ return ret;
104
+ };
105
+ catchup = (until) => {
106
+ const start = this.generatedUntil;
107
+ if (start < until) {
108
+ this.print(this.origSource.slice(start, until));
109
+ }
110
+ this.generatedUntil = Math.max(this.generatedUntil, until);
111
+ };
112
+ handeEnsured(toPrint) {
113
+ for (const callBack of this.toEnsure) {
114
+ callBack(toPrint);
115
+ }
116
+ this.toEnsure.length = 0;
117
+ }
118
+ print = (...args) => {
119
+ const joined = args.join("");
120
+ this.handeEnsured(joined);
121
+ this.stringBuilder.push(joined);
122
+ };
123
+ doesEndWith(subsStr) {
124
+ const len = subsStr.length;
125
+ let temp = "";
126
+ while (temp.length < len && this.stringBuilder.length > 0) {
127
+ temp = this.stringBuilder.pop() + temp;
128
+ }
129
+ this.stringBuilder.push(temp);
130
+ return temp.endsWith(subsStr);
131
+ }
132
+ ensure = (...args) => {
133
+ const toEnsure = args.join("");
134
+ if (!this.doesEndWith(toEnsure)) {
135
+ this.toEnsure.push((willPrint) => {
136
+ if (!willPrint.startsWith(toEnsure) && !this.doesEndWith(toEnsure)) {
137
+ this.stringBuilder.push(toEnsure);
138
+ }
139
+ });
140
+ }
141
+ };
142
+ ensureEither = (...args) => {
143
+ if (args.length === 1) {
144
+ this.ensure(...args);
145
+ } else if (args.length > 1 && // Not already matched?
146
+ !args.some((subStr) => this.doesEndWith(subStr))) {
147
+ this.toEnsure.push((willPrint) => {
148
+ if (!args.some((subStr) => willPrint.startsWith(subStr)) && !args.some((subStr) => this.doesEndWith(subStr))) {
149
+ this.stringBuilder.push(args[0]);
150
+ }
151
+ });
152
+ }
153
+ };
154
+ pruneEndingBlanks() {
155
+ let temp = "";
156
+ while (/^[ \t]*$/u.test(temp) && this.stringBuilder.length > 0) {
157
+ temp = this.stringBuilder.pop() + temp;
158
+ }
159
+ this.print(temp.trimEnd());
160
+ }
161
+ newLine = (arg) => {
162
+ const indentation = this.getSafeContext()[import_utils.traqulaIndentation] ?? 0;
163
+ if (indentation === -1) {
164
+ return;
165
+ }
166
+ const force = arg?.force ?? false;
167
+ this.pruneEndingBlanks();
168
+ if (force) {
169
+ this.print("\n", " ".repeat(indentation));
170
+ } else {
171
+ let temp = "";
172
+ while (!temp.includes("\n") && this.stringBuilder.length > 0) {
173
+ temp = this.stringBuilder.pop() + temp;
174
+ }
175
+ if (/\n[ \t]*$/u.test(temp)) {
176
+ temp = temp.replace(/\n[ \t]*$/u, `
177
+ ${" ".repeat(indentation)}`);
178
+ this.print(temp);
179
+ } else {
180
+ this.print(temp, "\n", " ".repeat(indentation));
181
+ }
182
+ }
183
+ };
184
+ printWord = (...args) => {
185
+ this.ensureEither(" ", "\n");
186
+ this.print(...args);
187
+ this.ensureEither(" ", "\n");
188
+ };
189
+ printWords = (...args) => {
190
+ for (const arg of args) {
191
+ this.printWord(arg);
192
+ }
193
+ };
194
+ printOnEmpty = (...args) => {
195
+ this.newLine();
196
+ this.print(...args);
197
+ };
198
+ printOnOwnLine = (...args) => {
199
+ this.newLine();
200
+ this.print(...args);
201
+ this.newLine();
202
+ };
203
+ }
204
+ // Annotate the CommonJS export names for ESM import in node:
205
+ 0 && (module.exports = {
206
+ DynamicGenerator
207
+ });
@@ -0,0 +1,126 @@
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 generatorBuilder_exports = {};
20
+ __export(generatorBuilder_exports, {
21
+ GeneratorBuilder: () => GeneratorBuilder
22
+ });
23
+ module.exports = __toCommonJS(generatorBuilder_exports);
24
+ var import_dynamicGenerator = require("./dynamicGenerator.js");
25
+ function listToRuleDefMap(rules) {
26
+ const newRules = {};
27
+ for (const rule of rules) {
28
+ newRules[rule.name] = rule;
29
+ }
30
+ return newRules;
31
+ }
32
+ class GeneratorBuilder {
33
+ static create(start) {
34
+ if (Array.isArray(start)) {
35
+ return new GeneratorBuilder(listToRuleDefMap(start));
36
+ }
37
+ return new GeneratorBuilder({ ...start.rules });
38
+ }
39
+ rules;
40
+ constructor(startRules) {
41
+ this.rules = startRules;
42
+ }
43
+ widenContext() {
44
+ return this;
45
+ }
46
+ typePatch() {
47
+ return this;
48
+ }
49
+ /**
50
+ * Change the implementation of an existing generator rule.
51
+ */
52
+ patchRule(patch) {
53
+ const self = this;
54
+ self.rules[patch.name] = patch;
55
+ return self;
56
+ }
57
+ /**
58
+ * Add a rule to the grammar. If the rule already exists, but the implementation differs, an error will be thrown.
59
+ */
60
+ addRuleRedundant(rule) {
61
+ const self = this;
62
+ const rules = self.rules;
63
+ if (rules[rule.name] !== void 0 && rules[rule.name] !== rule) {
64
+ throw new Error(`Rule ${rule.name} already exists in the GeneratorBuilder`);
65
+ }
66
+ rules[rule.name] = rule;
67
+ return self;
68
+ }
69
+ /**
70
+ * Add a rule to the grammar. Will raise a typescript error if the rule already exists in the grammar.
71
+ */
72
+ addRule(rule) {
73
+ return this.addRuleRedundant(rule);
74
+ }
75
+ addMany(...rules) {
76
+ this.rules = { ...this.rules, ...listToRuleDefMap(rules) };
77
+ return this;
78
+ }
79
+ /**
80
+ * Delete a grammar rule by its name.
81
+ */
82
+ deleteRule(ruleName) {
83
+ delete this.rules[ruleName];
84
+ return this;
85
+ }
86
+ getRule(ruleName) {
87
+ return this.rules[ruleName];
88
+ }
89
+ /**
90
+ * Merge this grammar GeneratorBuilder with another.
91
+ * It is best to merge the bigger grammar with the smaller one.
92
+ * If the two builders both have a grammar rule with the same name,
93
+ * no error will be thrown case they map to the same ruledef object.
94
+ * If they map to a different object, an error will be thrown.
95
+ * To fix this problem, the overridingRules array should contain a rule with the same conflicting name,
96
+ * this rule implementation will be used.
97
+ */
98
+ merge(GeneratorBuilder2, overridingRules) {
99
+ const otherRules = { ...GeneratorBuilder2.rules };
100
+ const myRules = this.rules;
101
+ for (const rule of Object.values(myRules)) {
102
+ if (otherRules[rule.name] === void 0) {
103
+ otherRules[rule.name] = rule;
104
+ } else {
105
+ const existingRule = otherRules[rule.name];
106
+ if (existingRule !== rule) {
107
+ const override = overridingRules.find((x) => x.name === rule.name);
108
+ if (override) {
109
+ otherRules[rule.name] = override;
110
+ } else {
111
+ throw new Error(`Rule with name "${rule.name}" already exists in the GeneratorBuilder, specify an override to resolve conflict`);
112
+ }
113
+ }
114
+ }
115
+ }
116
+ this.rules = otherRules;
117
+ return this;
118
+ }
119
+ build() {
120
+ return new import_dynamicGenerator.DynamicGenerator(this.rules);
121
+ }
122
+ }
123
+ // Annotate the CommonJS export names for ESM import in node:
124
+ 0 && (module.exports = {
125
+ GeneratorBuilder
126
+ });
@@ -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 generatorTypes_exports = {};
16
+ module.exports = __toCommonJS(generatorTypes_exports);
@@ -0,0 +1,59 @@
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var lib_exports = {};
21
+ __export(lib_exports, {
22
+ TransformerObject: () => import_TransformerObject.TransformerObject,
23
+ TransformerSubTyped: () => import_TransformerSubTyped.TransformerSubTyped,
24
+ TransformerTyped: () => import_TransformerTyped.TransformerTyped
25
+ });
26
+ module.exports = __toCommonJS(lib_exports);
27
+ __reExport(lib_exports, require("./generator-builder/builderTypes.js"), module.exports);
28
+ __reExport(lib_exports, require("./generator-builder/generatorBuilder.js"), module.exports);
29
+ __reExport(lib_exports, require("./generator-builder/generatorTypes.js"), module.exports);
30
+ __reExport(lib_exports, require("./indirection-builder/helpers.js"), module.exports);
31
+ __reExport(lib_exports, require("./indirection-builder/IndirBuilder.js"), module.exports);
32
+ __reExport(lib_exports, require("./lexer-builder/LexerBuilder.js"), module.exports);
33
+ __reExport(lib_exports, require("./parser-builder/builderTypes.js"), module.exports);
34
+ __reExport(lib_exports, require("./parser-builder/parserBuilder.js"), module.exports);
35
+ __reExport(lib_exports, require("./parser-builder/ruleDefTypes.js"), module.exports);
36
+ __reExport(lib_exports, require("./utils.js"), module.exports);
37
+ __reExport(lib_exports, require("./AstCoreFactory.js"), module.exports);
38
+ __reExport(lib_exports, require("./types.js"), module.exports);
39
+ var import_TransformerObject = require("./transformers/TransformerObject.js");
40
+ var import_TransformerTyped = require("./transformers/TransformerTyped.js");
41
+ var import_TransformerSubTyped = require("./transformers/TransformerSubTyped.js");
42
+ // Annotate the CommonJS export names for ESM import in node:
43
+ 0 && (module.exports = {
44
+ TransformerObject,
45
+ TransformerSubTyped,
46
+ TransformerTyped,
47
+ ...require("./generator-builder/builderTypes.js"),
48
+ ...require("./generator-builder/generatorBuilder.js"),
49
+ ...require("./generator-builder/generatorTypes.js"),
50
+ ...require("./indirection-builder/helpers.js"),
51
+ ...require("./indirection-builder/IndirBuilder.js"),
52
+ ...require("./lexer-builder/LexerBuilder.js"),
53
+ ...require("./parser-builder/builderTypes.js"),
54
+ ...require("./parser-builder/parserBuilder.js"),
55
+ ...require("./parser-builder/ruleDefTypes.js"),
56
+ ...require("./utils.js"),
57
+ ...require("./AstCoreFactory.js"),
58
+ ...require("./types.js")
59
+ });
@@ -0,0 +1,90 @@
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 IndirBuilder_exports = {};
20
+ __export(IndirBuilder_exports, {
21
+ IndirBuilder: () => IndirBuilder
22
+ });
23
+ module.exports = __toCommonJS(IndirBuilder_exports);
24
+ var import_dynamicIndirected = require("./dynamicIndirected.js");
25
+ var import_helpers = require("./helpers.js");
26
+ class IndirBuilder {
27
+ static create(start) {
28
+ if (Array.isArray(start)) {
29
+ return new IndirBuilder((0, import_helpers.listToIndirectionMap)(start));
30
+ }
31
+ return new IndirBuilder({ ...start.rules });
32
+ }
33
+ rules;
34
+ constructor(startRules) {
35
+ this.rules = startRules;
36
+ }
37
+ widenContext() {
38
+ return this;
39
+ }
40
+ typePatch() {
41
+ return this;
42
+ }
43
+ /**
44
+ * Change the implementation of an existing indirection.
45
+ */
46
+ patchRule(patch) {
47
+ const self = this;
48
+ self.rules[patch.name] = patch;
49
+ return self;
50
+ }
51
+ /**
52
+ * Add an indirection function. If the rule already exists, but the implementation differs, an error will be thrown.
53
+ */
54
+ addRuleRedundant(rule) {
55
+ const self = this;
56
+ const rules = self.rules;
57
+ if (rules[rule.name] !== void 0 && rules[rule.name] !== rule) {
58
+ throw new Error(`Function ${rule.name} already exists in the builder`);
59
+ }
60
+ rules[rule.name] = rule;
61
+ return self;
62
+ }
63
+ /**
64
+ * Add a rule to the grammar. Will raise a typescript error if the rule already exists in the grammar.
65
+ */
66
+ addRule(rule) {
67
+ return this.addRuleRedundant(rule);
68
+ }
69
+ addMany(...rules) {
70
+ this.rules = { ...this.rules, ...(0, import_helpers.listToIndirectionMap)(rules) };
71
+ return this;
72
+ }
73
+ /**
74
+ * Delete a grammar rule by its name.
75
+ */
76
+ deleteRule(ruleName) {
77
+ delete this.rules[ruleName];
78
+ return this;
79
+ }
80
+ getRule(ruleName) {
81
+ return this.rules[ruleName];
82
+ }
83
+ build() {
84
+ return new import_dynamicIndirected.DynamicIndirect(this.rules);
85
+ }
86
+ }
87
+ // Annotate the CommonJS export names for ESM import in node:
88
+ 0 && (module.exports = {
89
+ IndirBuilder
90
+ });