optionkit 0.8.1 → 0.8.3
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 +45 -7
- package/dist/_generated/metadata.d.ts +4 -0
- package/dist/_generated/metadata.d.ts.map +1 -0
- package/dist/_generated/metadata.js +4 -0
- package/dist/_generated/metadata.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/optionkit.d.ts +11 -1
- package/dist/optionkit.d.ts.map +1 -1
- package/dist/optionkit.js +106 -37
- package/dist/optionkit.js.map +1 -1
- package/package.json +10 -3
package/README.md
CHANGED
|
@@ -53,6 +53,26 @@ const program = f.program({ name: 'app' }).router({ serve, status });
|
|
|
53
53
|
await program.parseAsync(process.argv);
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
+
### Package version
|
|
57
|
+
|
|
58
|
+
Pass the CLI package's generated version to validate it as SemVer and add
|
|
59
|
+
`-v, --version` when a command or program is parsed as the root route:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
import { PACKAGE_VERSION } from './_generated/metadata.js';
|
|
63
|
+
|
|
64
|
+
const { f, z } = await createOptionKit({
|
|
65
|
+
moduleUrl: import.meta.url,
|
|
66
|
+
version: PACKAGE_VERSION,
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Optionkit never infers a version from a consuming project's `package.json`.
|
|
71
|
+
Automatic short-option generation reserves `-v` whenever a version is active,
|
|
72
|
+
and invalid versions fail during `createOptionKit()`. Mounted subcommands do not
|
|
73
|
+
inherit this option, so wrapper commands can pass their executable's `--version`
|
|
74
|
+
through unchanged.
|
|
75
|
+
|
|
56
76
|
### Environment values
|
|
57
77
|
|
|
58
78
|
Scalar values keep Fireargs' normal coercion. Array, tuple, object, and record
|
|
@@ -81,7 +101,8 @@ const run = f.command({ name: 'run', passThroughArguments: true })
|
|
|
81
101
|
```
|
|
82
102
|
|
|
83
103
|
Use `{ description: '...' }` instead of `true` to change the generated positional
|
|
84
|
-
help text.
|
|
104
|
+
help text. The wrapper's own `--help` remains active before the separator; place
|
|
105
|
+
`--help` after `--` to send it to the executable.
|
|
85
106
|
|
|
86
107
|
## Override only what differs
|
|
87
108
|
|
|
@@ -97,8 +118,8 @@ const kit = await createOptionKit({
|
|
|
97
118
|
```
|
|
98
119
|
|
|
99
120
|
Available Optionkit-level controls include `projectName`, `environmentPrefix`,
|
|
100
|
-
`shortFlags`, `booleanNegations`, `reservedShortFlags`, per-field metadata,
|
|
101
|
-
`invocationDirectory`, and an explicit `cacheDirectory`. A parser registered through `f.option({ parse })`
|
|
121
|
+
`version`, `shortFlags`, `booleanNegations`, `reservedShortFlags`, per-field metadata,
|
|
122
|
+
`invocationDirectory`, `errorFormatter`, and an explicit `cacheDirectory`. A parser registered through `f.option({ parse })`
|
|
102
123
|
or the `fields` setting is forwarded unchanged and bypasses automatic structured
|
|
103
124
|
decoding.
|
|
104
125
|
|
|
@@ -120,11 +141,21 @@ and installs the catalog ranges from the consuming package root without changing
|
|
|
120
141
|
the manifest or lockfile. `cacheDirectory` explicitly opts into an isolated
|
|
121
142
|
installation; there is no default version cache.
|
|
122
143
|
|
|
123
|
-
`@antfu/install-pkg`
|
|
124
|
-
and
|
|
144
|
+
`@antfu/install-pkg` and `semver` are Optionkit's hard runtime dependencies.
|
|
145
|
+
Fireargs and Zod are optional peers, while `clean-stack` is the default optional
|
|
146
|
+
error formatter. Their ranges
|
|
125
147
|
live in the package catalog and are generated into `src/_generated/catalog.ts` as
|
|
126
|
-
a one-to-one runtime mirror.
|
|
127
|
-
|
|
148
|
+
a one-to-one runtime mirror.
|
|
149
|
+
|
|
150
|
+
Set `errorFormatter` to a package name or `{ name, specifier }` to try another
|
|
151
|
+
formatter. Optionkit looks for a default, `formatError`, or `format` function
|
|
152
|
+
export. It first imports the package from the CLI project, then tries a no-save
|
|
153
|
+
installation through `@antfu/install-pkg` and imports it again. Import,
|
|
154
|
+
installation, export-shape, and formatter-execution failures never block the CLI;
|
|
155
|
+
formatting falls back to the original stack. Set `errorFormatter: false` to skip
|
|
156
|
+
the optional integration.
|
|
157
|
+
|
|
158
|
+
Rejected handlers and renderers are formatted at the `parseAsync` boundary,
|
|
128
159
|
written to the command's configured error output, and set exit code 1 by default.
|
|
129
160
|
Set `formatErrors: false` to keep rejection handling in the consumer. The returned
|
|
130
161
|
`formatError(error)` uses the same formatter and falls back to the original stack.
|
|
@@ -134,6 +165,13 @@ resolved from the same location as the CLI adapter. `resolvePackage` and
|
|
|
134
165
|
`importPackageIfAvailable` expose the same resolve-first behavior for other
|
|
135
166
|
optional integrations and only suppress a genuinely missing package.
|
|
136
167
|
|
|
168
|
+
Optionkit also exposes its Projen-generated package identity from
|
|
169
|
+
`optionkit/metadata`:
|
|
170
|
+
|
|
171
|
+
```ts
|
|
172
|
+
import { PACKAGE_NAME, PACKAGE_VERSION } from 'optionkit/metadata';
|
|
173
|
+
```
|
|
174
|
+
|
|
137
175
|
## License
|
|
138
176
|
|
|
139
177
|
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/_generated/metadata.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,eAAO,MAAM,YAAY,EAAG,WAAoB,CAAC;AACjD,eAAO,MAAM,eAAe,EAAG,OAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/_generated/metadata.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,MAAM,CAAC,MAAM,YAAY,GAAG,WAAoB,CAAC;AACjD,MAAM,CAAC,MAAM,eAAe,GAAG,OAAgB,CAAC","sourcesContent":["/** Package identity synthesized from the shared Projen configuration. */\nexport const PACKAGE_NAME = \"optionkit\" as const;\nexport const PACKAGE_VERSION = \"0.8.3\" as const;"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createOptionKit, type ArgumentConfiguration, type CliCommand, type CliParseOptions, type CliProgram, type CliRoute, type CommandConfiguration, type CreateOptionKitSettings, type FieldBuilder, type OptionConfiguration, type OptionKit, type OptionKitAdapter, type OptionKitLogger, type ProgramConfiguration, } from './optionkit.js';
|
|
1
|
+
export { createOptionKit, type ArgumentConfiguration, type CliCommand, type CliParseOptions, type CliProgram, type CliRoute, type CommandConfiguration, type CreateOptionKitSettings, type ErrorFormatterPackage, type FieldBuilder, type OptionConfiguration, type OptionKit, type OptionKitAdapter, type OptionKitLogger, type ProgramConfiguration, } from './optionkit.js';
|
|
2
2
|
export { importPackageIfAvailable, resolvePackage } from './resolve.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,GAehB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC","sourcesContent":["export {\n createOptionKit,\n type ArgumentConfiguration,\n type CliCommand,\n type CliParseOptions,\n type CliProgram,\n type CliRoute,\n type CommandConfiguration,\n type CreateOptionKitSettings,\n type ErrorFormatterPackage,\n type FieldBuilder,\n type OptionConfiguration,\n type OptionKit,\n type OptionKitAdapter,\n type OptionKitLogger,\n type ProgramConfiguration,\n} from './optionkit.js';\nexport { importPackageIfAvailable, resolvePackage } from './resolve.js';\n"]}
|
package/dist/optionkit.d.ts
CHANGED
|
@@ -90,6 +90,12 @@ export interface OptionKitAdapter {
|
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
92
|
export type OptionKitLogger = (message: string, details?: Readonly<Record<string, unknown>>) => void;
|
|
93
|
+
export interface ErrorFormatterPackage {
|
|
94
|
+
/** Package name imported at runtime. */
|
|
95
|
+
name: string;
|
|
96
|
+
/** Package specifier passed to install-pkg. Defaults to `name`. */
|
|
97
|
+
specifier?: string;
|
|
98
|
+
}
|
|
93
99
|
export interface CreateOptionKitSettings {
|
|
94
100
|
/** Module URL for the consuming CLI; used to find its nearest package.json. */
|
|
95
101
|
moduleUrl?: string | URL;
|
|
@@ -97,6 +103,8 @@ export interface CreateOptionKitSettings {
|
|
|
97
103
|
packageRoot?: string;
|
|
98
104
|
/** Override the consuming package name used to derive the environment prefix. */
|
|
99
105
|
projectName?: string;
|
|
106
|
+
/** Add `-v, --version` from an explicit SemVer supplied by the CLI package. */
|
|
107
|
+
version?: string | false;
|
|
100
108
|
/** Override the generated prefix, or disable environment bindings. */
|
|
101
109
|
environmentPrefix?: string | false;
|
|
102
110
|
/** Generate non-conflicting single-letter flags. Defaults to true. */
|
|
@@ -113,6 +121,8 @@ export interface CreateOptionKitSettings {
|
|
|
113
121
|
cacheDirectory?: string;
|
|
114
122
|
/** Optional diagnostics sink. optionkit never writes install progress itself. */
|
|
115
123
|
log?: OptionKitLogger;
|
|
124
|
+
/** Best-effort stack formatter package. Defaults to the catalog's clean-stack. */
|
|
125
|
+
errorFormatter?: string | ErrorFormatterPackage | false;
|
|
116
126
|
/** Format rejected handlers and renderers at the parse boundary. Defaults to true. */
|
|
117
127
|
formatErrors?: boolean;
|
|
118
128
|
}
|
|
@@ -127,7 +137,7 @@ export interface OptionKit {
|
|
|
127
137
|
packageRoot: string;
|
|
128
138
|
/** Where the CLI dependencies were resolved or installed. */
|
|
129
139
|
dependencySource: 'cache' | 'package-root' | 'project';
|
|
130
|
-
/** Render an error with
|
|
140
|
+
/** Render an error with the optional formatter when it is available. */
|
|
131
141
|
formatError: (error: unknown) => string;
|
|
132
142
|
}
|
|
133
143
|
/**
|
package/dist/optionkit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optionkit.d.ts","sourceRoot":"","sources":["../src/optionkit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"optionkit.d.ts","sourceRoot":"","sources":["../src/optionkit.ts"],"names":[],"mappings":"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"}
|
package/dist/optionkit.js
CHANGED
|
@@ -3,26 +3,31 @@ import { access, mkdir, readFile, realpath, rm, stat, writeFile } from 'node:fs/
|
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
import { fileURLToPath } from 'node:url';
|
|
5
5
|
import { detectPackageManager, installPackage } from '@antfu/install-pkg';
|
|
6
|
+
import { valid as validSemver } from 'semver';
|
|
6
7
|
import { catalog } from './_generated/catalog.js';
|
|
7
8
|
import { importPackageIfAvailable, resolvePackage } from './resolve.js';
|
|
8
9
|
const REQUIRED_CLI_DEPENDENCY_SPECIFIERS = [
|
|
9
10
|
`fireargs@${catalog.fireargs}`,
|
|
10
11
|
`zod@${catalog.zod}`,
|
|
11
12
|
];
|
|
12
|
-
const
|
|
13
|
+
const DEFAULT_ERROR_FORMATTER = {
|
|
14
|
+
name: 'clean-stack',
|
|
15
|
+
specifier: `clean-stack@${catalog['clean-stack']}`,
|
|
16
|
+
};
|
|
13
17
|
const installPromises = new Map();
|
|
14
|
-
const
|
|
18
|
+
const formatterPromises = new Map();
|
|
15
19
|
/**
|
|
16
20
|
* Load the CLI adapter on demand. Every command input is transparently augmented
|
|
17
21
|
* with environment bindings and conflict-free short flags.
|
|
18
22
|
*/
|
|
19
23
|
export async function createOptionKit(settings = {}) {
|
|
20
24
|
const packageInfo = await consumingPackage(settings);
|
|
25
|
+
const version = resolvePackageVersion(settings.version);
|
|
21
26
|
const loaded = await loadDependencies(packageInfo.root, settings);
|
|
22
27
|
const environmentPrefix = resolveEnvironmentPrefix(settings.environmentPrefix, settings.projectName ?? packageInfo.name);
|
|
23
|
-
const errorFormatter = (error) => formatError(error, loaded.
|
|
28
|
+
const errorFormatter = (error) => formatError(error, loaded.errorFormatter);
|
|
24
29
|
return {
|
|
25
|
-
f: createAdapter(loaded.f, loaded.z, environmentPrefix, settings, errorFormatter),
|
|
30
|
+
f: createAdapter(loaded.f, loaded.z, environmentPrefix, version, settings, errorFormatter),
|
|
26
31
|
z: loaded.z,
|
|
27
32
|
environmentPrefix,
|
|
28
33
|
packageRoot: packageInfo.root,
|
|
@@ -41,6 +46,15 @@ async function consumingPackage(settings) {
|
|
|
41
46
|
}
|
|
42
47
|
return { name, root };
|
|
43
48
|
}
|
|
49
|
+
function resolvePackageVersion(configured) {
|
|
50
|
+
if (configured === undefined || configured === false)
|
|
51
|
+
return undefined;
|
|
52
|
+
const version = validSemver(configured);
|
|
53
|
+
if (!version) {
|
|
54
|
+
throw new TypeError(`version must be valid SemVer; received ${JSON.stringify(configured)}.`);
|
|
55
|
+
}
|
|
56
|
+
return version;
|
|
57
|
+
}
|
|
44
58
|
async function discoveryStart(moduleUrl) {
|
|
45
59
|
const candidate = moduleUrl === undefined
|
|
46
60
|
? process.argv[1] ?? process.cwd()
|
|
@@ -87,10 +101,9 @@ async function loadDependencies(packageRoot, settings) {
|
|
|
87
101
|
const installSource = settings.cacheDirectory ? 'cache' : 'package-root';
|
|
88
102
|
if (settings.cacheDirectory)
|
|
89
103
|
await ensureCachePackage(installRoot);
|
|
104
|
+
const errorFormatter = await loadErrorFormatter(packageRoot, installRoot, packageManager, settings.errorFormatter, settings.log);
|
|
90
105
|
if (project) {
|
|
91
|
-
|
|
92
|
-
const cleanStack = projectCleanStack ?? await cachedCleanStack(installRoot, packageManager, settings.log);
|
|
93
|
-
return { ...project, cleanStack, source: 'project' };
|
|
106
|
+
return { ...project, errorFormatter, source: 'project' };
|
|
94
107
|
}
|
|
95
108
|
let installation = installPromises.get(installRoot);
|
|
96
109
|
if (!installation) {
|
|
@@ -98,7 +111,7 @@ async function loadDependencies(packageRoot, settings) {
|
|
|
98
111
|
installPromises.set(installRoot, installation);
|
|
99
112
|
}
|
|
100
113
|
try {
|
|
101
|
-
return await installation;
|
|
114
|
+
return { ...await installation, errorFormatter };
|
|
102
115
|
}
|
|
103
116
|
catch (error) {
|
|
104
117
|
installPromises.delete(installRoot);
|
|
@@ -106,10 +119,9 @@ async function loadDependencies(packageRoot, settings) {
|
|
|
106
119
|
}
|
|
107
120
|
}
|
|
108
121
|
async function installAndImport(installRoot, packageManager, source, log) {
|
|
109
|
-
const cleanStack = await cachedCleanStack(installRoot, packageManager, log);
|
|
110
122
|
const existing = await importDependencies(installRoot);
|
|
111
123
|
if (existing)
|
|
112
|
-
return { ...existing,
|
|
124
|
+
return { ...existing, source };
|
|
113
125
|
log?.('Installing required CLI dependencies.', {
|
|
114
126
|
installDirectory: installRoot,
|
|
115
127
|
packages: REQUIRED_CLI_DEPENDENCY_SPECIFIERS,
|
|
@@ -120,7 +132,7 @@ async function installAndImport(installRoot, packageManager, source, log) {
|
|
|
120
132
|
}
|
|
121
133
|
catch (error) {
|
|
122
134
|
log?.('Could not install required CLI dependencies.', {
|
|
123
|
-
error: formatError(error
|
|
135
|
+
error: formatError(error),
|
|
124
136
|
});
|
|
125
137
|
throw error;
|
|
126
138
|
}
|
|
@@ -130,7 +142,7 @@ async function installAndImport(installRoot, packageManager, source, log) {
|
|
|
130
142
|
throw new Error(`CLI dependencies were installed but ${unresolved.join(' and ') || 'their exports'} could not be resolved from ${installRoot}.`);
|
|
131
143
|
}
|
|
132
144
|
log?.('Required CLI dependencies are ready.', { installDirectory: installRoot });
|
|
133
|
-
return { ...installed,
|
|
145
|
+
return { ...installed, source };
|
|
134
146
|
}
|
|
135
147
|
async function importDependencies(root) {
|
|
136
148
|
const [adapter, zod] = await Promise.all([
|
|
@@ -148,53 +160,93 @@ async function importDependencies(root) {
|
|
|
148
160
|
}
|
|
149
161
|
return { f: adapter.f, z: zod.z };
|
|
150
162
|
}
|
|
151
|
-
async function
|
|
152
|
-
|
|
163
|
+
async function loadErrorFormatter(packageRoot, installRoot, packageManager, configured, log) {
|
|
164
|
+
const formatter = resolveErrorFormatter(configured);
|
|
165
|
+
if (!formatter)
|
|
166
|
+
return undefined;
|
|
167
|
+
const projectFormatter = await importErrorFormatter(formatter.name, packageRoot, log);
|
|
168
|
+
if (projectFormatter)
|
|
169
|
+
return projectFormatter;
|
|
170
|
+
const cacheKey = JSON.stringify([installRoot, formatter.name, formatter.specifier]);
|
|
171
|
+
let installation = formatterPromises.get(cacheKey);
|
|
153
172
|
if (!installation) {
|
|
154
|
-
installation =
|
|
155
|
-
|
|
173
|
+
installation = installErrorFormatter(formatter, installRoot, packageManager, log);
|
|
174
|
+
formatterPromises.set(cacheKey, installation);
|
|
156
175
|
}
|
|
157
176
|
return installation;
|
|
158
177
|
}
|
|
159
|
-
|
|
160
|
-
|
|
178
|
+
function resolveErrorFormatter(configured) {
|
|
179
|
+
if (configured === false)
|
|
180
|
+
return undefined;
|
|
181
|
+
if (configured === undefined)
|
|
182
|
+
return { ...DEFAULT_ERROR_FORMATTER };
|
|
183
|
+
if (typeof configured === 'string') {
|
|
184
|
+
return { name: configured, specifier: configured };
|
|
185
|
+
}
|
|
186
|
+
return {
|
|
187
|
+
name: configured.name,
|
|
188
|
+
specifier: configured.specifier ?? configured.name,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
async function installErrorFormatter(formatter, installRoot, packageManager, log) {
|
|
192
|
+
const existing = await importErrorFormatter(formatter.name, installRoot, log);
|
|
161
193
|
if (existing)
|
|
162
194
|
return existing;
|
|
163
|
-
log?.('Installing optional
|
|
195
|
+
log?.('Installing optional error formatter.', {
|
|
164
196
|
installDirectory: installRoot,
|
|
165
|
-
package:
|
|
197
|
+
package: formatter.specifier,
|
|
166
198
|
packageManager,
|
|
167
199
|
});
|
|
168
200
|
try {
|
|
169
|
-
await installWithoutSaving(
|
|
170
|
-
const installed = await
|
|
171
|
-
if (installed)
|
|
172
|
-
log?.('Optional
|
|
201
|
+
await installWithoutSaving(formatter.specifier, installRoot, packageManager);
|
|
202
|
+
const installed = await importErrorFormatter(formatter.name, installRoot, log);
|
|
203
|
+
if (installed) {
|
|
204
|
+
log?.('Optional error formatter is ready.', {
|
|
205
|
+
installDirectory: installRoot,
|
|
206
|
+
package: formatter.name,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
173
209
|
return installed;
|
|
174
210
|
}
|
|
175
211
|
catch (error) {
|
|
176
|
-
log?.('Optional
|
|
212
|
+
log?.('Optional error formatter is unavailable.', {
|
|
213
|
+
error: formatError(error),
|
|
214
|
+
package: formatter.name,
|
|
215
|
+
});
|
|
177
216
|
return undefined;
|
|
178
217
|
}
|
|
179
218
|
}
|
|
180
|
-
async function
|
|
219
|
+
async function importErrorFormatter(packageName, root, log) {
|
|
181
220
|
try {
|
|
182
|
-
|
|
183
|
-
|
|
221
|
+
const module = await importPackageIfAvailable(packageName, root);
|
|
222
|
+
if (!module)
|
|
223
|
+
return undefined;
|
|
224
|
+
const formatter = [module.default, module.formatError, module.format]
|
|
225
|
+
.find(candidate => typeof candidate === 'function');
|
|
226
|
+
if (typeof formatter === 'function')
|
|
227
|
+
return formatter;
|
|
228
|
+
log?.('Optional error formatter has no supported function export.', {
|
|
229
|
+
package: packageName,
|
|
230
|
+
});
|
|
231
|
+
return undefined;
|
|
184
232
|
}
|
|
185
233
|
catch (error) {
|
|
186
|
-
log?.('Optional
|
|
234
|
+
log?.('Optional error formatter could not be loaded.', {
|
|
235
|
+
error: formatError(error),
|
|
236
|
+
package: packageName,
|
|
237
|
+
});
|
|
187
238
|
return undefined;
|
|
188
239
|
}
|
|
189
240
|
}
|
|
190
|
-
function formatError(error,
|
|
241
|
+
function formatError(error, formatter) {
|
|
191
242
|
const stack = error instanceof Error
|
|
192
243
|
? error.stack ?? `${error.name}: ${error.message}`
|
|
193
244
|
: String(error);
|
|
194
|
-
if (!
|
|
245
|
+
if (!formatter)
|
|
195
246
|
return stack;
|
|
196
247
|
try {
|
|
197
|
-
|
|
248
|
+
const rendered = formatter(stack, { pretty: true });
|
|
249
|
+
return typeof rendered === 'string' ? rendered : stack;
|
|
198
250
|
}
|
|
199
251
|
catch {
|
|
200
252
|
return stack;
|
|
@@ -269,8 +321,14 @@ function noSaveArguments(agent) {
|
|
|
269
321
|
return ['--no-lockfile'];
|
|
270
322
|
return [];
|
|
271
323
|
}
|
|
272
|
-
function createAdapter(adapter, zod, environmentPrefix, settings, errorFormatter) {
|
|
324
|
+
function createAdapter(adapter, zod, environmentPrefix, version, settings, errorFormatter) {
|
|
273
325
|
const environmentBindings = new WeakMap();
|
|
326
|
+
const inputSettings = version === undefined
|
|
327
|
+
? settings
|
|
328
|
+
: {
|
|
329
|
+
...settings,
|
|
330
|
+
reservedShortFlags: ['v', ...(settings.reservedShortFlags ?? [])],
|
|
331
|
+
};
|
|
274
332
|
return {
|
|
275
333
|
...adapter,
|
|
276
334
|
command(configuration = {}) {
|
|
@@ -293,7 +351,7 @@ function createAdapter(adapter, zod, environmentPrefix, settings, errorFormatter
|
|
|
293
351
|
const commandInput = passThrough
|
|
294
352
|
? addPassThroughArgument(schema, adapter, zod, passThroughArguments)
|
|
295
353
|
: schema;
|
|
296
|
-
const { adapted, bindings, negations } = adaptInputSchema(commandInput, adapter, zod, environmentPrefix,
|
|
354
|
+
const { adapted, bindings, negations } = adaptInputSchema(commandInput, adapter, zod, environmentPrefix, inputSettings);
|
|
297
355
|
const inputBuilder = builder.input(adapted);
|
|
298
356
|
return {
|
|
299
357
|
output(output) {
|
|
@@ -301,7 +359,7 @@ function createAdapter(adapter, zod, environmentPrefix, settings, errorFormatter
|
|
|
301
359
|
const attach = (route) => {
|
|
302
360
|
addBooleanNegations(route, negations);
|
|
303
361
|
environmentBindings.set(route, bindings);
|
|
304
|
-
wrapParseBoundary(route, () => bindings, settings.formatErrors === false ? undefined : errorFormatter);
|
|
362
|
+
wrapParseBoundary(route, () => bindings, settings.formatErrors === false ? undefined : errorFormatter, version);
|
|
305
363
|
return route;
|
|
306
364
|
};
|
|
307
365
|
return {
|
|
@@ -330,13 +388,21 @@ function createAdapter(adapter, zod, environmentPrefix, settings, errorFormatter
|
|
|
330
388
|
wrapParseBoundary(program, (argv, options) => {
|
|
331
389
|
const selected = selectedLeaf(program, argv, options);
|
|
332
390
|
return selected ? environmentBindings.get(selected) ?? [] : [];
|
|
333
|
-
}, settings.formatErrors === false ? undefined : errorFormatter);
|
|
391
|
+
}, settings.formatErrors === false ? undefined : errorFormatter, version);
|
|
334
392
|
return program;
|
|
335
393
|
},
|
|
336
394
|
};
|
|
337
395
|
},
|
|
338
396
|
};
|
|
339
397
|
}
|
|
398
|
+
function addVersionOption(route, version) {
|
|
399
|
+
if (version === undefined)
|
|
400
|
+
return;
|
|
401
|
+
const runtime = route;
|
|
402
|
+
if (runtime.options?.some(option => option.long === '--version'))
|
|
403
|
+
return;
|
|
404
|
+
runtime.version(version, '-v, --version');
|
|
405
|
+
}
|
|
340
406
|
function addPassThroughArgument(schema, adapter, zod, configuration) {
|
|
341
407
|
const object = objectSchema(schema);
|
|
342
408
|
if ('args' in object.shape) {
|
|
@@ -540,9 +606,12 @@ function decodeStructuredValue(value, kind) {
|
|
|
540
606
|
}
|
|
541
607
|
return kind === 'array' ? splitArrayValue(value) ?? value : value;
|
|
542
608
|
}
|
|
543
|
-
function wrapParseBoundary(route, bindings, errorFormatter) {
|
|
609
|
+
function wrapParseBoundary(route, bindings, errorFormatter, version) {
|
|
544
610
|
const parse = route.parseAsync.bind(route);
|
|
545
611
|
route.parseAsync = async (argv, options) => {
|
|
612
|
+
const runtime = route;
|
|
613
|
+
if (runtime.parent === null)
|
|
614
|
+
addVersionOption(route, version);
|
|
546
615
|
const active = bindings(argv, options);
|
|
547
616
|
try {
|
|
548
617
|
if (!active.length)
|
package/dist/optionkit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"optionkit.js","sourceRoot":"","sources":["../src/optionkit.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants } from 'node:fs';\nimport { access, mkdir, readFile, realpath, rm, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { detectPackageManager, installPackage } from '@antfu/install-pkg';\nimport type {\n ZodArray,\n ZodBoolean,\n ZodNumber,\n ZodObject,\n ZodReadonly,\n ZodString,\n ZodType,\n} from 'zod';\nimport { catalog } from './_generated/catalog.js';\nimport { importPackageIfAvailable, resolvePackage } from './resolve.js';\n\ntype CleanStack = typeof import('clean-stack').default;\ntype CliAdapterModule = typeof import('fireargs');\ntype ZodNamespace = typeof import('zod').z;\ntype ZodShape = Record<string, ZodType>;\ntype StructuredValueKind = 'array' | 'object';\ntype InternalValueParser = (value: string) => never;\ntype ObjectSchema = ZodObject<ZodShape> | ZodReadonly<ZodObject<ZodShape>>;\ntype SchemaInput<Schema extends ZodType> = import('zod').input<Schema>;\ntype SchemaOutput<Schema extends ZodType> = import('zod').output<Schema>;\n\nexport interface OptionConfiguration<Value = unknown> {\n /** Long flag without dashes. Defaults to the kebab-case field key. */\n name?: string;\n /** Override the generated environment variable, or disable it for this field. */\n env?: string | false;\n /** Override the generated short flag, or disable it for this field. */\n short?: string | false;\n conflicts?: string | string[];\n implies?: Record<string, unknown>;\n hidden?: boolean;\n preset?: unknown;\n helpGroup?: string;\n defaultDescription?: string;\n /** Fireargs parser for one CLI or environment string; disables automatic decoding. */\n parse?: (value: string) => Value;\n}\n\nexport interface ArgumentConfiguration<Value = unknown> {\n name?: string;\n defaultDescription?: string;\n parse?: (value: string) => Value;\n}\n\nexport interface PassThroughArgumentsConfiguration {\n /** Help text for the generated trailing `args` positional. */\n description?: string;\n}\n\nexport interface CommandConfiguration extends Record<string, unknown> {\n /** Add a typed trailing `args` array and the Fireargs pass-through switches. */\n passThroughArguments?: boolean | PassThroughArgumentsConfiguration;\n}\nexport type ProgramConfiguration = Record<string, unknown>;\n\nexport interface CliParseOptions {\n from?: 'electron' | 'node' | 'user';\n}\n\nexport interface CliRoute {\n readonly type: 'command' | 'program';\n helpInformation(): string;\n parseAsync(argv?: readonly string[], options?: CliParseOptions): Promise<unknown>;\n}\n\nexport interface CliCommand extends CliRoute {\n readonly type: 'command';\n}\n\nexport interface CliProgram extends CliRoute {\n readonly type: 'program';\n}\n\nexport interface CommandContext {\n readonly command: CliCommand;\n readonly json: boolean;\n}\n\nexport interface RenderContext<Input> {\n readonly command: CliCommand;\n readonly input: Input;\n readonly json: false;\n}\n\nexport interface FieldBuilder<Value = never> {\n string(): ZodString;\n number(): ZodNumber;\n boolean(): ZodBoolean;\n enum<const Values extends readonly [string, ...string[]]>(values: Values): ZodType<Values[number]>;\n array<Inner extends ZodType>(inner: Inner): ZodArray<Inner>;\n schema<Schema extends ZodType>(schema: Schema): Schema;\n}\n\ninterface HandlerBuilder<Input, Output extends ZodType> {\n handler(\n handler: (\n input: Input,\n context: CommandContext,\n ) => SchemaInput<Output> | Promise<SchemaInput<Output>>,\n ): CliCommand;\n}\n\ninterface OutputBuilder<Input, Output extends ZodType>\n extends HandlerBuilder<Input, Output> {\n render(\n render: (\n output: SchemaOutput<Output>,\n context: RenderContext<Input>,\n ) => string | void | Promise<string | void>,\n ): HandlerBuilder<Input, Output>;\n}\n\ninterface CommandBuilder<PassThrough extends boolean> {\n input<Input extends ObjectSchema>(schema: Input): {\n output<Output extends ZodType>(schema: Output): OutputBuilder<\n PassThrough extends true\n ? SchemaOutput<Input> & { args: string[] }\n : SchemaOutput<Input>,\n Output\n >;\n };\n}\n\nexport interface OptionKitAdapter {\n argument<Value = never>(configuration?: ArgumentConfiguration<Value>): FieldBuilder<Value>;\n command(\n configuration: CommandConfiguration & {\n passThroughArguments: true | PassThroughArgumentsConfiguration;\n },\n ): CommandBuilder<true>;\n command(configuration?: CommandConfiguration): CommandBuilder<false>;\n option<Value = never>(configuration?: OptionConfiguration<Value>): FieldBuilder<Value>;\n program(configuration?: ProgramConfiguration): {\n router(routes: Readonly<Record<string, CliRoute>>): CliProgram;\n };\n}\n\ntype ResolvedOptionConfiguration = Omit<OptionConfiguration<never>, 'env' | 'short'> & {\n env?: string;\n /** Internal compatibility parser for structured values carried by one env string. */\n parse?: InternalValueParser;\n short?: string;\n};\n\ninterface StructuredEnvironmentBinding {\n readonly env: string;\n readonly name: string;\n readonly short?: string;\n}\n\ninterface OptionNegation {\n readonly name: string;\n}\n\ninterface RuntimeOption {\n readonly long?: string;\n}\n\ninterface RuntimeCliCommand extends CliCommand {\n readonly options?: readonly RuntimeOption[];\n configureOutput?: () => { writeErr?: (value: string) => void };\n option?: (flags: string, description?: string) => RuntimeCliCommand;\n}\n\ninterface RuntimeRoute extends CliRoute {\n readonly commands?: readonly RuntimeRoute[];\n name?: () => string;\n aliases?: () => string[];\n}\n\nexport type OptionKitLogger = (\n message: string,\n details?: Readonly<Record<string, unknown>>,\n) => void;\n\nexport interface CreateOptionKitSettings {\n /** Module URL for the consuming CLI; used to find its nearest package.json. */\n moduleUrl?: string | URL;\n /** Explicit consuming package root when moduleUrl discovery is not appropriate. */\n packageRoot?: string;\n /** Override the consuming package name used to derive the environment prefix. */\n projectName?: string;\n /** Override the generated prefix, or disable environment bindings. */\n environmentPrefix?: string | false;\n /** Generate non-conflicting single-letter flags. Defaults to true. */\n shortFlags?: boolean;\n /** Add `--no-*` twins for boolean options. Defaults to true. */\n booleanNegations?: boolean;\n /** Letters that automatic short-flag generation must not use. */\n reservedShortFlags?: readonly string[];\n /** Per-field CLI metadata applied after generated values. */\n fields?: Readonly<Record<string, OptionConfiguration>>;\n /** Working directory used to detect the caller's package manager. */\n invocationDirectory?: string;\n /** Explicit isolated install directory. By default, missing packages install at packageRoot. */\n cacheDirectory?: string;\n /** Optional diagnostics sink. optionkit never writes install progress itself. */\n log?: OptionKitLogger;\n /** Format rejected handlers and renderers at the parse boundary. Defaults to true. */\n formatErrors?: boolean;\n}\n\nexport interface OptionKit {\n /** CLI builder namespace, loaded from the project or the lazy cache. */\n f: OptionKitAdapter;\n /** Zod from the same dependency location as the CLI adapter. */\n z: ZodNamespace;\n /** Prefix used for generated environment variables, including its trailing underscore. */\n environmentPrefix: string | false;\n /** The consuming package root discovered for this CLI. */\n packageRoot: string;\n /** Where the CLI dependencies were resolved or installed. */\n dependencySource: 'cache' | 'package-root' | 'project';\n /** Render an error with clean-stack when the optional dependency is available. */\n formatError: (error: unknown) => string;\n}\n\nconst REQUIRED_CLI_DEPENDENCY_SPECIFIERS = [\n `fireargs@${catalog.fireargs}`,\n `zod@${catalog.zod}`,\n];\nconst CLEAN_STACK_SPECIFIER = `clean-stack@${catalog['clean-stack']}`;\nconst installPromises = new Map<string, Promise<LoadedDependencies>>();\nconst cleanStackPromises = new Map<string, Promise<CleanStack | undefined>>();\n\n/**\n * Load the CLI adapter on demand. Every command input is transparently augmented\n * with environment bindings and conflict-free short flags.\n */\nexport async function createOptionKit(\n settings: CreateOptionKitSettings = {},\n): Promise<OptionKit> {\n const packageInfo = await consumingPackage(settings);\n const loaded = await loadDependencies(packageInfo.root, settings);\n const environmentPrefix = resolveEnvironmentPrefix(\n settings.environmentPrefix,\n settings.projectName ?? packageInfo.name,\n );\n const errorFormatter = (error: unknown) => formatError(error, loaded.cleanStack);\n\n return {\n f: createAdapter(loaded.f, loaded.z, environmentPrefix, settings, errorFormatter),\n z: loaded.z,\n environmentPrefix,\n packageRoot: packageInfo.root,\n dependencySource: loaded.source,\n formatError: errorFormatter,\n };\n}\n\ninterface PackageInfo {\n name: string;\n root: string;\n}\n\ninterface LoadedDependencies {\n cleanStack?: CleanStack;\n f: CliAdapterModule['f'];\n z: ZodNamespace;\n source: 'cache' | 'package-root' | 'project';\n}\n\nasync function consumingPackage(\n settings: CreateOptionKitSettings,\n): Promise<PackageInfo> {\n const root = settings.packageRoot\n ? path.resolve(settings.packageRoot)\n : await findPackageRoot(await discoveryStart(settings.moduleUrl));\n const manifest = JSON.parse(\n await readFile(path.join(root, 'package.json'), 'utf8'),\n ) as { name?: unknown };\n const name = settings.projectName ?? manifest.name;\n if (typeof name !== 'string' || name.trim() === '') {\n throw new TypeError('The consuming package must have a name or set projectName.');\n }\n return { name, root };\n}\n\nasync function discoveryStart(moduleUrl: string | URL | undefined): Promise<string> {\n const candidate = moduleUrl === undefined\n ? process.argv[1] ?? process.cwd()\n : moduleUrl instanceof URL || moduleUrl.startsWith('file:')\n ? fileURLToPath(moduleUrl)\n : moduleUrl;\n const absolute = path.resolve(candidate);\n try {\n return await realpath(absolute);\n } catch {\n return absolute;\n }\n}\n\nasync function findPackageRoot(start: string): Promise<string> {\n let current: string;\n try {\n current = (await stat(start)).isDirectory() ? start : path.dirname(start);\n } catch {\n current = path.extname(start) === '' ? start : path.dirname(start);\n }\n\n while (true) {\n const manifest = path.join(current, 'package.json');\n try {\n await access(manifest, constants.R_OK);\n return current;\n } catch {\n const parent = path.dirname(current);\n if (parent === current) {\n throw new Error(`Could not find a package.json above ${JSON.stringify(start)}.`);\n }\n current = parent;\n }\n }\n}\n\nasync function loadDependencies(\n packageRoot: string,\n settings: CreateOptionKitSettings,\n): Promise<LoadedDependencies> {\n const project = await importDependencies(packageRoot);\n const invocationDirectory = path.resolve(settings.invocationDirectory ?? process.cwd());\n const detected = await detectPackageManager(invocationDirectory);\n const packageManager = detected ?? 'npm';\n const installRoot = path.resolve(settings.cacheDirectory ?? packageRoot);\n const installSource = settings.cacheDirectory ? 'cache' : 'package-root';\n if (settings.cacheDirectory) await ensureCachePackage(installRoot);\n if (project) {\n const projectCleanStack = await importCleanStack(packageRoot, settings.log);\n const cleanStack = projectCleanStack ?? await cachedCleanStack(\n installRoot,\n packageManager,\n settings.log,\n );\n return { ...project, cleanStack, source: 'project' };\n }\n\n let installation = installPromises.get(installRoot);\n if (!installation) {\n installation = installAndImport(\n installRoot,\n packageManager,\n installSource,\n settings.log,\n );\n installPromises.set(installRoot, installation);\n }\n try {\n return await installation;\n } catch (error) {\n installPromises.delete(installRoot);\n throw error;\n }\n}\n\nasync function installAndImport(\n installRoot: string,\n packageManager: string,\n source: 'cache' | 'package-root',\n log: OptionKitLogger | undefined,\n): Promise<LoadedDependencies> {\n const cleanStack = await cachedCleanStack(installRoot, packageManager, log);\n const existing = await importDependencies(installRoot);\n if (existing) return { ...existing, cleanStack, source };\n\n log?.('Installing required CLI dependencies.', {\n installDirectory: installRoot,\n packages: REQUIRED_CLI_DEPENDENCY_SPECIFIERS,\n packageManager,\n });\n try {\n await installWithoutSaving(REQUIRED_CLI_DEPENDENCY_SPECIFIERS, installRoot, packageManager);\n } catch (error) {\n log?.('Could not install required CLI dependencies.', {\n error: formatError(error, cleanStack),\n });\n throw error;\n }\n const installed = await importDependencies(installRoot);\n if (!installed) {\n const unresolved = ['fireargs', 'zod'].filter(name => !resolvePackage(name, installRoot));\n throw new Error(\n `CLI dependencies were installed but ${unresolved.join(' and ') || 'their exports'} could not be resolved from ${installRoot}.`,\n );\n }\n log?.('Required CLI dependencies are ready.', { installDirectory: installRoot });\n return { ...installed, cleanStack, source };\n}\n\nasync function importDependencies(\n root: string,\n): Promise<Omit<LoadedDependencies, 'source'> | undefined> {\n const [adapter, zod] = await Promise.all([\n importPackageIfAvailable<CliAdapterModule>('fireargs', root),\n importPackageIfAvailable<typeof import('zod')>('zod', root),\n ]);\n if (!adapter || !zod) return undefined;\n const requiredBuilders = ['argument', 'command', 'option', 'program'] as const;\n if (!adapter.f || requiredBuilders.some(name => typeof adapter.f[name] !== 'function')) {\n throw new TypeError('The resolved CLI adapter does not expose its required builder functions.');\n }\n if (!zod.z || typeof zod.z.object !== 'function') {\n throw new TypeError('The resolved Zod package does not expose z.object().');\n }\n return { f: adapter.f, z: zod.z };\n}\n\nasync function cachedCleanStack(\n cacheRoot: string,\n packageManager: string,\n log: OptionKitLogger | undefined,\n): Promise<CleanStack | undefined> {\n let installation = cleanStackPromises.get(cacheRoot);\n if (!installation) {\n installation = installCleanStack(cacheRoot, packageManager, log);\n cleanStackPromises.set(cacheRoot, installation);\n }\n return installation;\n}\n\nasync function installCleanStack(\n installRoot: string,\n packageManager: string,\n log: OptionKitLogger | undefined,\n): Promise<CleanStack | undefined> {\n const existing = await importCleanStack(installRoot, log);\n if (existing) return existing;\n\n log?.('Installing optional stack cleaner.', {\n installDirectory: installRoot,\n package: CLEAN_STACK_SPECIFIER,\n packageManager,\n });\n try {\n await installWithoutSaving(CLEAN_STACK_SPECIFIER, installRoot, packageManager);\n const installed = await importCleanStack(installRoot, log);\n if (installed) log?.('Optional stack cleaner is ready.', { installDirectory: installRoot });\n return installed;\n } catch (error) {\n log?.('Optional stack cleaner is unavailable.', { error: formatError(error) });\n return undefined;\n }\n}\n\nasync function importCleanStack(\n root: string,\n log: OptionKitLogger | undefined,\n): Promise<CleanStack | undefined> {\n try {\n return (await importPackageIfAvailable<typeof import('clean-stack')>('clean-stack', root))\n ?.default;\n } catch (error) {\n log?.('Optional stack cleaner could not be loaded.', { error: formatError(error) });\n return undefined;\n }\n}\n\nfunction formatError(error: unknown, cleanStack?: CleanStack): string {\n const stack = error instanceof Error\n ? error.stack ?? `${error.name}: ${error.message}`\n : String(error);\n if (!cleanStack) return stack;\n try {\n return cleanStack(stack, { pretty: true });\n } catch {\n return stack;\n }\n}\n\nasync function ensureCachePackage(cacheRoot: string): Promise<void> {\n await mkdir(cacheRoot, { recursive: true });\n const manifest = path.join(cacheRoot, 'package.json');\n try {\n await writeFile(\n manifest,\n `${JSON.stringify({ name: 'optionkit-cli-cache', private: true, type: 'module' }, null, 2)}\\n`,\n { encoding: 'utf8', flag: 'wx' },\n );\n } catch (error) {\n if (!(error instanceof Error && 'code' in error && error.code === 'EEXIST')) throw error;\n }\n}\n\nconst INSTALL_STATE_FILES = [\n 'package.json',\n 'bun.lock',\n 'bun.lockb',\n 'package-lock.json',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n] as const;\n\nasync function installWithoutSaving(\n packages: string | string[],\n installRoot: string,\n packageManager: string,\n): Promise<void> {\n const snapshots = new Map<string, Buffer | undefined>();\n for (const name of INSTALL_STATE_FILES) {\n const filename = path.join(installRoot, name);\n snapshots.set(filename, await readFileIfPresent(filename));\n }\n try {\n await installPackage(packages, {\n additionalArgs: agent => noSaveArguments(agent),\n cwd: installRoot,\n packageManager,\n preferOffline: true,\n silent: true,\n });\n } finally {\n for (const [filename, content] of snapshots) {\n const current = await readFileIfPresent(filename);\n if (content && current?.equals(content)) continue;\n if (!content && !current) continue;\n if (content) await writeFile(filename, content);\n else await rm(filename, { force: true });\n }\n }\n}\n\nasync function readFileIfPresent(filename: string): Promise<Buffer | undefined> {\n try {\n return await readFile(filename);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\nfunction noSaveArguments(agent: string): string[] {\n if (agent === 'bun') return ['--no-save'];\n if (agent === 'npm') return ['--no-save', '--package-lock=false'];\n if (agent === 'pnpm') return ['--lockfile=false'];\n if (agent === 'yarn') return ['--no-lockfile'];\n return [];\n}\n\nfunction createAdapter(\n adapter: CliAdapterModule['f'],\n zod: ZodNamespace,\n environmentPrefix: string | false,\n settings: CreateOptionKitSettings,\n errorFormatter: (error: unknown) => string,\n): OptionKitAdapter {\n const environmentBindings = new WeakMap<CliRoute, readonly StructuredEnvironmentBinding[]>();\n return {\n ...adapter,\n command(configuration: CommandConfiguration = {}) {\n const { passThroughArguments, ...fireargsConfiguration } = configuration;\n const passThrough = passThroughArguments === true ||\n (typeof passThroughArguments === 'object' && passThroughArguments !== null);\n const builder = adapter.command(passThrough\n ? {\n allowExcessArguments: true,\n allowUnknownOption: true,\n enablePositionalOptions: true,\n jsonOption: false,\n llmsOption: false,\n passThroughOptions: true,\n ...fireargsConfiguration,\n }\n : fireargsConfiguration);\n return {\n input<Input extends ObjectSchema>(schema: Input) {\n const commandInput = passThrough\n ? addPassThroughArgument(schema, adapter, zod, passThroughArguments)\n : schema;\n const { adapted, bindings, negations } = adaptInputSchema(\n commandInput,\n adapter,\n zod,\n environmentPrefix,\n settings,\n );\n const inputBuilder = builder.input(adapted);\n return {\n output(output: ZodType) {\n const outputBuilder = inputBuilder.output(output);\n const attach = (route: CliCommand): CliCommand => {\n addBooleanNegations(route, negations);\n environmentBindings.set(route, bindings);\n wrapParseBoundary(\n route,\n () => bindings,\n settings.formatErrors === false ? undefined : errorFormatter,\n );\n return route;\n };\n return {\n handler(handler: never) {\n return attach(outputBuilder.handler(handler));\n },\n render(render: never) {\n const handlerBuilder = outputBuilder.render(render);\n return {\n handler(handler: never) {\n return attach(handlerBuilder.handler(handler));\n },\n };\n },\n };\n },\n };\n },\n };\n },\n program(configuration: ProgramConfiguration = {}) {\n const builder = adapter.program(configuration);\n return {\n router(routes: Readonly<Record<string, CliRoute>>) {\n const program = builder.router(routes as never);\n wrapParseBoundary(\n program,\n (argv, options) => {\n const selected = selectedLeaf(program as unknown as RuntimeRoute, argv, options);\n return selected ? environmentBindings.get(selected) ?? [] : [];\n },\n settings.formatErrors === false ? undefined : errorFormatter,\n );\n return program;\n },\n };\n },\n } as OptionKitAdapter;\n}\n\nfunction addPassThroughArgument(\n schema: ObjectSchema,\n adapter: CliAdapterModule['f'],\n zod: ZodNamespace,\n configuration: true | PassThroughArgumentsConfiguration,\n): ZodObject<ZodShape> {\n const object = objectSchema(schema);\n if ('args' in object.shape) {\n throw new TypeError('passThroughArguments reserves the input field \"args\".');\n }\n const description = typeof configuration === 'object'\n ? configuration.description\n : undefined;\n const args = adapter.argument().schema(\n zod.array(zod.string()).default([]).describe(\n description ?? 'Arguments passed to the executable.',\n ),\n );\n return object.safeExtend({ args }) as ZodObject<ZodShape>;\n}\n\ntype RegisteredFieldConfiguration =\n | ({ kind: 'argument' } & ArgumentConfiguration)\n | ({ kind: 'option' } & OptionConfiguration);\n\nfunction adaptInputSchema(\n schema: ObjectSchema,\n adapter: CliAdapterModule['f'],\n zod: ZodNamespace,\n environmentPrefix: string | false,\n settings: CreateOptionKitSettings,\n): {\n readonly adapted: ZodObject<ZodShape>;\n readonly bindings: readonly StructuredEnvironmentBinding[];\n readonly negations: readonly OptionNegation[];\n} {\n const object = objectSchema(schema);\n const shape = object.shape as ZodShape;\n const registered = Object.fromEntries(Object.entries(shape).flatMap(([key, field]) => {\n const configuration = registeredFieldConfiguration(field, zod);\n return configuration ? [[key, configuration]] : [];\n })) as Record<string, RegisteredFieldConfiguration | undefined>;\n const configurations = optionConfigurations(\n shape,\n environmentPrefix,\n zod,\n settings,\n registered,\n );\n const fields = Object.fromEntries(Object.entries(shape).map(([key, field]) => {\n if (registered[key]?.kind === 'argument') return [key, field];\n return [key, adapter.option(configurations[key]).schema(field)];\n })) as ZodShape;\n const bindings = Object.entries(configurations).flatMap(([key, configuration]) => {\n if (\n configuration.env === undefined ||\n configuration.parse !== undefined ||\n structuredValueKind(shape[key], zod) !== 'array'\n ) return [];\n return [{\n env: configuration.env,\n name: configuration.name ?? toCliKey(key),\n short: configuration.short,\n }];\n });\n const optionNames = new Set(Object.entries(configurations).map(([key, configuration]) => (\n configuration.name ?? toCliKey(key)\n )));\n const negations = settings.booleanNegations === false\n ? []\n : Object.entries(configurations).flatMap(([key, configuration]) => {\n const name = configuration.name ?? toCliKey(key);\n if (\n configuration.parse !== undefined ||\n name.startsWith('no-') ||\n optionNames.has(`no-${name}`) ||\n !negatableValue(shape[key], zod)\n ) return [];\n return [{ name }];\n });\n return {\n adapted: object.safeExtend(fields) as ZodObject<ZodShape>,\n bindings,\n negations,\n };\n}\n\nfunction addBooleanNegations(\n route: CliCommand,\n negations: readonly OptionNegation[],\n): void {\n const command = route as RuntimeCliCommand;\n if (typeof command.option !== 'function') return;\n for (const negation of negations) {\n const flag = `--no-${negation.name}`;\n if (command.options?.some(option => option.long === flag)) continue;\n command.option(flag, `Negate --${negation.name}.`);\n }\n}\n\nfunction negatableValue(\n schema: ZodType | undefined,\n zod: ZodNamespace,\n seen = new Set<ZodType>(),\n): boolean {\n if (!schema || seen.has(schema)) return false;\n seen.add(schema);\n if (schema instanceof zod.ZodBoolean) return true;\n if (schema instanceof zod.ZodLiteral) return schema.values.has(false);\n if (schema instanceof zod.ZodUnion) {\n return (schema.options as readonly ZodType[])\n .some(option => negatableValue(option, zod, seen));\n }\n if (schema instanceof zod.ZodPipe) {\n return negatableValue(schema.in as ZodType, zod, seen);\n }\n const wrapper = schema as ZodType & { unwrap?: () => ZodType };\n return typeof wrapper.unwrap === 'function'\n ? negatableValue(wrapper.unwrap(), zod, seen)\n : false;\n}\n\nfunction objectSchema(schema: ObjectSchema): ZodObject<ZodShape> {\n let candidate: unknown = schema;\n while (candidate && typeof candidate === 'object') {\n if ('shape' in candidate) {\n const shape = candidate.shape;\n if (shape && typeof shape === 'object') return candidate as ZodObject<ZodShape>;\n }\n if (!('unwrap' in candidate) || typeof candidate.unwrap !== 'function') break;\n candidate = candidate.unwrap();\n }\n throw new TypeError('createOptionKit requires a Zod object schema, optionally wrapped as readonly.');\n}\n\nfunction resolveEnvironmentPrefix(\n configured: string | false | undefined,\n projectName: string,\n): string | false {\n if (configured === false) return false;\n const translated = toEnvironmentKey(configured ?? projectName);\n if (!translated) throw new TypeError('The environment prefix must contain a letter or number.');\n return `${translated}_`;\n}\n\nfunction toCliKey(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/gu, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/gu, '$1-$2')\n .toLowerCase();\n}\n\nfunction optionConfigurations<Schema extends ObjectSchema>(\n shape: ZodShape,\n environmentPrefix: string | false,\n zod: ZodNamespace,\n settings: CreateOptionKitSettings,\n registered: Readonly<Record<string, RegisteredFieldConfiguration | undefined>> = {},\n): Record<string, ResolvedOptionConfiguration> {\n const keys = Object.keys(shape).filter(key => registered[key]?.kind !== 'argument');\n const overrides = Object.fromEntries(keys.map(key => {\n const existing = registered[key];\n const existingOption = existing?.kind === 'option'\n ? Object.fromEntries(Object.entries(existing).filter(([name]) => name !== 'kind'))\n : {};\n return [key, { ...settings.fields?.[key], ...existingOption }];\n })) as Record<string, OptionConfiguration | undefined>;\n const shorts = generatedShortFlags(keys, overrides, settings);\n\n return Object.fromEntries(keys.map(key => {\n const override = overrides?.[key];\n const generated: ResolvedOptionConfiguration = {};\n if (environmentPrefix !== false && override?.env !== false) {\n generated.env = override?.env ?? `${environmentPrefix}${toEnvironmentKey(key)}`;\n const kind = structuredValueKind(shape[key], zod);\n if (kind === 'object' && !override?.parse) generated.parse = structuredValueParser(kind);\n }\n if (override?.short !== false && (override?.short ?? shorts[key])) {\n generated.short = typeof override?.short === 'string'\n ? normalizeShort(override.short, key)\n : shorts[key];\n }\n if (override) {\n const { env: _env, short: _short, parse, ...rest } = override;\n Object.assign(generated, rest);\n if (parse) generated.parse = parse as InternalValueParser;\n }\n return [key, generated];\n }));\n}\n\nfunction registeredFieldConfiguration(\n schema: ZodType,\n zod: ZodNamespace,\n seen = new Set<ZodType>(),\n): RegisteredFieldConfiguration | undefined {\n if (seen.has(schema)) return undefined;\n seen.add(schema);\n const metadata = zod.globalRegistry.get(schema) as Record<string, unknown> | undefined;\n const registered = metadata?.fireargs;\n if (registered && typeof registered === 'object' && 'kind' in registered) {\n const kind = (registered as { kind?: unknown }).kind;\n if (kind === 'argument' || kind === 'option') {\n return registered as RegisteredFieldConfiguration;\n }\n }\n if (schema instanceof zod.ZodPipe) {\n return registeredFieldConfiguration(schema.in as ZodType, zod, seen);\n }\n const wrapper = schema as ZodType & { unwrap?: () => ZodType };\n return typeof wrapper.unwrap === 'function'\n ? registeredFieldConfiguration(wrapper.unwrap(), zod, seen)\n : undefined;\n}\n\n/**\n * Fireargs handles structured argv values, but an environment variable reaches\n * Commander as one string. Detect only unambiguous JSON containers so scalar\n * coercion and Fireargs' native parsing remain untouched.\n */\nfunction structuredValueKind(\n schema: ZodType | undefined,\n zod: ZodNamespace,\n seen = new Set<ZodType>(),\n): StructuredValueKind | undefined {\n if (!schema || seen.has(schema)) return undefined;\n seen.add(schema);\n\n if (schema instanceof zod.ZodArray || schema instanceof zod.ZodTuple) return 'array';\n if (schema instanceof zod.ZodObject || schema instanceof zod.ZodRecord) return 'object';\n if (schema instanceof zod.ZodUnion) {\n const kinds = schema.options.map(option => (\n structuredValueKind(option as ZodType, zod, new Set(seen))\n )).filter((kind): kind is StructuredValueKind => kind !== undefined);\n const unique = new Set(kinds);\n return unique.size === 1 ? kinds[0] : undefined;\n }\n if (schema instanceof zod.ZodPipe) {\n return structuredValueKind(schema.in as ZodType, zod, seen);\n }\n\n const wrapper = schema as ZodType & { unwrap?: () => ZodType };\n return typeof wrapper.unwrap === 'function'\n ? structuredValueKind(wrapper.unwrap(), zod, seen)\n : undefined;\n}\n\nfunction structuredValueParser(kind: StructuredValueKind): InternalValueParser {\n return ((value: string): unknown => decodeStructuredValue(value, kind)) as InternalValueParser;\n}\n\nfunction decodeStructuredValue(value: string, kind: StructuredValueKind): unknown {\n try {\n return JSON.parse(value) as unknown;\n } catch {\n // A non-JSON string may still be useful to an array schema or a union.\n }\n return kind === 'array' ? splitArrayValue(value) ?? value : value;\n}\n\nfunction wrapParseBoundary(\n route: CliRoute,\n bindings: (\n argv: readonly string[] | undefined,\n options: CliParseOptions | undefined,\n ) => readonly StructuredEnvironmentBinding[],\n errorFormatter: ((error: unknown) => string) | undefined,\n): void {\n const parse = route.parseAsync.bind(route);\n route.parseAsync = async (argv, options) => {\n const active = bindings(argv, options);\n try {\n if (!active.length) return await parse(argv, options);\n\n const effectiveArgv = [...(argv ?? process.argv)];\n const userOffset = argvOffset(options);\n const userArguments = effectiveArgv.slice(userOffset);\n const insertion = effectiveArgv.indexOf('--', userOffset);\n const injected: string[] = [];\n const previous = new Map<string, string>();\n\n for (const binding of active) {\n const value = process.env[binding.env];\n if (value === undefined) continue;\n previous.set(binding.env, value);\n delete process.env[binding.env];\n if (hasOption(userArguments, binding)) continue;\n const decoded = decodeStructuredValue(value, 'array');\n const values = Array.isArray(decoded) ? decoded : [decoded];\n for (const item of values) injected.push(`--${binding.name}=${stringifyCliValue(item)}`);\n }\n\n effectiveArgv.splice(insertion === -1 ? effectiveArgv.length : insertion, 0, ...injected);\n try {\n return await parse(effectiveArgv, options);\n } finally {\n for (const [name, value] of previous) process.env[name] = value;\n }\n } catch (error) {\n if (!errorFormatter) throw error;\n const command = route as RuntimeCliCommand;\n const writer = command.configureOutput?.().writeErr ?? (value => process.stderr.write(value));\n writer(`${errorFormatter(error)}\\n`);\n process.exitCode = 1;\n return undefined;\n }\n };\n}\n\nfunction selectedLeaf(\n program: RuntimeRoute,\n argv: readonly string[] | undefined,\n options: CliParseOptions | undefined,\n): CliRoute | undefined {\n const args = (argv ?? process.argv).slice(argvOffset(options));\n let current = program;\n let offset = 0;\n while (current.commands?.length) {\n let selected: RuntimeRoute | undefined;\n let selectedAt = -1;\n for (let index = offset; index < args.length; index += 1) {\n const token = args[index];\n if (!token || token.startsWith('-')) continue;\n selected = current.commands.find(command => (\n command.name?.() === token || command.aliases?.().includes(token)\n ));\n if (selected) {\n selectedAt = index;\n break;\n }\n }\n if (!selected) return undefined;\n current = selected;\n offset = selectedAt + 1;\n }\n return current;\n}\n\nfunction argvOffset(options: CliParseOptions | undefined): number {\n if (options?.from === 'user') return 0;\n if (options?.from === 'electron') return 1;\n return 2;\n}\n\nfunction hasOption(\n args: readonly string[],\n binding: StructuredEnvironmentBinding,\n): boolean {\n const long = `--${binding.name}`;\n const short = binding.short ? `-${binding.short}` : undefined;\n return args.some(argument => (\n argument === long ||\n argument.startsWith(`${long}=`) ||\n (short !== undefined && (argument === short || argument.startsWith(`${short}=`)))\n ));\n}\n\nfunction stringifyCliValue(value: unknown): string {\n if (typeof value === 'string') return value;\n if (value === null || typeof value !== 'object') return String(value);\n return JSON.stringify(value);\n}\n\n/** Split comma- or whitespace-delimited shell words without interpreting operators. */\nfunction splitArrayValue(value: string): string[] | undefined {\n const result: string[] = [];\n let token = '';\n let quote: '\"' | \"'\" | undefined;\n let escaped = false;\n let started = false;\n\n for (const character of value) {\n if (escaped) {\n token += character;\n escaped = false;\n started = true;\n } else if (character === '\\\\') {\n escaped = true;\n started = true;\n } else if (quote) {\n if (character === quote) quote = undefined;\n else token += character;\n started = true;\n } else if (character === '\"' || character === \"'\") {\n quote = character;\n started = true;\n } else if (character === ',' || /\\s/u.test(character)) {\n if (started) result.push(token);\n token = '';\n started = false;\n } else {\n token += character;\n started = true;\n }\n }\n\n if (quote || escaped) return undefined;\n if (started) result.push(token);\n return result;\n}\n\nfunction generatedShortFlags(\n keys: readonly string[],\n overrides: Record<string, OptionConfiguration | undefined> | undefined,\n settings: CreateOptionKitSettings,\n): Record<string, string | undefined> {\n if (settings.shortFlags === false) return {};\n const reserved = new Set(['h', ...(settings.reservedShortFlags ?? [])].map(value => value.toLowerCase()));\n const explicit = new Map<string, string>();\n\n for (const key of keys) {\n const value = overrides?.[key]?.short;\n if (typeof value !== 'string') continue;\n const normalized = normalizeShort(value, key);\n const owner = explicit.get(normalized);\n if (owner) throw new TypeError(`Short flag -${normalized} is configured for both ${owner} and ${key}.`);\n if (reserved.has(normalized)) throw new TypeError(`Short flag -${normalized} is reserved.`);\n explicit.set(normalized, key);\n }\n\n const candidates = new Map<string, string[]>();\n for (const key of keys) {\n if (overrides?.[key]?.short !== undefined) continue;\n const longName = overrides?.[key]?.name ?? key;\n const candidate = toEnvironmentKey(longName).charAt(0).toLowerCase();\n if (!candidate || reserved.has(candidate) || explicit.has(candidate)) continue;\n candidates.set(candidate, [...(candidates.get(candidate) ?? []), key]);\n }\n\n const result: Record<string, string | undefined> = {};\n for (const [candidate, owners] of candidates) {\n if (owners.length === 1) result[owners[0] as string] = candidate;\n }\n return result;\n}\n\nfunction normalizeShort(value: string, key: string): string {\n const normalized = value.replace(/^-+/u, '').toLowerCase();\n if (!/^[a-z0-9]$/u.test(normalized)) {\n throw new TypeError(`Short flag for ${key} must be one letter or digit.`);\n }\n return normalized;\n}\n\nfunction toEnvironmentKey(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/gu, '$1_$2')\n .replace(/^@/u, '')\n .replace(/[^a-zA-Z0-9]+/gu, '_')\n .replace(/^_+|_+$/gu, '')\n .toUpperCase();\n}\n"]}
|
|
1
|
+
{"version":3,"file":"optionkit.js","sourceRoot":"","sources":["../src/optionkit.ts"],"names":[],"mappings":"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","sourcesContent":["import { constants } from 'node:fs';\nimport { access, mkdir, readFile, realpath, rm, stat, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { detectPackageManager, installPackage } from '@antfu/install-pkg';\nimport { valid as validSemver } from 'semver';\nimport type {\n ZodArray,\n ZodBoolean,\n ZodNumber,\n ZodObject,\n ZodReadonly,\n ZodString,\n ZodType,\n} from 'zod';\nimport { catalog } from './_generated/catalog.js';\nimport { importPackageIfAvailable, resolvePackage } from './resolve.js';\n\ntype CliAdapterModule = typeof import('fireargs');\ntype ErrorFormatterModule = Readonly<Record<string, unknown>>;\ntype StackFormatter = (stack: string, options?: { pretty?: boolean }) => unknown;\ntype ZodNamespace = typeof import('zod').z;\ntype ZodShape = Record<string, ZodType>;\ntype StructuredValueKind = 'array' | 'object';\ntype InternalValueParser = (value: string) => never;\ntype ObjectSchema = ZodObject<ZodShape> | ZodReadonly<ZodObject<ZodShape>>;\ntype SchemaInput<Schema extends ZodType> = import('zod').input<Schema>;\ntype SchemaOutput<Schema extends ZodType> = import('zod').output<Schema>;\n\nexport interface OptionConfiguration<Value = unknown> {\n /** Long flag without dashes. Defaults to the kebab-case field key. */\n name?: string;\n /** Override the generated environment variable, or disable it for this field. */\n env?: string | false;\n /** Override the generated short flag, or disable it for this field. */\n short?: string | false;\n conflicts?: string | string[];\n implies?: Record<string, unknown>;\n hidden?: boolean;\n preset?: unknown;\n helpGroup?: string;\n defaultDescription?: string;\n /** Fireargs parser for one CLI or environment string; disables automatic decoding. */\n parse?: (value: string) => Value;\n}\n\nexport interface ArgumentConfiguration<Value = unknown> {\n name?: string;\n defaultDescription?: string;\n parse?: (value: string) => Value;\n}\n\nexport interface PassThroughArgumentsConfiguration {\n /** Help text for the generated trailing `args` positional. */\n description?: string;\n}\n\nexport interface CommandConfiguration extends Record<string, unknown> {\n /** Add a typed trailing `args` array and the Fireargs pass-through switches. */\n passThroughArguments?: boolean | PassThroughArgumentsConfiguration;\n}\nexport type ProgramConfiguration = Record<string, unknown>;\n\nexport interface CliParseOptions {\n from?: 'electron' | 'node' | 'user';\n}\n\nexport interface CliRoute {\n readonly type: 'command' | 'program';\n helpInformation(): string;\n parseAsync(argv?: readonly string[], options?: CliParseOptions): Promise<unknown>;\n}\n\nexport interface CliCommand extends CliRoute {\n readonly type: 'command';\n}\n\nexport interface CliProgram extends CliRoute {\n readonly type: 'program';\n}\n\nexport interface CommandContext {\n readonly command: CliCommand;\n readonly json: boolean;\n}\n\nexport interface RenderContext<Input> {\n readonly command: CliCommand;\n readonly input: Input;\n readonly json: false;\n}\n\nexport interface FieldBuilder<Value = never> {\n string(): ZodString;\n number(): ZodNumber;\n boolean(): ZodBoolean;\n enum<const Values extends readonly [string, ...string[]]>(values: Values): ZodType<Values[number]>;\n array<Inner extends ZodType>(inner: Inner): ZodArray<Inner>;\n schema<Schema extends ZodType>(schema: Schema): Schema;\n}\n\ninterface HandlerBuilder<Input, Output extends ZodType> {\n handler(\n handler: (\n input: Input,\n context: CommandContext,\n ) => SchemaInput<Output> | Promise<SchemaInput<Output>>,\n ): CliCommand;\n}\n\ninterface OutputBuilder<Input, Output extends ZodType>\n extends HandlerBuilder<Input, Output> {\n render(\n render: (\n output: SchemaOutput<Output>,\n context: RenderContext<Input>,\n ) => string | void | Promise<string | void>,\n ): HandlerBuilder<Input, Output>;\n}\n\ninterface CommandBuilder<PassThrough extends boolean> {\n input<Input extends ObjectSchema>(schema: Input): {\n output<Output extends ZodType>(schema: Output): OutputBuilder<\n PassThrough extends true\n ? SchemaOutput<Input> & { args: string[] }\n : SchemaOutput<Input>,\n Output\n >;\n };\n}\n\nexport interface OptionKitAdapter {\n argument<Value = never>(configuration?: ArgumentConfiguration<Value>): FieldBuilder<Value>;\n command(\n configuration: CommandConfiguration & {\n passThroughArguments: true | PassThroughArgumentsConfiguration;\n },\n ): CommandBuilder<true>;\n command(configuration?: CommandConfiguration): CommandBuilder<false>;\n option<Value = never>(configuration?: OptionConfiguration<Value>): FieldBuilder<Value>;\n program(configuration?: ProgramConfiguration): {\n router(routes: Readonly<Record<string, CliRoute>>): CliProgram;\n };\n}\n\ntype ResolvedOptionConfiguration = Omit<OptionConfiguration<never>, 'env' | 'short'> & {\n env?: string;\n /** Internal compatibility parser for structured values carried by one env string. */\n parse?: InternalValueParser;\n short?: string;\n};\n\ninterface StructuredEnvironmentBinding {\n readonly env: string;\n readonly name: string;\n readonly short?: string;\n}\n\ninterface OptionNegation {\n readonly name: string;\n}\n\ninterface RuntimeOption {\n readonly long?: string;\n}\n\ninterface VersionedRuntimeRoute extends CliRoute {\n readonly options?: readonly RuntimeOption[];\n readonly parent: unknown | null;\n version(value: string, flags?: string, description?: string): unknown;\n}\n\ninterface RuntimeCliCommand extends CliCommand {\n readonly options?: readonly RuntimeOption[];\n configureOutput?: () => { writeErr?: (value: string) => void };\n option?: (flags: string, description?: string) => RuntimeCliCommand;\n}\n\ninterface RuntimeRoute extends CliRoute {\n readonly commands?: readonly RuntimeRoute[];\n name?: () => string;\n aliases?: () => string[];\n}\n\nexport type OptionKitLogger = (\n message: string,\n details?: Readonly<Record<string, unknown>>,\n) => void;\n\nexport interface ErrorFormatterPackage {\n /** Package name imported at runtime. */\n name: string;\n /** Package specifier passed to install-pkg. Defaults to `name`. */\n specifier?: string;\n}\n\nexport interface CreateOptionKitSettings {\n /** Module URL for the consuming CLI; used to find its nearest package.json. */\n moduleUrl?: string | URL;\n /** Explicit consuming package root when moduleUrl discovery is not appropriate. */\n packageRoot?: string;\n /** Override the consuming package name used to derive the environment prefix. */\n projectName?: string;\n /** Add `-v, --version` from an explicit SemVer supplied by the CLI package. */\n version?: string | false;\n /** Override the generated prefix, or disable environment bindings. */\n environmentPrefix?: string | false;\n /** Generate non-conflicting single-letter flags. Defaults to true. */\n shortFlags?: boolean;\n /** Add `--no-*` twins for boolean options. Defaults to true. */\n booleanNegations?: boolean;\n /** Letters that automatic short-flag generation must not use. */\n reservedShortFlags?: readonly string[];\n /** Per-field CLI metadata applied after generated values. */\n fields?: Readonly<Record<string, OptionConfiguration>>;\n /** Working directory used to detect the caller's package manager. */\n invocationDirectory?: string;\n /** Explicit isolated install directory. By default, missing packages install at packageRoot. */\n cacheDirectory?: string;\n /** Optional diagnostics sink. optionkit never writes install progress itself. */\n log?: OptionKitLogger;\n /** Best-effort stack formatter package. Defaults to the catalog's clean-stack. */\n errorFormatter?: string | ErrorFormatterPackage | false;\n /** Format rejected handlers and renderers at the parse boundary. Defaults to true. */\n formatErrors?: boolean;\n}\n\nexport interface OptionKit {\n /** CLI builder namespace, loaded from the project or the lazy cache. */\n f: OptionKitAdapter;\n /** Zod from the same dependency location as the CLI adapter. */\n z: ZodNamespace;\n /** Prefix used for generated environment variables, including its trailing underscore. */\n environmentPrefix: string | false;\n /** The consuming package root discovered for this CLI. */\n packageRoot: string;\n /** Where the CLI dependencies were resolved or installed. */\n dependencySource: 'cache' | 'package-root' | 'project';\n /** Render an error with the optional formatter when it is available. */\n formatError: (error: unknown) => string;\n}\n\nconst REQUIRED_CLI_DEPENDENCY_SPECIFIERS = [\n `fireargs@${catalog.fireargs}`,\n `zod@${catalog.zod}`,\n];\nconst DEFAULT_ERROR_FORMATTER = {\n name: 'clean-stack',\n specifier: `clean-stack@${catalog['clean-stack']}`,\n} as const satisfies ErrorFormatterPackage;\nconst installPromises = new Map<string, Promise<LoadedDependencies>>();\nconst formatterPromises = new Map<string, Promise<StackFormatter | undefined>>();\n\n/**\n * Load the CLI adapter on demand. Every command input is transparently augmented\n * with environment bindings and conflict-free short flags.\n */\nexport async function createOptionKit(\n settings: CreateOptionKitSettings = {},\n): Promise<OptionKit> {\n const packageInfo = await consumingPackage(settings);\n const version = resolvePackageVersion(settings.version);\n const loaded = await loadDependencies(packageInfo.root, settings);\n const environmentPrefix = resolveEnvironmentPrefix(\n settings.environmentPrefix,\n settings.projectName ?? packageInfo.name,\n );\n const errorFormatter = (error: unknown) => formatError(error, loaded.errorFormatter);\n\n return {\n f: createAdapter(\n loaded.f,\n loaded.z,\n environmentPrefix,\n version,\n settings,\n errorFormatter,\n ),\n z: loaded.z,\n environmentPrefix,\n packageRoot: packageInfo.root,\n dependencySource: loaded.source,\n formatError: errorFormatter,\n };\n}\n\ninterface PackageInfo {\n name: string;\n root: string;\n}\n\ninterface LoadedDependencies {\n errorFormatter?: StackFormatter;\n f: CliAdapterModule['f'];\n z: ZodNamespace;\n source: 'cache' | 'package-root' | 'project';\n}\n\nasync function consumingPackage(\n settings: CreateOptionKitSettings,\n): Promise<PackageInfo> {\n const root = settings.packageRoot\n ? path.resolve(settings.packageRoot)\n : await findPackageRoot(await discoveryStart(settings.moduleUrl));\n const manifest = JSON.parse(\n await readFile(path.join(root, 'package.json'), 'utf8'),\n ) as { name?: unknown };\n const name = settings.projectName ?? manifest.name;\n if (typeof name !== 'string' || name.trim() === '') {\n throw new TypeError('The consuming package must have a name or set projectName.');\n }\n return { name, root };\n}\n\nfunction resolvePackageVersion(\n configured: CreateOptionKitSettings['version'],\n): string | undefined {\n if (configured === undefined || configured === false) return undefined;\n const version = validSemver(configured);\n if (!version) {\n throw new TypeError(`version must be valid SemVer; received ${JSON.stringify(configured)}.`);\n }\n return version;\n}\n\nasync function discoveryStart(moduleUrl: string | URL | undefined): Promise<string> {\n const candidate = moduleUrl === undefined\n ? process.argv[1] ?? process.cwd()\n : moduleUrl instanceof URL || moduleUrl.startsWith('file:')\n ? fileURLToPath(moduleUrl)\n : moduleUrl;\n const absolute = path.resolve(candidate);\n try {\n return await realpath(absolute);\n } catch {\n return absolute;\n }\n}\n\nasync function findPackageRoot(start: string): Promise<string> {\n let current: string;\n try {\n current = (await stat(start)).isDirectory() ? start : path.dirname(start);\n } catch {\n current = path.extname(start) === '' ? start : path.dirname(start);\n }\n\n while (true) {\n const manifest = path.join(current, 'package.json');\n try {\n await access(manifest, constants.R_OK);\n return current;\n } catch {\n const parent = path.dirname(current);\n if (parent === current) {\n throw new Error(`Could not find a package.json above ${JSON.stringify(start)}.`);\n }\n current = parent;\n }\n }\n}\n\nasync function loadDependencies(\n packageRoot: string,\n settings: CreateOptionKitSettings,\n): Promise<LoadedDependencies> {\n const project = await importDependencies(packageRoot);\n const invocationDirectory = path.resolve(settings.invocationDirectory ?? process.cwd());\n const detected = await detectPackageManager(invocationDirectory);\n const packageManager = detected ?? 'npm';\n const installRoot = path.resolve(settings.cacheDirectory ?? packageRoot);\n const installSource = settings.cacheDirectory ? 'cache' : 'package-root';\n if (settings.cacheDirectory) await ensureCachePackage(installRoot);\n const errorFormatter = await loadErrorFormatter(\n packageRoot,\n installRoot,\n packageManager,\n settings.errorFormatter,\n settings.log,\n );\n if (project) {\n return { ...project, errorFormatter, source: 'project' };\n }\n\n let installation = installPromises.get(installRoot);\n if (!installation) {\n installation = installAndImport(\n installRoot,\n packageManager,\n installSource,\n settings.log,\n );\n installPromises.set(installRoot, installation);\n }\n try {\n return { ...await installation, errorFormatter };\n } catch (error) {\n installPromises.delete(installRoot);\n throw error;\n }\n}\n\nasync function installAndImport(\n installRoot: string,\n packageManager: string,\n source: 'cache' | 'package-root',\n log: OptionKitLogger | undefined,\n): Promise<LoadedDependencies> {\n const existing = await importDependencies(installRoot);\n if (existing) return { ...existing, source };\n\n log?.('Installing required CLI dependencies.', {\n installDirectory: installRoot,\n packages: REQUIRED_CLI_DEPENDENCY_SPECIFIERS,\n packageManager,\n });\n try {\n await installWithoutSaving(REQUIRED_CLI_DEPENDENCY_SPECIFIERS, installRoot, packageManager);\n } catch (error) {\n log?.('Could not install required CLI dependencies.', {\n error: formatError(error),\n });\n throw error;\n }\n const installed = await importDependencies(installRoot);\n if (!installed) {\n const unresolved = ['fireargs', 'zod'].filter(name => !resolvePackage(name, installRoot));\n throw new Error(\n `CLI dependencies were installed but ${unresolved.join(' and ') || 'their exports'} could not be resolved from ${installRoot}.`,\n );\n }\n log?.('Required CLI dependencies are ready.', { installDirectory: installRoot });\n return { ...installed, source };\n}\n\nasync function importDependencies(\n root: string,\n): Promise<Omit<LoadedDependencies, 'source'> | undefined> {\n const [adapter, zod] = await Promise.all([\n importPackageIfAvailable<CliAdapterModule>('fireargs', root),\n importPackageIfAvailable<typeof import('zod')>('zod', root),\n ]);\n if (!adapter || !zod) return undefined;\n const requiredBuilders = ['argument', 'command', 'option', 'program'] as const;\n if (!adapter.f || requiredBuilders.some(name => typeof adapter.f[name] !== 'function')) {\n throw new TypeError('The resolved CLI adapter does not expose its required builder functions.');\n }\n if (!zod.z || typeof zod.z.object !== 'function') {\n throw new TypeError('The resolved Zod package does not expose z.object().');\n }\n return { f: adapter.f, z: zod.z };\n}\n\nasync function loadErrorFormatter(\n packageRoot: string,\n installRoot: string,\n packageManager: string,\n configured: CreateOptionKitSettings['errorFormatter'],\n log: OptionKitLogger | undefined,\n): Promise<StackFormatter | undefined> {\n const formatter = resolveErrorFormatter(configured);\n if (!formatter) return undefined;\n const projectFormatter = await importErrorFormatter(formatter.name, packageRoot, log);\n if (projectFormatter) return projectFormatter;\n\n const cacheKey = JSON.stringify([installRoot, formatter.name, formatter.specifier]);\n let installation = formatterPromises.get(cacheKey);\n if (!installation) {\n installation = installErrorFormatter(formatter, installRoot, packageManager, log);\n formatterPromises.set(cacheKey, installation);\n }\n return installation;\n}\n\nfunction resolveErrorFormatter(\n configured: CreateOptionKitSettings['errorFormatter'],\n): Required<ErrorFormatterPackage> | undefined {\n if (configured === false) return undefined;\n if (configured === undefined) return { ...DEFAULT_ERROR_FORMATTER };\n if (typeof configured === 'string') {\n return { name: configured, specifier: configured };\n }\n return {\n name: configured.name,\n specifier: configured.specifier ?? configured.name,\n };\n}\n\nasync function installErrorFormatter(\n formatter: Required<ErrorFormatterPackage>,\n installRoot: string,\n packageManager: string,\n log: OptionKitLogger | undefined,\n): Promise<StackFormatter | undefined> {\n const existing = await importErrorFormatter(formatter.name, installRoot, log);\n if (existing) return existing;\n\n log?.('Installing optional error formatter.', {\n installDirectory: installRoot,\n package: formatter.specifier,\n packageManager,\n });\n try {\n await installWithoutSaving(formatter.specifier, installRoot, packageManager);\n const installed = await importErrorFormatter(formatter.name, installRoot, log);\n if (installed) {\n log?.('Optional error formatter is ready.', {\n installDirectory: installRoot,\n package: formatter.name,\n });\n }\n return installed;\n } catch (error) {\n log?.('Optional error formatter is unavailable.', {\n error: formatError(error),\n package: formatter.name,\n });\n return undefined;\n }\n}\n\nasync function importErrorFormatter(\n packageName: string,\n root: string,\n log: OptionKitLogger | undefined,\n): Promise<StackFormatter | undefined> {\n try {\n const module = await importPackageIfAvailable<ErrorFormatterModule>(packageName, root);\n if (!module) return undefined;\n const formatter = [module.default, module.formatError, module.format]\n .find(candidate => typeof candidate === 'function');\n if (typeof formatter === 'function') return formatter as StackFormatter;\n log?.('Optional error formatter has no supported function export.', {\n package: packageName,\n });\n return undefined;\n } catch (error) {\n log?.('Optional error formatter could not be loaded.', {\n error: formatError(error),\n package: packageName,\n });\n return undefined;\n }\n}\n\nfunction formatError(error: unknown, formatter?: StackFormatter): string {\n const stack = error instanceof Error\n ? error.stack ?? `${error.name}: ${error.message}`\n : String(error);\n if (!formatter) return stack;\n try {\n const rendered = formatter(stack, { pretty: true });\n return typeof rendered === 'string' ? rendered : stack;\n } catch {\n return stack;\n }\n}\n\nasync function ensureCachePackage(cacheRoot: string): Promise<void> {\n await mkdir(cacheRoot, { recursive: true });\n const manifest = path.join(cacheRoot, 'package.json');\n try {\n await writeFile(\n manifest,\n `${JSON.stringify({ name: 'optionkit-cli-cache', private: true, type: 'module' }, null, 2)}\\n`,\n { encoding: 'utf8', flag: 'wx' },\n );\n } catch (error) {\n if (!(error instanceof Error && 'code' in error && error.code === 'EEXIST')) throw error;\n }\n}\n\nconst INSTALL_STATE_FILES = [\n 'package.json',\n 'bun.lock',\n 'bun.lockb',\n 'package-lock.json',\n 'pnpm-lock.yaml',\n 'yarn.lock',\n] as const;\n\nasync function installWithoutSaving(\n packages: string | string[],\n installRoot: string,\n packageManager: string,\n): Promise<void> {\n const snapshots = new Map<string, Buffer | undefined>();\n for (const name of INSTALL_STATE_FILES) {\n const filename = path.join(installRoot, name);\n snapshots.set(filename, await readFileIfPresent(filename));\n }\n try {\n await installPackage(packages, {\n additionalArgs: agent => noSaveArguments(agent),\n cwd: installRoot,\n packageManager,\n preferOffline: true,\n silent: true,\n });\n } finally {\n for (const [filename, content] of snapshots) {\n const current = await readFileIfPresent(filename);\n if (content && current?.equals(content)) continue;\n if (!content && !current) continue;\n if (content) await writeFile(filename, content);\n else await rm(filename, { force: true });\n }\n }\n}\n\nasync function readFileIfPresent(filename: string): Promise<Buffer | undefined> {\n try {\n return await readFile(filename);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'ENOENT') return undefined;\n throw error;\n }\n}\n\nfunction noSaveArguments(agent: string): string[] {\n if (agent === 'bun') return ['--no-save'];\n if (agent === 'npm') return ['--no-save', '--package-lock=false'];\n if (agent === 'pnpm') return ['--lockfile=false'];\n if (agent === 'yarn') return ['--no-lockfile'];\n return [];\n}\n\nfunction createAdapter(\n adapter: CliAdapterModule['f'],\n zod: ZodNamespace,\n environmentPrefix: string | false,\n version: string | undefined,\n settings: CreateOptionKitSettings,\n errorFormatter: (error: unknown) => string,\n): OptionKitAdapter {\n const environmentBindings = new WeakMap<CliRoute, readonly StructuredEnvironmentBinding[]>();\n const inputSettings = version === undefined\n ? settings\n : {\n ...settings,\n reservedShortFlags: ['v', ...(settings.reservedShortFlags ?? [])],\n };\n return {\n ...adapter,\n command(configuration: CommandConfiguration = {}) {\n const { passThroughArguments, ...fireargsConfiguration } = configuration;\n const passThrough = passThroughArguments === true ||\n (typeof passThroughArguments === 'object' && passThroughArguments !== null);\n const builder = adapter.command(passThrough\n ? {\n allowExcessArguments: true,\n allowUnknownOption: true,\n enablePositionalOptions: true,\n jsonOption: false,\n llmsOption: false,\n passThroughOptions: true,\n ...fireargsConfiguration,\n }\n : fireargsConfiguration);\n return {\n input<Input extends ObjectSchema>(schema: Input) {\n const commandInput = passThrough\n ? addPassThroughArgument(schema, adapter, zod, passThroughArguments)\n : schema;\n const { adapted, bindings, negations } = adaptInputSchema(\n commandInput,\n adapter,\n zod,\n environmentPrefix,\n inputSettings,\n );\n const inputBuilder = builder.input(adapted);\n return {\n output(output: ZodType) {\n const outputBuilder = inputBuilder.output(output);\n const attach = (route: CliCommand): CliCommand => {\n addBooleanNegations(route, negations);\n environmentBindings.set(route, bindings);\n wrapParseBoundary(\n route,\n () => bindings,\n settings.formatErrors === false ? undefined : errorFormatter,\n version,\n );\n return route;\n };\n return {\n handler(handler: never) {\n return attach(outputBuilder.handler(handler));\n },\n render(render: never) {\n const handlerBuilder = outputBuilder.render(render);\n return {\n handler(handler: never) {\n return attach(handlerBuilder.handler(handler));\n },\n };\n },\n };\n },\n };\n },\n };\n },\n program(configuration: ProgramConfiguration = {}) {\n const builder = adapter.program(configuration);\n return {\n router(routes: Readonly<Record<string, CliRoute>>) {\n const program = builder.router(routes as never);\n wrapParseBoundary(\n program,\n (argv, options) => {\n const selected = selectedLeaf(program as unknown as RuntimeRoute, argv, options);\n return selected ? environmentBindings.get(selected) ?? [] : [];\n },\n settings.formatErrors === false ? undefined : errorFormatter,\n version,\n );\n return program;\n },\n };\n },\n } as OptionKitAdapter;\n}\n\nfunction addVersionOption(route: CliRoute, version: string | undefined): void {\n if (version === undefined) return;\n const runtime = route as VersionedRuntimeRoute;\n if (runtime.options?.some(option => option.long === '--version')) return;\n runtime.version(version, '-v, --version');\n}\n\nfunction addPassThroughArgument(\n schema: ObjectSchema,\n adapter: CliAdapterModule['f'],\n zod: ZodNamespace,\n configuration: true | PassThroughArgumentsConfiguration,\n): ZodObject<ZodShape> {\n const object = objectSchema(schema);\n if ('args' in object.shape) {\n throw new TypeError('passThroughArguments reserves the input field \"args\".');\n }\n const description = typeof configuration === 'object'\n ? configuration.description\n : undefined;\n const args = adapter.argument().schema(\n zod.array(zod.string()).default([]).describe(\n description ?? 'Arguments passed to the executable.',\n ),\n );\n return object.safeExtend({ args }) as ZodObject<ZodShape>;\n}\n\ntype RegisteredFieldConfiguration =\n | ({ kind: 'argument' } & ArgumentConfiguration)\n | ({ kind: 'option' } & OptionConfiguration);\n\nfunction adaptInputSchema(\n schema: ObjectSchema,\n adapter: CliAdapterModule['f'],\n zod: ZodNamespace,\n environmentPrefix: string | false,\n settings: CreateOptionKitSettings,\n): {\n readonly adapted: ZodObject<ZodShape>;\n readonly bindings: readonly StructuredEnvironmentBinding[];\n readonly negations: readonly OptionNegation[];\n} {\n const object = objectSchema(schema);\n const shape = object.shape as ZodShape;\n const registered = Object.fromEntries(Object.entries(shape).flatMap(([key, field]) => {\n const configuration = registeredFieldConfiguration(field, zod);\n return configuration ? [[key, configuration]] : [];\n })) as Record<string, RegisteredFieldConfiguration | undefined>;\n const configurations = optionConfigurations(\n shape,\n environmentPrefix,\n zod,\n settings,\n registered,\n );\n const fields = Object.fromEntries(Object.entries(shape).map(([key, field]) => {\n if (registered[key]?.kind === 'argument') return [key, field];\n return [key, adapter.option(configurations[key]).schema(field)];\n })) as ZodShape;\n const bindings = Object.entries(configurations).flatMap(([key, configuration]) => {\n if (\n configuration.env === undefined ||\n configuration.parse !== undefined ||\n structuredValueKind(shape[key], zod) !== 'array'\n ) return [];\n return [{\n env: configuration.env,\n name: configuration.name ?? toCliKey(key),\n short: configuration.short,\n }];\n });\n const optionNames = new Set(Object.entries(configurations).map(([key, configuration]) => (\n configuration.name ?? toCliKey(key)\n )));\n const negations = settings.booleanNegations === false\n ? []\n : Object.entries(configurations).flatMap(([key, configuration]) => {\n const name = configuration.name ?? toCliKey(key);\n if (\n configuration.parse !== undefined ||\n name.startsWith('no-') ||\n optionNames.has(`no-${name}`) ||\n !negatableValue(shape[key], zod)\n ) return [];\n return [{ name }];\n });\n return {\n adapted: object.safeExtend(fields) as ZodObject<ZodShape>,\n bindings,\n negations,\n };\n}\n\nfunction addBooleanNegations(\n route: CliCommand,\n negations: readonly OptionNegation[],\n): void {\n const command = route as RuntimeCliCommand;\n if (typeof command.option !== 'function') return;\n for (const negation of negations) {\n const flag = `--no-${negation.name}`;\n if (command.options?.some(option => option.long === flag)) continue;\n command.option(flag, `Negate --${negation.name}.`);\n }\n}\n\nfunction negatableValue(\n schema: ZodType | undefined,\n zod: ZodNamespace,\n seen = new Set<ZodType>(),\n): boolean {\n if (!schema || seen.has(schema)) return false;\n seen.add(schema);\n if (schema instanceof zod.ZodBoolean) return true;\n if (schema instanceof zod.ZodLiteral) return schema.values.has(false);\n if (schema instanceof zod.ZodUnion) {\n return (schema.options as readonly ZodType[])\n .some(option => negatableValue(option, zod, seen));\n }\n if (schema instanceof zod.ZodPipe) {\n return negatableValue(schema.in as ZodType, zod, seen);\n }\n const wrapper = schema as ZodType & { unwrap?: () => ZodType };\n return typeof wrapper.unwrap === 'function'\n ? negatableValue(wrapper.unwrap(), zod, seen)\n : false;\n}\n\nfunction objectSchema(schema: ObjectSchema): ZodObject<ZodShape> {\n let candidate: unknown = schema;\n while (candidate && typeof candidate === 'object') {\n if ('shape' in candidate) {\n const shape = candidate.shape;\n if (shape && typeof shape === 'object') return candidate as ZodObject<ZodShape>;\n }\n if (!('unwrap' in candidate) || typeof candidate.unwrap !== 'function') break;\n candidate = candidate.unwrap();\n }\n throw new TypeError('createOptionKit requires a Zod object schema, optionally wrapped as readonly.');\n}\n\nfunction resolveEnvironmentPrefix(\n configured: string | false | undefined,\n projectName: string,\n): string | false {\n if (configured === false) return false;\n const translated = toEnvironmentKey(configured ?? projectName);\n if (!translated) throw new TypeError('The environment prefix must contain a letter or number.');\n return `${translated}_`;\n}\n\nfunction toCliKey(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/gu, '$1-$2')\n .replace(/([A-Z])([A-Z][a-z])/gu, '$1-$2')\n .toLowerCase();\n}\n\nfunction optionConfigurations<Schema extends ObjectSchema>(\n shape: ZodShape,\n environmentPrefix: string | false,\n zod: ZodNamespace,\n settings: CreateOptionKitSettings,\n registered: Readonly<Record<string, RegisteredFieldConfiguration | undefined>> = {},\n): Record<string, ResolvedOptionConfiguration> {\n const keys = Object.keys(shape).filter(key => registered[key]?.kind !== 'argument');\n const overrides = Object.fromEntries(keys.map(key => {\n const existing = registered[key];\n const existingOption = existing?.kind === 'option'\n ? Object.fromEntries(Object.entries(existing).filter(([name]) => name !== 'kind'))\n : {};\n return [key, { ...settings.fields?.[key], ...existingOption }];\n })) as Record<string, OptionConfiguration | undefined>;\n const shorts = generatedShortFlags(keys, overrides, settings);\n\n return Object.fromEntries(keys.map(key => {\n const override = overrides?.[key];\n const generated: ResolvedOptionConfiguration = {};\n if (environmentPrefix !== false && override?.env !== false) {\n generated.env = override?.env ?? `${environmentPrefix}${toEnvironmentKey(key)}`;\n const kind = structuredValueKind(shape[key], zod);\n if (kind === 'object' && !override?.parse) generated.parse = structuredValueParser(kind);\n }\n if (override?.short !== false && (override?.short ?? shorts[key])) {\n generated.short = typeof override?.short === 'string'\n ? normalizeShort(override.short, key)\n : shorts[key];\n }\n if (override) {\n const { env: _env, short: _short, parse, ...rest } = override;\n Object.assign(generated, rest);\n if (parse) generated.parse = parse as InternalValueParser;\n }\n return [key, generated];\n }));\n}\n\nfunction registeredFieldConfiguration(\n schema: ZodType,\n zod: ZodNamespace,\n seen = new Set<ZodType>(),\n): RegisteredFieldConfiguration | undefined {\n if (seen.has(schema)) return undefined;\n seen.add(schema);\n const metadata = zod.globalRegistry.get(schema) as Record<string, unknown> | undefined;\n const registered = metadata?.fireargs;\n if (registered && typeof registered === 'object' && 'kind' in registered) {\n const kind = (registered as { kind?: unknown }).kind;\n if (kind === 'argument' || kind === 'option') {\n return registered as RegisteredFieldConfiguration;\n }\n }\n if (schema instanceof zod.ZodPipe) {\n return registeredFieldConfiguration(schema.in as ZodType, zod, seen);\n }\n const wrapper = schema as ZodType & { unwrap?: () => ZodType };\n return typeof wrapper.unwrap === 'function'\n ? registeredFieldConfiguration(wrapper.unwrap(), zod, seen)\n : undefined;\n}\n\n/**\n * Fireargs handles structured argv values, but an environment variable reaches\n * Commander as one string. Detect only unambiguous JSON containers so scalar\n * coercion and Fireargs' native parsing remain untouched.\n */\nfunction structuredValueKind(\n schema: ZodType | undefined,\n zod: ZodNamespace,\n seen = new Set<ZodType>(),\n): StructuredValueKind | undefined {\n if (!schema || seen.has(schema)) return undefined;\n seen.add(schema);\n\n if (schema instanceof zod.ZodArray || schema instanceof zod.ZodTuple) return 'array';\n if (schema instanceof zod.ZodObject || schema instanceof zod.ZodRecord) return 'object';\n if (schema instanceof zod.ZodUnion) {\n const kinds = schema.options.map(option => (\n structuredValueKind(option as ZodType, zod, new Set(seen))\n )).filter((kind): kind is StructuredValueKind => kind !== undefined);\n const unique = new Set(kinds);\n return unique.size === 1 ? kinds[0] : undefined;\n }\n if (schema instanceof zod.ZodPipe) {\n return structuredValueKind(schema.in as ZodType, zod, seen);\n }\n\n const wrapper = schema as ZodType & { unwrap?: () => ZodType };\n return typeof wrapper.unwrap === 'function'\n ? structuredValueKind(wrapper.unwrap(), zod, seen)\n : undefined;\n}\n\nfunction structuredValueParser(kind: StructuredValueKind): InternalValueParser {\n return ((value: string): unknown => decodeStructuredValue(value, kind)) as InternalValueParser;\n}\n\nfunction decodeStructuredValue(value: string, kind: StructuredValueKind): unknown {\n try {\n return JSON.parse(value) as unknown;\n } catch {\n // A non-JSON string may still be useful to an array schema or a union.\n }\n return kind === 'array' ? splitArrayValue(value) ?? value : value;\n}\n\nfunction wrapParseBoundary(\n route: CliRoute,\n bindings: (\n argv: readonly string[] | undefined,\n options: CliParseOptions | undefined,\n ) => readonly StructuredEnvironmentBinding[],\n errorFormatter: ((error: unknown) => string) | undefined,\n version: string | undefined,\n): void {\n const parse = route.parseAsync.bind(route);\n route.parseAsync = async (argv, options) => {\n const runtime = route as VersionedRuntimeRoute;\n if (runtime.parent === null) addVersionOption(route, version);\n const active = bindings(argv, options);\n try {\n if (!active.length) return await parse(argv, options);\n\n const effectiveArgv = [...(argv ?? process.argv)];\n const userOffset = argvOffset(options);\n const userArguments = effectiveArgv.slice(userOffset);\n const insertion = effectiveArgv.indexOf('--', userOffset);\n const injected: string[] = [];\n const previous = new Map<string, string>();\n\n for (const binding of active) {\n const value = process.env[binding.env];\n if (value === undefined) continue;\n previous.set(binding.env, value);\n delete process.env[binding.env];\n if (hasOption(userArguments, binding)) continue;\n const decoded = decodeStructuredValue(value, 'array');\n const values = Array.isArray(decoded) ? decoded : [decoded];\n for (const item of values) injected.push(`--${binding.name}=${stringifyCliValue(item)}`);\n }\n\n effectiveArgv.splice(insertion === -1 ? effectiveArgv.length : insertion, 0, ...injected);\n try {\n return await parse(effectiveArgv, options);\n } finally {\n for (const [name, value] of previous) process.env[name] = value;\n }\n } catch (error) {\n if (!errorFormatter) throw error;\n const command = route as RuntimeCliCommand;\n const writer = command.configureOutput?.().writeErr ?? (value => process.stderr.write(value));\n writer(`${errorFormatter(error)}\\n`);\n process.exitCode = 1;\n return undefined;\n }\n };\n}\n\nfunction selectedLeaf(\n program: RuntimeRoute,\n argv: readonly string[] | undefined,\n options: CliParseOptions | undefined,\n): CliRoute | undefined {\n const args = (argv ?? process.argv).slice(argvOffset(options));\n let current = program;\n let offset = 0;\n while (current.commands?.length) {\n let selected: RuntimeRoute | undefined;\n let selectedAt = -1;\n for (let index = offset; index < args.length; index += 1) {\n const token = args[index];\n if (!token || token.startsWith('-')) continue;\n selected = current.commands.find(command => (\n command.name?.() === token || command.aliases?.().includes(token)\n ));\n if (selected) {\n selectedAt = index;\n break;\n }\n }\n if (!selected) return undefined;\n current = selected;\n offset = selectedAt + 1;\n }\n return current;\n}\n\nfunction argvOffset(options: CliParseOptions | undefined): number {\n if (options?.from === 'user') return 0;\n if (options?.from === 'electron') return 1;\n return 2;\n}\n\nfunction hasOption(\n args: readonly string[],\n binding: StructuredEnvironmentBinding,\n): boolean {\n const long = `--${binding.name}`;\n const short = binding.short ? `-${binding.short}` : undefined;\n return args.some(argument => (\n argument === long ||\n argument.startsWith(`${long}=`) ||\n (short !== undefined && (argument === short || argument.startsWith(`${short}=`)))\n ));\n}\n\nfunction stringifyCliValue(value: unknown): string {\n if (typeof value === 'string') return value;\n if (value === null || typeof value !== 'object') return String(value);\n return JSON.stringify(value);\n}\n\n/** Split comma- or whitespace-delimited shell words without interpreting operators. */\nfunction splitArrayValue(value: string): string[] | undefined {\n const result: string[] = [];\n let token = '';\n let quote: '\"' | \"'\" | undefined;\n let escaped = false;\n let started = false;\n\n for (const character of value) {\n if (escaped) {\n token += character;\n escaped = false;\n started = true;\n } else if (character === '\\\\') {\n escaped = true;\n started = true;\n } else if (quote) {\n if (character === quote) quote = undefined;\n else token += character;\n started = true;\n } else if (character === '\"' || character === \"'\") {\n quote = character;\n started = true;\n } else if (character === ',' || /\\s/u.test(character)) {\n if (started) result.push(token);\n token = '';\n started = false;\n } else {\n token += character;\n started = true;\n }\n }\n\n if (quote || escaped) return undefined;\n if (started) result.push(token);\n return result;\n}\n\nfunction generatedShortFlags(\n keys: readonly string[],\n overrides: Record<string, OptionConfiguration | undefined> | undefined,\n settings: CreateOptionKitSettings,\n): Record<string, string | undefined> {\n if (settings.shortFlags === false) return {};\n const reserved = new Set(['h', ...(settings.reservedShortFlags ?? [])].map(value => value.toLowerCase()));\n const explicit = new Map<string, string>();\n\n for (const key of keys) {\n const value = overrides?.[key]?.short;\n if (typeof value !== 'string') continue;\n const normalized = normalizeShort(value, key);\n const owner = explicit.get(normalized);\n if (owner) throw new TypeError(`Short flag -${normalized} is configured for both ${owner} and ${key}.`);\n if (reserved.has(normalized)) throw new TypeError(`Short flag -${normalized} is reserved.`);\n explicit.set(normalized, key);\n }\n\n const candidates = new Map<string, string[]>();\n for (const key of keys) {\n if (overrides?.[key]?.short !== undefined) continue;\n const longName = overrides?.[key]?.name ?? key;\n const candidate = toEnvironmentKey(longName).charAt(0).toLowerCase();\n if (!candidate || reserved.has(candidate) || explicit.has(candidate)) continue;\n candidates.set(candidate, [...(candidates.get(candidate) ?? []), key]);\n }\n\n const result: Record<string, string | undefined> = {};\n for (const [candidate, owners] of candidates) {\n if (owners.length === 1) result[owners[0] as string] = candidate;\n }\n return result;\n}\n\nfunction normalizeShort(value: string, key: string): string {\n const normalized = value.replace(/^-+/u, '').toLowerCase();\n if (!/^[a-z0-9]$/u.test(normalized)) {\n throw new TypeError(`Short flag for ${key} must be one letter or digit.`);\n }\n return normalized;\n}\n\nfunction toEnvironmentKey(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/gu, '$1_$2')\n .replace(/^@/u, '')\n .replace(/[^a-zA-Z0-9]+/gu, '_')\n .replace(/^_+|_+$/gu, '')\n .toUpperCase();\n}\n"]}
|
package/package.json
CHANGED
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"watch": "projen watch",
|
|
21
21
|
"projen": "projen",
|
|
22
22
|
"pack:release": "bun pm pack --ignore-scripts --destination ../../dist/packages --quiet",
|
|
23
|
-
"publish:release": "npm publish ../../dist/packages/optionkit-0.8.
|
|
23
|
+
"publish:release": "npm publish ../../dist/packages/optionkit-0.8.3.tgz --access public --tag latest --provenance"
|
|
24
24
|
},
|
|
25
25
|
"author": {
|
|
26
26
|
"name": "optionkit contributors",
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/bun": "^1.4.4",
|
|
31
31
|
"@types/node": "^26.6.6",
|
|
32
|
+
"@types/semver": "^7.8.0",
|
|
32
33
|
"clean-stack": "^7.0.0",
|
|
33
34
|
"fireargs": "^0.6.2",
|
|
34
35
|
"typescript": "^5.9.3",
|
|
@@ -39,7 +40,8 @@
|
|
|
39
40
|
"zod": "^4.6.7"
|
|
40
41
|
},
|
|
41
42
|
"dependencies": {
|
|
42
|
-
"@antfu/install-pkg": "^2.1.0"
|
|
43
|
+
"@antfu/install-pkg": "^2.1.0",
|
|
44
|
+
"semver": "^7.8.5"
|
|
43
45
|
},
|
|
44
46
|
"keywords": [
|
|
45
47
|
"args",
|
|
@@ -60,7 +62,7 @@
|
|
|
60
62
|
"provenance": true,
|
|
61
63
|
"registry": "https://registry.npmjs.org"
|
|
62
64
|
},
|
|
63
|
-
"version": "0.8.
|
|
65
|
+
"version": "0.8.3",
|
|
64
66
|
"bugs": {
|
|
65
67
|
"url": "https://github.com/regbo/lfp-js/issues"
|
|
66
68
|
},
|
|
@@ -72,6 +74,11 @@
|
|
|
72
74
|
"types": "./dist/index.d.ts",
|
|
73
75
|
"import": "./dist/index.js",
|
|
74
76
|
"default": "./dist/index.js"
|
|
77
|
+
},
|
|
78
|
+
"./metadata": {
|
|
79
|
+
"types": "./dist/_generated/metadata.d.ts",
|
|
80
|
+
"import": "./dist/_generated/metadata.js",
|
|
81
|
+
"default": "./dist/_generated/metadata.js"
|
|
75
82
|
}
|
|
76
83
|
},
|
|
77
84
|
"files": [
|