optionkit 0.8.2 → 0.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -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` is Optionkit's only hard runtime dependency. Fireargs, Zod,
124
- and `clean-stack` are optional peers and development dependencies. Their ranges
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. `clean-stack` is best-effort: failure never blocks a
127
- CLI. Rejected handlers and renderers are formatted at the `parseAsync` boundary,
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,4 @@
1
+ /** Package identity synthesized from the shared Projen configuration. */
2
+ export declare const PACKAGE_NAME: "optionkit";
3
+ export declare const PACKAGE_VERSION: "0.8.4";
4
+ //# sourceMappingURL=metadata.d.ts.map
@@ -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,4 @@
1
+ /** Package identity synthesized from the shared Projen configuration. */
2
+ export const PACKAGE_NAME = "optionkit";
3
+ export const PACKAGE_VERSION = "0.8.4";
4
+ //# sourceMappingURL=metadata.js.map
@@ -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.4\" 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
@@ -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,GAchB,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 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"]}
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"]}
@@ -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 clean-stack when the optional dependency is available. */
140
+ /** Render an error with the optional formatter when it is available. */
131
141
  formatError: (error: unknown) => string;
132
142
  }
133
143
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"optionkit.d.ts","sourceRoot":"","sources":["../src/optionkit.ts"],"names":[],"mappings":"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"}
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 CLEAN_STACK_SPECIFIER = `clean-stack@${catalog['clean-stack']}`;
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 cleanStackPromises = new Map();
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.cleanStack);
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
- const projectCleanStack = await importCleanStack(packageRoot, settings.log);
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, cleanStack, source };
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, cleanStack),
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, cleanStack, source };
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 cachedCleanStack(cacheRoot, packageManager, log) {
152
- let installation = cleanStackPromises.get(cacheRoot);
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 = installCleanStack(cacheRoot, packageManager, log);
155
- cleanStackPromises.set(cacheRoot, installation);
173
+ installation = installErrorFormatter(formatter, installRoot, packageManager, log);
174
+ formatterPromises.set(cacheKey, installation);
156
175
  }
157
176
  return installation;
158
177
  }
159
- async function installCleanStack(installRoot, packageManager, log) {
160
- const existing = await importCleanStack(installRoot, log);
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 stack cleaner.', {
195
+ log?.('Installing optional error formatter.', {
164
196
  installDirectory: installRoot,
165
- package: CLEAN_STACK_SPECIFIER,
197
+ package: formatter.specifier,
166
198
  packageManager,
167
199
  });
168
200
  try {
169
- await installWithoutSaving(CLEAN_STACK_SPECIFIER, installRoot, packageManager);
170
- const installed = await importCleanStack(installRoot, log);
171
- if (installed)
172
- log?.('Optional stack cleaner is ready.', { installDirectory: installRoot });
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 stack cleaner is unavailable.', { error: formatError(error) });
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 importCleanStack(root, log) {
219
+ async function importErrorFormatter(packageName, root, log) {
181
220
  try {
182
- return (await importPackageIfAvailable('clean-stack', root))
183
- ?.default;
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 stack cleaner could not be loaded.', { error: formatError(error) });
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, cleanStack) {
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 (!cleanStack)
245
+ if (!formatter)
195
246
  return stack;
196
247
  try {
197
- return cleanStack(stack, { pretty: true });
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, settings);
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)
@@ -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.2.tgz --access public --tag latest --provenance"
23
+ "publish:release": "npm publish ../../dist/packages/optionkit-0.8.4.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.2",
65
+ "version": "0.8.4",
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": [