@politty/zod 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/README.md +1 -1
  2. package/dist/{arg-registry-YaWTVu_x.d.ts → arg-registry-B8QvBM_Q.d.ts} +1 -1
  3. package/dist/augment.d.ts +1 -1
  4. package/dist/cli-main-B5mwyz8q.js +3 -0
  5. package/dist/{src-KzC0g5CS.js → cli-main-Cdz55PLM.js} +144 -21
  6. package/dist/cli-run-BlcK64io.js +8 -0
  7. package/dist/cli.js +2 -2
  8. package/dist/{compile-cache-Ct41pWGL.js → compile-cache-BC65o7MH.js} +4 -1
  9. package/dist/compile-cache.d.ts +4 -1
  10. package/dist/compile-cache.js +1 -1
  11. package/dist/{completion-gtWX3mwP.js → completion-DW5qVc3l.js} +10 -5
  12. package/dist/completion.d.ts +2 -2
  13. package/dist/completion.js +2 -2
  14. package/dist/docs.d.ts +1 -1
  15. package/dist/docs.js +5 -4
  16. package/dist/{index-CvhsecfS.d.ts → index-CMb2xLiJ.d.ts} +1 -1
  17. package/dist/index.d.ts +68 -17
  18. package/dist/index.js +15 -5
  19. package/dist/{prompt-CEIZ-7H1.js → prompt-BjIZThsH.js} +4 -6
  20. package/dist/prompt-clack.d.ts +1 -1
  21. package/dist/prompt-clack.js +2 -2
  22. package/dist/prompt-inquirer.d.ts +1 -1
  23. package/dist/prompt-inquirer.js +2 -2
  24. package/dist/prompt.d.ts +1 -1
  25. package/dist/prompt.js +2 -2
  26. package/dist/{register-Bk0K83W2.js → register-DlGnMLIY.js} +2 -1
  27. package/dist/runner-DR5Lw7LX.js +3 -0
  28. package/dist/{runner-D72I7wvK.js → runner-UEbd9e-3.js} +52 -43
  29. package/dist/skill.d.ts +1 -1
  30. package/dist/skill.js +6 -3
  31. package/dist/src-DO4W2NcZ.js +6 -0
  32. package/dist/src-zNS0DTqZ.js +12 -0
  33. package/package.json +1 -1
  34. package/dist/cli-main-Dn88vIyn.js +0 -84
  35. package/dist/cli-run-eibUcgys.js +0 -7
  36. package/dist/runner-FvUwOHyE.js +0 -3
package/README.md CHANGED
@@ -475,7 +475,7 @@ politty integrates Node.js's on-disk compile cache (V8 code cache, Node >= 22.8.
475
475
  }
476
476
  ```
477
477
 
478
- `generate-shim` writes an executable shim that enables the cache and loads `--entry` (a specifier relative to the shim) with a dynamic import. The rest is derived from `package.json`: the output path from the `bin` path and the program name from the `bin` name; packages with multiple bins pass `--entry` once per bin, and `--entry` itself can be omitted when the entry sits next to the shim under a conventional name (`./cli.js`, `./index.js`, ...). See [Faster Startup (Compile Cache)](./docs/recipes.md#faster-startup-compile-cache) for the flags, the opt-out (`compileCache: false`), and the hand-written shim variant.
478
+ `generate-shim` writes an executable shim that enables the cache and loads `--entry` (a specifier relative to the shim) with a dynamic import. The output path and program name come from `package.json` (the `bin` path and the `bin` name), and the shim imports the cache helper from the politty package whose `politty` bin you ran — the one you installed, so it resolves from your package. Packages with multiple bins pass `--entry` once per bin, and `--entry` itself can be omitted when the entry sits next to the shim under a conventional name (`./cli.js`, `./index.js`, ...). See [Faster Startup (Compile Cache)](./docs/recipes.md#faster-startup-compile-cache) for the flags, the opt-out (`compileCache: false`), and the hand-written shim variant.
479
479
 
480
480
  ## Skill Management
481
481
 
@@ -438,7 +438,7 @@ interface MainOptions {
438
438
  *
439
439
  * The `NODE_COMPILE_CACHE` environment variable always takes precedence.
440
440
  * Note: the entry module's static import graph is compiled before `runMain`
441
- * runs and cannot be cached here — see `politty/compile-cache` for the
441
+ * runs and cannot be cached here — see the `compile-cache` subpath for the
442
442
  * bin-shim pattern that covers it.
443
443
  */
444
444
  compileCache?: boolean | string;
package/dist/augment.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as ArgMeta } from "./arg-registry-YaWTVu_x.js";
1
+ import { n as ArgMeta } from "./arg-registry-B8QvBM_Q.js";
2
2
  //#region src/augment.d.ts
3
3
  declare module "zod" {
4
4
  interface ZodTypeDef {
@@ -0,0 +1,3 @@
1
+ import { t as runPolittyCli } from "./cli-main-Cdz55PLM.js";
2
+
3
+ export { runPolittyCli };
@@ -1,6 +1,6 @@
1
- import "./completion-gtWX3mwP.js";
2
- import "./runner-D72I7wvK.js";
3
- import "./logger-i_bb-Jhc.js";
1
+ import { a as internalField, i as internalArgs } from "./schema-extractor-DMSozq40.js";
2
+ import { n as defineCommand } from "./command-k-4yAz4J.js";
3
+ import { n as runMain } from "./runner-UEbd9e-3.js";
4
4
  import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
5
  import { basename, dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
6
6
  import { fileURLToPath } from "node:url";
@@ -10,10 +10,14 @@ import { fileURLToPath } from "node:url";
10
10
  * Generator for compile-cache bin shims.
11
11
  *
12
12
  * Emits the minimal entry file described in docs/recipes.md ("Faster
13
- * Startup"): a shim that enables the Node.js on-disk compile cache via
14
- * `politty/compile-cache` and then loads the real CLI with a dynamic
15
- * import. Meant to be wired into a `postbuild` or `prepack` script via
16
- * `politty generate-shim` so the shim never has to live in source.
13
+ * Startup"): a shim that enables the Node.js on-disk compile cache and then
14
+ * loads the real CLI with a dynamic import. Meant to be wired into a
15
+ * `postbuild` or `prepack` script via `politty generate-shim` so the shim
16
+ * never has to live in source.
17
+ *
18
+ * Each politty package binds its own generator with
19
+ * {@link createCompileCacheShimGenerator}, so the shim imports the cache
20
+ * helper from the package that generated it.
17
21
  */
18
22
  /**
19
23
  * Marker identifying files this generator wrote (overwrite guard). Must be
@@ -87,7 +91,7 @@ function defaultEntry(outputPath) {
87
91
  if (existsSync(join(dir, candidate))) return candidate;
88
92
  }
89
93
  }
90
- function shimContent(program, entry) {
94
+ function shimContent(program, entry, compileCacheSpecifier) {
91
95
  return [
92
96
  "#!/usr/bin/env node",
93
97
  "",
@@ -96,11 +100,12 @@ function shimContent(program, entry) {
96
100
  "// CLI module graph is compiled, so warm starts skip recompilation",
97
101
  "// (Node >= 22.8.0; silent no-op otherwise).",
98
102
  "try {",
99
- " const { enableCompileCache } = await import(\"politty/compile-cache\");",
103
+ ` const { enableCompileCache } = await import(${JSON.stringify(compileCacheSpecifier)});`,
100
104
  ` enableCompileCache(${JSON.stringify(program)});`,
101
105
  "} catch {",
102
- " // politty is not resolvable from here (e.g. a fully bundled CLI) —",
103
- " // start without the compile cache rather than failing the CLI.",
106
+ ` // ${compileCacheSpecifier} is not resolvable from here (e.g. a fully`,
107
+ " // bundled CLI) — start without the compile cache rather than failing",
108
+ " // the CLI.",
104
109
  "}",
105
110
  `await import(${JSON.stringify(entry)});`,
106
111
  ""
@@ -111,13 +116,24 @@ function toArray(value) {
111
116
  return Array.isArray(value) ? value : [value];
112
117
  }
113
118
  /**
114
- * Generate executable compile-cache bin shims.
119
+ * Build the shim generator for one politty package.
120
+ *
121
+ * `ownerPackage` is the npm name of the package the generator is exported
122
+ * from (`@politty/zod`, `@politty/valibot`, `politty`), and the shim imports
123
+ * `enableCompileCache` from its `compile-cache` subpath. Taking the name from
124
+ * the owner rather than guessing it is what makes the specifier reliable:
125
+ * reaching this generator at all — through that package's bin or through an
126
+ * import of it — means the package is installed in the host, so the specifier
127
+ * resolves from the shim that lands there. The alternative, reading the host's
128
+ * `package.json`, could only guess which of the three politty packages was
129
+ * meant.
115
130
  *
116
- * With no explicit paths, one shim is generated per `bin` entry of the
117
- * nearest `package.json`, each importing a conventional built module next
118
- * to it — so a bare `politty generate-shim` in a `postbuild` script is
119
- * usually enough. Explicit `entry` values are paired in order with the
120
- * `bin` entries (or with explicit `out` values of the same count).
131
+ * The returned function generates executable shims. With no explicit paths,
132
+ * one is generated per `bin` entry of the nearest `package.json`, each
133
+ * importing a conventional built module next to it — so a bare
134
+ * `politty generate-shim` in a `postbuild` script is usually enough. Explicit
135
+ * `entry` values are paired in order with the `bin` entries (or with explicit
136
+ * `out` values of the same count).
121
137
  *
122
138
  * The generated files are ESM (they use top-level `await import`), so `.js`
123
139
  * output requires `"type": "module"` in the package; use a `.mjs` extension
@@ -125,7 +141,10 @@ function toArray(value) {
125
141
  * a `bin` path still pointing at the real CLI entry fails loudly instead of
126
142
  * clobbering the build output.
127
143
  */
128
- function generateCompileCacheShim(options = {}) {
144
+ function createCompileCacheShimGenerator(ownerPackage) {
145
+ return (options = {}) => generateShims(`${ownerPackage}/compile-cache`, options);
146
+ }
147
+ function generateShims(defaultCompileCacheSpecifier, options) {
129
148
  const cwd = options.cwd ?? process.cwd();
130
149
  const found = readNearestPackageJson(cwd);
131
150
  const pkg = found?.pkg;
@@ -145,6 +164,8 @@ function generateCompileCacheShim(options = {}) {
145
164
  const binNameByPath = /* @__PURE__ */ new Map();
146
165
  if (found) for (const [name, path] of bins) binNameByPath.set(resolve(found.dir, path), name);
147
166
  const warnings = [];
167
+ const compileCacheSpecifier = options.compileCacheSpecifier ?? defaultCompileCacheSpecifier;
168
+ if (/[\r\n\u2028\u2029]/.test(compileCacheSpecifier)) throw new Error(`Invalid compile-cache specifier ${JSON.stringify(compileCacheSpecifier)}: a module specifier cannot contain a line terminator.`);
148
169
  const plans = outputPaths.map((outputPath, index) => {
149
170
  const matchedBinName = binNameByPath.get(outputPath);
150
171
  const program = options.program ?? matchedBinName ?? defaultProgramName(pkg);
@@ -168,13 +189,14 @@ function generateCompileCacheShim(options = {}) {
168
189
  return {
169
190
  outputPath,
170
191
  program,
171
- entry
192
+ entry,
193
+ compileCacheSpecifier
172
194
  };
173
195
  });
174
196
  for (const warning of warnings) console.warn(warning);
175
197
  for (const { outputPath, program, entry } of plans) {
176
198
  mkdirSync(dirname(outputPath), { recursive: true });
177
- writeFileSync(outputPath, shimContent(program, entry));
199
+ writeFileSync(outputPath, shimContent(program, entry, compileCacheSpecifier));
178
200
  chmodSync(outputPath, 493);
179
201
  }
180
202
  return plans;
@@ -188,4 +210,105 @@ function formatShimPath(outputPath, cwd) {
188
210
  }
189
211
 
190
212
  //#endregion
191
- export { generateCompileCacheShim as n, formatShimPath as t };
213
+ //#region ../core/src/cli-main.ts
214
+ const generateWorkerArgsSchema = internalArgs({
215
+ bin: internalField.string({
216
+ description: "CLI binary or built JS entry file to invoke",
217
+ placeholder: "PATH"
218
+ }),
219
+ program: internalField.string({
220
+ description: "Program name embedded in worker metadata",
221
+ placeholder: "NAME"
222
+ }),
223
+ shell: internalField.enum([
224
+ "bash",
225
+ "zsh",
226
+ "fish"
227
+ ], {
228
+ description: "Shell worker to generate",
229
+ placeholder: "SHELL"
230
+ }),
231
+ out: internalField.optionalString({
232
+ description: "Output worker path (defaults to dist/completion/<shell>-worker.<ext>)",
233
+ placeholder: "PATH"
234
+ }),
235
+ verify: internalField.boolean({ description: "Verify __completion-worker-path resolves to the generated worker" })
236
+ });
237
+ const generateWorkerCommand = defineCommand({
238
+ name: "generate-worker",
239
+ description: "Generate and verify a bundled shell completion worker",
240
+ args: generateWorkerArgsSchema,
241
+ async run(args) {
242
+ const { generateBundledCompletionWorker } = await import("./src-zNS0DTqZ.js");
243
+ await generateBundledCompletionWorker({
244
+ bin: args.bin,
245
+ programName: args.program,
246
+ shell: args.shell,
247
+ ...args.out !== void 0 && { outputPath: args.out },
248
+ verify: args.verify
249
+ });
250
+ }
251
+ });
252
+ const generateShimArgsSchema = internalArgs({
253
+ entry: internalField.optionalStringArray({
254
+ description: "Module specifier the shim imports, relative to the shim file; repeatable, one per bin/--out (defaults to ./cli.js, ./cli.mjs, ./index.js, or ./index.mjs next to each shim)",
255
+ placeholder: "SPECIFIER"
256
+ }),
257
+ out: internalField.optionalStringArray({
258
+ description: "Output path for the generated shim; repeatable, one per --entry (defaults to the bin paths in package.json)",
259
+ placeholder: "PATH"
260
+ }),
261
+ program: internalField.optionalString({
262
+ description: "Program name for the cache directory, applied to all shims (defaults per shim to its bin name)",
263
+ placeholder: "NAME"
264
+ }),
265
+ compileCacheSpecifier: internalField.optionalString({
266
+ description: "Module specifier the shim imports enableCompileCache from (defaults to the compile-cache subpath of the politty package running this command)",
267
+ placeholder: "SPECIFIER"
268
+ })
269
+ });
270
+ /**
271
+ * Run politty's own development CLI (`generate-shim`, `generate-worker`).
272
+ *
273
+ * `ownerPackage` is the npm name of the politty package providing the `politty`
274
+ * bin that invoked this — `@politty/zod`, `@politty/valibot`, or `politty`. It
275
+ * is threaded through to {@link createCompileCacheShimGenerator} so a generated
276
+ * shim imports the cache helper from the package the user actually installed,
277
+ * which is the one guaranteed to resolve from their own package.
278
+ *
279
+ * Never returns: it exits the process, like `runMain`.
280
+ */
281
+ function runPolittyCli(ownerPackage) {
282
+ const generateCompileCacheShim = createCompileCacheShimGenerator(ownerPackage);
283
+ const generateShimCommand = defineCommand({
284
+ name: "generate-shim",
285
+ description: "Generate a compile-cache bin shim that loads the real CLI via dynamic import",
286
+ args: generateShimArgsSchema,
287
+ run(args) {
288
+ const cwd = process.cwd();
289
+ const results = generateCompileCacheShim({
290
+ ...args.entry !== void 0 && { entry: args.entry },
291
+ ...args.out !== void 0 && { out: args.out },
292
+ ...args.program !== void 0 && { program: args.program },
293
+ ...args.compileCacheSpecifier !== void 0 && { compileCacheSpecifier: args.compileCacheSpecifier },
294
+ cwd
295
+ });
296
+ for (const result of results) console.log(`Generated compile-cache shim: ${formatShimPath(result.outputPath, cwd)} (program: ${result.program}, entry: ${result.entry}, compile-cache: ${result.compileCacheSpecifier})`);
297
+ }
298
+ });
299
+ const cli = defineCommand({
300
+ name: "politty",
301
+ description: "politty development utilities",
302
+ subCommands: {
303
+ "generate-shim": generateShimCommand,
304
+ "generate-worker": generateWorkerCommand
305
+ }
306
+ });
307
+ return runMain(cli).catch((error) => {
308
+ console.error(error instanceof Error ? error.message : String(error));
309
+ process.exit(1);
310
+ });
311
+ }
312
+
313
+ //#endregion
314
+ export { createCompileCacheShimGenerator as n, runPolittyCli as t };
@@ -0,0 +1,8 @@
1
+ import "./register-DlGnMLIY.js";
2
+
3
+ //#region src/cli-run.ts
4
+ const { runPolittyCli } = await import("./cli-main-B5mwyz8q.js");
5
+ await runPolittyCli("@politty/zod");
6
+
7
+ //#endregion
8
+ export { };
package/dist/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { n as enableCompileCache } from "./compile-cache-Ct41pWGL.js";
2
+ import { n as enableCompileCache } from "./compile-cache-BC65o7MH.js";
3
3
 
4
4
  //#region src/cli.ts
5
5
  /**
@@ -10,7 +10,7 @@ import { n as enableCompileCache } from "./compile-cache-Ct41pWGL.js";
10
10
  * before any code runs, so they could never hit a cache enabled here.
11
11
  */
12
12
  enableCompileCache("politty");
13
- await import("./cli-run-eibUcgys.js");
13
+ await import("./cli-run-BlcK64io.js");
14
14
 
15
15
  //#endregion
16
16
  export { };
@@ -15,7 +15,10 @@ import { homedir } from "node:os";
15
15
  *
16
16
  * ```ts
17
17
  * #!/usr/bin/env node
18
- * import { enableCompileCache } from "politty/compile-cache";
18
+ * // Import from the `compile-cache` subpath of the politty package your CLI
19
+ * // depends on — `politty generate-shim` writes that specifier for you,
20
+ * // naming whichever package's bin generated the shim.
21
+ * import { enableCompileCache } from "<your-politty-package>/compile-cache";
19
22
  *
20
23
  * enableCompileCache("my-cli");
21
24
  * await import("./cli.js");
@@ -11,7 +11,10 @@
11
11
  *
12
12
  * ```ts
13
13
  * #!/usr/bin/env node
14
- * import { enableCompileCache } from "politty/compile-cache";
14
+ * // Import from the `compile-cache` subpath of the politty package your CLI
15
+ * // depends on — `politty generate-shim` writes that specifier for you,
16
+ * // naming whichever package's bin generated the shim.
17
+ * import { enableCompileCache } from "<your-politty-package>/compile-cache";
15
18
  *
16
19
  * enableCompileCache("my-cli");
17
20
  * await import("./cli.js");
@@ -1,3 +1,3 @@
1
- import { n as enableCompileCache, t as compileCacheDir } from "./compile-cache-Ct41pWGL.js";
1
+ import { n as enableCompileCache, t as compileCacheDir } from "./compile-cache-BC65o7MH.js";
2
2
 
3
3
  export { compileCacheDir, enableCompileCache };
@@ -4,8 +4,8 @@ import { n as defineCommand } from "./command-k-4yAz4J.js";
4
4
  import { c as resolveSubCommandMeta, i as resolveSubCommandAlias } from "./subcommand-router-Cskpofdk.js";
5
5
  import { existsSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
6
6
  import { dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
7
- import { execFile, execSync, spawn } from "node:child_process";
8
7
  import { promisify } from "node:util";
8
+ import { execFile, execSync, spawn } from "node:child_process";
9
9
 
10
10
  //#region ../core/src/completion/shell-shared.ts
11
11
  /**
@@ -2757,7 +2757,7 @@ async function runTargetBin(bin, args, opts) {
2757
2757
  ...opts.env
2758
2758
  },
2759
2759
  encoding: "utf8",
2760
- maxBuffer: 10 * 1024 * 1024
2760
+ maxBuffer: 10485760
2761
2761
  });
2762
2762
  return {
2763
2763
  stdout,
@@ -3882,7 +3882,8 @@ function createDynamicCompleteCommand(rootCommand, _programName, globalArgsSchem
3882
3882
  const context = parseCompletionContext(args.args, rootCommand, globalArgsSchema);
3883
3883
  const inlinePrefix = context.completionType === "option-value" && context.targetOption ? detectInlineOptionPrefix(context.currentWord) : void 0;
3884
3884
  const effectiveWord = inlinePrefix ? context.currentWord.slice(inlinePrefix.length) : context.currentWord;
3885
- const output = formatForShell(await generateCandidates(context, { shell: args.shell }), {
3885
+ const result = await generateCandidates(context, { shell: args.shell });
3886
+ const output = formatForShell(result, {
3886
3887
  shell: args.shell,
3887
3888
  currentWord: effectiveWord,
3888
3889
  inlinePrefix
@@ -4587,8 +4588,12 @@ function defaultCacheDir(programName) {
4587
4588
  * `$XDG_CONFIG_HOME` / `$HOME`.
4588
4589
  */
4589
4590
  function installPath(programName, shell, cacheDir) {
4590
- if (shell === "fish") return join(process.env.XDG_CONFIG_HOME ?? `${process.env.HOME ?? ""}/.config`, "fish", "completions", `${programName}.fish`);
4591
- return join(cacheDir ?? defaultCacheDir(programName), `completion.${shell}`);
4591
+ if (shell === "fish") {
4592
+ const cfg = process.env.XDG_CONFIG_HOME ?? `${process.env.HOME ?? ""}/.config`;
4593
+ return join(cfg, "fish", "completions", `${programName}.fish`);
4594
+ }
4595
+ const dir = cacheDir ?? defaultCacheDir(programName);
4596
+ return join(dir, `completion.${shell}`);
4592
4597
  }
4593
4598
  /** Atomic write: tmp file in the same dir, then rename. */
4594
4599
  function writeAtomic(path, content) {
@@ -1,5 +1,5 @@
1
- import { C as Command, X as ResolvedFieldMeta, _ as DynamicCompletionResult, b as ArgsSchema, d as ExpandCompletion, g as DynamicCompletionResolver, h as DynamicCompletionContext, m as DynamicCompletionCandidate, p as CompletionDirectiveMask, v as AnyCommand } from "./arg-registry-YaWTVu_x.js";
2
- import { C as CompletionResult, D as InternalArgsSchema, E as InferInternalArgs, S as CompletionOptions, T as ValueCompletion, _ as CompletablePositional, a as detectShell, b as CompletionGenerator, c as withCompletionCommand, d as bundledWorkerShellExtension, f as defaultBundledWorkerOutputPath, g as CompletableOption, h as BundledWorkerOptions, i as createRefreshCompletionCommand, l as GenerateBundledCompletionWorkerOptions, m as validateBundledWorkerFile, n as createCompletionCommand, o as generateCompletion, p as generateBundledCompletionWorker, r as createCompletionWorkerPathCommand, s as getSupportedShells, t as WithCompletionOptions, u as GenerateBundledCompletionWorkerResult, v as CompletableSubcommand, w as ShellType, x as CompletionMode, y as CompletionData } from "./index-CvhsecfS.js";
1
+ import { C as Command, X as ResolvedFieldMeta, _ as DynamicCompletionResult, b as ArgsSchema, d as ExpandCompletion, g as DynamicCompletionResolver, h as DynamicCompletionContext, m as DynamicCompletionCandidate, p as CompletionDirectiveMask, v as AnyCommand } from "./arg-registry-B8QvBM_Q.js";
2
+ import { C as CompletionResult, D as InternalArgsSchema, E as InferInternalArgs, S as CompletionOptions, T as ValueCompletion, _ as CompletablePositional, a as detectShell, b as CompletionGenerator, c as withCompletionCommand, d as bundledWorkerShellExtension, f as defaultBundledWorkerOutputPath, g as CompletableOption, h as BundledWorkerOptions, i as createRefreshCompletionCommand, l as GenerateBundledCompletionWorkerOptions, m as validateBundledWorkerFile, n as createCompletionCommand, o as generateCompletion, p as generateBundledCompletionWorker, r as createCompletionWorkerPathCommand, s as getSupportedShells, t as WithCompletionOptions, u as GenerateBundledCompletionWorkerResult, v as CompletableSubcommand, w as ShellType, x as CompletionMode, y as CompletionData } from "./index-CMb2xLiJ.js";
3
3
  //#region ../core/src/completion/dynamic/context-parser.d.ts
4
4
  /**
5
5
  * Completion type indicates what kind of completion is expected
@@ -1,4 +1,4 @@
1
- import "./register-Bk0K83W2.js";
2
- import { _ as CompletionDirective, a as generateCompletion, b as resolveValueCompletion, c as createDynamicCompleteCommand, d as bundledWorkerShellExtension, f as defaultBundledWorkerOutputPath, g as extractPositionals, h as extractCompletionData, i as detectShell, l as hasCompleteCommand, m as validateBundledWorkerFile, n as createCompletionWorkerPathCommand, o as getSupportedShells, p as generateBundledCompletionWorker, r as createRefreshCompletionCommand, s as withCompletionCommand, t as createCompletionCommand, u as formatForShell, v as generateCandidates, y as parseCompletionContext } from "./completion-gtWX3mwP.js";
1
+ import "./register-DlGnMLIY.js";
2
+ import { _ as CompletionDirective, a as generateCompletion, b as resolveValueCompletion, c as createDynamicCompleteCommand, d as bundledWorkerShellExtension, f as defaultBundledWorkerOutputPath, g as extractPositionals, h as extractCompletionData, i as detectShell, l as hasCompleteCommand, m as validateBundledWorkerFile, n as createCompletionWorkerPathCommand, o as getSupportedShells, p as generateBundledCompletionWorker, r as createRefreshCompletionCommand, s as withCompletionCommand, t as createCompletionCommand, u as formatForShell, v as generateCandidates, y as parseCompletionContext } from "./completion-DW5qVc3l.js";
3
3
 
4
4
  export { CompletionDirective, bundledWorkerShellExtension, createCompletionCommand, createCompletionWorkerPathCommand, createDynamicCompleteCommand, createRefreshCompletionCommand, defaultBundledWorkerOutputPath, detectShell, extractCompletionData, extractPositionals, formatForShell, generateBundledCompletionWorker, generateCandidates, generateCompletion, getSupportedShells, hasCompleteCommand, parseCompletionContext, resolveValueCompletion, validateBundledWorkerFile, withCompletionCommand };
package/dist/docs.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { T as Example, U as SubCommandValue, X as ResolvedFieldMeta, Y as ExtractedFields, b as ArgsSchema, tt as SchemaLike, v as AnyCommand } from "./arg-registry-YaWTVu_x.js";
1
+ import { T as Example, U as SubCommandValue, X as ResolvedFieldMeta, Y as ExtractedFields, b as ArgsSchema, tt as SchemaLike, v as AnyCommand } from "./arg-registry-B8QvBM_Q.js";
2
2
  import * as fs from "node:fs";
3
3
  //#region ../core/src/executor/subcommand-router.d.ts
4
4
  /**
package/dist/docs.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as getValidatorAdapter } from "./field-meta-DMy5BcRr.js";
2
- import "./register-Bk0K83W2.js";
2
+ import "./register-DlGnMLIY.js";
3
3
  import { n as getExtractedFields, t as extractFields } from "./schema-extractor-DMSozq40.js";
4
- import { r as resolveLazyCommand } from "./subcommand-router-Cskpofdk.js";
5
4
  import { t as createLogCollector } from "./log-collector-CoUkLVJB.js";
5
+ import { r as resolveLazyCommand } from "./subcommand-router-Cskpofdk.js";
6
6
  import * as fs from "node:fs";
7
7
  import * as path$1 from "node:path";
8
8
  import path from "node:path";
@@ -921,7 +921,7 @@ async function executeSingleExample(example, rootCommand, commandPath) {
921
921
  collector.start();
922
922
  let success = true;
923
923
  try {
924
- const { runCommand } = await import("./runner-FvUwOHyE.js");
924
+ const { runCommand } = await import("./runner-DR5Lw7LX.js");
925
925
  const result = await runCommand(rootCommand, argv);
926
926
  success = result.success;
927
927
  if (!result.success && result.error) console.error(result.error.message);
@@ -2882,7 +2882,8 @@ async function generateDoc(config) {
2882
2882
  } else if (parsed.kind === "global-options") if (normalizedTemplateGlobalOptions) replacements.set(placeholder, buildGlobalOptionsContent(normalizedTemplateGlobalOptions));
2883
2883
  else replacements.set(placeholder, "");
2884
2884
  else if (parsed.kind === "index") {
2885
- const indexContent = await renderCommandIndex(command, [...deriveIndexFromFiles(files, outputPath, allCommands, ignores), ...deriveIndexFromTemplateOutputs(templateMeta, outputPath, outputPath, allCommands)], rootDoc?.index);
2885
+ const categories = [...deriveIndexFromFiles(files, outputPath, allCommands, ignores), ...deriveIndexFromTemplateOutputs(templateMeta, outputPath, outputPath, allCommands)];
2886
+ const indexContent = await renderCommandIndex(command, categories, rootDoc?.index);
2886
2887
  replacements.set(placeholder, indexContent);
2887
2888
  }
2888
2889
  }
@@ -1,4 +1,4 @@
1
- import { C as Command, Z as UnknownKeysMode, b as ArgsSchema, f as ResolvedExpandCandidate, g as DynamicCompletionResolver, n as ArgMeta, v as AnyCommand } from "./arg-registry-YaWTVu_x.js";
1
+ import { C as Command, Z as UnknownKeysMode, b as ArgsSchema, f as ResolvedExpandCandidate, g as DynamicCompletionResolver, n as ArgMeta, v as AnyCommand } from "./arg-registry-B8QvBM_Q.js";
2
2
  //#region ../core/src/adapter/internal-args.d.ts
3
3
  /** Runtime brand distinguishing internal descriptors from library schemas. */
4
4
  declare const INTERNAL_ARGS_BRAND = "__polittyInternalArgs";
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { $ as toKebabCase, A as LogEntry, B as RunResultSuccess, C as Command, D as GlobalCleanupContext, E as GlobalArgs, F as NonRunnableCommand, G as UnknownSubcommandHandler, H as SetupContext, I as PromptResolver, J as lazy, K as LazyCommand, L as RunCommandOptions, M as LogStream, N as Logger, O as GlobalSetupContext, P as MainOptions, Q as toCamelCase, R as RunResult, S as CollectedLogs, T as Example, U as SubCommandValue, V as RunnableCommand, W as SubCommandsRecord, X as ResolvedFieldMeta, Y as ExtractedFields, Z as UnknownKeysMode, _ as DynamicCompletionResult, a as CustomCompletion, b as ArgsSchema$1, c as PromptType, d as ExpandCompletion, et as InferSchemaOutput, f as ResolvedExpandCandidate, g as DynamicCompletionResolver, h as DynamicCompletionContext, i as CompletionType, j as LogLevel, k as IsEmpty, l as ValidateArgMeta, m as DynamicCompletionCandidate, n as ArgMeta, o as EffectContext, p as CompletionDirectiveMask, q as isLazyCommand, r as CompletionMeta, s as PromptMeta, t as ArgFn, tt as SchemaLike, u as ExpandCandidate, v as AnyCommand, w as CommandBase, x as CleanupContext, y as ArgSource, z as RunResultFailure } from "./arg-registry-YaWTVu_x.js";
2
- import { C as CompletionResult, D as InternalArgsSchema, S as CompletionOptions, c as withCompletionCommand, l as GenerateBundledCompletionWorkerOptions, o as generateCompletion, p as generateBundledCompletionWorker, t as WithCompletionOptions, u as GenerateBundledCompletionWorkerResult } from "./index-CvhsecfS.js";
1
+ import { $ as toKebabCase, A as LogEntry, B as RunResultSuccess, C as Command, D as GlobalCleanupContext, E as GlobalArgs, F as NonRunnableCommand, G as UnknownSubcommandHandler, H as SetupContext, I as PromptResolver, J as lazy, K as LazyCommand, L as RunCommandOptions, M as LogStream, N as Logger, O as GlobalSetupContext, P as MainOptions, Q as toCamelCase, R as RunResult, S as CollectedLogs, T as Example, U as SubCommandValue, V as RunnableCommand, W as SubCommandsRecord, X as ResolvedFieldMeta, Y as ExtractedFields, Z as UnknownKeysMode, _ as DynamicCompletionResult, a as CustomCompletion, b as ArgsSchema$1, c as PromptType, d as ExpandCompletion, et as InferSchemaOutput, f as ResolvedExpandCandidate, g as DynamicCompletionResolver, h as DynamicCompletionContext, i as CompletionType, j as LogLevel, k as IsEmpty, l as ValidateArgMeta, m as DynamicCompletionCandidate, n as ArgMeta, o as EffectContext, p as CompletionDirectiveMask, q as isLazyCommand, r as CompletionMeta, s as PromptMeta, t as ArgFn, tt as SchemaLike, u as ExpandCandidate, v as AnyCommand, w as CommandBase, x as CleanupContext, y as ArgSource, z as RunResultFailure } from "./arg-registry-B8QvBM_Q.js";
2
+ import { C as CompletionResult, D as InternalArgsSchema, S as CompletionOptions, c as withCompletionCommand, l as GenerateBundledCompletionWorkerOptions, o as generateCompletion, p as generateBundledCompletionWorker, t as WithCompletionOptions, u as GenerateBundledCompletionWorkerResult } from "./index-CMb2xLiJ.js";
3
3
  import { z } from "zod";
4
4
  //#region ../core/src/core/schema-extractor.d.ts
5
5
  /**
@@ -43,18 +43,38 @@ type ValidationResult<T> = {
43
43
  errors: ValidationError[];
44
44
  };
45
45
  //#endregion
46
+ //#region ../core/src/cli-main.d.ts
47
+ /**
48
+ * Run politty's own development CLI (`generate-shim`, `generate-worker`).
49
+ *
50
+ * `ownerPackage` is the npm name of the politty package providing the `politty`
51
+ * bin that invoked this — `@politty/zod`, `@politty/valibot`, or `politty`. It
52
+ * is threaded through to {@link createCompileCacheShimGenerator} so a generated
53
+ * shim imports the cache helper from the package the user actually installed,
54
+ * which is the one guaranteed to resolve from their own package.
55
+ *
56
+ * Never returns: it exits the process, like `runMain`.
57
+ */
58
+ declare function runPolittyCli(ownerPackage: string): Promise<never>;
59
+ //#endregion
46
60
  //#region ../core/src/compile-cache-shim.d.ts
47
61
  /**
48
62
  * Generator for compile-cache bin shims.
49
63
  *
50
64
  * Emits the minimal entry file described in docs/recipes.md ("Faster
51
- * Startup"): a shim that enables the Node.js on-disk compile cache via
52
- * `politty/compile-cache` and then loads the real CLI with a dynamic
53
- * import. Meant to be wired into a `postbuild` or `prepack` script via
54
- * `politty generate-shim` so the shim never has to live in source.
65
+ * Startup"): a shim that enables the Node.js on-disk compile cache and then
66
+ * loads the real CLI with a dynamic import. Meant to be wired into a
67
+ * `postbuild` or `prepack` script via `politty generate-shim` so the shim
68
+ * never has to live in source.
69
+ *
70
+ * Each politty package binds its own generator with
71
+ * {@link createCompileCacheShimGenerator}, so the shim imports the cache
72
+ * helper from the package that generated it.
55
73
  */
56
74
  /**
57
- * Options for {@link generateCompileCacheShim}.
75
+ * Options for the generator returned by
76
+ * {@link createCompileCacheShimGenerator} — exported as
77
+ * `generateCompileCacheShim` from each politty package.
58
78
  */
59
79
  interface GenerateCompileCacheShimOptions {
60
80
  /**
@@ -86,9 +106,18 @@ interface GenerateCompileCacheShimOptions {
86
106
  * `package.json` (default: `process.cwd()`).
87
107
  */
88
108
  cwd?: string;
109
+ /**
110
+ * Module specifier the shim imports `enableCompileCache` from. Defaults to
111
+ * the `compile-cache` subpath of the politty package this generator belongs
112
+ * to (see {@link createCompileCacheShimGenerator}). Set this when politty is
113
+ * reached some other way — a re-export from your own package, an import
114
+ * map, and so on.
115
+ */
116
+ compileCacheSpecifier?: string;
89
117
  }
90
118
  /**
91
- * One generated shim from {@link generateCompileCacheShim}.
119
+ * One generated shim from the generator returned by
120
+ * {@link createCompileCacheShimGenerator}.
92
121
  */
93
122
  interface GenerateCompileCacheShimResult {
94
123
  /** Absolute path of the generated shim. */
@@ -97,15 +126,28 @@ interface GenerateCompileCacheShimResult {
97
126
  program: string;
98
127
  /** Entry specifier baked into the shim. */
99
128
  entry: string;
129
+ /** Specifier the shim imports `enableCompileCache` from. */
130
+ compileCacheSpecifier: string;
100
131
  }
101
132
  /**
102
- * Generate executable compile-cache bin shims.
103
- *
104
- * With no explicit paths, one shim is generated per `bin` entry of the
105
- * nearest `package.json`, each importing a conventional built module next
106
- * to it — so a bare `politty generate-shim` in a `postbuild` script is
107
- * usually enough. Explicit `entry` values are paired in order with the
108
- * `bin` entries (or with explicit `out` values of the same count).
133
+ * Build the shim generator for one politty package.
134
+ *
135
+ * `ownerPackage` is the npm name of the package the generator is exported
136
+ * from (`@politty/zod`, `@politty/valibot`, `politty`), and the shim imports
137
+ * `enableCompileCache` from its `compile-cache` subpath. Taking the name from
138
+ * the owner rather than guessing it is what makes the specifier reliable:
139
+ * reaching this generator at all — through that package's bin or through an
140
+ * import of it — means the package is installed in the host, so the specifier
141
+ * resolves from the shim that lands there. The alternative, reading the host's
142
+ * `package.json`, could only guess which of the three politty packages was
143
+ * meant.
144
+ *
145
+ * The returned function generates executable shims. With no explicit paths,
146
+ * one is generated per `bin` entry of the nearest `package.json`, each
147
+ * importing a conventional built module next to it — so a bare
148
+ * `politty generate-shim` in a `postbuild` script is usually enough. Explicit
149
+ * `entry` values are paired in order with the `bin` entries (or with explicit
150
+ * `out` values of the same count).
109
151
  *
110
152
  * The generated files are ESM (they use top-level `await import`), so `.js`
111
153
  * output requires `"type": "module"` in the package; use a `.mjs` extension
@@ -113,7 +155,7 @@ interface GenerateCompileCacheShimResult {
113
155
  * a `bin` path still pointing at the real CLI entry fails loudly instead of
114
156
  * clobbering the build output.
115
157
  */
116
- declare function generateCompileCacheShim(options?: GenerateCompileCacheShimOptions): GenerateCompileCacheShimResult[];
158
+ declare function createCompileCacheShimGenerator(ownerPackage: string): (options?: GenerateCompileCacheShimOptions) => GenerateCompileCacheShimResult[];
117
159
  //#endregion
118
160
  //#region ../core/src/core/case-types.d.ts
119
161
  /**
@@ -786,6 +828,15 @@ declare function validateCommand(command: AnyCommand, options?: ValidateCommandO
786
828
  declare function formatCommandValidationErrors(errors: CommandValidationError[]): string;
787
829
  //#endregion
788
830
  //#region src/index.d.ts
831
+ /**
832
+ * Generate compile-cache bin shims that import the cache helper from
833
+ * `@politty/zod/compile-cache`.
834
+ *
835
+ * The specifier is this package's own name rather than something derived from
836
+ * the caller's `package.json`: reaching this function means `@politty/zod` is
837
+ * installed, so the shim it writes into your package can resolve it.
838
+ */
839
+ declare const generateCompileCacheShim: (options?: GenerateCompileCacheShimOptions) => GenerateCompileCacheShimResult[];
789
840
  /**
790
841
  * Supported schema types for args in this package: zod schemas whose
791
842
  * output is an object. Narrows `@politty/core`'s Standard-Schema-based
@@ -796,4 +847,4 @@ declare const defineCommand: DefineCommandFn<ArgsSchema>;
796
847
  declare const createDefineCommand: CreateDefineCommandFn<ArgsSchema>;
797
848
  declare const arg: ArgFn<z.ZodType>;
798
849
  //#endregion
799
- export { type AnyCommand, type ArgFn, type ArgMeta, type ArgSource, ArgsSchema, type BoundDefineCommandFn, type BuiltinOptionDescriptions, type CamelCase, CaseVariantCollisionError, type CleanupContext, type CollectedLogs, type Command, type CommandBase, type CommandContext, type CommandValidationError, type CommandValidationResult, type CompletionDirectiveMask, type CompletionMeta, type CompletionOptions, type CompletionResult, type CompletionType, type CreateDefineCommandFn, type CustomCompletion, type DefineCommandFn, DuplicateAliasError, DuplicateFieldError, DuplicateNegationError, type DynamicCompletionCandidate, type DynamicCompletionContext, type DynamicCompletionResolver, type DynamicCompletionResult, type EffectContext, type Example, type ExpandCandidate, type ExpandCompletion, type ExtractedFields, FieldTypeConflictError, type GenerateBundledCompletionWorkerOptions, type GenerateBundledCompletionWorkerResult, type GenerateCompileCacheShimOptions, type GenerateCompileCacheShimResult, type GlobalArgs, type GlobalCleanupContext, type GlobalSetupContext, type HelpOptions, type InferSchemaOutput, type KebabCase, type LazyCommand, type LogEntry, type LogLevel, type LogStream, type Logger, type MainOptions, type MergedArgs, type NonRunnableCommand, type ParsedArgv, type ParserOptions, PositionalConfigError, type PromptMeta, type PromptResolver, type PromptType, ReservedAliasError, ReservedFieldNameError, type ResolvedExpandCandidate, type ResolvedFieldMeta, type RunCommandOptions, type RunResult, type RunResultFailure, type RunResultSuccess, type RunnableCommand, type SchemaLike, type SetupContext, type SubCommandValue, type SubCommandsRecord, type UnknownKeysMode, type UnknownSubcommandHandler, type ValidateArgMeta, type ValidationError, type ValidationResult, type WithCaseVariants, type WithCompletionOptions, arg, createDefineCommand, createDualCaseProxy, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateBundledCompletionWorker, generateCompileCacheShim, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, isLazyCommand, lazy, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toCamelCase, toKebabCase, validateCaseVariantCollisions, validateCommand, validateCrossSchemaCollisions, validateDuplicateAliases, validateDuplicateFields, validateDuplicateNegations, validatePositionalConfig, validateReservedAliases, validateReservedFieldNames, withCompletionCommand };
850
+ export { type AnyCommand, type ArgFn, type ArgMeta, type ArgSource, ArgsSchema, type BoundDefineCommandFn, type BuiltinOptionDescriptions, type CamelCase, CaseVariantCollisionError, type CleanupContext, type CollectedLogs, type Command, type CommandBase, type CommandContext, type CommandValidationError, type CommandValidationResult, type CompletionDirectiveMask, type CompletionMeta, type CompletionOptions, type CompletionResult, type CompletionType, type CreateDefineCommandFn, type CustomCompletion, type DefineCommandFn, DuplicateAliasError, DuplicateFieldError, DuplicateNegationError, type DynamicCompletionCandidate, type DynamicCompletionContext, type DynamicCompletionResolver, type DynamicCompletionResult, type EffectContext, type Example, type ExpandCandidate, type ExpandCompletion, type ExtractedFields, FieldTypeConflictError, type GenerateBundledCompletionWorkerOptions, type GenerateBundledCompletionWorkerResult, type GenerateCompileCacheShimOptions, type GenerateCompileCacheShimResult, type GlobalArgs, type GlobalCleanupContext, type GlobalSetupContext, type HelpOptions, type InferSchemaOutput, type KebabCase, type LazyCommand, type LogEntry, type LogLevel, type LogStream, type Logger, type MainOptions, type MergedArgs, type NonRunnableCommand, type ParsedArgv, type ParserOptions, PositionalConfigError, type PromptMeta, type PromptResolver, type PromptType, ReservedAliasError, ReservedFieldNameError, type ResolvedExpandCandidate, type ResolvedFieldMeta, type RunCommandOptions, type RunResult, type RunResultFailure, type RunResultSuccess, type RunnableCommand, type SchemaLike, type SetupContext, type SubCommandValue, type SubCommandsRecord, type UnknownKeysMode, type UnknownSubcommandHandler, type ValidateArgMeta, type ValidationError, type ValidationResult, type WithCaseVariants, type WithCompletionOptions, arg, createCompileCacheShimGenerator, createDefineCommand, createDualCaseProxy, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateBundledCompletionWorker, generateCompileCacheShim, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, isLazyCommand, lazy, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, runPolittyCli, setColorEnabled, styles, symbols, toCamelCase, toKebabCase, validateCaseVariantCollisions, validateCommand, validateCrossSchemaCollisions, validateDuplicateAliases, validateDuplicateFields, validateDuplicateNegations, validatePositionalConfig, validateReservedAliases, validateReservedFieldNames, withCompletionCommand };
package/dist/index.js CHANGED
@@ -1,17 +1,27 @@
1
1
  import { i as toKebabCase, r as toCamelCase } from "./field-meta-DMy5BcRr.js";
2
- import { t as arg$1 } from "./register-Bk0K83W2.js";
3
- import { n as generateCompileCacheShim } from "./src-KzC0g5CS.js";
2
+ import { t as arg$1 } from "./register-DlGnMLIY.js";
4
3
  import { r as getUnknownKeysMode, t as extractFields } from "./schema-extractor-DMSozq40.js";
4
+ import { n as createCompileCacheShimGenerator, t as runPolittyCli } from "./cli-main-Cdz55PLM.js";
5
5
  import { n as defineCommand$1, t as createDefineCommand$1 } from "./command-k-4yAz4J.js";
6
+ import { C as ReservedFieldNameError, E as renderMarkdown, S as ReservedAliasError, T as renderInline, _ as DuplicateAliasError, a as parseArgv, b as FieldTypeConflictError, c as validateCommand, d as validateDuplicateFields, f as validateDuplicateNegations, g as CaseVariantCollisionError, h as validateReservedFieldNames, i as formatValidationErrors, l as validateCrossSchemaCollisions, m as validateReservedAliases, n as runMain, o as formatCommandValidationErrors, p as validatePositionalConfig, r as createDualCaseProxy, s as validateCaseVariantCollisions, t as runCommand, u as validateDuplicateAliases, v as DuplicateFieldError, w as generateHelp, x as PositionalConfigError, y as DuplicateNegationError } from "./runner-UEbd9e-3.js";
6
7
  import { o as isLazyCommand, s as lazy } from "./subcommand-router-Cskpofdk.js";
7
- import { a as generateCompletion, p as generateBundledCompletionWorker, s as withCompletionCommand } from "./completion-gtWX3mwP.js";
8
- import { C as generateHelp, E as createDualCaseProxy, S as ReservedFieldNameError, T as renderMarkdown, _ as DuplicateFieldError, a as formatCommandValidationErrors, b as PositionalConfigError, c as validateCrossSchemaCollisions, d as validateDuplicateNegations, f as validatePositionalConfig, g as DuplicateAliasError, h as CaseVariantCollisionError, i as parseArgv, l as validateDuplicateAliases, m as validateReservedFieldNames, n as runMain, o as validateCaseVariantCollisions, p as validateReservedAliases, r as formatValidationErrors, s as validateCommand, t as runCommand, u as validateDuplicateFields, v as DuplicateNegationError, w as renderInline, x as ReservedAliasError, y as FieldTypeConflictError } from "./runner-D72I7wvK.js";
9
8
  import { a as symbols, i as styles, n as logger, r as setColorEnabled, t as isColorEnabled } from "./logger-i_bb-Jhc.js";
9
+ import { a as generateCompletion, p as generateBundledCompletionWorker, s as withCompletionCommand } from "./completion-DW5qVc3l.js";
10
+ import "./src-DO4W2NcZ.js";
10
11
 
11
12
  //#region src/index.ts
13
+ /**
14
+ * Generate compile-cache bin shims that import the cache helper from
15
+ * `@politty/zod/compile-cache`.
16
+ *
17
+ * The specifier is this package's own name rather than something derived from
18
+ * the caller's `package.json`: reaching this function means `@politty/zod` is
19
+ * installed, so the shim it writes into your package can resolve it.
20
+ */
21
+ const generateCompileCacheShim = createCompileCacheShimGenerator("@politty/zod");
12
22
  const defineCommand = defineCommand$1;
13
23
  const createDefineCommand = createDefineCommand$1;
14
24
  const arg = arg$1;
15
25
 
16
26
  //#endregion
17
- export { CaseVariantCollisionError, DuplicateAliasError, DuplicateFieldError, DuplicateNegationError, FieldTypeConflictError, PositionalConfigError, ReservedAliasError, ReservedFieldNameError, arg, createDefineCommand, createDualCaseProxy, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateBundledCompletionWorker, generateCompileCacheShim, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, isLazyCommand, lazy, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, setColorEnabled, styles, symbols, toCamelCase, toKebabCase, validateCaseVariantCollisions, validateCommand, validateCrossSchemaCollisions, validateDuplicateAliases, validateDuplicateFields, validateDuplicateNegations, validatePositionalConfig, validateReservedAliases, validateReservedFieldNames, withCompletionCommand };
27
+ export { CaseVariantCollisionError, DuplicateAliasError, DuplicateFieldError, DuplicateNegationError, FieldTypeConflictError, PositionalConfigError, ReservedAliasError, ReservedFieldNameError, arg, createCompileCacheShimGenerator, createDefineCommand, createDualCaseProxy, defineCommand, extractFields, formatCommandValidationErrors, formatValidationErrors, generateBundledCompletionWorker, generateCompileCacheShim, generateCompletion, generateHelp, getUnknownKeysMode, isColorEnabled, isLazyCommand, lazy, logger, parseArgv, renderInline, renderMarkdown, runCommand, runMain, runPolittyCli, setColorEnabled, styles, symbols, toCamelCase, toKebabCase, validateCaseVariantCollisions, validateCommand, validateCrossSchemaCollisions, validateDuplicateAliases, validateDuplicateFields, validateDuplicateNegations, validatePositionalConfig, validateReservedAliases, validateReservedFieldNames, withCompletionCommand };
@@ -156,12 +156,10 @@ async function promptAndCollect(adapter, result, config) {
156
156
  case "confirm":
157
157
  value = await adapter.confirm({ message });
158
158
  break;
159
- case "select":
160
- value = await adapter.select({
161
- message,
162
- options: config.choices ?? []
163
- });
164
- break;
159
+ case "select": value = await adapter.select({
160
+ message,
161
+ options: config.choices ?? []
162
+ });
165
163
  }
166
164
  if (adapter.isCancelled(value)) throw new Error("Prompt cancelled by user");
167
165
  result[config.field.name] = value;
@@ -1,4 +1,4 @@
1
- import { I as PromptResolver } from "./arg-registry-YaWTVu_x.js";
1
+ import { I as PromptResolver } from "./arg-registry-B8QvBM_Q.js";
2
2
  //#region ../core/src/prompt/clack/index.d.ts
3
3
  /**
4
4
  * Prompt resolver backed by @clack/prompts.
@@ -1,5 +1,5 @@
1
- import "./register-Bk0K83W2.js";
2
- import { t as promptMissingArgs } from "./prompt-CEIZ-7H1.js";
1
+ import "./register-DlGnMLIY.js";
2
+ import { t as promptMissingArgs } from "./prompt-BjIZThsH.js";
3
3
  import { confirm, isCancel, password, select, text } from "@clack/prompts";
4
4
 
5
5
  //#region ../core/src/prompt/clack/index.ts
@@ -1,4 +1,4 @@
1
- import { I as PromptResolver } from "./arg-registry-YaWTVu_x.js";
1
+ import { I as PromptResolver } from "./arg-registry-B8QvBM_Q.js";
2
2
  //#region ../core/src/prompt/inquirer/index.d.ts
3
3
  /**
4
4
  * Prompt resolver backed by @inquirer/prompts.
@@ -1,5 +1,5 @@
1
- import "./register-Bk0K83W2.js";
2
- import { t as promptMissingArgs } from "./prompt-CEIZ-7H1.js";
1
+ import "./register-DlGnMLIY.js";
2
+ import { t as promptMissingArgs } from "./prompt-BjIZThsH.js";
3
3
  import { confirm, input, password, select } from "@inquirer/prompts";
4
4
 
5
5
  //#region ../core/src/prompt/inquirer/index.ts
package/dist/prompt.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { X as ResolvedFieldMeta, Y as ExtractedFields } from "./arg-registry-YaWTVu_x.js";
1
+ import { X as ResolvedFieldMeta, Y as ExtractedFields } from "./arg-registry-B8QvBM_Q.js";
2
2
  //#region ../core/src/prompt/types.d.ts
3
3
  /**
4
4
  * Resolved prompt configuration for a single field
package/dist/prompt.js CHANGED
@@ -1,4 +1,4 @@
1
- import "./register-Bk0K83W2.js";
2
- import { i as resolvePromptConfig, n as isInteractive, r as getFieldsToPrompt, t as promptMissingArgs } from "./prompt-CEIZ-7H1.js";
1
+ import "./register-DlGnMLIY.js";
2
+ import { i as resolvePromptConfig, n as isInteractive, r as getFieldsToPrompt, t as promptMissingArgs } from "./prompt-BjIZThsH.js";
3
3
 
4
4
  export { getFieldsToPrompt, isInteractive, promptMissingArgs, resolvePromptConfig };
@@ -187,8 +187,9 @@ function extractDescription(schema) {
187
187
  * `resolveFieldMeta` (adapter/field-meta.ts).
188
188
  */
189
189
  function resolveZodFieldMeta(name, schema) {
190
+ const argMeta = getArgMeta(schema) ?? getArgMeta(unwrapSchema(schema));
190
191
  return resolveFieldMeta(name, {
191
- argMeta: getArgMeta(schema) ?? getArgMeta(unwrapSchema(schema)),
192
+ argMeta,
192
193
  description: extractDescription(schema),
193
194
  required: isRequired(schema),
194
195
  defaultValue: extractDefaultValue(schema),
@@ -0,0 +1,3 @@
1
+ import { n as runMain, t as runCommand } from "./runner-UEbd9e-3.js";
2
+
3
+ export { runCommand };
@@ -1,47 +1,11 @@
1
1
  import { a as getValidatorAdapter, i as toKebabCase, r as toCamelCase, t as getAllAliases } from "./field-meta-DMy5BcRr.js";
2
2
  import { n as getExtractedFields, o as isInternalArgsSchema, s as validateInternalArgs, t as extractFields } from "./schema-extractor-DMSozq40.js";
3
- import { a as resolveSubcommandWithAlias, c as resolveSubCommandMeta, n as listSubCommands, o as isLazyCommand, r as resolveLazyCommand, t as listSubCommandNamesWithAliases } from "./subcommand-router-Cskpofdk.js";
4
- import { n as enableCompileCache } from "./compile-cache-Ct41pWGL.js";
3
+ import { n as enableCompileCache } from "./compile-cache-BC65o7MH.js";
5
4
  import { n as emptyLogs, r as mergeLogs, t as createLogCollector } from "./log-collector-CoUkLVJB.js";
5
+ import { a as resolveSubcommandWithAlias, c as resolveSubCommandMeta, n as listSubCommands, o as isLazyCommand, r as resolveLazyCommand, t as listSubCommandNamesWithAliases } from "./subcommand-router-Cskpofdk.js";
6
6
  import { a as symbols, i as styles } from "./logger-i_bb-Jhc.js";
7
7
  import { stripVTControlCharacters } from "node:util";
8
8
 
9
- //#region ../core/src/core/case-proxy.ts
10
- /**
11
- * Wrap an args object with a Proxy that allows dual-case access.
12
- *
13
- * Given `{ "my-option": "value" }`, both `obj["my-option"]` and `obj.myOption`
14
- * will return `"value"`.
15
- *
16
- * - `Object.keys()`, `JSON.stringify()`, and spread return only the original keys.
17
- * - The `in` operator detects both case variants.
18
- */
19
- function createDualCaseProxy(obj) {
20
- return new Proxy(obj, {
21
- get(target, prop, receiver) {
22
- if (typeof prop === "string") {
23
- if (prop in target) return Reflect.get(target, prop, receiver);
24
- const camel = toCamelCase(prop);
25
- if (camel !== prop && camel in target) return Reflect.get(target, camel, receiver);
26
- const kebab = toKebabCase(prop);
27
- if (kebab !== prop && kebab in target) return Reflect.get(target, kebab, receiver);
28
- }
29
- return Reflect.get(target, prop, receiver);
30
- },
31
- has(target, prop) {
32
- if (typeof prop === "string") {
33
- if (prop in target) return true;
34
- const camel = toCamelCase(prop);
35
- if (camel !== prop && camel in target) return true;
36
- const kebab = toKebabCase(prop);
37
- if (kebab !== prop && kebab in target) return true;
38
- }
39
- return Reflect.has(target, prop);
40
- }
41
- });
42
- }
43
-
44
- //#endregion
45
9
  //#region ../core/src/executor/command-runner.ts
46
10
  /**
47
11
  * Execute a command lifecycle: setup → run → cleanup
@@ -121,7 +85,9 @@ async function executeLifecycle(command, args, _options = {}) {
121
85
  }
122
86
  }
123
87
  collector?.stop();
124
- const logs = mergeLogs(_options.existingLogs ?? emptyLogs(), collector?.getLogs() ?? emptyLogs());
88
+ const existingLogs = _options.existingLogs ?? emptyLogs();
89
+ const collectedLogs = collector?.getLogs() ?? emptyLogs();
90
+ const logs = mergeLogs(existingLogs, collectedLogs);
125
91
  if (error) return {
126
92
  success: false,
127
93
  error,
@@ -1237,7 +1203,10 @@ function checkReservedFieldNames(extracted, commandPath) {
1237
1203
  */
1238
1204
  function validateDuplicateFields(extracted) {
1239
1205
  const errors = checkDuplicateFields(extracted, []);
1240
- if (errors.length > 0) throw new DuplicateFieldError(`Duplicate field name "${errors[0]?.field ?? "unknown"}" detected. Each field must have a unique name.`);
1206
+ if (errors.length > 0) {
1207
+ const field = errors[0]?.field ?? "unknown";
1208
+ throw new DuplicateFieldError(`Duplicate field name "${field}" detected. Each field must have a unique name.`);
1209
+ }
1241
1210
  }
1242
1211
  /**
1243
1212
  * Validate that no duplicate aliases exist
@@ -2196,7 +2165,9 @@ function parseArgs(argv, command, options = {}) {
2196
2165
  */
2197
2166
  function parseGlobalArgs(tokens, globalExtracted) {
2198
2167
  if (tokens.length === 0) return {};
2199
- return mergeWithPositionals(parseArgv(tokens, buildParserOptions(globalExtracted)), globalExtracted);
2168
+ const parserOptions = buildParserOptions(globalExtracted);
2169
+ const parsed = parseArgv(tokens, parserOptions);
2170
+ return mergeWithPositionals(parsed, globalExtracted);
2200
2171
  }
2201
2172
  /**
2202
2173
  * Separate global flags from command-local args in argv.
@@ -2347,6 +2318,42 @@ function formatRuntimeError(error, debug) {
2347
2318
  return `${styles.error("Error:")} ${error.message}`;
2348
2319
  }
2349
2320
 
2321
+ //#endregion
2322
+ //#region ../core/src/core/case-proxy.ts
2323
+ /**
2324
+ * Wrap an args object with a Proxy that allows dual-case access.
2325
+ *
2326
+ * Given `{ "my-option": "value" }`, both `obj["my-option"]` and `obj.myOption`
2327
+ * will return `"value"`.
2328
+ *
2329
+ * - `Object.keys()`, `JSON.stringify()`, and spread return only the original keys.
2330
+ * - The `in` operator detects both case variants.
2331
+ */
2332
+ function createDualCaseProxy(obj) {
2333
+ return new Proxy(obj, {
2334
+ get(target, prop, receiver) {
2335
+ if (typeof prop === "string") {
2336
+ if (prop in target) return Reflect.get(target, prop, receiver);
2337
+ const camel = toCamelCase(prop);
2338
+ if (camel !== prop && camel in target) return Reflect.get(target, camel, receiver);
2339
+ const kebab = toKebabCase(prop);
2340
+ if (kebab !== prop && kebab in target) return Reflect.get(target, kebab, receiver);
2341
+ }
2342
+ return Reflect.get(target, prop, receiver);
2343
+ },
2344
+ has(target, prop) {
2345
+ if (typeof prop === "string") {
2346
+ if (prop in target) return true;
2347
+ const camel = toCamelCase(prop);
2348
+ if (camel !== prop && camel in target) return true;
2349
+ const kebab = toKebabCase(prop);
2350
+ if (kebab !== prop && kebab in target) return true;
2351
+ }
2352
+ return Reflect.has(target, prop);
2353
+ }
2354
+ });
2355
+ }
2356
+
2350
2357
  //#endregion
2351
2358
  //#region ../core/src/core/effect-runner.ts
2352
2359
  /**
@@ -2620,7 +2627,9 @@ async function runCommandInternal(command, argv, options = {}) {
2620
2627
  const collector = options.captureLogs ?? false ? createLogCollector() : null;
2621
2628
  collector?.start();
2622
2629
  const getCurrentLogs = () => {
2623
- return mergeLogs(options._existingLogs ?? emptyLogs(), collector?.getLogs() ?? emptyLogs());
2630
+ const existingLogs = options._existingLogs ?? emptyLogs();
2631
+ const collectedLogs = collector?.getLogs() ?? emptyLogs();
2632
+ return mergeLogs(existingLogs, collectedLogs);
2624
2633
  };
2625
2634
  try {
2626
2635
  const parseResult = parseArgs(argv, command, {
@@ -2953,4 +2962,4 @@ function extractAndValidateGlobal(options) {
2953
2962
  }
2954
2963
 
2955
2964
  //#endregion
2956
- export { generateHelp as C, createDualCaseProxy as E, ReservedFieldNameError as S, renderMarkdown as T, DuplicateFieldError as _, formatCommandValidationErrors as a, PositionalConfigError as b, validateCrossSchemaCollisions as c, validateDuplicateNegations as d, validatePositionalConfig as f, DuplicateAliasError as g, CaseVariantCollisionError as h, parseArgv as i, validateDuplicateAliases as l, validateReservedFieldNames as m, runMain as n, validateCaseVariantCollisions as o, validateReservedAliases as p, formatValidationErrors as r, validateCommand as s, runCommand as t, validateDuplicateFields as u, DuplicateNegationError as v, renderInline as w, ReservedAliasError as x, FieldTypeConflictError as y };
2965
+ export { ReservedFieldNameError as C, renderMarkdown as E, ReservedAliasError as S, renderInline as T, DuplicateAliasError as _, parseArgv as a, FieldTypeConflictError as b, validateCommand as c, validateDuplicateFields as d, validateDuplicateNegations as f, CaseVariantCollisionError as g, validateReservedFieldNames as h, formatValidationErrors as i, validateCrossSchemaCollisions as l, validateReservedAliases as m, runMain as n, formatCommandValidationErrors as o, validatePositionalConfig as p, createDualCaseProxy as r, validateCaseVariantCollisions as s, runCommand as t, validateDuplicateAliases as u, DuplicateFieldError as v, generateHelp as w, PositionalConfigError as x, DuplicateNegationError as y };
package/dist/skill.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Z as UnknownKeysMode, b as ArgsSchema, v as AnyCommand } from "./arg-registry-YaWTVu_x.js";
1
+ import { Z as UnknownKeysMode, b as ArgsSchema, v as AnyCommand } from "./arg-registry-B8QvBM_Q.js";
2
2
  import { z } from "zod";
3
3
  //#region ../core/src/skill/types.d.ts
4
4
  /**
package/dist/skill.js CHANGED
@@ -1,4 +1,4 @@
1
- import "./register-Bk0K83W2.js";
1
+ import "./register-DlGnMLIY.js";
2
2
  import { a as internalField, i as internalArgs, t as extractFields } from "./schema-extractor-DMSozq40.js";
3
3
  import { n as defineCommand } from "./command-k-4yAz4J.js";
4
4
  import { a as symbols, n as logger } from "./logger-i_bb-Jhc.js";
@@ -712,8 +712,9 @@ function populateAgentDirs(cwd, name, canonicalDir, expectedStamp, mode) {
712
712
  const resolvedTargetParent = realpathSync(targetParent);
713
713
  const targetDir = join(resolvedTargetParent, name);
714
714
  clearInstallSlot(targetDir, expectedStamp, { restrictSymlinkTo: canonicalDir });
715
+ const resolvedCanonicalParent = realpathSync(resolve(canonicalDir, ".."));
715
716
  symlinkOrCopy({
716
- linkTarget: join(relative(resolvedTargetParent, realpathSync(resolve(canonicalDir, ".."))), name),
717
+ linkTarget: join(relative(resolvedTargetParent, resolvedCanonicalParent), name),
717
718
  linkPath: targetDir,
718
719
  copyFrom: canonicalDir,
719
720
  mode
@@ -1394,7 +1395,9 @@ function danglingRoutesToSource(canonical, sourceDir) {
1394
1395
  return false;
1395
1396
  }
1396
1397
  const absoluteTarget = isAbsolute(raw) ? raw : resolve(dirname(canonical), raw);
1397
- const rel = relative(resolveDeepestExisting(resolve(sourceDir)), resolveDeepestExisting(absoluteTarget));
1398
+ const resolvedSource = resolveDeepestExisting(resolve(sourceDir));
1399
+ const resolvedTarget = resolveDeepestExisting(absoluteTarget);
1400
+ const rel = relative(resolvedSource, resolvedTarget);
1398
1401
  if (isAbsolute(rel)) return false;
1399
1402
  if (rel === ".." || rel.startsWith(`..${sep}`)) return false;
1400
1403
  return true;
@@ -0,0 +1,6 @@
1
+ import "./cli-main-Cdz55PLM.js";
2
+ import "./runner-UEbd9e-3.js";
3
+ import "./logger-i_bb-Jhc.js";
4
+ import "./completion-DW5qVc3l.js";
5
+
6
+ export { };
@@ -0,0 +1,12 @@
1
+ import { i as toKebabCase, r as toCamelCase } from "./field-meta-DMy5BcRr.js";
2
+ import { t as arg } from "./register-DlGnMLIY.js";
3
+ import { r as getUnknownKeysMode, t as extractFields } from "./schema-extractor-DMSozq40.js";
4
+ import { n as createCompileCacheShimGenerator, t as runPolittyCli } from "./cli-main-Cdz55PLM.js";
5
+ import { n as defineCommand, t as createDefineCommand } from "./command-k-4yAz4J.js";
6
+ import { C as ReservedFieldNameError, E as renderMarkdown, S as ReservedAliasError, T as renderInline, _ as DuplicateAliasError, a as parseArgv, b as FieldTypeConflictError, c as validateCommand, d as validateDuplicateFields, f as validateDuplicateNegations, g as CaseVariantCollisionError, h as validateReservedFieldNames, i as formatValidationErrors, l as validateCrossSchemaCollisions, m as validateReservedAliases, n as runMain, o as formatCommandValidationErrors, p as validatePositionalConfig, r as createDualCaseProxy, s as validateCaseVariantCollisions, t as runCommand, u as validateDuplicateAliases, v as DuplicateFieldError, w as generateHelp, x as PositionalConfigError, y as DuplicateNegationError } from "./runner-UEbd9e-3.js";
7
+ import { o as isLazyCommand, s as lazy } from "./subcommand-router-Cskpofdk.js";
8
+ import { a as symbols, i as styles, n as logger, r as setColorEnabled, t as isColorEnabled } from "./logger-i_bb-Jhc.js";
9
+ import { a as generateCompletion, p as generateBundledCompletionWorker, s as withCompletionCommand } from "./completion-DW5qVc3l.js";
10
+ import "./src-DO4W2NcZ.js";
11
+
12
+ export { generateBundledCompletionWorker };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@politty/zod",
3
- "version": "0.0.0",
3
+ "version": "0.1.0",
4
4
  "description": "A lightweight CLI framework inspired by citty with zod v4 registry integration for type-safe metadata management",
5
5
  "keywords": [
6
6
  "argument-parser",
@@ -1,84 +0,0 @@
1
- import { n as generateCompileCacheShim, t as formatShimPath } from "./src-KzC0g5CS.js";
2
- import { a as internalField, i as internalArgs } from "./schema-extractor-DMSozq40.js";
3
- import { n as defineCommand } from "./command-k-4yAz4J.js";
4
- import { p as generateBundledCompletionWorker } from "./completion-gtWX3mwP.js";
5
- import { n as runMain } from "./runner-D72I7wvK.js";
6
-
7
- //#region ../core/src/cli-main.ts
8
- const generateWorkerCommand = defineCommand({
9
- name: "generate-worker",
10
- description: "Generate and verify a bundled shell completion worker",
11
- args: internalArgs({
12
- bin: internalField.string({
13
- description: "CLI binary or built JS entry file to invoke",
14
- placeholder: "PATH"
15
- }),
16
- program: internalField.string({
17
- description: "Program name embedded in worker metadata",
18
- placeholder: "NAME"
19
- }),
20
- shell: internalField.enum([
21
- "bash",
22
- "zsh",
23
- "fish"
24
- ], {
25
- description: "Shell worker to generate",
26
- placeholder: "SHELL"
27
- }),
28
- out: internalField.optionalString({
29
- description: "Output worker path (defaults to dist/completion/<shell>-worker.<ext>)",
30
- placeholder: "PATH"
31
- }),
32
- verify: internalField.boolean({ description: "Verify __completion-worker-path resolves to the generated worker" })
33
- }),
34
- async run(args) {
35
- await generateBundledCompletionWorker({
36
- bin: args.bin,
37
- programName: args.program,
38
- shell: args.shell,
39
- ...args.out !== void 0 && { outputPath: args.out },
40
- verify: args.verify
41
- });
42
- }
43
- });
44
- runMain(defineCommand({
45
- name: "politty",
46
- description: "politty development utilities",
47
- subCommands: {
48
- "generate-shim": defineCommand({
49
- name: "generate-shim",
50
- description: "Generate a compile-cache bin shim that loads the real CLI via dynamic import",
51
- args: internalArgs({
52
- entry: internalField.optionalStringArray({
53
- description: "Module specifier the shim imports, relative to the shim file; repeatable, one per bin/--out (defaults to ./cli.js, ./cli.mjs, ./index.js, or ./index.mjs next to each shim)",
54
- placeholder: "SPECIFIER"
55
- }),
56
- out: internalField.optionalStringArray({
57
- description: "Output path for the generated shim; repeatable, one per --entry (defaults to the bin paths in package.json)",
58
- placeholder: "PATH"
59
- }),
60
- program: internalField.optionalString({
61
- description: "Program name for the cache directory, applied to all shims (defaults per shim to its bin name)",
62
- placeholder: "NAME"
63
- })
64
- }),
65
- run(args) {
66
- const cwd = process.cwd();
67
- const results = generateCompileCacheShim({
68
- ...args.entry !== void 0 && { entry: args.entry },
69
- ...args.out !== void 0 && { out: args.out },
70
- ...args.program !== void 0 && { program: args.program },
71
- cwd
72
- });
73
- for (const result of results) console.log(`Generated compile-cache shim: ${formatShimPath(result.outputPath, cwd)} (program: ${result.program}, entry: ${result.entry})`);
74
- }
75
- }),
76
- "generate-worker": generateWorkerCommand
77
- }
78
- })).catch((error) => {
79
- console.error(error instanceof Error ? error.message : String(error));
80
- process.exit(1);
81
- });
82
-
83
- //#endregion
84
- export { };
@@ -1,7 +0,0 @@
1
- import "./register-Bk0K83W2.js";
2
-
3
- //#region src/cli-run.ts
4
- await import("./cli-main-Dn88vIyn.js");
5
-
6
- //#endregion
7
- export { };
@@ -1,3 +0,0 @@
1
- import { n as runMain, t as runCommand } from "./runner-D72I7wvK.js";
2
-
3
- export { runCommand };