yini-parser 1.3.1-beta → 1.3.3-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.
- package/CHANGELOG.md +18 -2
- package/README.md +53 -176
- package/dist/YINI.d.ts +4 -4
- package/dist/YINI.js +0 -120
- package/dist/YINI.js.map +1 -1
- package/dist/core/options/defaultParserOptions.js +1 -7
- package/dist/core/options/defaultParserOptions.js.map +1 -1
- package/dist/core/options/optionsFunctions.js +7 -5
- package/dist/core/options/optionsFunctions.js.map +1 -1
- package/dist/core/resultMetadataBuilder.js +0 -1
- package/dist/core/resultMetadataBuilder.js.map +1 -1
- package/dist/dev/main.d.ts +1 -1
- package/dist/dev/main.js +24 -4
- package/dist/dev/main.js.map +1 -1
- package/dist/dev/quick-test-samples/defect-inputs.d.ts +37 -0
- package/dist/dev/quick-test-samples/defect-inputs.js +106 -0
- package/dist/dev/quick-test-samples/defect-inputs.js.map +1 -0
- package/dist/dev/quick-test-samples/valid-inputs.d.ts +21 -0
- package/dist/dev/quick-test-samples/valid-inputs.js +422 -0
- package/dist/dev/quick-test-samples/valid-inputs.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/string.d.ts +2 -0
- package/dist/utils/string.js +12 -1
- package/dist/utils/string.js.map +1 -1
- package/examples/nested-output.js +1 -1
- package/examples/nested.yini +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,8 +1,24 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
-
## 1.3.
|
|
3
|
+
## 1.3.3-beta - 2025 Dec
|
|
4
|
+
This release strengthens correctness and reliability, while preserving the existing API and improving guarantees.
|
|
5
|
+
- **Added:**
|
|
6
|
+
- Added comprehensive smoke tests (F-5.a-d and F-6.a-d) matching YINI parsing against expected JSON output using two large, production-style configuration examples.
|
|
7
|
+
- **Corporate SaaS Platform** — [YINI](./tests/fixtures/smoke-fixtures/a-corporate-saas-platform.smoke.yini) and [JSON](./tests/fixtures/smoke-fixtures/a-corporate-saas-platform.smoke.json)
|
|
8
|
+
- **High-Security Distributed Control System** — [YINI](./tests/fixtures/smoke-fixtures/b-high-security-distributed-control-system.smoke.yini) and [JSON](./tests/fixtures/smoke-fixtures/b-high-security-distributed-control-system.smoke.json)
|
|
9
|
+
- Tests verify consistent results across:
|
|
10
|
+
- default parsing.
|
|
11
|
+
- strict mode parsing.
|
|
12
|
+
- strict mode with metadata enabled.
|
|
13
|
+
- These tests now serve as regression contracts for parser correctness, metadata inclusion, and cross-format consistency.
|
|
14
|
+
- **Added:** Smoke test (F-7) verifying that parsing a YINI file returns metadata when `includeMetadata: true` is enabled.
|
|
15
|
+
- **Added:** Smoke test (F-8) verifying that parsing a defect YINI produces diagnostics metadata given proper parse options.
|
|
16
|
+
- **Fixed:** Miscellaneous smaller fixes and improvements
|
|
17
|
+
|
|
18
|
+
## 1.3.2-beta - 2025 Dec
|
|
4
19
|
- **Added:** Implemented UTF-8 BOM support (safe U+FEFF stripping) and added complete test fixtures for BOM/no-BOM, BOM+newline, and mid-file scenarios.
|
|
5
|
-
- **Added:** Implemented support for shebang (`#!`), which is ignored by the parser.
|
|
20
|
+
- **Added:** Implemented support for shebang (`#!`), which is ignored by the parser and the line skipped.
|
|
21
|
+
(If the parser sees `#!` at first line, instead of breaking the parsing, the parsing will continue on the next line.)
|
|
6
22
|
- **Updated:** all (~14) project dependencies to their latest versions, including TypeScript and packages with reported security vulnerabilities. Node type definitions remain unchanged.
|
|
7
23
|
|
|
8
24
|
## 1.3.0-beta - 2025 Sep
|
package/README.md
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# YINI Parser for Node.js
|
|
2
|
+
> **Readable configuration without YAML foot-guns or JSON noise.**
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
The official TypeScript / Node.js parser for YINI. An INI-inspired configuration format with clear nesting, explicit types, and predictable parsing.
|
|
4
5
|
|
|
5
6
|
[](https://www.npmjs.com/package/yini-parser) [](https://github.com/YINI-lang/yini-parser-typescript/actions/workflows/run-all-tests.yml) [](https://github.com/YINI-lang/yini-parser-typescript/actions/workflows/run-regression-tests.yml) [](https://github.com/YINI-lang/yini-parser-typescript/actions/workflows/run-grammar-drift-check.yml)
|
|
6
7
|
|
|
8
|
+
Designed to bring structure, clarity, and predictable behavior to real-world configuration needs. Well suited for applications, tools, and services that need readable yet structured configuration.
|
|
9
|
+
|
|
7
10
|
```sh
|
|
8
11
|
npm install yini-parser
|
|
9
12
|
```
|
|
@@ -13,45 +16,22 @@ import YINI from 'yini-parser'
|
|
|
13
16
|
const config = YINI.parseFile('./config.yini')
|
|
14
17
|
```
|
|
15
18
|
|
|
16
|
-
YINI (Yet another INI): YINI is a configuration format designed for readability and structure, inspired by INI and YAML.
|
|
17
|
-
|
|
18
19
|
➡️ See full [documentation or YINI format specification](https://github.com/YINI-lang/YINI-spec)
|
|
19
20
|
|
|
20
|
-
⭐ **Enjoying YINI?** If you think this project is interesting, [consider giving it a star on GitHub](https://github.com/YINI-lang/yini-parser-typescript) — it's greatly appreciated.
|
|
21
|
-
|
|
22
21
|
---
|
|
23
22
|
|
|
24
23
|
## YINI Parser – (source code in TypeScript)
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
A parser / reader for the [YINI configuration file format](https://github.com/YINI-lang/YINI-spec).
|
|
25
|
+
A runtime parser for the official [YINI configuration file format](https://github.com/YINI-lang/YINI-spec).
|
|
28
26
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
YINI is a simple, human-friendly configuration format inspired by INI and JSON.
|
|
27
|
+
The parser follows the official YINI specification and is implemented in TypeScript.
|
|
32
28
|
|
|
33
29
|
---
|
|
34
30
|
|
|
35
|
-
|
|
36
|
-
- **YINI is an alternative** to other great config formats like INI, JSON, YAML, XML, and TOML — Supports section nesting and explicit syntax for configuration files.
|
|
37
|
-
- **Started as a personal project and a research challenge:** Provides structure similar to INI, with features inspired by JSON and YAML.
|
|
38
|
-
- **Built for clarity:**
|
|
39
|
-
* Uses a concise syntax to minimize unnecessary characters.
|
|
40
|
-
* Supports commonly used configuration structures.
|
|
41
|
-
- Developed to meet practical needs, driven by curiosity and a desire **for configuration clarity, simplicity, minimalism, and flexibility**.
|
|
31
|
+
### Who is this for?
|
|
42
32
|
|
|
43
|
-
|
|
33
|
+
YINI is designed as an ideal option for application developers, platform teams, DevOps engineers, and anyone maintaining complex configuration at scale.
|
|
44
34
|
|
|
45
|
-
## 💡 What is YINI?
|
|
46
|
-
- **Simple like INI** — but with strong typing, comments, and nested sections.
|
|
47
|
-
- **Provides concise, structured syntax** for configuration.
|
|
48
|
-
- Supports section nesting **without requiring indentation or dot-delimited keys**.
|
|
49
|
-
- This repo/parser is built for both **JavaScript and TypeScript**.
|
|
50
|
-
- **Supports strict and lenient modes**, and all major data types.
|
|
51
|
-
- Can be **edited manually** or **processed programmatically**.
|
|
52
|
-
- 👉 See [how YINI compares with JSON, YAML, INI, and TOML](https://github.com/YINI-lang/yini-parser-typescript/tree/main/examples/compare-formats.md).
|
|
53
|
-
- Want the full syntax reference? See the [YINI Specification](https://github.com/YINI-lang/YINI-spec).
|
|
54
|
-
|
|
55
35
|
---
|
|
56
36
|
|
|
57
37
|
## Quick Start
|
|
@@ -111,10 +91,42 @@ That's it!
|
|
|
111
91
|
|
|
112
92
|
---
|
|
113
93
|
|
|
114
|
-
##
|
|
115
|
-
|
|
94
|
+
## 📂 Examples
|
|
95
|
+
|
|
96
|
+
See the [examples/](https://github.com/YINI-lang/yini-parser-typescript/tree/main/examples) folder for:
|
|
97
|
+
|
|
98
|
+
- Basic YINI file with common types and comments
|
|
99
|
+
- Nested sections example
|
|
100
|
+
- Comparison with JSON/YAML config
|
|
101
|
+
|
|
102
|
+
These examples are also included in the npm package.
|
|
116
103
|
|
|
117
|
-
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 🙋♀️ Why YINI?
|
|
107
|
+
- **Indentation-independent structure:** The YINI config format is indentation-independent, meaning spaces and tabs never affect meaning.
|
|
108
|
+
- **Explicit nesting for easy refactoring & large configs:** It uses clear header markers (`^`, `^^`, `^^^`) to define hierarchy (like in Markdown), without long dotted keys.
|
|
109
|
+
- **Multiple data types:** Supports boolean literals (`true` / `false`, `Yes` / `No`, etc), numbers, arrays (lists), and JS-style objects natively, with explicit string syntax.
|
|
110
|
+
- **Comments support:** YINI supports multiple comment styles (`#`, `//`, `/* ... */`, and `;`) allowing one to document config directly in the file.
|
|
111
|
+
- **Predictable parsing rules:** Fewer production surprises, well-defined rules with optional strict and lenient modes, for different use cases.
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## ✨ Features
|
|
116
|
+
- Simple syntax (supports both strict and lenient modes).
|
|
117
|
+
- Familiar config file style (inspired by INI, JSON, Python, and Markdown).
|
|
118
|
+
- Easy programmatic usage.
|
|
119
|
+
- Only the `YINI` class is exported; all internal details are private.
|
|
120
|
+
- Arrays/Lists (bracketed): `list = [10, 20, 30]`
|
|
121
|
+
- JavaScript-style objects.
|
|
122
|
+
|
|
123
|
+
⭐ **Enjoying YINI?** If you think this project is interesting, [consider giving it a star on GitHub](https://github.com/YINI-lang/yini-parser-typescript) — it's greatly appreciated.
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## 🧪 Stability & Guarantees
|
|
128
|
+
|
|
129
|
+
This parser is continuously validated through comprehensive regression and smoke tests, ensuring deterministic parsing behavior across default, strict, and metadata-enabled modes.
|
|
118
130
|
|
|
119
131
|
---
|
|
120
132
|
|
|
@@ -187,137 +199,6 @@ const configFromFile = YINI.parseFile('./config.yini');
|
|
|
187
199
|
|
|
188
200
|
---
|
|
189
201
|
|
|
190
|
-
## ✨ Features
|
|
191
|
-
- Simple syntax (supports both strict and lenient modes).
|
|
192
|
-
- Familiar config file style (inspired by INI, JSON, Python, and Markdown).
|
|
193
|
-
- Easy programmatic usage.
|
|
194
|
-
- Only the `YINI` class is exported; all internal details are private.
|
|
195
|
-
- Lists (bracketed): `list = [10, 20, 30]`
|
|
196
|
-
- 🚧 *(Planned – not yet implemented in parser)* Supports alternative list notation (colon‑style lists):
|
|
197
|
-
```yini
|
|
198
|
-
fruits:
|
|
199
|
-
'Pear',
|
|
200
|
-
'Cherry',
|
|
201
|
-
'Banana'
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
### Limitations
|
|
205
|
-
Not all features of the full YINI are implemented yet.
|
|
206
|
-
|
|
207
|
-
See [FEATURE-CHECKLIST.md](https://github.com/YINI-lang/yini-parser-typescript/blob/main/FEATURE-CHECKLIST.md) for the current list of implemented YINI features.
|
|
208
|
-
|
|
209
|
-
## 🚧 Missing or Upcoming Features
|
|
210
|
-
|
|
211
|
-
This parser currently supports all core YINI syntax for values, comments, section headers, and basic nesting.
|
|
212
|
-
|
|
213
|
-
The following features from the [YINI specification](https://github.com/YINI-lang/YINI-spec) are **planned but not yet fully implemented**:
|
|
214
|
-
|
|
215
|
-
- Object literals
|
|
216
|
-
- Advanced escape sequences
|
|
217
|
-
- String types and triple-quoted strings
|
|
218
|
-
- All number format literals
|
|
219
|
-
- Full strict mode validation
|
|
220
|
-
|
|
221
|
-
You can follow progress in the [YINI parser GitHub repo-FEATURE-CHECKLIST](https://github.com/YINI-lang/yini-parser-typescript/blob/main/FEATURE-CHECKLIST.md). Contributions and feature requests are welcome!
|
|
222
|
-
|
|
223
|
-
## 📂 Examples
|
|
224
|
-
|
|
225
|
-
See the [examples/](https://github.com/YINI-lang/yini-parser-typescript/tree/main/examples) folder for:
|
|
226
|
-
|
|
227
|
-
- Basic YINI file with common types and comments
|
|
228
|
-
- Nested sections example
|
|
229
|
-
- Comparison with JSON/YAML config
|
|
230
|
-
|
|
231
|
-
These examples are also included in the npm package.
|
|
232
|
-
|
|
233
|
-
---
|
|
234
|
-
|
|
235
|
-
## Bigger Example
|
|
236
|
-
|
|
237
|
-
```js
|
|
238
|
-
const YINI = require('yini-parser').default; // Or: import YINI from 'yini-parser';
|
|
239
|
-
|
|
240
|
-
const config = YINI.parse(`
|
|
241
|
-
// This is a comment in YINI
|
|
242
|
-
// YINI is a simple, human-readable configuration file format.
|
|
243
|
-
|
|
244
|
-
// Note: In YINI, spaces and tabs don't change meaning - indentation is just
|
|
245
|
-
// for readability.
|
|
246
|
-
|
|
247
|
-
/* This is a block comment
|
|
248
|
-
|
|
249
|
-
In YINI, section headers use repeated characters "^" at the start to
|
|
250
|
-
show their level: (Section header names are case-sensitive.)
|
|
251
|
-
|
|
252
|
-
^ SectionLevel1
|
|
253
|
-
^^ SectionLevel2
|
|
254
|
-
^^^ SectionLevel3
|
|
255
|
-
*/
|
|
256
|
-
|
|
257
|
-
^ App // Definition of section (group) "App"
|
|
258
|
-
title = 'My App'
|
|
259
|
-
items = 25
|
|
260
|
-
debug = ON // "true" and "YES" works too
|
|
261
|
-
|
|
262
|
-
^ Server // Definition of section (group) "Server"
|
|
263
|
-
host = 'localhost'
|
|
264
|
-
port = 8080
|
|
265
|
-
useTLS = OFF // "false" and "NO" works too
|
|
266
|
-
|
|
267
|
-
// Sub-section of "Server"
|
|
268
|
-
^^ Login
|
|
269
|
-
username = 'user_name'
|
|
270
|
-
password = 'your_password_here'
|
|
271
|
-
|
|
272
|
-
/END // (only optional)
|
|
273
|
-
`);
|
|
274
|
-
|
|
275
|
-
console.log(config);
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Output:
|
|
279
|
-
```js
|
|
280
|
-
// JS object
|
|
281
|
-
{
|
|
282
|
-
App: {
|
|
283
|
-
title: 'My App',
|
|
284
|
-
items: 25,
|
|
285
|
-
debug: true
|
|
286
|
-
},
|
|
287
|
-
Server: {
|
|
288
|
-
host: 'localhost',
|
|
289
|
-
port: 8080,
|
|
290
|
-
useTLS: false,
|
|
291
|
-
Login: {
|
|
292
|
-
username: 'user_name',
|
|
293
|
-
password: 'your_password_here'
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
### Output in JSON:
|
|
300
|
-
```json
|
|
301
|
-
{
|
|
302
|
-
"App": {
|
|
303
|
-
"title": "My App",
|
|
304
|
-
"items": 25,
|
|
305
|
-
"debug": true
|
|
306
|
-
},
|
|
307
|
-
"Server": {
|
|
308
|
-
"host": "localhost",
|
|
309
|
-
"port": 8080,
|
|
310
|
-
"useTLS": false,
|
|
311
|
-
"Login": {
|
|
312
|
-
"username": "user_name",
|
|
313
|
-
"password": "your_password_here"
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
202
|
## 🛠 Roadmap
|
|
322
203
|
|
|
323
204
|
1. **Improve existing functionality** — Ongoing improvements to core parsing, richer diagnostics, and expanded QA for areas not yet fully covered.
|
|
@@ -326,6 +207,11 @@ console.log(config);
|
|
|
326
207
|
3. **Schema validation (future)** — Possible future expansion to support schema/contract validation for stricter type-safe configs.
|
|
327
208
|
4. **Ecosystem integration** - Broader and additional support for tooling, and other ecosystem projects.
|
|
328
209
|
|
|
210
|
+
### Planned & Upcoming Features
|
|
211
|
+
Some advanced YINI features are still evolving and are tracked transparently.
|
|
212
|
+
|
|
213
|
+
You can follow progress in the [YINI parser GitHub repo-FEATURE-CHECKLIST](https://github.com/YINI-lang/yini-parser-typescript/blob/main/FEATURE-CHECKLIST.md). Contributions and feature requests are welcome!
|
|
214
|
+
|
|
329
215
|
---
|
|
330
216
|
|
|
331
217
|
## 🤝 Contributing
|
|
@@ -333,6 +219,9 @@ We welcome feedback, bug reports, feature requests, and code contributions!
|
|
|
333
219
|
- [Open an Issue](https://github.com/YINI-lang/yini-parser-typescript/issues)
|
|
334
220
|
- [Start a Discussion](https://github.com/YINI-lang/yini-parser-typescript/discussions)
|
|
335
221
|
|
|
222
|
+
|
|
223
|
+
If this library is useful to you, a GitHub star helps guide future development.
|
|
224
|
+
|
|
336
225
|
---
|
|
337
226
|
|
|
338
227
|
## 📚 Documentation
|
|
@@ -342,26 +231,14 @@ We welcome feedback, bug reports, feature requests, and code contributions!
|
|
|
342
231
|
---
|
|
343
232
|
|
|
344
233
|
## Links
|
|
345
|
-
- ➡️ [Getting Started: Intro to YINI Config Format](https://github.com/YINI-lang/YINI-spec/blob/develop/Docs/Intro-to-YINI-Config-Format.md)
|
|
346
|
-
*Beginner-friendly walkthrough and basic usage examples.*
|
|
347
|
-
|
|
348
|
-
- ➡️ [YINI Parser on npm](https://www.npmjs.com/package/yini-parser)
|
|
349
|
-
*Install and view package details.*
|
|
350
|
-
|
|
351
234
|
- ➡️ [Read the YINI Specification](https://github.com/YINI-lang/YINI-spec/blob/release/YINI-Specification.md#table-of-contents)
|
|
352
235
|
*Full formal spec for the YINI format, including syntax and features.*
|
|
353
236
|
|
|
354
237
|
- ➡️ [YINI CLI on GitHub](https://github.com/YINI-lang/yini-cli)
|
|
355
238
|
*TypeScript source code, issue tracker, and contributing guide.*
|
|
356
239
|
|
|
357
|
-
- ➡️ [YINI vs Other Formats](https://github.com/YINI-lang/YINI-spec/tree/release#-summary-difference-with-other-formats)
|
|
358
|
-
*How does YINI differ: comparison with INI, YAML, and JSON.*
|
|
359
|
-
|
|
360
|
-
- ➡️ [Why YINI? (Project Rationale)](https://github.com/YINI-lang/YINI-spec/blob/release/RATIONALE.md)
|
|
361
|
-
*Learn about the motivations and design decisions behind YINI.*
|
|
362
|
-
|
|
363
240
|
- ➡️ [YINI Project](https://github.com/YINI-lang)
|
|
364
|
-
*YINI home.*
|
|
241
|
+
*YINI home on GitHub.*
|
|
365
242
|
|
|
366
243
|
---
|
|
367
244
|
|
|
@@ -373,6 +250,6 @@ In this project on GitHub, the `libs` directory contains third party software an
|
|
|
373
250
|
---
|
|
374
251
|
|
|
375
252
|
**^YINI ≡**
|
|
376
|
-
>
|
|
253
|
+
> An INI-inspired configuration format with clear structure.
|
|
377
254
|
|
|
378
255
|
[yini-lang.org](https://yini-lang.org) · [YINI on GitHub](https://github.com/YINI-lang)
|
package/dist/YINI.d.ts
CHANGED
|
@@ -23,7 +23,7 @@ export default class YINI {
|
|
|
23
23
|
* @param failLevel Preferred bail sensitivity level, controls if and when parsing should stop on problems:
|
|
24
24
|
* - `'auto'` (default) : Auto‑select level (strict → `'errors'`, lenient → `'ignore-errors'`)
|
|
25
25
|
* - `'ignore-errors'` : Continue parsing despite errors; log them and attempt recovery.
|
|
26
|
-
* - `'errors'` : Stop parsing on the first error.
|
|
26
|
+
* - `'errors'` : Stop parsing on the first error (fail-fast).
|
|
27
27
|
* - `'warnings-and-errors'` : Stop parsing on the first warning **or** error.
|
|
28
28
|
* @param includeMetadata If `true`, return additional metadata (e.g. warnings, statistics) alongside the parsed object.
|
|
29
29
|
*
|
|
@@ -56,7 +56,7 @@ export default class YINI {
|
|
|
56
56
|
* @param options.failLevel - Preferred bail sensitivity level, controls if and when parsing should stop on problems:
|
|
57
57
|
* Accepts:
|
|
58
58
|
* `'ignore-errors'` - Continue despite errors, persist and try to recover.
|
|
59
|
-
* `'errors'` - Stop parsing on the first error.
|
|
59
|
+
* `'errors'` - Stop parsing on the first error (fail-fast).
|
|
60
60
|
* `'warnings-and-errors'` - Stop parsing on the first warning or error.
|
|
61
61
|
* (Type: TPreferredFailLevel; exact behavior is implementation-defined.)
|
|
62
62
|
* @param options.includeDiagnostics - Include diagnostics in the returned metadata.
|
|
@@ -111,7 +111,7 @@ export default class YINI {
|
|
|
111
111
|
* @param failLevel Preferred bail sensitivity level, controls if and when parsing should stop on problems:
|
|
112
112
|
* - `'auto'` (default) : Auto‑select level (strict → `'errors'`, lenient → `'ignore-errors'`)
|
|
113
113
|
* - `'ignore-errors'` : Continue parsing despite errors; log them and attempt recovery.
|
|
114
|
-
* - `'errors'` : Stop parsing on the first error.
|
|
114
|
+
* - `'errors'` : Stop parsing on the first error (fail-fast).
|
|
115
115
|
* - `'warnings-and-errors'` : Stop parsing on the first warning **or** error.
|
|
116
116
|
* @param includeMetadata If `true`, return additional metadata (e.g. warnings, statistics) alongside the parsed object.
|
|
117
117
|
*
|
|
@@ -144,7 +144,7 @@ export default class YINI {
|
|
|
144
144
|
* @param options.failLevel - Preferred bail sensitivity level, controls if and when parsing should stop on problems:
|
|
145
145
|
* Accepts:
|
|
146
146
|
* `'ignore-errors'` - Continue despite errors, persist and try to recover.
|
|
147
|
-
* `'errors'` - Stop parsing on the first error.
|
|
147
|
+
* `'errors'` - Stop parsing on the first error (fail-fast).
|
|
148
148
|
* `'warnings-and-errors'` - Stop parsing on the first warning or error.
|
|
149
149
|
* (Type: TPreferredFailLevel; exact behavior is implementation-defined.)
|
|
150
150
|
* @param options.includeDiagnostics - Include diagnostics in the returned metadata.
|
package/dist/YINI.js
CHANGED
|
@@ -6,15 +6,6 @@ const optionsFunctions_1 = require("./core/options/optionsFunctions");
|
|
|
6
6
|
const runtime_1 = require("./core/runtime");
|
|
7
7
|
const print_1 = require("./utils/print");
|
|
8
8
|
const DEFAULT_TAB_SIZE = 4; // De facto "modern default" (even though traditionally/historically it's 8).
|
|
9
|
-
// let _runtimeInfo: IRuntimeInfo = {
|
|
10
|
-
// sourceType: 'Inline',
|
|
11
|
-
// fileName: undefined,
|
|
12
|
-
// fileByteSize: null,
|
|
13
|
-
// lineCount: null,
|
|
14
|
-
// timeIoMs: null,
|
|
15
|
-
// preferredBailSensitivity: null,
|
|
16
|
-
// sha256: null,
|
|
17
|
-
// }
|
|
18
9
|
/**
|
|
19
10
|
* This class is the public API, which exposes only parse(..) and
|
|
20
11
|
* parseFile(..), rest of the implementation details are hidden.
|
|
@@ -44,59 +35,8 @@ class YINI {
|
|
|
44
35
|
static parse(yiniContent, arg2, // strictMode | options
|
|
45
36
|
failLevel = 'auto', includeMetadata = false) {
|
|
46
37
|
(0, print_1.debugPrint)('-> Entered static parse(..) in class YINI\n');
|
|
47
|
-
// // Runtime guard to catch illegal/ambiguous calls coming from JS or any-cast code
|
|
48
|
-
// if (
|
|
49
|
-
// isOptionsObjectForm(arg2) &&
|
|
50
|
-
// (failLevel !== 'auto' || includeMetadata !== false)
|
|
51
|
-
// ) {
|
|
52
|
-
// throw new TypeError(
|
|
53
|
-
// 'Invalid call: when providing an options object, do not also pass positional parameters.',
|
|
54
|
-
// )
|
|
55
|
-
// }
|
|
56
|
-
// const mode: TParserMode = inferModeFromArgs(arg2)
|
|
57
|
-
// const defaultOptions = getDefaultOptions(mode)
|
|
58
|
-
// // Normalize to a fully-required options object.
|
|
59
|
-
// let userOpts: Required<ParseOptions>
|
|
60
|
-
// // Required, makes all properties in T required, no undefined.
|
|
61
|
-
// if (isOptionsObjectForm(arg2)) {
|
|
62
|
-
// userOpts = {
|
|
63
|
-
// ...defaultOptions, // Sets the default options.
|
|
64
|
-
// ...arg2,
|
|
65
|
-
// }
|
|
66
|
-
// } else {
|
|
67
|
-
// // Positional form.
|
|
68
|
-
// userOpts = {
|
|
69
|
-
// ...defaultOptions, // Sets the default options.
|
|
70
|
-
// strictMode:
|
|
71
|
-
// (arg2 as boolean | undefined) ?? defaultOptions.strictMode,
|
|
72
|
-
// failLevel,
|
|
73
|
-
// includeMetadata,
|
|
74
|
-
// }
|
|
75
|
-
// }
|
|
76
|
-
// if (userOpts.includeMetadata && _runtimeInfo.sourceType === 'Inline') {
|
|
77
|
-
// const lineCount = yiniContent.split(/\r?\n/).length // Counts the lines.
|
|
78
|
-
// const sha256 = computeSha256(yiniContent) // NOTE: Compute BEFORE any possible tampering of content.
|
|
79
|
-
// _runtimeInfo.lineCount = lineCount
|
|
80
|
-
// _runtimeInfo.preferredBailSensitivity = userOpts.failLevel
|
|
81
|
-
// _runtimeInfo.sha256 = sha256
|
|
82
|
-
// }
|
|
83
|
-
// // NOTE: Important: Do not trim or mutate the yiniContent here, due
|
|
84
|
-
// // to it will mess up the line numbers in error reporting.
|
|
85
|
-
// if (!yiniContent) {
|
|
86
|
-
// throw new Error('Syntax-Error: Unexpected blank YINI input')
|
|
87
|
-
// }
|
|
88
|
-
// if (!yiniContent.endsWith('\n')) {
|
|
89
|
-
// yiniContent += '\n'
|
|
90
|
-
// }
|
|
91
|
-
// let level: TBailSensitivityLevel = mapFailLevelToBail(
|
|
92
|
-
// userOpts.strictMode,
|
|
93
|
-
// userOpts.failLevel,
|
|
94
|
-
// )
|
|
95
|
-
////////////////
|
|
96
|
-
// const coreOpts: IParseCoreOptions = toCoreOptions(userOpts,level)
|
|
97
38
|
(0, print_1.debugPrint)();
|
|
98
39
|
(0, print_1.debugPrint)('==== Call runParse(..) in runtime ==========================');
|
|
99
|
-
// const result = _parseMain(yiniContent, coreOpts, _runtimeInfo)
|
|
100
40
|
const runtime = new runtime_1.YiniRuntime('Inline');
|
|
101
41
|
const result = (0, optionsFunctions_1.isOptionsObjectForm)(arg2)
|
|
102
42
|
? runtime.runParse(yiniContent, arg2) // Overload #2: (content, options)
|
|
@@ -120,68 +60,8 @@ class YINI {
|
|
|
120
60
|
failLevel = 'auto', includeMetadata = false) {
|
|
121
61
|
(0, print_1.debugPrint)('-> Entered static parseFile(..) in class YINI\n');
|
|
122
62
|
(0, print_1.debugPrint)('Current directory = ' + process.cwd());
|
|
123
|
-
// // Runtime guard to catch illegal/ambiguous calls coming from JS or any-cast code
|
|
124
|
-
// if (
|
|
125
|
-
// isOptionsObjectForm(arg2) &&
|
|
126
|
-
// (failLevel !== 'auto' || includeMetadata !== false)
|
|
127
|
-
// ) {
|
|
128
|
-
// throw new TypeError(
|
|
129
|
-
// 'Invalid call: when providing an options object, do not also pass positional parameters.',
|
|
130
|
-
// )
|
|
131
|
-
// }
|
|
132
|
-
// const mode: TParserMode = inferModeFromArgs(arg2)
|
|
133
|
-
// const defaultOptions = getDefaultOptions(mode)
|
|
134
|
-
// // Normalize to a fully-required options object.
|
|
135
|
-
// let userOpts: Required<ParseOptions>
|
|
136
|
-
// // Required, makes all properties in T required, no undefined.
|
|
137
|
-
// if (isOptionsObjectForm(arg2)) {
|
|
138
|
-
// // Options-object Form.
|
|
139
|
-
// userOpts = {
|
|
140
|
-
// ...defaultOptions, // Sets the default options.
|
|
141
|
-
// ...arg2,
|
|
142
|
-
// }
|
|
143
|
-
// } else {
|
|
144
|
-
// // Positional form.
|
|
145
|
-
// userOpts = {
|
|
146
|
-
// ...defaultOptions, // Sets the default options.
|
|
147
|
-
// strictMode:
|
|
148
|
-
// (arg2 as boolean | undefined) ?? defaultOptions.strictMode,
|
|
149
|
-
// failLevel,
|
|
150
|
-
// includeMetadata,
|
|
151
|
-
// }
|
|
152
|
-
// }
|
|
153
|
-
// if (getFileNameExtension(filePath).toLowerCase() !== '.yini') {
|
|
154
|
-
// console.error('Invalid file extension for YINI file:')
|
|
155
|
-
// console.error(`"${filePath}"`)
|
|
156
|
-
// console.log(
|
|
157
|
-
// 'File does not have a valid ".yini" extension (case-insensitive).',
|
|
158
|
-
// )
|
|
159
|
-
// throw new Error('Error: Unexpected file extension for YINI file')
|
|
160
|
-
// }
|
|
161
|
-
// // ---- Phase 0: I/O ----
|
|
162
|
-
// const timeStartMs = performance.now()
|
|
163
|
-
// // let content = fs.readFileSync(filePath, 'utf8')
|
|
164
|
-
// const rawBuffer = fs.readFileSync(filePath) // Raw buffer for size.
|
|
165
|
-
// const fileByteSize = rawBuffer.byteLength // Byte size in UTF-8.
|
|
166
|
-
// let content = rawBuffer.toString('utf8')
|
|
167
|
-
// const timeEndMs = performance.now()
|
|
168
|
-
// _runtimeInfo.sourceType = 'File'
|
|
169
|
-
// _runtimeInfo.fileName = filePath
|
|
170
|
-
// if (userOpts.includeMetadata) {
|
|
171
|
-
// _runtimeInfo.lineCount = content.split(/\r?\n/).length // Counts the lines.
|
|
172
|
-
// _runtimeInfo.fileByteSize = fileByteSize
|
|
173
|
-
// _runtimeInfo.timeIoMs = +(timeEndMs - timeStartMs).toFixed(3)
|
|
174
|
-
// _runtimeInfo.preferredBailSensitivity = userOpts.failLevel
|
|
175
|
-
// _runtimeInfo.sha256 = computeSha256(content) // NOTE: Compute BEFORE any possible tampering of content.
|
|
176
|
-
// }
|
|
177
|
-
// let hasNoNewlineAtEOF = false
|
|
178
|
-
// if (!content.endsWith('\n')) {
|
|
179
|
-
// content += '\n'
|
|
180
|
-
// hasNoNewlineAtEOF = true
|
|
181
|
-
// }
|
|
182
63
|
(0, print_1.debugPrint)();
|
|
183
64
|
(0, print_1.debugPrint)('==== Call doParseFile(..) in runtime ==========================');
|
|
184
|
-
// const result = _parseMain(yiniContent, coreOpts, _runtimeInfo)
|
|
185
65
|
const runtime = new runtime_1.YiniRuntime('File');
|
|
186
66
|
const result = (0, optionsFunctions_1.isOptionsObjectForm)(arg2)
|
|
187
67
|
? runtime.doParseFile(filePath, arg2) // Overload #2: (content, options)
|
package/dist/YINI.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YINI.js","sourceRoot":"","sources":["../src/YINI.ts"],"names":[],"mappings":";;AAAA,sCAA6C;AAC7C,8DAA0D;AAC1D,sEAAqE;AACrE,4CAA4C;AAO5C,yCAAiE;AAEjE,MAAM,gBAAgB,GAAG,CAAC,CAAA,CAAC,6EAA6E;AAExG
|
|
1
|
+
{"version":3,"file":"YINI.js","sourceRoot":"","sources":["../src/YINI.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getDefaultUserOptions = void 0;
|
|
4
|
-
// export const getDefaultUserOptions = (mode: TParserMode): ParseOptions =>
|
|
5
|
-
// export const getDefaultUserOptions = (mode: TParserMode) =>
|
|
6
|
-
// mode === 'strict' ? DEFAULT_STRICT_OPTS : DEFAULT_LENIENT_OPTS
|
|
7
4
|
const getDefaultUserOptions = (mode) => mode === 'strict' ? { ...DEFAULT_STRICT_OPTS } : { ...DEFAULT_LENIENT_OPTS };
|
|
8
5
|
exports.getDefaultUserOptions = getDefaultUserOptions;
|
|
9
|
-
// Base (mode-agnostic) defaults
|
|
6
|
+
// Base (mode-agnostic) defaults.
|
|
10
7
|
const BASE_DEFAULTS = {
|
|
11
8
|
strictMode: false,
|
|
12
9
|
failLevel: 'auto',
|
|
@@ -14,7 +11,6 @@ const BASE_DEFAULTS = {
|
|
|
14
11
|
includeDiagnostics: false,
|
|
15
12
|
includeTiming: false,
|
|
16
13
|
preserveUndefinedInMeta: false,
|
|
17
|
-
// suppressWarnings: false, // Suppress warnings in console (does not affect warnings in meta data).
|
|
18
14
|
onDuplicateKey: 'error',
|
|
19
15
|
requireDocTerminator: 'optional',
|
|
20
16
|
treatEmptyValueAsNull: 'allow-with-warning',
|
|
@@ -27,7 +23,6 @@ const DEFAULT_LENIENT_OPTS = {
|
|
|
27
23
|
...BASE_DEFAULTS,
|
|
28
24
|
strictMode: false,
|
|
29
25
|
failLevel: 'ignore-errors',
|
|
30
|
-
// suppressWarnings: false, // Suppress warnings in console (does not affect warnings in meta data).
|
|
31
26
|
// Below are options for pure rules:
|
|
32
27
|
onDuplicateKey: 'warn-and-keep-first',
|
|
33
28
|
requireDocTerminator: 'optional',
|
|
@@ -37,7 +32,6 @@ const DEFAULT_STRICT_OPTS = {
|
|
|
37
32
|
...BASE_DEFAULTS,
|
|
38
33
|
strictMode: true,
|
|
39
34
|
failLevel: 'errors',
|
|
40
|
-
// suppressWarnings: false, // Suppress warnings in console (does not affect warnings in meta data).
|
|
41
35
|
// Below are options for pure rules:
|
|
42
36
|
onDuplicateKey: 'error',
|
|
43
37
|
requireDocTerminator: 'optional',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultParserOptions.js","sourceRoot":"","sources":["../../../src/core/options/defaultParserOptions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"defaultParserOptions.js","sourceRoot":"","sources":["../../../src/core/options/defaultParserOptions.ts"],"names":[],"mappings":";;;AAGO,MAAM,qBAAqB,GAAG,CAAC,IAAiB,EAAE,EAAE,CACvD,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,oBAAoB,EAAE,CAAA;AADnE,QAAA,qBAAqB,yBAC8C;AAoBhF,iCAAiC;AACjC,MAAM,aAAa,GAA2B;IAC1C,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,MAAM;IACjB,eAAe,EAAE,KAAK;IACtB,kBAAkB,EAAE,KAAK;IACzB,aAAa,EAAE,KAAK;IACpB,uBAAuB,EAAE,KAAK;IAC9B,cAAc,EAAE,OAAO;IACvB,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,oBAAoB;IAC3C,KAAK,EAAE,KAAK,EAAE,wEAAwE;IACtF,MAAM,EAAE,KAAK;IACb,6CAA6C;IAC7C,YAAY,EAAE,IAAI,EAAE,+CAA+C;CACtE,CAAA;AAED,MAAM,oBAAoB,GAA2B;IACjD,GAAG,aAAa;IAChB,UAAU,EAAE,KAAK;IACjB,SAAS,EAAE,eAAe;IAC1B,oCAAoC;IACpC,cAAc,EAAE,qBAAqB;IACrC,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,OAAO;CACjC,CAAA;AAED,MAAM,mBAAmB,GAA2B;IAChD,GAAG,aAAa;IAChB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,QAAQ;IACnB,oCAAoC;IACpC,cAAc,EAAE,OAAO;IACvB,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,UAAU;CACpC,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.inferModeFromArgs = exports.isOptionsObjectForm = exports.toCoreOptions = void 0;
|
|
4
|
-
const env_1 = require("../../config/env");
|
|
5
4
|
const failLevel_1 = require("./failLevel");
|
|
6
5
|
/**
|
|
7
6
|
* Map user parse options to core options.
|
|
@@ -17,10 +16,13 @@ const toCoreOptions = (userOpts, bailLevel) => {
|
|
|
17
16
|
},
|
|
18
17
|
bailSensitivity: level,
|
|
19
18
|
isIncludeMeta: userOpts.includeMetadata,
|
|
20
|
-
isWithDiagnostics:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
// isWithDiagnostics: isDev() || isDebug() || userOpts.includeDiagnostics,
|
|
20
|
+
isWithDiagnostics: userOpts.includeDiagnostics,
|
|
21
|
+
// isWithTiming: isDev() || isDebug() || userOpts.includeTiming,
|
|
22
|
+
isWithTiming: userOpts.includeTiming,
|
|
23
|
+
// isKeepUndefinedInMeta: isDebug() || userOpts.preserveUndefinedInMeta,
|
|
24
|
+
isKeepUndefinedInMeta: userOpts.preserveUndefinedInMeta,
|
|
25
|
+
isQuiet: userOpts.quiet, // Suppress warnings, etc.
|
|
24
26
|
isSilent: userOpts.silent,
|
|
25
27
|
isThrowOnError: userOpts.throwOnError,
|
|
26
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optionsFunctions.js","sourceRoot":"","sources":["../../../src/core/options/optionsFunctions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"optionsFunctions.js","sourceRoot":"","sources":["../../../src/core/options/optionsFunctions.ts"],"names":[],"mappings":";;;AAOA,2CAAgD;AAEhD;;GAEG;AACI,MAAM,aAAa,GAAG,CACzB,QAAgC,EAChC,SAAiC,EAChB,EAAE;IACnB,MAAM,KAAK,GACP,SAAS,IAAI,IAAA,8BAAkB,EAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAE5E,OAAO;QACH,KAAK,EAAE;YACH,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;YACvD,cAAc,EAAE,QAAQ,CAAC,cAAc;YACvC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB;YACnD,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;SACxD;QACD,eAAe,EAAE,KAAK;QACtB,aAAa,EAAE,QAAQ,CAAC,eAAe;QACvC,0EAA0E;QAC1E,iBAAiB,EAAE,QAAQ,CAAC,kBAAkB;QAC9C,gEAAgE;QAChE,YAAY,EAAE,QAAQ,CAAC,aAAa;QACpC,wEAAwE;QACxE,qBAAqB,EAAE,QAAQ,CAAC,uBAAuB;QACvD,OAAO,EAAE,QAAQ,CAAC,KAAK,EAAE,0BAA0B;QACnD,QAAQ,EAAE,QAAQ,CAAC,MAAM;QACzB,cAAc,EAAE,QAAQ,CAAC,YAAY;KACxC,CAAA;AACL,CAAC,CAAA;AA1BY,QAAA,aAAa,iBA0BzB;AAED,0DAA0D;AACnD,MAAM,mBAAmB,GAAG,CAAC,CAAU,EAAqB,EAAE;IACjE,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,gBAAgB,IAAK,CAAS;YAC9B,sBAAsB,IAAK,CAAS;YACpC,uBAAuB,IAAK,CAAS;YACrC,OAAO,IAAK,CAAS;YACrB,QAAQ,IAAK,CAAS;YACtB,gBAAgB,IAAK,CAAS,CAAC,CACtC,CAAA;AACL,CAAC,CAAA;AAnBY,QAAA,mBAAmB,uBAmB/B;AAEM,MAAM,iBAAiB,GAAG,CAC7B,IAA6B,EAClB,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,IAAqB,CAAC,UAAU,CAAA;QAC5C,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"}
|
|
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.buildResultMetadata = void 0;
|
|
7
|
-
// const pkg = require('../../package.json')
|
|
8
7
|
const package_json_1 = __importDefault(require("../../package.json")); // NOTE: Requires "resolveJsonModule": true (or "esModuleInterop": true).
|
|
9
8
|
const env_1 = require("../config/env");
|
|
10
9
|
const object_1 = require("../utils/object");
|