yini-parser 1.0.2-beta → 1.2.0-beta

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 (103) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/README.md +83 -98
  3. package/dist/YINI.d.ts +162 -23
  4. package/dist/YINI.js +183 -99
  5. package/dist/YINI.js.map +1 -0
  6. package/dist/config/env.js +1 -0
  7. package/dist/config/env.js.map +1 -0
  8. package/dist/core/astBuilder.d.ts +191 -0
  9. package/dist/core/astBuilder.js +840 -0
  10. package/dist/core/astBuilder.js.map +1 -0
  11. package/dist/core/{ErrorDataHandler.d.ts → errorDataHandler.d.ts} +21 -19
  12. package/dist/core/errorDataHandler.js +271 -0
  13. package/dist/core/errorDataHandler.js.map +1 -0
  14. package/dist/core/internalTypes.d.ts +121 -0
  15. package/dist/core/internalTypes.js +16 -0
  16. package/dist/core/internalTypes.js.map +1 -0
  17. package/dist/core/objectBuilder.d.ts +10 -4
  18. package/dist/core/objectBuilder.js +127 -163
  19. package/dist/core/objectBuilder.js.map +1 -0
  20. package/dist/core/options/failLevel.d.ts +3 -0
  21. package/dist/core/options/failLevel.js +27 -0
  22. package/dist/core/options/failLevel.js.map +1 -0
  23. package/dist/core/options/normalizeOptions.d.ts +5 -0
  24. package/dist/core/options/normalizeOptions.js +53 -0
  25. package/dist/core/options/normalizeOptions.js.map +1 -0
  26. package/dist/core/options/parserOptionsConstants.d.ts +7 -0
  27. package/dist/core/options/parserOptionsConstants.js +37 -0
  28. package/dist/core/options/parserOptionsConstants.js.map +1 -0
  29. package/dist/core/pipeline.d.ts +18 -0
  30. package/dist/core/pipeline.js +323 -0
  31. package/dist/core/pipeline.js.map +1 -0
  32. package/dist/core/resultMetadataBuilder.d.ts +19 -0
  33. package/dist/core/resultMetadataBuilder.js +166 -0
  34. package/dist/core/resultMetadataBuilder.js.map +1 -0
  35. package/dist/core/runtime.d.ts +17 -0
  36. package/dist/core/runtime.js +189 -0
  37. package/dist/core/runtime.js.map +1 -0
  38. package/dist/dev/main.d.ts +1 -0
  39. package/dist/dev/main.js +374 -0
  40. package/dist/dev/main.js.map +1 -0
  41. package/dist/grammar/generated/YiniLexer.d.ts +74 -0
  42. package/dist/grammar/generated/YiniLexer.js +415 -0
  43. package/dist/grammar/generated/YiniLexer.js.map +1 -0
  44. package/dist/grammar/{YiniParser.d.ts → generated/YiniParser.d.ts} +167 -150
  45. package/dist/grammar/{YiniParser.js → generated/YiniParser.js} +1242 -1202
  46. package/dist/grammar/generated/YiniParser.js.map +1 -0
  47. package/dist/grammar/{YiniParserVisitor.d.ts → generated/YiniParserVisitor.d.ts} +59 -45
  48. package/dist/grammar/{YiniParserVisitor.js → generated/YiniParserVisitor.js} +2 -1
  49. package/dist/grammar/generated/YiniParserVisitor.js.map +1 -0
  50. package/dist/index.d.ts +43 -2
  51. package/dist/index.js +62 -101
  52. package/dist/index.js.map +1 -0
  53. package/dist/parsers/extractHeaderParts.d.ts +4 -3
  54. package/dist/parsers/extractHeaderParts.js +3 -1
  55. package/dist/parsers/extractHeaderParts.js.map +1 -0
  56. package/dist/parsers/extractSignificantYiniLine.js +2 -1
  57. package/dist/parsers/extractSignificantYiniLine.js.map +1 -0
  58. package/dist/parsers/parseBoolean.d.ts +1 -1
  59. package/dist/parsers/parseBoolean.js +3 -1
  60. package/dist/parsers/parseBoolean.js.map +1 -0
  61. package/dist/parsers/parseNull.js +1 -0
  62. package/dist/parsers/parseNull.js.map +1 -0
  63. package/dist/parsers/parseNumber.d.ts +8 -3
  64. package/dist/parsers/parseNumber.js +22 -7
  65. package/dist/parsers/parseNumber.js.map +1 -0
  66. package/dist/parsers/parseSectionHeader.d.ts +5 -4
  67. package/dist/parsers/parseSectionHeader.js +3 -1
  68. package/dist/parsers/parseSectionHeader.js.map +1 -0
  69. package/dist/parsers/parseString.js +3 -3
  70. package/dist/parsers/parseString.js.map +1 -0
  71. package/dist/types/index.d.ts +198 -0
  72. package/dist/types/index.js +4 -0
  73. package/dist/types/index.js.map +1 -0
  74. package/dist/utils/number.d.ts +3 -0
  75. package/dist/utils/number.js +19 -0
  76. package/dist/utils/number.js.map +1 -0
  77. package/dist/utils/object.d.ts +67 -0
  78. package/dist/utils/object.js +125 -0
  79. package/dist/utils/object.js.map +1 -0
  80. package/dist/utils/pathAndFileName.js +1 -0
  81. package/dist/utils/pathAndFileName.js.map +1 -0
  82. package/dist/utils/print.d.ts +2 -2
  83. package/dist/utils/print.js +11 -6
  84. package/dist/utils/print.js.map +1 -0
  85. package/dist/utils/string.d.ts +26 -1
  86. package/dist/utils/string.js +48 -4
  87. package/dist/utils/string.js.map +1 -0
  88. package/dist/utils/system.d.ts +15 -0
  89. package/dist/utils/system.js +22 -0
  90. package/dist/utils/system.js.map +1 -0
  91. package/dist/{yiniHelpers.d.ts → utils/yiniHelpers.d.ts} +3 -0
  92. package/dist/{yiniHelpers.js → utils/yiniHelpers.js} +46 -9
  93. package/dist/utils/yiniHelpers.js.map +1 -0
  94. package/package.json +7 -5
  95. package/dist/core/ErrorDataHandler.js +0 -203
  96. package/dist/core/YINIVisitor.d.ts +0 -158
  97. package/dist/core/YINIVisitor.js +0 -1008
  98. package/dist/core/types.d.ts +0 -59
  99. package/dist/core/types.js +0 -36
  100. package/dist/grammar/YiniLexer.d.ts +0 -68
  101. package/dist/grammar/YiniLexer.js +0 -379
  102. package/dist/parseEntry.d.ts +0 -2
  103. package/dist/parseEntry.js +0 -185
@@ -1,185 +1,149 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.constructFinalObject = void 0;
3
+ exports.astToObject = void 0;
4
4
  const env_1 = require("../config/env");
5
5
  const print_1 = require("../utils/print");
6
6
  /**
7
- * Construct the final result of a JavaScript Object.
7
+ * Construct the final JavaScript Object.
8
+ * Transforms the AST to the plain JS object.
9
+ *
10
+ * - Keys are used exactly as-is.
11
+ * - Order of properties matches the AST traversal order.
12
+ *
13
+ * @note All `tag` fields MUST be ignored.
8
14
  */
9
- const constructFinalObject = (syntaxTreeC, errorHandler) => {
15
+ const astToObject = (ast, errorHandler) => {
10
16
  (0, print_1.debugPrint)('-> constructFinalObject(..)');
11
- const bulder = new Builder(syntaxTreeC, errorHandler);
12
- if ((0, env_1.isDebug)()) {
13
- console.log('Argument, syntaxTreeC:');
14
- (0, print_1.printObject)(syntaxTreeC);
17
+ // return sectionChildrenToObject(ast.root)
18
+ const out = {};
19
+ for (const child of ast.root.children) {
20
+ define(out, child.sectionName, sectionToObject(child));
15
21
  }
16
- const jsObject = bulder.doCheckAndBuild();
17
- (0, print_1.debugPrint)('<- About to leave constructFinalObject(..)');
18
- if ((0, env_1.isDebug)()) {
19
- console.log('Returning, jsObject:');
20
- (0, print_1.printObject)(syntaxTreeC);
21
- }
22
- return jsObject;
22
+ return out;
23
23
  };
24
- exports.constructFinalObject = constructFinalObject;
25
- class Builder {
26
- constructor(syntaxTreeC, errorHandler) {
27
- (0, print_1.debugPrint)('-> Builder: constructor(..)');
28
- this.syntaxTreeC = syntaxTreeC;
29
- this.errorHandler = errorHandler;
30
- }
31
- doCheckAndBuild() {
32
- (0, print_1.debugPrint)('-> Builder: doCheckAndBuild(..)');
33
- if (!this.syntaxTreeC) {
34
- // Note, after pushing processing may continue or exit, depending on the error and/or the bail threshold.
35
- this.errorHandler.pushOrBail(null, 'Fatal-Error', 'SyntaxTreeC is undefined', 'This is most likely caused by an internal error somewhere. The process cannot recover fully from this, sorry.');
36
- }
37
- const fullSubTreeList = this.buildFullSubTrees(this.syntaxTreeC);
38
- const jsObject = this.buildObjectFromList(fullSubTreeList);
39
- return jsObject;
40
- }
41
- buildFullSubTrees(syntaxTreeC) {
42
- (0, print_1.debugPrint)('-> Builder: buildFullSubTrees(..)');
43
- (0, env_1.isDebug)() && console.log();
44
- const fullSubTreeList = []; // List of FULL sub-trees.
45
- // Current Working Full Sub-Tree (starting at level 1).
46
- let workingFullSubTree = syntaxTreeC._syntaxTree[0]; // (!) Any tree MUST START at level 1.
47
- (0, print_1.debugPrint)(`Setted new workingFullSubTree, from syntaxTreeC._syntaxTree[0]`);
48
- const len = syntaxTreeC._syntaxTree.length;
49
- for (let i = 1; i < len; i++) {
50
- const currentChainC = syntaxTreeC._syntaxTree[i];
51
- const level = currentChainC.originLevel;
52
- const nestingIndex = level - 1; // For debugging purposes.
53
- const chain = currentChainC.chain; // For debugging purposes.
54
- (0, print_1.debugPrint)(`Got new chain from syntaxTreeC._syntaxTree[${i}] to be mounted onto parent...`);
55
- (0, print_1.debugPrint)('* level: ' + level + ' (i=' + i + '), chain: ' + chain);
56
- if (level === 1) {
57
- (0, print_1.debugPrint)('HIT - Detected that currentChain starts with level 1');
58
- fullSubTreeList.push(workingFullSubTree);
59
- (0, print_1.debugPrint)('The workingFullSubTree is finished, pushed it to the list.');
60
- workingFullSubTree = syntaxTreeC._syntaxTree[i]; // (!) The tree MUST START at level 1.
61
- (0, print_1.debugPrint)(`Setted new workingFullSubTree, from syntaxTreeC._syntaxTree[${i}]`);
62
- }
63
- else {
64
- (0, print_1.debugPrint)('About to mount currentChain onto workingFullSubTree at correct level...');
65
- workingFullSubTree = this.mountChainOntoLevel(currentChainC, workingFullSubTree);
66
- }
67
- (0, print_1.debugPrint)();
68
- }
69
- fullSubTreeList.push(workingFullSubTree);
70
- if ((0, env_1.isDebug)()) {
71
- console.log();
72
- console.log('--- fullSubTreeList: (list of FULL sub-trees.) -------');
73
- (0, print_1.printObject)(fullSubTreeList);
74
- console.log();
75
- }
76
- return fullSubTreeList;
24
+ exports.astToObject = astToObject;
25
+ /** Convert only the children of a section into an object keyed by sectionName. */
26
+ // function sectionChildrenToObject(
27
+ // section: YiniSection,
28
+ // ): Record<string, unknown> {
29
+ // const out: Record<string, unknown> = {}
30
+ // for (const child of section.children) {
31
+ // out[child.sectionName] = sectionToObject(child)
32
+ // }
33
+ // return out
34
+ // }
35
+ /** Convert a section (its members + nested sections) to a plain object. */
36
+ // function sectionToObject(node: YiniSection): Record<string, unknown> {
37
+ // const obj: Record<string, unknown> = {}
38
+ // // Members properties
39
+ // for (const [key, val] of node.members.entries()) {
40
+ // obj[key] = literalToJS(val)
41
+ // }
42
+ // // Nested sections → nested objects keyed by sectionName
43
+ // for (const child of node.children) {
44
+ // obj[child.sectionName] = sectionToObject(child)
45
+ // }
46
+ // return obj
47
+ // }
48
+ /**
49
+ * Convert a section (members + nested sections) to a plain
50
+ * object, preserving order.
51
+ */
52
+ const sectionToObject = (node) => {
53
+ const obj = {};
54
+ // 1) Members (Map preserves insertion order).
55
+ for (const [key, val] of node.members) {
56
+ define(obj, key, literalToJS(val));
77
57
  }
78
- mountChainOntoLevel(chainC, workingSubTree) {
79
- (0, print_1.debugPrint)('-> Builder: mountChainOntoLevel(..)');
80
- if ((0, env_1.isDebug)()) {
81
- (0, print_1.printObject)(chainC);
82
- }
83
- if (chainC.originLevel > 1) {
84
- // NOP
85
- }
86
- else {
87
- // Note, after pushing processing may continue or exit, depending on the error and/or the bail threshold.
88
- this.errorHandler.pushOrBail(null, 'Fatal-Error', 'Internal-Error: Detected incorrect chain in mountChainOntoLevel(..), start section has level: ' +
89
- chainC.originLevel, 'The (chain) must start with a section level higher than 1', '' + (0, print_1.printObject)(chainC));
90
- }
91
- if (workingSubTree.originLevel != 1) {
92
- // Note, after pushing processing may continue or exit, depending on the error and/or the bail threshold.
93
- this.errorHandler.pushOrBail(null, 'Fatal-Error', 'Internal-Error: Detected incorrect full sub-tree in mountChainOntoLevel(..), start section has level: ' +
94
- chainC.originLevel, 'A full sub-tree (chain) must start with a section at level 1', '' + (0, print_1.printObject)(chainC));
95
- }
96
- const chain = chainC.chain;
97
- const targetLevel = chainC.originLevel;
98
- if ((0, env_1.isDebug)()) {
99
- (0, print_1.debugPrint)('Target level = ' + targetLevel);
100
- (0, print_1.debugPrint)(`The chain to mount: (onto level: ${targetLevel})`);
101
- (0, print_1.printObject)(chain);
102
- (0, print_1.debugPrint)('--- workingFullSubTree: -------');
103
- (0, print_1.debugPrint)('Before mounting onto workingSubTree.chain:');
104
- (0, print_1.printObject)(workingSubTree.chain);
105
- }
106
- (0, print_1.debugPrint)('Mount currentChain onto workingFullSubTree.');
107
- workingSubTree.chain = mountObjectAtLevel(workingSubTree.chain, chain, targetLevel, this.errorHandler);
108
- if ((0, env_1.isDebug)()) {
109
- (0, print_1.debugPrint)('After mounting onto workingSubTree.chain:');
110
- (0, print_1.printObject)(workingSubTree.chain);
111
- (0, print_1.debugPrint)('----------');
112
- }
113
- (0, print_1.debugPrint)('<- Builder: mountChainOntoLevel(..)');
114
- return workingSubTree;
58
+ // 2) Nested sections (array order preserved).
59
+ for (const child of node.children) {
60
+ define(obj, child.sectionName, sectionToObject(child));
115
61
  }
116
- // Contruct the final JS object from the list of full sub-trees.
117
- buildObjectFromList(fullSubTreeList) {
118
- (0, print_1.debugPrint)('-> Builder: buildObjectFromList(..)');
119
- const jsObject = {};
120
- for (const chainC of fullSubTreeList) {
121
- if (chainC.originLevel === 1) {
62
+ return obj;
63
+ };
64
+ /**
65
+ * Convert a literal to plain JS, ignoring both `tag` and `type`.
66
+ * - Scalars: return primitive value
67
+ * - List: return array (item order preserved)
68
+ * - Object: return plain object; iterate keys in creation order
69
+ *
70
+ * @note All `tag` fields MUST be ignored.
71
+ */
72
+ const literalToJS = (v) => {
73
+ const IS_LOCAL_DEBUG = false;
74
+ (0, print_1.debugPrint)('In literalToJS(..)');
75
+ // if (!v) {
76
+ // // NOTE: Only in lenient-mode, if parsing a
77
+ // // member (key = value), but the value is invalid
78
+ // // key will get undefined
79
+ // return undefined
80
+ // }
81
+ switch (v.type) {
82
+ case 'String':
83
+ case 'Number':
84
+ case 'Boolean':
85
+ case 'Null':
86
+ return v.value;
87
+ case 'Undefined':
88
+ return undefined;
89
+ case 'List': {
90
+ if (IS_LOCAL_DEBUG) {
91
+ (0, print_1.debugPrint)("case 'List':");
122
92
  if ((0, env_1.isDebug)()) {
123
- console.log('About to assign chainC.chain:');
124
- console.log(chainC.chain);
93
+ console.log('input:');
94
+ (0, print_1.printObject)(v);
125
95
  }
126
- Object.assign(jsObject, chainC.chain);
96
+ }
97
+ const out = v.elems.map((elem) => {
98
+ const ret = literalToJS(elem);
99
+ if (IS_LOCAL_DEBUG) {
100
+ if ((0, env_1.isDebug)()) {
101
+ console.log(`elem:`);
102
+ (0, print_1.printObject)(elem);
103
+ }
104
+ }
105
+ return ret;
106
+ });
107
+ if (IS_LOCAL_DEBUG) {
127
108
  if ((0, env_1.isDebug)()) {
128
- console.log('After, jsObject:');
129
- console.log(jsObject);
109
+ console.log('Returning:');
110
+ (0, print_1.printObject)(out);
130
111
  }
131
112
  }
132
- else {
133
- // Note, after pushing processing may continue or exit, depending on the error and/or the bail threshold.
134
- this.errorHandler.pushOrBail(null, 'Fatal-Error', 'Internal-Error: Detected incorrect full sub-tree in buildObjectFromList(..), start section has level: ' +
135
- chainC.originLevel, 'A full sub-tree (chain) must start with a section at level 1', '' + (0, print_1.printObject)(chainC));
113
+ return out;
114
+ }
115
+ case 'Object': {
116
+ const out = {};
117
+ // for (const key of Object.keys(v.entries)) {
118
+ // const entry = v.entries[key]
119
+ // if (isScalar(entry)) {
120
+ // // Scalar entries in object-literals: value
121
+ // // out[key] = { type: entry.type, value: entry.value }
122
+ // out[key] = entry.value
123
+ // } else if (entry.type === 'List') {
124
+ // out[key] = entry.elems.map(literalToJS)
125
+ // } else {
126
+ // out[key] = literalToJS(entry) // nested object-literal
127
+ // }
128
+ // }
129
+ // Object.keys preserves property insertion order for plain objects
130
+ for (const k of Object.keys(v.entries)) {
131
+ define(out, k, literalToJS(v.entries[k]));
136
132
  }
133
+ return out;
137
134
  }
138
- return jsObject;
139
135
  }
140
- }
136
+ };
141
137
  /**
142
- * Mounts objectDest onto the first object at the given depth (level is
143
- * 1-based) in objectSrc.
144
- * @return Returns a new object without mutating input objects.
138
+ * Helper function, defines a property to preserve explicit insertion
139
+ * order and enumerability.
145
140
  */
146
- const mountObjectAtLevel = (objectSrc, objectDest, level, errorHandler) => {
147
- // Deep copy to avoid mutating the input.
148
- const result = JSON.parse(JSON.stringify(objectSrc));
149
- let current = result;
150
- let currentLevel = 1;
151
- // Traverse down the first object path until the desired level.
152
- while (currentLevel < level) {
153
- // Get all keys in current object.
154
- const keys = Object.keys(current);
155
- // Find first key where value is a plain object (not array).
156
- const nextKey = keys.find((key) => current[key] &&
157
- typeof current[key] === 'object' &&
158
- !Array.isArray(current[key]));
159
- if (!nextKey) {
160
- // Could not reach the specified depth.
161
- return result;
162
- }
163
- current = current[nextKey];
164
- currentLevel++;
165
- }
166
- (0, print_1.debugPrint)('--------');
167
- (0, print_1.debugPrint)(' current = ' + (0, print_1.toPrettyJSON)(current));
168
- const [firstKey] = Object.keys(objectDest);
169
- (0, print_1.debugPrint)('objectDest = ' + firstKey);
170
- if (Object.prototype.hasOwnProperty.call(current, firstKey)) {
171
- //@todo Add metadata with line number, onto chainC, so can use line number in error reporting
172
- (0, print_1.debugPrint)(`(!) sectionName already exist, name: "${firstKey}", in: `);
173
- (0, print_1.debugPrint)((0, print_1.toPrettyJSON)(current));
174
- // Note, after pushing processing may continue or exit, depending on the error and/or the bail threshold.
175
- errorHandler.pushOrBail(null, 'Syntax-Error', 'Section name already exists', 'Cannot redefine section name: "' +
176
- firstKey +
177
- '" at level ' +
178
- currentLevel +
179
- '.');
180
- return current;
181
- }
182
- // Mount objectDest onto the object at the required level.
183
- Object.assign(current, objectDest);
184
- return result;
141
+ const define = (obj, key, value) => {
142
+ Object.defineProperty(obj, key, {
143
+ value,
144
+ enumerable: true,
145
+ configurable: true,
146
+ writable: true,
147
+ });
185
148
  };
149
+ //# sourceMappingURL=objectBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectBuilder.js","sourceRoot":"","sources":["../../src/core/objectBuilder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { PreferredFailLevel } from '../../types';
2
+ import { TBailSensitivityLevel } from '../internalTypes';
3
+ export declare function mapFailLevelToBail(isStrict: boolean, failLevel: PreferredFailLevel): TBailSensitivityLevel;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapFailLevelToBail = mapFailLevelToBail;
4
+ function mapFailLevelToBail(isStrict, failLevel) {
5
+ let bailLevel = '0-Ignore-Errors';
6
+ if (failLevel === 'auto') {
7
+ if (!isStrict)
8
+ bailLevel = '0-Ignore-Errors';
9
+ if (isStrict)
10
+ bailLevel = '1-Abort-on-Errors';
11
+ }
12
+ else {
13
+ switch (failLevel) {
14
+ case 'ignore-errors':
15
+ bailLevel = '0-Ignore-Errors';
16
+ break;
17
+ case 'errors':
18
+ bailLevel = '1-Abort-on-Errors';
19
+ break;
20
+ case 'warnings-and-errors':
21
+ bailLevel = '2-Abort-Even-on-Warnings';
22
+ break;
23
+ }
24
+ }
25
+ return bailLevel;
26
+ }
27
+ //# sourceMappingURL=failLevel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"failLevel.js","sourceRoot":"","sources":["../../../src/core/options/failLevel.ts"],"names":[],"mappings":";;AAKA,gDAwBC;AAxBD,SAAgB,kBAAkB,CAC9B,QAAiB,EACjB,SAA6B;IAE7B,IAAI,SAAS,GAA0B,iBAAiB,CAAA;IAExD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ;YAAE,SAAS,GAAG,iBAAiB,CAAA;QAC5C,IAAI,QAAQ;YAAE,SAAS,GAAG,mBAAmB,CAAA;IACjD,CAAC;SAAM,CAAC;QACJ,QAAQ,SAAS,EAAE,CAAC;YAChB,KAAK,eAAe;gBAChB,SAAS,GAAG,iBAAiB,CAAA;gBAC7B,MAAK;YACT,KAAK,QAAQ;gBACT,SAAS,GAAG,mBAAmB,CAAA;gBAC/B,MAAK;YACT,KAAK,qBAAqB;gBACtB,SAAS,GAAG,0BAA0B,CAAA;gBACtC,MAAK;QACb,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAA;AACpB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { AllUserOptions } from '../../types';
2
+ import { IParseCoreOptions, TBailSensitivityLevel, TParserMode } from '../internalTypes';
3
+ export declare const toCoreOptions: (bailLevel: TBailSensitivityLevel, userOpts: Required<AllUserOptions>) => IParseCoreOptions;
4
+ export declare const isOptionsObjectForm: (v: unknown) => v is AllUserOptions;
5
+ export declare const inferModeFromArgs: (arg2?: boolean | AllUserOptions) => TParserMode;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inferModeFromArgs = exports.isOptionsObjectForm = exports.toCoreOptions = void 0;
4
+ const env_1 = require("../../config/env");
5
+ const toCoreOptions = (bailLevel, userOpts) => {
6
+ return {
7
+ isStrict: userOpts.strictMode,
8
+ bailSensitivity: bailLevel,
9
+ isIncludeMeta: userOpts.includeMetadata,
10
+ isWithDiagnostics: (0, env_1.isDev)() || (0, env_1.isDebug)() || userOpts.includeDiagnostics,
11
+ isWithTiming: (0, env_1.isDev)() || (0, env_1.isDebug)() || userOpts.includeTiming,
12
+ isKeepUndefinedInMeta: (0, env_1.isDebug)() || userOpts.preserveUndefinedInMeta,
13
+ isAvoidWarningsInConsole: userOpts.suppressWarnings,
14
+ requireDocTerminator: userOpts.requireDocTerminator,
15
+ treatEmptyValueAsNull: userOpts.treatEmptyValueAsNull,
16
+ onDuplicateKey: userOpts.onDuplicateKey,
17
+ };
18
+ };
19
+ exports.toCoreOptions = toCoreOptions;
20
+ // Type guard: did the caller use the options-object form?
21
+ const isOptionsObjectForm = (v) => {
22
+ return (v != null &&
23
+ typeof v === 'object' &&
24
+ // Note: If one wants, this can be relax to "typeof v === 'object'"
25
+ // but this keeps accidental booleans/strings out.
26
+ ('strictMode' in v ||
27
+ 'failLevel' in v ||
28
+ 'includeMetadata' in v ||
29
+ 'includeDiagnostics' in v ||
30
+ 'includeTiming' in v ||
31
+ 'preserveUndefinedInMeta' in v ||
32
+ 'suppressWarnings' in v ||
33
+ 'requireDocTerminator' in v ||
34
+ 'treatEmptyValueAsNull' in v ||
35
+ 'onDuplicateKey' in v));
36
+ };
37
+ exports.isOptionsObjectForm = isOptionsObjectForm;
38
+ // const mode: TParserMode =
39
+ // ((arg2 as any)?.strictMode ?? (arg2 as boolean | undefined)) ===
40
+ const inferModeFromArgs = (arg2) => {
41
+ if (typeof arg2 === 'boolean') {
42
+ return arg2 ? 'strict' : 'lenient';
43
+ }
44
+ if (arg2 && typeof arg2 === 'object') {
45
+ const sm = arg2.strictMode;
46
+ if (typeof sm === 'boolean') {
47
+ return sm ? 'strict' : 'lenient';
48
+ }
49
+ }
50
+ return 'lenient';
51
+ };
52
+ exports.inferModeFromArgs = inferModeFromArgs;
53
+ //# sourceMappingURL=normalizeOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalizeOptions.js","sourceRoot":"","sources":["../../../src/core/options/normalizeOptions.ts"],"names":[],"mappings":";;;AAAA,0CAAiD;AAQ1C,MAAM,aAAa,GAAG,CACzB,SAAgC,EAChC,QAAkC,EACjB,EAAE;IACnB,OAAO;QACH,QAAQ,EAAE,QAAQ,CAAC,UAAU;QAC7B,eAAe,EAAE,SAAS;QAC1B,aAAa,EAAE,QAAQ,CAAC,eAAe;QACvC,iBAAiB,EAAE,IAAA,WAAK,GAAE,IAAI,IAAA,aAAO,GAAE,IAAI,QAAQ,CAAC,kBAAkB;QACtE,YAAY,EAAE,IAAA,WAAK,GAAE,IAAI,IAAA,aAAO,GAAE,IAAI,QAAQ,CAAC,aAAa;QAC5D,qBAAqB,EAAE,IAAA,aAAO,GAAE,IAAI,QAAQ,CAAC,uBAAuB;QACpE,wBAAwB,EAAE,QAAQ,CAAC,gBAAgB;QACnD,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;QACnD,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,cAAc,EAAE,QAAQ,CAAC,cAAc;KAC1C,CAAA;AACL,CAAC,CAAA;AAhBY,QAAA,aAAa,iBAgBzB;AAED,0DAA0D;AACnD,MAAM,mBAAmB,GAAG,CAAC,CAAU,EAAuB,EAAE;IACnE,OAAO,CACH,CAAC,IAAI,IAAI;QACT,OAAO,CAAC,KAAK,QAAQ;QACrB,mEAAmE;QACnE,kDAAkD;QAClD,CAAC,YAAY,IAAK,CAAS;YACvB,WAAW,IAAK,CAAS;YACzB,iBAAiB,IAAK,CAAS;YAC/B,oBAAoB,IAAK,CAAS;YAClC,eAAe,IAAK,CAAS;YAC7B,yBAAyB,IAAK,CAAS;YACvC,kBAAkB,IAAK,CAAS;YAChC,sBAAsB,IAAK,CAAS;YACpC,uBAAuB,IAAK,CAAS;YACrC,gBAAgB,IAAK,CAAS,CAAC,CACtC,CAAA;AACL,CAAC,CAAA;AAjBY,QAAA,mBAAmB,uBAiB/B;AAED,4BAA4B;AAC5B,mEAAmE;AAE5D,MAAM,iBAAiB,GAAG,CAC7B,IAA+B,EACpB,EAAE;IACb,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;IACtC,CAAC;IACD,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,EAAE,GAAI,IAAuB,CAAC,UAAU,CAAA;QAC9C,IAAI,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAA;QACpC,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAA;AACpB,CAAC,CAAA;AAbY,QAAA,iBAAiB,qBAa7B"}
@@ -0,0 +1,7 @@
1
+ import { AllUserOptions } from '../../types';
2
+ import { TParserMode } from '../internalTypes';
3
+ export declare const getDefaultOptions: (mode: TParserMode) => Required<Pick<AllUserOptions, "includeDiagnostics" | "includeTiming" | "preserveUndefinedInMeta" | "suppressWarnings" | "requireDocTerminator" | "treatEmptyValueAsNull" | "onDuplicateKey" | "strictMode" | "failLevel" | "includeMetadata">>;
4
+ export type NormalizedOptions = Required<Pick<AllUserOptions, 'strictMode' | 'failLevel' | 'includeMetadata' | 'includeDiagnostics' | 'includeTiming' | 'preserveUndefinedInMeta' | 'suppressWarnings' | 'requireDocTerminator' | 'treatEmptyValueAsNull' | 'onDuplicateKey'>>;
5
+ export declare const BASE_DEFAULTS: NormalizedOptions;
6
+ export declare const DEFAULT_LENIENT_OPTS: NormalizedOptions;
7
+ export declare const DEFAULT_STRICT_OPTS: NormalizedOptions;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_STRICT_OPTS = exports.DEFAULT_LENIENT_OPTS = exports.BASE_DEFAULTS = exports.getDefaultOptions = void 0;
4
+ const getDefaultOptions = (mode) => mode === 'strict' ? exports.DEFAULT_STRICT_OPTS : exports.DEFAULT_LENIENT_OPTS;
5
+ exports.getDefaultOptions = getDefaultOptions;
6
+ // Base (mode-agnostic) defaults
7
+ exports.BASE_DEFAULTS = {
8
+ strictMode: false,
9
+ failLevel: 'auto',
10
+ includeMetadata: false,
11
+ includeDiagnostics: false,
12
+ includeTiming: false,
13
+ preserveUndefinedInMeta: false,
14
+ suppressWarnings: false, // Suppress warnings in console (does not affect warnings in meta data).
15
+ requireDocTerminator: 'optional',
16
+ treatEmptyValueAsNull: 'allow-with-warning',
17
+ onDuplicateKey: 'error',
18
+ };
19
+ exports.DEFAULT_LENIENT_OPTS = {
20
+ ...exports.BASE_DEFAULTS,
21
+ strictMode: false,
22
+ failLevel: 'ignore-errors',
23
+ suppressWarnings: false, // Suppress warnings in console (does not affect warnings in meta data).
24
+ requireDocTerminator: 'optional',
25
+ treatEmptyValueAsNull: 'allow-with-warning',
26
+ onDuplicateKey: 'warn-and-keep-first',
27
+ };
28
+ exports.DEFAULT_STRICT_OPTS = {
29
+ ...exports.BASE_DEFAULTS,
30
+ strictMode: true,
31
+ failLevel: 'errors',
32
+ suppressWarnings: false, // Suppress warnings in console (does not affect warnings in meta data).
33
+ requireDocTerminator: 'optional',
34
+ treatEmptyValueAsNull: 'disallow',
35
+ onDuplicateKey: 'error',
36
+ };
37
+ //# sourceMappingURL=parserOptionsConstants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parserOptionsConstants.js","sourceRoot":"","sources":["../../../src/core/options/parserOptionsConstants.ts"],"names":[],"mappings":";;;AAGO,MAAM,iBAAiB,GAAG,CAAC,IAAiB,EAAE,EAAE,CACnD,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,2BAAmB,CAAC,CAAC,CAAC,4BAAoB,CAAA;AADrD,QAAA,iBAAiB,qBACoC;AAkBlE,gCAAgC;AACnB,QAAA,aAAa,GAAsB;IAC5C,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,MAAM;IACjB,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,aAAa,EAAE,KAAK;IACpB,uBAAuB,EAAE,KAAK;IAC9B,gBAAgB,EAAE,KAAK,EAAE,wEAAwE;IACjG,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,oBAAoB;IAC3C,cAAc,EAAE,OAAO;CAC1B,CAAA;AAEY,QAAA,oBAAoB,GAAsB;IACnD,GAAG,qBAAa;IAChB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,eAAe;IAC1B,gBAAgB,EAAE,KAAK,EAAE,wEAAwE;IACjG,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,oBAAoB;IAC3C,cAAc,EAAE,qBAAqB;CACxC,CAAA;AAEY,QAAA,mBAAmB,GAAsB;IAClD,GAAG,qBAAa;IAChB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,QAAQ;IACnB,gBAAgB,EAAE,KAAK,EAAE,wEAAwE;IACjG,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,UAAU;IACjC,cAAc,EAAE,OAAO;CAC1B,CAAA"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This file is the orchestrator that wires up the pipeline (lexer → parser →
3
+ * astBuilder → objectBuilder, etc.)
4
+ */
5
+ import { AllUserOptions, ParsedObject, YiniParseResult } from '../types';
6
+ import { IParseCoreOptions, IRuntimeInfo } from './internalTypes';
7
+ /**
8
+ * @internal Single source of truth.
9
+ *
10
+ * Entrypoint for the YINI parsing pipeline:
11
+ * tokenization → grammar parse → AST build → object build → result.
12
+ *
13
+ * @param _meta_userOpts The user options from which the core options were
14
+ * derived/resolved from. This object is provided only for debugging
15
+ * and metadata purposes and should not be relied upon in
16
+ * application logic.
17
+ */
18
+ export declare const runPipeline: (yiniContent: string, coreOptions: IParseCoreOptions, runtimeInfo: IRuntimeInfo, _meta_userOpts: AllUserOptions) => ParsedObject | YiniParseResult;