yini-cli 1.4.0 โ†’ 1.5.0

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/README.md CHANGED
@@ -1,13 +1,12 @@
1
1
  # YINI CLI
2
- > **Readable configuration without indentation pitfalls or JSON verbosity.**
3
2
 
4
- **The official CLI for validating, inspecting, and converting YINI configuration files to JSON or JavaScript, built by the YINI-lang project.**
3
+ The official CLI for validating, inspecting, and converting YINI configuration files to JSON or JavaScript, maintained by the YINI-lang project.
5
4
 
6
- *YINI is an INI-inspired, human-friendly configuration format with real structure, nested sections, comments, and predictable parsing.*
5
+ YINI is an INI-inspired, human-readable configuration format with explicit structure, nested sections, comments, and predictable parsing.
7
6
 
8
- [![npm version](https://img.shields.io/npm/v/yini-cli.svg)](https://www.npmjs.com/package/yini-cli) [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![All Test Suites](https://github.com/YINI-lang/yini-cli/actions/workflows/run-all-tests.yml/badge.svg)](https://github.com/YINI-lang/yini-cli/actions/workflows/run-all-tests.yml) [![Regression Tests](https://github.com/YINI-lang/yini-cli/actions/workflows/run-regression-tests.yml/badge.svg)](https://github.com/YINI-lang/yini-cli/actions/workflows/run-regression-tests.yml) [![CLI Test CI](https://github.com/YINI-lang/yini-cli/actions/workflows/run-cli-test.yml/badge.svg)](https://github.com/YINI-lang/yini-cli/actions/workflows/run-cli-test.yml) [![npm downloads](https://img.shields.io/npm/dm/yini-cli)](https://www.npmjs.com/package/yini-cli)
7
+ YINI is intended to emphasize clarity, readability, explicit structure, predictability, and deterministic parsing, while remaining simple, but not simplistic.
9
8
 
10
- Designed for developers and teams who want human-edited configuration with explicit structure and no indentation-based semantics.
9
+ [![npm version](https://img.shields.io/npm/v/yini-cli.svg)](https://www.npmjs.com/package/yini-cli) [![TypeScript](https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![All Test Suites](https://github.com/YINI-lang/yini-cli/actions/workflows/run-all-tests.yml/badge.svg)](https://github.com/YINI-lang/yini-cli/actions/workflows/run-all-tests.yml) [![Regression Tests](https://github.com/YINI-lang/yini-cli/actions/workflows/run-regression-tests.yml/badge.svg)](https://github.com/YINI-lang/yini-cli/actions/workflows/run-regression-tests.yml) [![CLI Test CI](https://github.com/YINI-lang/yini-cli/actions/workflows/run-cli-test.yml/badge.svg)](https://github.com/YINI-lang/yini-cli/actions/workflows/run-cli-test.yml)
11
10
 
12
11
  ## Quick Start
13
12
 
@@ -37,7 +36,7 @@ YINI CLI requires Node.js **v20 or later**.
37
36
 
38
37
  3. **Test functionality**
39
38
  Create a simple test file, for example: `config.yini`:
40
- ```yini
39
+ ```ini
41
40
  ^ App
42
41
  name = "My App Title"
43
42
  version = "1.2.3"
@@ -82,11 +81,11 @@ Source: [config.yini](./samples/config.yini)
82
81
 
83
82
  ---
84
83
 
85
- ## ๐Ÿ™‹โ€โ™€๏ธ Why YINI?
84
+ ## YINI characteristics
86
85
  - **Indentation-independent structure:** YINI is indentation-independent โ€” whitespace never alters structural meaning.
87
- - **Explicit nesting:** It uses clear header markers (`^`, `^^`, `^^^`) to define hierarchy, making large configurations easier to scan and refactor.
86
+ - **Explicit nesting:** Section markers such as `^`, `^^`, and `^^^` define hierarchy explicitly.
88
87
  - **Multiple data types:** Supports booleans (`true` / `false`, `yes` / `no`, etc.), numbers, lists, and inline objects, with explicit string syntax.
89
- - **Comment support:** YINI supports multiple comment styles (`#`, `//`, `/* ... */`, and `;`), making it easier to document configuration directly in the file.
88
+ - **Comment support:** YINI supports multiple comment styles (`#`, `//`, `/* ... */`, and `;`) for documenting configuration directly in the file.
90
89
  - **Predictable parsing:** Well-defined rules with optional strict and lenient modes for different use cases.
91
90
 
92
91
  ---
@@ -128,10 +127,112 @@ yini parse --help
128
127
 
129
128
  ---
130
129
 
130
+ ## Why YINI?
131
+
132
+ YINI is intended for configuration files where human readability, explicit structure, and predictable parsing are more important than minimal syntax or maximum flexibility.
133
+
134
+ Compared with common configuration formats:
135
+ - **INI:** YINI supports clearer nested sections and typed values.
136
+ - **JSON:** YINI supports comments and is easier to edit by hand.
137
+ - **YAML:** YINI does not use indentation to define structure.
138
+ - **TOML:** YINI uses explicit section markers for hierarchy instead of dotted table names.
139
+
140
+ The same small configuration can be written in several formats:
141
+
142
+ ### YINI
143
+ ```ini
144
+ ^ Application
145
+ name = 'demo'
146
+ environment = 'dev'
147
+
148
+ ^^ Server
149
+ host = 'localhost'
150
+ ports = [8080, 8081]
151
+
152
+ ^^^ TLS
153
+ enabled = true
154
+ mode = 'optional'
155
+ ```
156
+
157
+ - `Application` contains the top-level application settings.
158
+ - `Server` is nested under `Application`.
159
+ - `TLS` is nested under `Server`.
160
+ - The section markers `^` make the nesting explicit. Indentation is optional and not required for structure.
161
+ - Strings can use either `'` or `"`.
162
+
163
+ ### JSON
164
+ ```json
165
+ {
166
+ "Application": {
167
+ "name": "demo",
168
+ "environment": "dev",
169
+ "Server": {
170
+ "host": "localhost",
171
+ "ports": [8080, 8081],
172
+ "TLS": {
173
+ "enabled": true,
174
+ "mode": "optional"
175
+ }
176
+ }
177
+ }
178
+ }
179
+ ```
180
+
181
+ ### YAML
182
+ ```yaml
183
+ Application:
184
+ name: demo
185
+ environment: dev
186
+ Server:
187
+ host: localhost
188
+ ports:
189
+ - 8080
190
+ - 8081
191
+ TLS:
192
+ enabled: true
193
+ mode: optional
194
+ ```
195
+
196
+ ### TOML
197
+ ```toml
198
+ [Application]
199
+ name = "demo"
200
+ environment = "dev"
201
+
202
+ [Application.Server]
203
+ host = "localhost"
204
+ ports = [8080, 8081]
205
+
206
+ [Application.Server.TLS]
207
+ enabled = true
208
+ mode = "optional"
209
+ ```
210
+
211
+ YINI may not be the right choice when you need mature ecosystem support, existing schema tooling, or maximum compatibility with infrastructure that already expects JSON, YAML, or TOML. The format and parser are still alpha-stage and best suited for testing, experiments, and early integration feedback.
212
+
213
+ ---
214
+
215
+ ## Feedback and bug reports
216
+
217
+ If you find a problem, please open an issue on GitHub:
218
+
219
+ - [Report a bug or issue](https://github.com/YINI-lang/yini-cli/issues)
220
+
221
+ When reporting parser behavior, it is helpful to include:
222
+ - The YINI input that caused the issue.
223
+ - The command and options used.
224
+ - The expected result.
225
+ - The actual result or error message.
226
+ - The installed `yini-cli` version.
227
+ - The Node.js version used.
228
+ - The operating system and version used.
229
+
230
+ ---
231
+
131
232
  ## A closer look at YINI
132
233
 
133
234
  Here's a small example showing YINI structure and comments:
134
- ```yini
235
+ ```ini
135
236
  // This is a comment in YINI
136
237
 
137
238
  ^ App // Defines section (group) "App"
@@ -177,10 +278,8 @@ Here's a small example showing YINI structure and comments:
177
278
  }
178
279
  ```
179
280
 
180
- That's it!
181
-
182
- - โ–ถ๏ธ See more on [YINI Homepage](https://yini-lang.org/?utm_source=github&utm_medium=referral&utm_campaign=yini_cli&utm_content=readme_middle).
183
- - โ–ถ๏ธ Link to [Demo Apps](https://github.com/YINI-lang/yini-demo-apps/tree/main) with complete basic usage.
281
+ - [YINI Homepage](https://yini-lang.org/?utm_source=github&utm_medium=referral&utm_campaign=yini_cli&utm_content=readme_middle).
282
+ - [YINI Demo Apps](https://github.com/YINI-lang/yini-demo-apps/tree/main) with usage examples.
184
283
 
185
284
  ---
186
285
 
@@ -196,8 +295,8 @@ The `parse` command supports multiple output formats:
196
295
  | `yini parse config.yini --js` | JavaScript object | JavaScript-style object (unquoted keys, single quotes). |
197
296
  | `yini parse config.yini -o out.json` | File output | Writes formatted JSON to file (default format). |
198
297
 
199
- >๐Ÿ’ก `--js` and `--compact` are mutually exclusive.
200
- >๐Ÿ’ก Tip: You can combine --output with any style flag to control both formatting and destination.
298
+ > `--js` and `--compact` are mutually exclusive.
299
+ > `--output` can be combined with a style flag to control both formatting and destination.
201
300
 
202
301
  ### Output File Handling
203
302
 
@@ -237,20 +336,20 @@ Use `--overwrite` to force replacement.
237
336
  ---
238
337
 
239
338
  ## Contributing
240
- Contributions, bug reports, and feedback are welcome. Even small improvements or suggestions are appreciated.
339
+ Bug reports, feedback, and contributions are welcome.
241
340
 
242
- If this tool is useful to you, a GitHub star helps more people discover the project and supports future development.
341
+ GitHub Issues and Discussions are available for feedback and project discussion.
243
342
 
244
343
  ---
245
344
 
246
345
  ## License
247
- This project is licensed under the Apache-2.0 license โ€” see the [LICENSE](./LICENSE) file for details.
248
-
249
- In this project on GitHub, the `libs` directory contains third party software and each is licensed under its own license which is described in its own license file under the respective directory under `libs`.
346
+ This project is licensed under the Apache License 2.0 โ€” see the [LICENSE](./LICENSE) file for details.
250
347
 
251
348
  ---
252
349
 
253
350
  **^YINI โ‰ก**
254
- > Readable like INI. Structured like JSON. No indentation surprises.
351
+ > YINI is a human-readable configuration format designed for clarity, readability, explicit structure, predictability, and deterministic parsing.
352
+ >
353
+ > See the specification for syntax and format details.
255
354
 
256
355
  [yini-lang.org](https://yini-lang.org/?utm_source=github&utm_medium=referral&utm_campaign=yini_cli&utm_content=readme_footer) ยท [YINI-lang on GitHub](https://github.com/YINI-lang)
@@ -1,6 +1,6 @@
1
1
  // src/commands/parseCommand.ts
2
- import fs from 'node:fs';
3
- import path from 'node:path';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
4
  import YINI from 'yini-parser';
5
5
  import { getSerializer } from '../serializers/index.js';
6
6
  import { debugPrint, printObject } from '../utils/print.js';
@@ -153,6 +153,36 @@ const hasMeaningfulParsedData = (value) => {
153
153
  return false;
154
154
  return Object.keys(value).length > 0;
155
155
  };
156
+ const formatParserDiagnostics = (parsed) => {
157
+ const errors = parsed.meta?.diagnostics?.errors?.payload ?? [];
158
+ return errors.map((diagnostic) => {
159
+ if (typeof diagnostic === 'string') {
160
+ return diagnostic;
161
+ }
162
+ if (!diagnostic || typeof diagnostic !== 'object') {
163
+ return String(diagnostic);
164
+ }
165
+ const issue = diagnostic;
166
+ const message = issue.message ?? issue.code ?? 'Unknown parser error';
167
+ const location = issue.line != null
168
+ ? `line ${issue.line}${issue.column != null ? `:${issue.column}` : ''}: `
169
+ : '';
170
+ return `${location}${String(message)}`;
171
+ });
172
+ };
173
+ const printParseFailure = (commandOptions, parsed) => {
174
+ const messages = formatParserDiagnostics(parsed);
175
+ if (messages.length === 0) {
176
+ printStderr(commandOptions, 'Syntax error: failed to parse YINI input.');
177
+ return;
178
+ }
179
+ for (const message of messages) {
180
+ const normalizedMessage = message.toLowerCase().includes('syntax error')
181
+ ? message
182
+ : `Syntax error: ${message}`;
183
+ printStderr(commandOptions, normalizedMessage);
184
+ }
185
+ };
156
186
  const doParseFile = (file, commandOptions, outputFormat, outputFile = '') => {
157
187
  debugPrint('File = ' + file);
158
188
  debugPrint('outputFormat = ' + outputFormat);
@@ -187,9 +217,9 @@ const doParseFile = (file, commandOptions, outputFormat, outputFile = '') => {
187
217
  const hasUsableOutput = hasMeaningfulParsedData(parsedData);
188
218
  const hasErrors = errorCount > 0;
189
219
  const bestEffort = !!commandOptions.bestEffort;
190
- // const strictMode = resolveStrictMode(commandOptions)
191
220
  const shouldFailHard = hasErrors && !bestEffort && (strictMode || !hasUsableOutput);
192
221
  if (shouldFailHard) {
222
+ printParseFailure(commandOptions, parsedWithMeta);
193
223
  process.exit(1);
194
224
  }
195
225
  const serializer = getSerializer(outputFormat);
package/dist/index.js CHANGED
@@ -79,7 +79,7 @@ const parseCmd = program
79
79
  .option('--yaml', 'Output as YAML.')
80
80
  .option('--xml', 'Output as XML.')
81
81
  // File handling options.
82
- .option('-o, --output <file>', 'Write output to <file>. By default, an existing file is only overwritten if it is older than the input YINI file.')
82
+ .option('-o, --output <file>', 'Write output to <file>. By default, an existing output file is only overwritten if it is older than the input YINI file.')
83
83
  .option('--overwrite', 'Always overwrite the output file, even if it is newer than the input YINI file.')
84
84
  .option('--no-overwrite', 'Fail if the output file already exists.')
85
85
  // Behavior options.
@@ -0,0 +1,130 @@
1
+ # CHANGELOG
2
+
3
+ ## 1.5.0 - 2026 June
4
+ - Bumped dependency `yini-parser` to `^1.6.0` with YINI Specification RC 6 parser support, which brings:
5
+ - Improved parser diagnostics and structured issue reporting.
6
+ - Support for the latest **RC 6** mode-declaration behavior.
7
+ - Improved handling of duplicate sections and duplicate keys.
8
+ - Improved section marker parsing, including marker separators.
9
+ - Improved string concatenation validation.
10
+ - Improved EOF handling for files without a final trailing newline.
11
+ - And more.
12
+
13
+ - **Improved:** Included `docs/CHANGELOG.md` in the package.
14
+ - Fixed CLI parse error reporting so parse failures are printed by `yini-cli` instead of relying on the parser library to write diagnostics directly to `stderr`.
15
+ - Updated validation behavior to support the newer parser diagnostics model, including `passed-with-warnings` results for valid files that produce warnings.
16
+ - Updated tests and fixtures for the newer parser behavior, including coverage for valid files without a final newline at EOF.
17
+ - Confirmed that `yini-cli` remains quiet by default for JSON validation output, while text-mode validation still reports user-facing diagnostics where appropriate.
18
+
19
+ ## 1.4.0 - 2026 Apr
20
+ - Bumped dependency `yini-parser` to `^1.5.0` which brings:
21
+ - **Updated** to match **YINI Specification RC.5**: includes synced grammar files and the latest section-header parsing rules.
22
+ - **Stricter**, more predictable strict mode: now requires exactly one explicit top-level section and a closing `/END` terminator.
23
+ - **Improved** parser reliability overall: better handling of null/empty values, cleaner `throwOnError` behavior, and expanded validation and test coverage.
24
+ - **Added:** New `validate` command.
25
+ ```txt
26
+ Validate one or more YINI files.
27
+
28
+ <file> Validate a single file.
29
+ <directory> Validate all .yini files in the directory.
30
+
31
+ You can provide multiple files and directories, separated by spaces.
32
+
33
+ Options:
34
+ --warnings-as-errors Treat warnings as errors for exit code purposes.
35
+ --stats In text mode, stats only shown when file mode validates exactly one file.
36
+ --format <type> Output format for validation results: text | json (choices: "text", "json",
37
+ default: "text")
38
+ --fail-fast Stop after first file that fails validation.
39
+ --max-errors <n> Stop after N total errors (across files).
40
+ --no-recursive Do not scan subdirectories.
41
+ -h, --help Display full help for all commands.
42
+ ```
43
+ - **Changed:** The short flag for strict mode is now `-S` (capital). Lowercase `-s` is now reserved for `--silent`, which aligns better with common CLI conventions.
44
+ - **Improved:** Improved the usability of the `parse` command.
45
+ - **Improved:** Test fixtures and CLI tests were reorganized for better clarity, separation, and Windows-safe argument handling.
46
+
47
+ ## 1.3.4 - 2026 Apr
48
+ - **Promoted** YINI CLI is now considered stable (non-beta) after iterative beta releases and refinements.
49
+ - **Fixed:** Rebuilt the project and reduced reported from 9 vulnerabilities (5 moderate, 4 high) to 0.
50
+ - **Updated:** Bumped dependency `yini-parser` to `^1.4.3`.
51
+
52
+ ## 1.3.4-beta - 2026 Mar
53
+ - **Updated:** Bumped dependency `yini-parser` to `^1.4.3-beta` that consists of:
54
+ - Fixed: Error messages and thrown parse errors now include correct line and column information again.
55
+ - Improved: Syntax and string-related parse errors are now clearer and more consistent.
56
+ - Improved: Reduced some duplicate follow-up errors during recovery after invalid input.
57
+
58
+ ## 1.3.3-beta - 2026 Mar
59
+ - **Updated:** Bumped dependency `yini-parser` to `^1.4.2-beta`.
60
+
61
+ ## 1.3.2-beta - 2026 Mar
62
+ - **Updated:** Bumped dependency `yini-parser` to `^1.4.1-beta`.
63
+ - **Fixed:** `parse` now returns a non-zero exit code for invalid input that does not produce usable parsed output.
64
+ - **Improved:** Better alignment with the latest parser diagnostics and recovery behavior.
65
+ - **Improved:** `parse` command file output behavior.
66
+ - Added fast pre-check to skip parsing when the destination is newer than the source.
67
+ - Centralized output write policy and skip detection.
68
+ - **Improved:** Avoid unnecessary file rewrites when generated output is unchanged.
69
+
70
+ ## 1.3.1-beta - 2026 Mar
71
+ - **Improved:** `parse` command file write policy.
72
+ - Destination files newer than the source are now **skipped with a warning** instead of causing an error.
73
+ - Helps prevent unnecessary build failures in CI pipelines and static site generators (e.g. Astro).
74
+ - **Improved:** Output files are only rewritten when the generated content has actually changed, reducing redundant file writes.
75
+
76
+ ## 1.3.0-beta - 2026 Mar
77
+ - **Updated:** Bumped dependency `yini-parser` to `^1.4.0-beta`.
78
+ - **Added:** CLI now supports parsing/validating **Classic (C) strings** (escape sequences) via the updated parser.
79
+ - **Note:** Default (raw) strings are unchanged (backslashes `\` and `\n` remain as-is unless using `c"..."` / `C'...'`).
80
+ - **Added:** New output formats for the `parse` command:
81
+ - `--yaml` to export parsed data as **YAML**
82
+ - `--xml` to export parsed data as **XML**
83
+ - **Refactored:** Output format handling internally to improve robustness, simplify debugging, and make the code easier to test and maintain.
84
+
85
+ ## 1.2.1-beta - 2026 Feb
86
+ - **Improved:** `validate` command:
87
+ - Strengthened `validate` command diagnostics handling and metadata guards.
88
+ - Replaced unsafe internal assertions with controlled error handling.
89
+ - Improved silent mode behavior and exit code consistency.
90
+
91
+ ## 1.2.0-beta - 2026 Feb
92
+ - **Improved:** Updated `--help` to display full help for all commands, while preserving command-specific help through `yini help <command>`.
93
+ - **Changed:** Showing extended information now uses the `info` command only. The global `--info` option has been removed โ€” please use `yini info` instead.
94
+ - **Updated:** `parse` command:
95
+ - Deprecated `--pretty` (JSON is now the default; use `--json` explicitly if desired).
96
+ - `--compact` now outputs compact JSON (no whitespace).
97
+ - Added `--js` option to output JavaScript-style objects.
98
+ - Improved `--output` file handling:
99
+ - By default, the output file is written only if it does not exist or is older than the source YINI file.
100
+ - Added `--overwrite` to always replace existing files.
101
+ - Added `--no-overwrite` to prevent replacing existing files.
102
+
103
+ ## 1.1.1-beta - 2025 Dec
104
+ - **Updated:** Updated to use the latest YINI Parser version `1.3.2-beta` from `1.3.0-beta`.
105
+
106
+ ## 1.1.0-beta - 2025 Sep
107
+ - **New command:** New command `validate` to validate parsing of a YINI file.
108
+ - **Added** --strict as global option, to enable parsing in strict mode.
109
+ - **Added** -q, --quiet as global option, to reduce output (show only errors).
110
+ - **Added** --silent as global option, will suppress all output (even errors, exit code only).
111
+ - **CI/Tooling (GitHub Actions):** Added security and quality checks:
112
+ - **Security:** CodeQL, dependency checke (`npm audit`) + lockfile-lint, Gitleaks (SARIF), Semgrep (SARIF).
113
+ - **CI CLI test**.
114
+ - **Regression tests:** run across a Node/OS matrix.
115
+ - **Releases:** npm publish with provenance (tag-driven).
116
+ - Removed per-command --strict flags.
117
+
118
+ ## 1.0.3-beta - 2025 Sep
119
+ - **Updated:** Now uses latest `yini-parser` library `v1.1.0-beta`, for greatly improved parsing, compatibility, and error handling with more descriptive and accurate error messages.
120
+
121
+ ## 1.0.2-beta - 2025 Aug
122
+ - Bumped internal YINI Parser library to version 1.0.2-beta, which fixes and improves number parsing to fully support negative values and edge cases for integers, floats, hexadecimal, binary, octal, duodecimal, and exponential numbers.
123
+ - Added this file into the repo.
124
+
125
+ ---
126
+
127
+ **^YINI โ‰ก**
128
+ > A simple, structured, and human-friendly configuration format.
129
+
130
+ [yini-lang.org](https://yini-lang.org) ยท [YINI on GitHub](https://github.com/YINI-lang)
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yini-cli",
3
- "version": "1.4.0",
4
- "description": "Official YINI CLI for validating, parsing, and converting a human-friendly config format with real structure, nested sections, and predictable strict or lenient parsing.",
3
+ "version": "1.5.0",
4
+ "description": "Official command-line tool for validating and converting YINI files โ€” YINI is an INI-inspired, human-readable configuration format with explicit structure and predictable parsing.",
5
5
  "keywords": [
6
6
  "yini",
7
7
  "cli",
@@ -26,19 +26,20 @@
26
26
  }
27
27
  },
28
28
  "bin": {
29
- "yini": "./dist/index.js"
29
+ "yini": "dist/index.js"
30
30
  },
31
31
  "homepage": "https://yini-lang.org/",
32
32
  "license": "Apache-2.0",
33
33
  "files": [
34
34
  "dist/",
35
35
  "README.md",
36
+ "docs/CHANGELOG.md",
36
37
  "LICENSE",
37
38
  "sample.yini"
38
39
  ],
39
40
  "repository": {
40
41
  "type": "git",
41
- "url": "https://github.com/YINI-lang/yini-cli.git"
42
+ "url": "git+https://github.com/YINI-lang/yini-cli.git"
42
43
  },
43
44
  "private": false,
44
45
  "scripts": {
@@ -51,7 +52,7 @@
51
52
  "run:parse": "npm run start -- parse sample.yini",
52
53
  "run:validate": "npm run start -- validate sample.yini",
53
54
  "test:smoke": "vitest tests/smoke",
54
- "test:general": "vitest tests/general",
55
+ "test:general": "vitest tests/global-options.test.ts",
55
56
  "test": "vitest run",
56
57
  "test:debug": "cross-env isDebug=1 vitest run --reporter=verbose",
57
58
  "test:general:debug": "cross-env isDebug=1 npm run test:general",
@@ -63,7 +64,7 @@
63
64
  "format": "prettier --check .",
64
65
  "format:fix": "prettier --write .",
65
66
  "build": "tsc",
66
- "clean": "rm -rf dist",
67
+ "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
67
68
  "prepare": "npm run build",
68
69
  "prepublishOnly": "npm run lint && npm test && npm run build"
69
70
  },
@@ -72,12 +73,12 @@
72
73
  "commander": "^14.0.1",
73
74
  "xmlbuilder2": "^4.0.3",
74
75
  "yaml": "^2.8.2",
75
- "yini-parser": "^1.5.0"
76
+ "yini-parser": "^1.6.0"
76
77
  },
77
78
  "devDependencies": {
78
79
  "@eslint/js": "^9.31.0",
79
80
  "@ianvs/prettier-plugin-sort-imports": "^4.4.2",
80
- "@types/node": "^22.15.3",
81
+ "@types/node": "^22.19.19",
81
82
  "@typescript-eslint/eslint-plugin": "^8.37.0",
82
83
  "@typescript-eslint/parser": "^8.37.0",
83
84
  "cross-env": "^7.0.3",
@@ -87,7 +88,7 @@
87
88
  "execa": "^9.6.0",
88
89
  "husky": "^9.1.7",
89
90
  "lint-staged": "^16.0.0",
90
- "nyc": "^17.1.0",
91
+ "nyc": "^18.0.0",
91
92
  "prettier": "^3.5.3",
92
93
  "tsx": "^4.7.0",
93
94
  "typescript": "^5.8.3",
@@ -95,10 +96,10 @@
95
96
  },
96
97
  "lint-staged": {
97
98
  "src/**/*.{js,jsx,json,ts,tsx,css,scss}": [
98
- "prettier --config ./.prettierrc --write"
99
+ "prettier --config ./prettier.config.cjs --write"
99
100
  ]
100
101
  },
101
102
  "engines": {
102
- "node": ">=13"
103
+ "node": ">=18"
103
104
  }
104
105
  }