@dbx-tools/cli-appkit-env 0.9.40 → 0.9.43

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
@@ -51,26 +51,32 @@ application startup itself, use
51
51
 
52
52
  ### `dbx appkit`
53
53
 
54
- ```text
55
- Usage: dbx appkit [command]
56
-
57
54
  AppKit helpers: resolve the environment an AppKit app would start with.
58
55
 
59
- Commands:
60
- env [options] Run AppKit auto-config and print new/changed env vars.
56
+ ```sh
57
+ dbx appkit [command]
61
58
  ```
62
59
 
63
- ### `dbx appkit env`
60
+ #### Commands
61
+
62
+ | Command | Description |
63
+ | --------------- | ------------------------------------------------------ |
64
+ | `env [options]` | Run AppKit auto-config and print new/changed env vars. |
64
65
 
65
- ```text
66
- Usage: dbx appkit env [options]
66
+ ### `dbx appkit env`
67
67
 
68
68
  Run AppKit auto-config and print new/changed env vars.
69
69
 
70
- Options:
71
- -f, --format <format> Output: export (POSIX shell), windows (cmd set), or json. Defaults by
72
- platform.
73
- -q, --quiet Suppress auto-config log output (LOG_LEVEL=error)
70
+ ```sh
71
+ dbx appkit env [options]
74
72
  ```
75
73
 
74
+ #### Options
75
+
76
+ | Option | Description |
77
+ | ------------------ | --------------------------------------------------------------------------------------------------------------- |
78
+ | `--format <value>` | Output format: export, windows, or json. (choices: "export", "windows", "json", default: "export", env: FORMAT) |
79
+ | `--quiet` | Suppress auto-config log output. (default: false, env: QUIET) |
80
+ | `--no-quiet` | Disable suppress auto-config log output. |
81
+
76
82
  <!-- cli-reference:end -->
package/index.ts CHANGED
@@ -3,8 +3,9 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-appkit-env";
6
- export const PACKAGE_VERSION = "0.9.40";
6
+ export const PACKAGE_VERSION = "0.9.43";
7
7
  export * as cli from "./src/cli.ts";
8
8
  export * as envExport from "./src/env-export.ts";
9
9
  export { CommanderError } from "./src/cli.ts";
10
- export type { EnvExportFormat } from "./src/env-export.ts";
10
+ export { EnvExportFormatSchema, EnvCommandOptionsSchema } from "./src/env-export.ts";
11
+ export type { EnvExportFormat, EnvCommandOptions } from "./src/env-export.ts";
package/lib/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli-appkit-env";
2
- export declare const PACKAGE_VERSION = "0.9.40";
2
+ export declare const PACKAGE_VERSION = "0.9.43";
3
3
  export * as cli from "./src/cli.ts";
4
4
  export * as envExport from "./src/env-export.ts";
5
5
  export { CommanderError } from "./src/cli.ts";
6
- export type { EnvExportFormat } from "./src/env-export.ts";
6
+ export { EnvExportFormatSchema, EnvCommandOptionsSchema } from "./src/env-export.ts";
7
+ export type { EnvExportFormat, EnvCommandOptions } from "./src/env-export.ts";
package/lib/index.js CHANGED
@@ -2,8 +2,9 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/cli-appkit-env";
5
- export const PACKAGE_VERSION = "0.9.40";
5
+ export const PACKAGE_VERSION = "0.9.43";
6
6
  export * as cli from "./src/cli.js";
7
7
  export * as envExport from "./src/env-export.js";
8
8
  export { CommanderError } from "./src/cli.js";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY2xpLWFwcGtpdC1lbnZcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS40MFwiO1xuZXhwb3J0ICogYXMgY2xpIGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGVudkV4cG9ydCBmcm9tIFwiLi9zcmMvZW52LWV4cG9ydC50c1wiO1xuZXhwb3J0IHsgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiLi9zcmMvY2xpLnRzXCI7XG5leHBvcnQgdHlwZSB7IEVudkV4cG9ydEZvcm1hdCB9IGZyb20gXCIuL3NyYy9lbnYtZXhwb3J0LnRzXCI7XG4iXX0=
9
+ export { EnvExportFormatSchema, EnvCommandOptionsSchema } from "./src/env-export.js";
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY2xpLWFwcGtpdC1lbnZcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS40M1wiO1xuZXhwb3J0ICogYXMgY2xpIGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCAqIGFzIGVudkV4cG9ydCBmcm9tIFwiLi9zcmMvZW52LWV4cG9ydC50c1wiO1xuZXhwb3J0IHsgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiLi9zcmMvY2xpLnRzXCI7XG5leHBvcnQgeyBFbnZFeHBvcnRGb3JtYXRTY2hlbWEsIEVudkNvbW1hbmRPcHRpb25zU2NoZW1hIH0gZnJvbSBcIi4vc3JjL2Vudi1leHBvcnQudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW52RXhwb3J0Rm9ybWF0LCBFbnZDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuL3NyYy9lbnYtZXhwb3J0LnRzXCI7XG4iXX0=
package/lib/src/cli.js CHANGED
@@ -12,32 +12,31 @@
12
12
  * @module
13
13
  */
14
14
  import { appkit } from "@dbx-tools/appkit";
15
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args/args";
15
16
  import { log } from "@dbx-tools/shared-core";
16
17
  import { Command, CommanderError } from "commander";
17
- import { defaultEnvExportFormat, diffEnv, formatEnvExport, parseEnvExportFormat, snapshotEnv, } from "./env-export.js";
18
+ import { diffEnv, EnvCommandOptionsSchema, formatEnvExport, snapshotEnv, } from "./env-export.js";
18
19
  const logger = log.logger("appkit-env");
19
20
  /** Run auto-config and write the resulting env delta to stdout. */
20
21
  async function writeEnvExport(opts) {
21
22
  if (opts.quiet) {
22
23
  process.env.LOG_LEVEL = "error";
23
24
  }
24
- const format = opts.format ? parseEnvExportFormat(opts.format) : defaultEnvExportFormat();
25
25
  logger.debug("Snapshotting env vars");
26
26
  const before = snapshotEnv();
27
27
  await appkit.autoConfigure({ autoConfigure: "env" });
28
28
  const changes = diffEnv(before, snapshotEnv());
29
- process.stdout.write(formatEnvExport(changes, format));
29
+ process.stdout.write(formatEnvExport(changes, opts.format));
30
30
  }
31
31
  /**
32
32
  * Build the `env` command on its own, so a host CLI can mount it under a
33
33
  * different parent than {@link buildProgram}'s.
34
34
  */
35
35
  export function buildEnvCommand(name = "env") {
36
- return new Command(name)
37
- .description("Run AppKit auto-config and print new/changed env vars.")
38
- .option("-f, --format <format>", "Output: export (POSIX shell), windows (cmd set), or json. Defaults by platform.")
39
- .option("-q, --quiet", "Suppress auto-config log output (LOG_LEVEL=error)")
40
- .action(writeEnvExport);
36
+ const command = addArgs(new Command(name).description("Run AppKit auto-config and print new/changed env vars."), EnvCommandOptionsSchema, { scope: [] });
37
+ return command.action(async () => {
38
+ await writeEnvExport(parseArgs(command, EnvCommandOptionsSchema));
39
+ });
41
40
  }
42
41
  /** Build the `dbx appkit` commander program (no side effects until parsed). */
43
42
  export function buildProgram(name = "dbx appkit") {
@@ -52,4 +51,4 @@ export async function runCli(argv) {
52
51
  await buildProgram().parseAsync(argv);
53
52
  }
54
53
  export { CommanderError };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsT0FBTyxFQUNQLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsV0FBVyxHQUNaLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQVF4QyxtRUFBbUU7QUFDbkUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxJQUFhO0lBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDMUYsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUUvQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBSSxHQUFHLEtBQUs7SUFDMUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDckIsV0FBVyxDQUFDLHdEQUF3RCxDQUFDO1NBQ3JFLE1BQU0sQ0FDTCx1QkFBdUIsRUFDdkIsaUZBQWlGLENBQ2xGO1NBQ0EsTUFBTSxDQUFDLGFBQWEsRUFBRSxtREFBbUQsQ0FBQztTQUMxRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQUksR0FBRyxZQUFZO0lBQzlDLE9BQU8sSUFBSSxPQUFPLEVBQUU7U0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLFdBQVcsQ0FBQyx5RUFBeUUsQ0FBQztTQUN0RixVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDN0Isa0JBQWtCLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBRUQsK0ZBQStGO0FBQy9GLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYGRieCBhcHBraXRgIGNvbW1hbmRlciBwcm9ncmFtLlxuICpcbiAqIGBlbnZgIHJ1bnMgQXBwS2l0IGF1dG8tY29uZmlnIGFuZCBwcmludHMgdGhlIGVudiB2YXJzIGl0IGFkZGVkIG9yIGNoYW5nZWQgYXNcbiAqIGV2YWwtYWJsZSBgZXhwb3J0YCAvIGBzZXRgIGxpbmVzIChvciBKU09OKSAtIGUuZy4gYGV2YWwgXCIkKGRieCBhcHBraXQgZW52KVwiYFxuICogdG8gbG9hZCBhIHJlc29sdmVkIExha2ViYXNlIGNvbm5lY3Rpb24gaW50byB5b3VyIHNoZWxsLlxuICpcbiAqIFRoaXMgcGFja2FnZSBzaGlwcyBubyBiaW4gb2YgaXRzIG93bjoge0BsaW5rIGJ1aWxkUHJvZ3JhbX0gaXMgbW91bnRlZCBhcyB0aGVcbiAqIGBhcHBraXRgIHN1YmNvbW1hbmQgb2YgdGhlIHNpbmdsZSBgZGJ4YCBDTEkgKGBAZGJ4LXRvb2xzL2NsaWApLCB3aGljaCBpbXBvcnRzXG4gKiB0aGlzIG1vZHVsZSBsYXppbHkgc28gYGRieCBkZXZgIG5ldmVyIHBheXMgZm9yIHRoZSBBcHBLaXQgbG9hZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgQ29tbWFuZCwgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7XG4gIGRlZmF1bHRFbnZFeHBvcnRGb3JtYXQsXG4gIGRpZmZFbnYsXG4gIGZvcm1hdEVudkV4cG9ydCxcbiAgcGFyc2VFbnZFeHBvcnRGb3JtYXQsXG4gIHNuYXBzaG90RW52LFxufSBmcm9tIFwiLi9lbnYtZXhwb3J0LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQtZW52XCIpO1xuXG4vKiogT3B0aW9ucyBmb3IgdGhlIGBlbnZgIGNvbW1hbmQuICovXG5pbnRlcmZhY2UgRW52T3B0cyB7XG4gIGZvcm1hdD86IHN0cmluZztcbiAgcXVpZXQ/OiBib29sZWFuO1xufVxuXG4vKiogUnVuIGF1dG8tY29uZmlnIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nIGVudiBkZWx0YSB0byBzdGRvdXQuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZUVudkV4cG9ydChvcHRzOiBFbnZPcHRzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvcHRzLnF1aWV0KSB7XG4gICAgcHJvY2Vzcy5lbnYuTE9HX0xFVkVMID0gXCJlcnJvclwiO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0ID0gb3B0cy5mb3JtYXQgPyBwYXJzZUVudkV4cG9ydEZvcm1hdChvcHRzLmZvcm1hdCkgOiBkZWZhdWx0RW52RXhwb3J0Rm9ybWF0KCk7XG4gIGxvZ2dlci5kZWJ1ZyhcIlNuYXBzaG90dGluZyBlbnYgdmFyc1wiKTtcbiAgY29uc3QgYmVmb3JlID0gc25hcHNob3RFbnYoKTtcbiAgYXdhaXQgYXBwa2l0LmF1dG9Db25maWd1cmUoeyBhdXRvQ29uZmlndXJlOiBcImVudlwiIH0pO1xuICBjb25zdCBjaGFuZ2VzID0gZGlmZkVudihiZWZvcmUsIHNuYXBzaG90RW52KCkpO1xuXG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdEVudkV4cG9ydChjaGFuZ2VzLCBmb3JtYXQpKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYGVudmAgY29tbWFuZCBvbiBpdHMgb3duLCBzbyBhIGhvc3QgQ0xJIGNhbiBtb3VudCBpdCB1bmRlciBhXG4gKiBkaWZmZXJlbnQgcGFyZW50IHRoYW4ge0BsaW5rIGJ1aWxkUHJvZ3JhbX0ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW52Q29tbWFuZChuYW1lID0gXCJlbnZcIik6IENvbW1hbmQge1xuICByZXR1cm4gbmV3IENvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oXCJSdW4gQXBwS2l0IGF1dG8tY29uZmlnIGFuZCBwcmludCBuZXcvY2hhbmdlZCBlbnYgdmFycy5cIilcbiAgICAub3B0aW9uKFxuICAgICAgXCItZiwgLS1mb3JtYXQgPGZvcm1hdD5cIixcbiAgICAgIFwiT3V0cHV0OiBleHBvcnQgKFBPU0lYIHNoZWxsKSwgd2luZG93cyAoY21kIHNldCksIG9yIGpzb24uIERlZmF1bHRzIGJ5IHBsYXRmb3JtLlwiLFxuICAgIClcbiAgICAub3B0aW9uKFwiLXEsIC0tcXVpZXRcIiwgXCJTdXBwcmVzcyBhdXRvLWNvbmZpZyBsb2cgb3V0cHV0IChMT0dfTEVWRUw9ZXJyb3IpXCIpXG4gICAgLmFjdGlvbih3cml0ZUVudkV4cG9ydCk7XG59XG5cbi8qKiBCdWlsZCB0aGUgYGRieCBhcHBraXRgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZSA9IFwiZGJ4IGFwcGtpdFwiKTogQ29tbWFuZCB7XG4gIHJldHVybiBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oXCJBcHBLaXQgaGVscGVyczogcmVzb2x2ZSB0aGUgZW52aXJvbm1lbnQgYW4gQXBwS2l0IGFwcCB3b3VsZCBzdGFydCB3aXRoLlwiKVxuICAgIC5hZGRDb21tYW5kKGJ1aWxkRW52Q29tbWFuZCgpKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IoKTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCBhbmQgcnVuIHRoZSBtYXRjaGluZyBjb21tYW5kLiBUaHJvd3Mge0BsaW5rIENvbW1hbmRlckVycm9yfSBvbiBmbGFnIGVycm9ycy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKCkucGFyc2VBc3luYyhhcmd2KTtcbn1cblxuZXhwb3J0IHsgQ29tbWFuZGVyRXJyb3IgfTtcbiJdfQ==
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFdBQVcsR0FFWixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEMsbUVBQW1FO0FBQ25FLEtBQUssVUFBVSxjQUFjLENBQUMsSUFBdUI7SUFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUM3QixNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFJLEdBQUcsS0FBSztJQUMxQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyx3REFBd0QsQ0FBQyxFQUN2Rix1QkFBdUIsRUFDdkIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQ2QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUMvQixNQUFNLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFJLEdBQUcsWUFBWTtJQUM5QyxPQUFPLElBQUksT0FBTyxFQUFFO1NBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDVixXQUFXLENBQUMseUVBQXlFLENBQUM7U0FDdEYsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzdCLGtCQUFrQixFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELCtGQUErRjtBQUMvRixNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxJQUFjO0lBQ3pDLE1BQU0sWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBkYnggYXBwa2l0YCBjb21tYW5kZXIgcHJvZ3JhbS5cbiAqXG4gKiBgZW52YCBydW5zIEFwcEtpdCBhdXRvLWNvbmZpZyBhbmQgcHJpbnRzIHRoZSBlbnYgdmFycyBpdCBhZGRlZCBvciBjaGFuZ2VkIGFzXG4gKiBldmFsLWFibGUgYGV4cG9ydGAgLyBgc2V0YCBsaW5lcyAob3IgSlNPTikgLSBlLmcuIGBldmFsIFwiJChkYnggYXBwa2l0IGVudilcImBcbiAqIHRvIGxvYWQgYSByZXNvbHZlZCBMYWtlYmFzZSBjb25uZWN0aW9uIGludG8geW91ciBzaGVsbC5cbiAqXG4gKiBUaGlzIHBhY2thZ2Ugc2hpcHMgbm8gYmluIG9mIGl0cyBvd246IHtAbGluayBidWlsZFByb2dyYW19IGlzIG1vdW50ZWQgYXMgdGhlXG4gKiBgYXBwa2l0YCBzdWJjb21tYW5kIG9mIHRoZSBzaW5nbGUgYGRieGAgQ0xJIChgQGRieC10b29scy9jbGlgKSwgd2hpY2ggaW1wb3J0c1xuICogdGhpcyBtb2R1bGUgbGF6aWx5IHNvIGBkYnggZGV2YCBuZXZlciBwYXlzIGZvciB0aGUgQXBwS2l0IGxvYWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYWRkQXJncywgcGFyc2VBcmdzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLWFyZ3MvYXJnc1wiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRlckVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5pbXBvcnQge1xuICBkaWZmRW52LFxuICBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSxcbiAgZm9ybWF0RW52RXhwb3J0LFxuICBzbmFwc2hvdEVudixcbiAgdHlwZSBFbnZDb21tYW5kT3B0aW9ucyxcbn0gZnJvbSBcIi4vZW52LWV4cG9ydC50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0LWVudlwiKTtcblxuLyoqIFJ1biBhdXRvLWNvbmZpZyBhbmQgd3JpdGUgdGhlIHJlc3VsdGluZyBlbnYgZGVsdGEgdG8gc3Rkb3V0LiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVFbnZFeHBvcnQob3B0czogRW52Q29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG9wdHMucXVpZXQpIHtcbiAgICBwcm9jZXNzLmVudi5MT0dfTEVWRUwgPSBcImVycm9yXCI7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJTbmFwc2hvdHRpbmcgZW52IHZhcnNcIik7XG4gIGNvbnN0IGJlZm9yZSA9IHNuYXBzaG90RW52KCk7XG4gIGF3YWl0IGFwcGtpdC5hdXRvQ29uZmlndXJlKHsgYXV0b0NvbmZpZ3VyZTogXCJlbnZcIiB9KTtcbiAgY29uc3QgY2hhbmdlcyA9IGRpZmZFbnYoYmVmb3JlLCBzbmFwc2hvdEVudigpKTtcblxuICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXRFbnZFeHBvcnQoY2hhbmdlcywgb3B0cy5mb3JtYXQpKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYGVudmAgY29tbWFuZCBvbiBpdHMgb3duLCBzbyBhIGhvc3QgQ0xJIGNhbiBtb3VudCBpdCB1bmRlciBhXG4gKiBkaWZmZXJlbnQgcGFyZW50IHRoYW4ge0BsaW5rIGJ1aWxkUHJvZ3JhbX0ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW52Q29tbWFuZChuYW1lID0gXCJlbnZcIik6IENvbW1hbmQge1xuICBjb25zdCBjb21tYW5kID0gYWRkQXJncyhcbiAgICBuZXcgQ29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihcIlJ1biBBcHBLaXQgYXV0by1jb25maWcgYW5kIHByaW50IG5ldy9jaGFuZ2VkIGVudiB2YXJzLlwiKSxcbiAgICBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSxcbiAgICB7IHNjb3BlOiBbXSB9LFxuICApO1xuICByZXR1cm4gY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHdyaXRlRW52RXhwb3J0KHBhcnNlQXJncyhjb21tYW5kLCBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSkpO1xuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgZGJ4IGFwcGtpdGAgY29tbWFuZGVyIHByb2dyYW0gKG5vIHNpZGUgZWZmZWN0cyB1bnRpbCBwYXJzZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShuYW1lID0gXCJkYnggYXBwa2l0XCIpOiBDb21tYW5kIHtcbiAgcmV0dXJuIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihcIkFwcEtpdCBoZWxwZXJzOiByZXNvbHZlIHRoZSBlbnZpcm9ubWVudCBhbiBBcHBLaXQgYXBwIHdvdWxkIHN0YXJ0IHdpdGguXCIpXG4gICAgLmFkZENvbW1hbmQoYnVpbGRFbnZDb21tYW5kKCkpXG4gICAgLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xufVxuXG4vKiogUGFyc2UgYGFyZ3ZgIGFuZCBydW4gdGhlIG1hdGNoaW5nIGNvbW1hbmQuIFRocm93cyB7QGxpbmsgQ29tbWFuZGVyRXJyb3J9IG9uIGZsYWcgZXJyb3JzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNsaShhcmd2OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBidWlsZFByb2dyYW0oKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuXG5leHBvcnQgeyBDb21tYW5kZXJFcnJvciB9O1xuIl19
@@ -4,7 +4,13 @@
4
4
  *
5
5
  * @module
6
6
  */
7
- export type EnvExportFormat = "export" | "windows" | "json";
7
+ import { z } from "zod";
8
+ export declare const EnvExportFormatSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
9
+ json: "json";
10
+ export: "export";
11
+ windows: "windows";
12
+ }>>;
13
+ export type EnvExportFormat = z.output<typeof EnvExportFormatSchema>;
8
14
  /** Shallow copy of the current process environment. */
9
15
  export declare function snapshotEnv(env?: NodeJS.ProcessEnv): Record<string, string>;
10
16
  /**
@@ -16,6 +22,15 @@ export declare function snapshotEnv(env?: NodeJS.ProcessEnv): Record<string, str
16
22
  export declare function diffEnv(before: Record<string, string>, after: Record<string, string>): Record<string, string>;
17
23
  /** Select Windows `set` output on Windows and POSIX `export` output elsewhere. */
18
24
  export declare function defaultEnvExportFormat(platform?: NodeJS.Platform): EnvExportFormat;
25
+ export declare const EnvCommandOptionsSchema: z.ZodObject<{
26
+ format: z.ZodDefault<z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
27
+ json: "json";
28
+ export: "export";
29
+ windows: "windows";
30
+ }>>>;
31
+ quiet: z.ZodDefault<z.ZodBoolean>;
32
+ }, z.core.$strict>;
33
+ export type EnvCommandOptions = z.output<typeof EnvCommandOptionsSchema>;
19
34
  /**
20
35
  * Format env entries for the requested output style. An empty map prints
21
36
  * nothing (no trailing newline).
@@ -4,6 +4,19 @@
4
4
  *
5
5
  * @module
6
6
  */
7
+ import { z } from "zod";
8
+ export const EnvExportFormatSchema = z
9
+ .preprocess((value) => {
10
+ if (typeof value !== "string")
11
+ return value;
12
+ const normalized = value.trim().toLowerCase();
13
+ if (["export", "shell", "nix", "bash"].includes(normalized))
14
+ return "export";
15
+ if (["windows", "win", "cmd"].includes(normalized))
16
+ return "windows";
17
+ return normalized;
18
+ }, z.enum(["export", "windows", "json"]))
19
+ .describe("Environment export output format.");
7
20
  /** Shallow copy of the current process environment. */
8
21
  export function snapshotEnv(env = process.env) {
9
22
  const out = {};
@@ -37,6 +50,13 @@ export function diffEnv(before, after) {
37
50
  export function defaultEnvExportFormat(platform = process.platform) {
38
51
  return platform === "win32" ? "windows" : "export";
39
52
  }
53
+ export const EnvCommandOptionsSchema = z
54
+ .object({
55
+ format: EnvExportFormatSchema.default(defaultEnvExportFormat()).describe("Output format: export, windows, or json."),
56
+ quiet: z.boolean().default(false).describe("Suppress auto-config log output."),
57
+ })
58
+ .strict()
59
+ .describe("Options for exporting the AppKit auto-config environment.");
40
60
  function escapeExportValue(value) {
41
61
  return value
42
62
  .replace(/\\/g, "\\\\")
@@ -74,19 +94,6 @@ export function formatEnvExport(env, format) {
74
94
  }
75
95
  /** Normalize CLI format aliases to a supported export format. */
76
96
  export function parseEnvExportFormat(value) {
77
- const normalized = value.trim().toLowerCase();
78
- if (normalized === "export" ||
79
- normalized === "shell" ||
80
- normalized === "nix" ||
81
- normalized === "bash") {
82
- return "export";
83
- }
84
- if (normalized === "windows" || normalized === "win" || normalized === "cmd") {
85
- return "windows";
86
- }
87
- if (normalized === "json") {
88
- return "json";
89
- }
90
- throw new Error(`Unknown format '${value}'. Use export, windows, or json.`);
97
+ return EnvExportFormatSchema.parse(value);
91
98
  }
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWV4cG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnYtZXhwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBSUgsdURBQXVEO0FBQ3ZELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBeUIsT0FBTyxDQUFDLEdBQUc7SUFDOUQsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztJQUN2QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQy9DLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQ3JCLE1BQThCLEVBQzlCLEtBQTZCO0lBRTdCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEUsTUFBTSxHQUFHLEdBQTJCLEVBQUUsQ0FBQztJQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ25DLHNGQUFzRjtRQUN0RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbEIsR0FBRyxDQUFD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RUFBRSxDQUFDO1FBQzdFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLFVBQVUsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxrQ0FBa0MsQ0FBQyxDQUFDO0FBQzlFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNuYXBzaG90IGBwcm9jZXNzLmVudmAsIGRpZmYgYWZ0ZXIgYXV0by1jb25maWcsIGFuZCBmb3JtYXQgZGVsdGFzIGFzXG4gKiBldmFsLWFibGUgc2hlbGwgYGV4cG9ydGAgLyBXaW5kb3dzIGBzZXRgIGxpbmVzIG9yIEpTT04uXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmV4cG9ydCB0eXBlIEVudkV4cG9ydEZvcm1hdCA9IFwiZXhwb3J0XCIgfCBcIndpbmRvd3NcIiB8IFwianNvblwiO1xuXG4vKiogU2hhbGxvdyBjb3B5IG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgZW52aXJvbm1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcHNob3RFbnYoZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYpKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogS2V5cyB3aG9zZSB2YWx1ZXMgd2VyZSBhZGRlZCwgY2hhbmdlZCwgb3IgY2xlYXJlZCBiZXR3ZWVuIHNuYXBzaG90cy4gQSBrZXlcbiAqIHRoYXQgd2VudCBmcm9tIGEgbm9uLWJsYW5rIHZhbHVlIHRvIGJsYW5rL3JlbW92ZWQgaXMgZW1pdHRlZCB3aXRoIGFuIGVtcHR5XG4gKiB2YWx1ZSBzbyBpdCBjYW4gYmUgdW5zZXQuIEtleXMgdGhhdCB3ZXJlIGFscmVhZHkgYmxhbmsvYWJzZW50IGFuZCBzdGF5ZWQgdGhhdFxuICogd2F5IGFyZSBvbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkVudihcbiAgYmVmb3JlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBhZnRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBrZXlzID0gbmV3IFNldChbLi4uT2JqZWN0LmtleXMoYmVmb3JlKSwgLi4uT2JqZWN0LmtleXMoYWZ0ZXIpXSk7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBbLi4ua2V5c10uc29ydCgpKSB7XG4gICAgLy8gVHJlYXQgYSByZW1vdmVkIGtleSBhcyBibGFuayBzbyBhIG5vbi1ibGFuayAtPiBibGFuay9yZW1vdmVkIHRyYW5zaXRpb24gaXMgYSBkZWx0YS5cbiAgICBjb25zdCBwcmV2ID0gYmVmb3JlW2tleV0gPz8gXCJcIjtcbiAgICBjb25zdCBuZXh0ID0gYWZ0ZXJba2V5XSA/PyBcIlwiO1xuICAgIGlmIChuZXh0ICE9PSBwcmV2KSB7XG4gICAgICBvdXRba2V5XSA9IG5leHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBTZWxlY3QgV2luZG93cyBgc2V0YCBvdXRwdXQgb24gV2luZG93cyBhbmQgUE9TSVggYGV4cG9ydGAgb3V0cHV0IGVsc2V3aGVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RW52RXhwb3J0Rm9ybWF0KFxuICBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSxcbik6IEVudkV4cG9ydEZvcm1hdCB7XG4gIHJldHVybiBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCJ3aW5kb3dzXCIgOiBcImV4cG9ydFwiO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVFeHBvcnRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlXG4gICAgLnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKVxuICAgIC5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJylcbiAgICAucmVwbGFjZSgvXFwkL2csIFwiXFxcXCRcIilcbiAgICAucmVwbGFjZSgvYC9nLCBcIlxcXFxgXCIpO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVXaW5kb3dzU2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICgvW1xcc1wiJnw8Pl5dLy50ZXN0KHZhbHVlKSkge1xuICAgIHJldHVybiBgXCIke3ZhbHVlLnJlcGxhY2UoL1wiL2csICdcIlwiJyl9XCJgO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBGb3JtYXQgZW52IGVudHJpZXMgZm9yIHRoZSByZXF1ZXN0ZWQgb3V0cHV0IHN0eWxlLiBBbiBlbXB0eSBtYXAgcHJpbnRzXG4gKiBub3RoaW5nIChubyB0cmFpbGluZyBuZXdsaW5lKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEVudkV4cG9ydChlbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGZvcm1hdDogRW52RXhwb3J0Rm9ybWF0KTogc3RyaW5nIHtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGVudikuc29ydCgoW2FdLCBbYl0pID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGlmIChlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlIFwianNvblwiOlxuICAgICAgcmV0dXJuIGAke0pTT04uc3RyaW5naWZ5KE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKSwgbnVsbCwgMil9XFxuYDtcbiAgICBjYXNlIFwid2luZG93c1wiOlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgZW50cmllcy5tYXAoKFtrZXksIHZhbHVlXSkgPT4gYHNldCAke2tleX09JHtlc2NhcGVXaW5kb3dzU2V0VmFsdWUodmFsdWUpfWApLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICBcIlxcblwiXG4gICAgICApO1xuICAgIGNhc2UgXCJleHBvcnRcIjpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IGBleHBvcnQgJHtrZXl9PVwiJHtlc2NhcGVFeHBvcnRWYWx1ZSh2YWx1ZSl9XCJgKS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgXCJcXG5cIlxuICAgICAgKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGVudiBleHBvcnQgZm9ybWF0OiAke2Zvcm1hdCBzYXRpc2ZpZXMgbmV2ZXJ9YCk7XG4gIH1cbn1cblxuLyoqIE5vcm1hbGl6ZSBDTEkgZm9ybWF0IGFsaWFzZXMgdG8gYSBzdXBwb3J0ZWQgZXhwb3J0IGZvcm1hdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVudkV4cG9ydEZvcm1hdCh2YWx1ZTogc3RyaW5nKTogRW52RXhwb3J0Rm9ybWF0IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoXG4gICAgbm9ybWFsaXplZCA9PT0gXCJleHBvcnRcIiB8fFxuICAgIG5vcm1hbGl6ZWQgPT09IFwic2hlbGxcIiB8fFxuICAgIG5vcm1hbGl6ZWQgPT09IFwibml4XCIgfHxcbiAgICBub3JtYWxpemVkID09PSBcImJhc2hcIlxuICApIHtcbiAgICByZXR1cm4gXCJleHBvcnRcIjtcbiAgfVxuICBpZiAobm9ybWFsaXplZCA9PT0gXCJ3aW5kb3dzXCIgfHwgbm9ybWFsaXplZCA9PT0gXCJ3aW5cIiB8fCBub3JtYWxpemVkID09PSBcImNtZFwiKSB7XG4gICAgcmV0dXJuIFwid2luZG93c1wiO1xuICB9XG4gIGlmIChub3JtYWxpemVkID09PSBcImpzb25cIikge1xuICAgIHJldHVybiBcImpzb25cIjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZm9ybWF0ICcke3ZhbHVlfScuIFVzZSBleHBvcnQsIHdpbmRvd3MsIG9yIGpzb24uYCk7XG59XG4iXX0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52LWV4cG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbnYtZXhwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLENBQUMsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUV4QixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDO0tBQ25DLFVBQVUsQ0FDVCxDQUFDLEtBQUssRUFBRSxFQUFFO0lBQ1IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFDN0UsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3JFLE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUMsRUFDRCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUN0QztLQUNBLFFBQVEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBSWpELHVEQUF1RDtBQUN2RCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQXlCLE9BQU8sQ0FBQyxHQUFHO0lBQzlELE1BQU0sR0FBRyxHQUEyQixFQUFFLENBQUM7SUFDdkMsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixH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U0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDckUsS0FBSyxTQUFTO1lBQ1osT0FBTyxDQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQXFCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3RGLElBQUksQ0FDTCxDQUFDO1FBQ0osS0FBSyxRQUFRO1lBQ1gsT0FBTyxDQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxHQUFHLEtBQUssaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZGLElBQUksQ0FDTCxDQUFDO1FBQ0o7WUFDRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixNQUFzQixFQUFFLENBQUMsQ0FBQztJQUM1RSxDQUFDO0FBQ0gsQ0FBQztBQUVELGlFQUFpRTtBQUNqRSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYTtJQUNoRCxPQUFPLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTbmFwc2hvdCBgcHJvY2Vzcy5lbnZgLCBkaWZmIGFmdGVyIGF1dG8tY29uZmlnLCBhbmQgZm9ybWF0IGRlbHRhcyBhc1xuICogZXZhbC1hYmxlIHNoZWxsIGBleHBvcnRgIC8gV2luZG93cyBgc2V0YCBsaW5lcyBvciBKU09OLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5leHBvcnQgY29uc3QgRW52RXhwb3J0Rm9ybWF0U2NoZW1hID0gelxuICAucHJlcHJvY2VzcyhcbiAgICAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChbXCJleHBvcnRcIiwgXCJzaGVsbFwiLCBcIm5peFwiLCBcImJhc2hcIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHJldHVybiBcImV4cG9ydFwiO1xuICAgICAgaWYgKFtcIndpbmRvd3NcIiwgXCJ3aW5cIiwgXCJjbWRcIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHJldHVybiBcIndpbmRvd3NcIjtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH0sXG4gICAgei5lbnVtKFtcImV4cG9ydFwiLCBcIndpbmRvd3NcIiwgXCJqc29uXCJdKSxcbiAgKVxuICAuZGVzY3JpYmUoXCJFbnZpcm9ubWVudCBleHBvcnQgb3V0cHV0IGZvcm1hdC5cIik7XG5cbmV4cG9ydCB0eXBlIEVudkV4cG9ydEZvcm1hdCA9IHoub3V0cHV0PHR5cGVvZiBFbnZFeHBvcnRGb3JtYXRTY2hlbWE+O1xuXG4vKiogU2hhbGxvdyBjb3B5IG9mIHRoZSBjdXJyZW50IHByb2Nlc3MgZW52aXJvbm1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gc25hcHNob3RFbnYoZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYpKSB7XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG91dFtrZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogS2V5cyB3aG9zZSB2YWx1ZXMgd2VyZSBhZGRlZCwgY2hhbmdlZCwgb3IgY2xlYXJlZCBiZXR3ZWVuIHNuYXBzaG90cy4gQSBrZXlcbiAqIHRoYXQgd2VudCBmcm9tIGEgbm9uLWJsYW5rIHZhbHVlIHRvIGJsYW5rL3JlbW92ZWQgaXMgZW1pdHRlZCB3aXRoIGFuIGVtcHR5XG4gKiB2YWx1ZSBzbyBpdCBjYW4gYmUgdW5zZXQuIEtleXMgdGhhdCB3ZXJlIGFscmVhZHkgYmxhbmsvYWJzZW50IGFuZCBzdGF5ZWQgdGhhdFxuICogd2F5IGFyZSBvbWl0dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlmZkVudihcbiAgYmVmb3JlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICBhZnRlcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBrZXlzID0gbmV3IFNldChbLi4uT2JqZWN0LmtleXMoYmVmb3JlKSwgLi4uT2JqZWN0LmtleXMoYWZ0ZXIpXSk7XG4gIGNvbnN0IG91dDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBbLi4ua2V5c10uc29ydCgpKSB7XG4gICAgLy8gVHJlYXQgYSByZW1vdmVkIGtleSBhcyBibGFuayBzbyBhIG5vbi1ibGFuayAtPiBibGFuay9yZW1vdmVkIHRyYW5zaXRpb24gaXMgYSBkZWx0YS5cbiAgICBjb25zdCBwcmV2ID0gYmVmb3JlW2tleV0gPz8gXCJcIjtcbiAgICBjb25zdCBuZXh0ID0gYWZ0ZXJba2V5XSA/PyBcIlwiO1xuICAgIGlmIChuZXh0ICE9PSBwcmV2KSB7XG4gICAgICBvdXRba2V5XSA9IG5leHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBTZWxlY3QgV2luZG93cyBgc2V0YCBvdXRwdXQgb24gV2luZG93cyBhbmQgUE9TSVggYGV4cG9ydGAgb3V0cHV0IGVsc2V3aGVyZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0RW52RXhwb3J0Rm9ybWF0KFxuICBwbGF0Zm9ybTogTm9kZUpTLlBsYXRmb3JtID0gcHJvY2Vzcy5wbGF0Zm9ybSxcbik6IEVudkV4cG9ydEZvcm1hdCB7XG4gIHJldHVybiBwbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCJ3aW5kb3dzXCIgOiBcImV4cG9ydFwiO1xufVxuXG5leHBvcnQgY29uc3QgRW52Q29tbWFuZE9wdGlvbnNTY2hlbWEgPSB6XG4gIC5vYmplY3Qoe1xuICAgIGZvcm1hdDogRW52RXhwb3J0Rm9ybWF0U2NoZW1hLmRlZmF1bHQoZGVmYXVsdEVudkV4cG9ydEZvcm1hdCgpKS5kZXNjcmliZShcbiAgICAgIFwiT3V0cHV0IGZvcm1hdDogZXhwb3J0LCB3aW5kb3dzLCBvciBqc29uLlwiLFxuICAgICksXG4gICAgcXVpZXQ6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLmRlc2NyaWJlKFwiU3VwcHJlc3MgYXV0by1jb25maWcgbG9nIG91dHB1dC5cIiksXG4gIH0pXG4gIC5zdHJpY3QoKVxuICAuZGVzY3JpYmUoXCJPcHRpb25zIGZvciBleHBvcnRpbmcgdGhlIEFwcEtpdCBhdXRvLWNvbmZpZyBlbnZpcm9ubWVudC5cIik7XG5cbmV4cG9ydCB0eXBlIEVudkNvbW1hbmRPcHRpb25zID0gei5vdXRwdXQ8dHlwZW9mIEVudkNvbW1hbmRPcHRpb25zU2NoZW1hPjtcblxuZnVuY3Rpb24gZXNjYXBlRXhwb3J0VmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZVxuICAgIC5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIilcbiAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG4gICAgLnJlcGxhY2UoL1xcJC9nLCBcIlxcXFwkXCIpXG4gICAgLnJlcGxhY2UoL2AvZywgXCJcXFxcYFwiKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlV2luZG93c1NldFZhbHVlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoL1tcXHNcIiZ8PD5eXS8udGVzdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gYFwiJHt2YWx1ZS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpfVwiYDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogRm9ybWF0IGVudiBlbnRyaWVzIGZvciB0aGUgcmVxdWVzdGVkIG91dHB1dCBzdHlsZS4gQW4gZW1wdHkgbWFwIHByaW50c1xuICogbm90aGluZyAobm8gdHJhaWxpbmcgbmV3bGluZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFbnZFeHBvcnQoZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBmb3JtYXQ6IEVudkV4cG9ydEZvcm1hdCk6IHN0cmluZyB7XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhlbnYpLnNvcnQoKFthXSwgW2JdKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuICBpZiAoZW50cmllcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyksIG51bGwsIDIpfVxcbmA7XG4gICAgY2FzZSBcIndpbmRvd3NcIjpcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGVudHJpZXMubWFwKChba2V5LCB2YWx1ZV0pID0+IGBzZXQgJHtrZXl9PSR7ZXNjYXBlV2luZG93c1NldFZhbHVlKHZhbHVlKX1gKS5qb2luKFwiXFxuXCIpICtcbiAgICAgICAgXCJcXG5cIlxuICAgICAgKTtcbiAgICBjYXNlIFwiZXhwb3J0XCI6XG4gICAgICByZXR1cm4gKFxuICAgICAgICBlbnRyaWVzLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgZXhwb3J0ICR7a2V5fT1cIiR7ZXNjYXBlRXhwb3J0VmFsdWUodmFsdWUpfVwiYCkuam9pbihcIlxcblwiKSArXG4gICAgICAgIFwiXFxuXCJcbiAgICAgICk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbnYgZXhwb3J0IGZvcm1hdDogJHtmb3JtYXQgc2F0aXNmaWVzIG5ldmVyfWApO1xuICB9XG59XG5cbi8qKiBOb3JtYWxpemUgQ0xJIGZvcm1hdCBhbGlhc2VzIHRvIGEgc3VwcG9ydGVkIGV4cG9ydCBmb3JtYXQuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VFbnZFeHBvcnRGb3JtYXQodmFsdWU6IHN0cmluZyk6IEVudkV4cG9ydEZvcm1hdCB7XG4gIHJldHVybiBFbnZFeHBvcnRGb3JtYXRTY2hlbWEucGFyc2UodmFsdWUpO1xufVxuIl19
package/package.json CHANGED
@@ -24,9 +24,11 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@databricks/appkit": "0.81.0",
27
- "@dbx-tools/appkit": "^0.9.40",
28
- "@dbx-tools/shared-core": "^0.9.40",
29
- "commander": "^15.0.0"
27
+ "@dbx-tools/appkit": "^0.9.43",
28
+ "@dbx-tools/cli-args": "^0.9.43",
29
+ "@dbx-tools/shared-core": "^0.9.43",
30
+ "commander": "^15.0.0",
31
+ "zod": "4.3.6"
30
32
  },
31
33
  "main": "./lib/index.js",
32
34
  "license": "Apache-2.0",
@@ -50,7 +52,7 @@
50
52
  "./package.json": "./package.json"
51
53
  }
52
54
  },
53
- "version": "0.9.40",
55
+ "version": "0.9.43",
54
56
  "types": "./lib/index.d.ts",
55
57
  "dbxToolsConfig": {
56
58
  "tags": [
package/src/cli.ts CHANGED
@@ -13,38 +13,32 @@
13
13
  */
14
14
 
15
15
  import { appkit } from "@dbx-tools/appkit";
16
+ import { addArgs, parseArgs } from "@dbx-tools/cli-args/args";
16
17
  import { log } from "@dbx-tools/shared-core";
17
18
  import { Command, CommanderError } from "commander";
18
19
 
19
20
  import {
20
- defaultEnvExportFormat,
21
21
  diffEnv,
22
+ EnvCommandOptionsSchema,
22
23
  formatEnvExport,
23
- parseEnvExportFormat,
24
24
  snapshotEnv,
25
+ type EnvCommandOptions,
25
26
  } from "./env-export.ts";
26
27
 
27
28
  const logger = log.logger("appkit-env");
28
29
 
29
- /** Options for the `env` command. */
30
- interface EnvOpts {
31
- format?: string;
32
- quiet?: boolean;
33
- }
34
-
35
30
  /** Run auto-config and write the resulting env delta to stdout. */
36
- async function writeEnvExport(opts: EnvOpts): Promise<void> {
31
+ async function writeEnvExport(opts: EnvCommandOptions): Promise<void> {
37
32
  if (opts.quiet) {
38
33
  process.env.LOG_LEVEL = "error";
39
34
  }
40
35
 
41
- const format = opts.format ? parseEnvExportFormat(opts.format) : defaultEnvExportFormat();
42
36
  logger.debug("Snapshotting env vars");
43
37
  const before = snapshotEnv();
44
38
  await appkit.autoConfigure({ autoConfigure: "env" });
45
39
  const changes = diffEnv(before, snapshotEnv());
46
40
 
47
- process.stdout.write(formatEnvExport(changes, format));
41
+ process.stdout.write(formatEnvExport(changes, opts.format));
48
42
  }
49
43
 
50
44
  /**
@@ -52,14 +46,14 @@ async function writeEnvExport(opts: EnvOpts): Promise<void> {
52
46
  * different parent than {@link buildProgram}'s.
53
47
  */
54
48
  export function buildEnvCommand(name = "env"): Command {
55
- return new Command(name)
56
- .description("Run AppKit auto-config and print new/changed env vars.")
57
- .option(
58
- "-f, --format <format>",
59
- "Output: export (POSIX shell), windows (cmd set), or json. Defaults by platform.",
60
- )
61
- .option("-q, --quiet", "Suppress auto-config log output (LOG_LEVEL=error)")
62
- .action(writeEnvExport);
49
+ const command = addArgs(
50
+ new Command(name).description("Run AppKit auto-config and print new/changed env vars."),
51
+ EnvCommandOptionsSchema,
52
+ { scope: [] },
53
+ );
54
+ return command.action(async () => {
55
+ await writeEnvExport(parseArgs(command, EnvCommandOptionsSchema));
56
+ });
63
57
  }
64
58
 
65
59
  /** Build the `dbx appkit` commander program (no side effects until parsed). */
package/src/env-export.ts CHANGED
@@ -5,7 +5,22 @@
5
5
  * @module
6
6
  */
7
7
 
8
- export type EnvExportFormat = "export" | "windows" | "json";
8
+ import { z } from "zod";
9
+
10
+ export const EnvExportFormatSchema = z
11
+ .preprocess(
12
+ (value) => {
13
+ if (typeof value !== "string") return value;
14
+ const normalized = value.trim().toLowerCase();
15
+ if (["export", "shell", "nix", "bash"].includes(normalized)) return "export";
16
+ if (["windows", "win", "cmd"].includes(normalized)) return "windows";
17
+ return normalized;
18
+ },
19
+ z.enum(["export", "windows", "json"]),
20
+ )
21
+ .describe("Environment export output format.");
22
+
23
+ export type EnvExportFormat = z.output<typeof EnvExportFormatSchema>;
9
24
 
10
25
  /** Shallow copy of the current process environment. */
11
26
  export function snapshotEnv(env: NodeJS.ProcessEnv = process.env): Record<string, string> {
@@ -48,6 +63,18 @@ export function defaultEnvExportFormat(
48
63
  return platform === "win32" ? "windows" : "export";
49
64
  }
50
65
 
66
+ export const EnvCommandOptionsSchema = z
67
+ .object({
68
+ format: EnvExportFormatSchema.default(defaultEnvExportFormat()).describe(
69
+ "Output format: export, windows, or json.",
70
+ ),
71
+ quiet: z.boolean().default(false).describe("Suppress auto-config log output."),
72
+ })
73
+ .strict()
74
+ .describe("Options for exporting the AppKit auto-config environment.");
75
+
76
+ export type EnvCommandOptions = z.output<typeof EnvCommandOptionsSchema>;
77
+
51
78
  function escapeExportValue(value: string): string {
52
79
  return value
53
80
  .replace(/\\/g, "\\\\")
@@ -93,20 +120,5 @@ export function formatEnvExport(env: Record<string, string>, format: EnvExportFo
93
120
 
94
121
  /** Normalize CLI format aliases to a supported export format. */
95
122
  export function parseEnvExportFormat(value: string): EnvExportFormat {
96
- const normalized = value.trim().toLowerCase();
97
- if (
98
- normalized === "export" ||
99
- normalized === "shell" ||
100
- normalized === "nix" ||
101
- normalized === "bash"
102
- ) {
103
- return "export";
104
- }
105
- if (normalized === "windows" || normalized === "win" || normalized === "cmd") {
106
- return "windows";
107
- }
108
- if (normalized === "json") {
109
- return "json";
110
- }
111
- throw new Error(`Unknown format '${value}'. Use export, windows, or json.`);
123
+ return EnvExportFormatSchema.parse(value);
112
124
  }