@dbx-tools/cli-appkit-env 0.9.38 → 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 +53 -48
- package/index.ts +3 -2
- package/lib/index.d.ts +3 -2
- package/lib/index.js +3 -2
- package/lib/src/cli.js +8 -9
- package/lib/src/env-export.d.ts +16 -1
- package/lib/src/env-export.js +22 -15
- package/package.json +6 -4
- package/src/cli.ts +13 -19
- package/src/env-export.ts +29 -17
package/README.md
CHANGED
|
@@ -1,77 +1,82 @@
|
|
|
1
1
|
# @dbx-tools/cli-appkit-env
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Export the environment that AppKit resolves so another process can use the same
|
|
4
|
+
Lakebase connection and application configuration. Choose shell, JSON, or
|
|
5
|
+
Windows output without repeating AppKit discovery in your startup scripts.
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
AppKit environment that [`@dbx-tools/appkit`](../../node/appkit) would
|
|
7
|
-
resolve before `createApp()`.
|
|
7
|
+
## Configure A Shell
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
- Runs the same AppKit auto-configuration path used by
|
|
12
|
-
[`@dbx-tools/appkit`](../../node/appkit).
|
|
13
|
-
- Emits only variables that changed during auto-configuration.
|
|
14
|
-
- Supports shell `export`, JSON, and Windows `set` output formats.
|
|
15
|
-
- Provides importable env snapshot/diff/format helpers for tests and wrapper
|
|
16
|
-
CLIs.
|
|
17
|
-
- Keeps local shell setup aligned with deployed AppKit startup behavior.
|
|
18
|
-
|
|
19
|
-
## Load Env Into A Shell
|
|
9
|
+
Install the [`dbx` CLI](../dbx-tools), then run this from your AppKit project:
|
|
20
10
|
|
|
21
11
|
```sh
|
|
22
12
|
eval "$(dbx appkit env --quiet)"
|
|
23
13
|
```
|
|
24
14
|
|
|
25
|
-
The command
|
|
26
|
-
|
|
27
|
-
`
|
|
28
|
-
|
|
29
|
-
This package ships no bin of its own. It contributes the `appkit` command group
|
|
30
|
-
to the single `dbx` CLI in [`@dbx-tools/cli`](../dbx-tools), which is what you
|
|
31
|
-
install:
|
|
32
|
-
|
|
33
|
-
```sh
|
|
34
|
-
npm install --global @dbx-tools/cli
|
|
35
|
-
dbx appkit env --quiet
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
`dbx` imports this package lazily, so AppKit loads only when an `appkit`
|
|
39
|
-
command actually runs.
|
|
15
|
+
The command runs AppKit auto-configuration and prints only variables that were
|
|
16
|
+
added or changed. The default format is POSIX `export KEY=value` statements.
|
|
17
|
+
`--quiet` keeps configuration logs out of the output you evaluate.
|
|
40
18
|
|
|
41
|
-
|
|
42
|
-
|
|
19
|
+
Use this before starting a process that needs resolved variables such as
|
|
20
|
+
`PGHOST`, `PGDATABASE`, or `PGUSER`.
|
|
43
21
|
|
|
44
|
-
## Inspect
|
|
22
|
+
## Inspect Configuration
|
|
45
23
|
|
|
46
24
|
```sh
|
|
47
25
|
dbx appkit env --format json
|
|
48
26
|
dbx appkit env --format windows
|
|
49
27
|
```
|
|
50
28
|
|
|
51
|
-
|
|
52
|
-
`set KEY=value`
|
|
29
|
+
JSON is useful for process managers and scripts. Windows format produces
|
|
30
|
+
`set KEY=value` statements for `cmd.exe`. Review output before sharing it:
|
|
31
|
+
resolved configuration may contain credentials.
|
|
53
32
|
|
|
54
|
-
## Format
|
|
33
|
+
## Format Environment Changes In Code
|
|
55
34
|
|
|
56
35
|
```ts
|
|
57
36
|
import { envExport } from "@dbx-tools/cli-appkit-env";
|
|
58
37
|
|
|
59
38
|
const before = envExport.snapshotEnv();
|
|
60
|
-
process.env.PGHOST = "ep-
|
|
61
|
-
const
|
|
39
|
+
process.env.PGHOST = "ep-example.database.cloud.databricks.com";
|
|
40
|
+
const changed = envExport.diffEnv(before);
|
|
41
|
+
console.log(envExport.formatEnvExport(changed, "export"));
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Reuse these helpers when a custom CLI or test needs the same formats. For AppKit
|
|
45
|
+
application startup itself, use
|
|
46
|
+
[`@dbx-tools/appkit`](../../node/appkit) rather than invoking a shell command.
|
|
47
|
+
|
|
48
|
+
<!-- cli-reference:start -->
|
|
62
49
|
|
|
63
|
-
|
|
50
|
+
## Command Reference
|
|
51
|
+
|
|
52
|
+
### `dbx appkit`
|
|
53
|
+
|
|
54
|
+
AppKit helpers: resolve the environment an AppKit app would start with.
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
dbx appkit [command]
|
|
64
58
|
```
|
|
65
59
|
|
|
66
|
-
|
|
67
|
-
|
|
60
|
+
#### Commands
|
|
61
|
+
|
|
62
|
+
| Command | Description |
|
|
63
|
+
| --------------- | ------------------------------------------------------ |
|
|
64
|
+
| `env [options]` | Run AppKit auto-config and print new/changed env vars. |
|
|
65
|
+
|
|
66
|
+
### `dbx appkit env`
|
|
67
|
+
|
|
68
|
+
Run AppKit auto-config and print new/changed env vars.
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
dbx appkit env [options]
|
|
72
|
+
```
|
|
68
73
|
|
|
69
|
-
|
|
74
|
+
#### Options
|
|
70
75
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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. |
|
|
75
81
|
|
|
76
|
-
|
|
77
|
-
[`@dbx-tools/appkit`](../../node/appkit).
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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
|
-
|
|
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 {
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFcEQsT0FBTyxFQUNMLE9BQU8sRUFDUCx1QkFBdUIsRUFDdkIsZUFBZSxFQUNmLFdBQVcsR0FFWixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEMsbUVBQW1FO0FBQ25FLEtBQUssVUFBVSxjQUFjLENBQUMsSUFBdUI7SUFDbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUN0QyxNQUFNLE1BQU0sR0FBRyxXQUFXLEVBQUUsQ0FBQztJQUM3QixNQUFNLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFFL0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFJLEdBQUcsS0FBSztJQUMxQyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQ3JCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyx3REFBd0QsQ0FBQyxFQUN2Rix1QkFBdUIsRUFDdkIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQ2QsQ0FBQztJQUNGLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUMvQixNQUFNLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLHVCQUF1QixDQUFDLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFJLEdBQUcsWUFBWTtJQUM5QyxPQUFPLElBQUksT0FBTyxFQUFFO1NBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDVixXQUFXLENBQUMseUVBQXlFLENBQUM7U0FDdEYsVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzdCLGtCQUFrQixFQUFFLENBQUM7QUFDMUIsQ0FBQztBQUVELCtGQUErRjtBQUMvRixNQUFNLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxJQUFjO0lBQ3pDLE1BQU0sWUFBWSxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBkYnggYXBwa2l0YCBjb21tYW5kZXIgcHJvZ3JhbS5cbiAqXG4gKiBgZW52YCBydW5zIEFwcEtpdCBhdXRvLWNvbmZpZyBhbmQgcHJpbnRzIHRoZSBlbnYgdmFycyBpdCBhZGRlZCBvciBjaGFuZ2VkIGFzXG4gKiBldmFsLWFibGUgYGV4cG9ydGAgLyBgc2V0YCBsaW5lcyAob3IgSlNPTikgLSBlLmcuIGBldmFsIFwiJChkYnggYXBwa2l0IGVudilcImBcbiAqIHRvIGxvYWQgYSByZXNvbHZlZCBMYWtlYmFzZSBjb25uZWN0aW9uIGludG8geW91ciBzaGVsbC5cbiAqXG4gKiBUaGlzIHBhY2thZ2Ugc2hpcHMgbm8gYmluIG9mIGl0cyBvd246IHtAbGluayBidWlsZFByb2dyYW19IGlzIG1vdW50ZWQgYXMgdGhlXG4gKiBgYXBwa2l0YCBzdWJjb21tYW5kIG9mIHRoZSBzaW5nbGUgYGRieGAgQ0xJIChgQGRieC10b29scy9jbGlgKSwgd2hpY2ggaW1wb3J0c1xuICogdGhpcyBtb2R1bGUgbGF6aWx5IHNvIGBkYnggZGV2YCBuZXZlciBwYXlzIGZvciB0aGUgQXBwS2l0IGxvYWQuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IGFwcGtpdCB9IGZyb20gXCJAZGJ4LXRvb2xzL2FwcGtpdFwiO1xuaW1wb3J0IHsgYWRkQXJncywgcGFyc2VBcmdzIH0gZnJvbSBcIkBkYngtdG9vbHMvY2xpLWFyZ3MvYXJnc1wiO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IENvbW1hbmQsIENvbW1hbmRlckVycm9yIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuXG5pbXBvcnQge1xuICBkaWZmRW52LFxuICBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSxcbiAgZm9ybWF0RW52RXhwb3J0LFxuICBzbmFwc2hvdEVudixcbiAgdHlwZSBFbnZDb21tYW5kT3B0aW9ucyxcbn0gZnJvbSBcIi4vZW52LWV4cG9ydC50c1wiO1xuXG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiYXBwa2l0LWVudlwiKTtcblxuLyoqIFJ1biBhdXRvLWNvbmZpZyBhbmQgd3JpdGUgdGhlIHJlc3VsdGluZyBlbnYgZGVsdGEgdG8gc3Rkb3V0LiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JpdGVFbnZFeHBvcnQob3B0czogRW52Q29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKG9wdHMucXVpZXQpIHtcbiAgICBwcm9jZXNzLmVudi5MT0dfTEVWRUwgPSBcImVycm9yXCI7XG4gIH1cblxuICBsb2dnZXIuZGVidWcoXCJTbmFwc2hvdHRpbmcgZW52IHZhcnNcIik7XG4gIGNvbnN0IGJlZm9yZSA9IHNuYXBzaG90RW52KCk7XG4gIGF3YWl0IGFwcGtpdC5hdXRvQ29uZmlndXJlKHsgYXV0b0NvbmZpZ3VyZTogXCJlbnZcIiB9KTtcbiAgY29uc3QgY2hhbmdlcyA9IGRpZmZFbnYoYmVmb3JlLCBzbmFwc2hvdEVudigpKTtcblxuICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXRFbnZFeHBvcnQoY2hhbmdlcywgb3B0cy5mb3JtYXQpKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYGVudmAgY29tbWFuZCBvbiBpdHMgb3duLCBzbyBhIGhvc3QgQ0xJIGNhbiBtb3VudCBpdCB1bmRlciBhXG4gKiBkaWZmZXJlbnQgcGFyZW50IHRoYW4ge0BsaW5rIGJ1aWxkUHJvZ3JhbX0ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW52Q29tbWFuZChuYW1lID0gXCJlbnZcIik6IENvbW1hbmQge1xuICBjb25zdCBjb21tYW5kID0gYWRkQXJncyhcbiAgICBuZXcgQ29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihcIlJ1biBBcHBLaXQgYXV0by1jb25maWcgYW5kIHByaW50IG5ldy9jaGFuZ2VkIGVudiB2YXJzLlwiKSxcbiAgICBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSxcbiAgICB7IHNjb3BlOiBbXSB9LFxuICApO1xuICByZXR1cm4gY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHdyaXRlRW52RXhwb3J0KHBhcnNlQXJncyhjb21tYW5kLCBFbnZDb21tYW5kT3B0aW9uc1NjaGVtYSkpO1xuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgZGJ4IGFwcGtpdGAgY29tbWFuZGVyIHByb2dyYW0gKG5vIHNpZGUgZWZmZWN0cyB1bnRpbCBwYXJzZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShuYW1lID0gXCJkYnggYXBwa2l0XCIpOiBDb21tYW5kIHtcbiAgcmV0dXJuIG5ldyBDb21tYW5kKClcbiAgICAubmFtZShuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihcIkFwcEtpdCBoZWxwZXJzOiByZXNvbHZlIHRoZSBlbnZpcm9ubWVudCBhbiBBcHBLaXQgYXBwIHdvdWxkIHN0YXJ0IHdpdGguXCIpXG4gICAgLmFkZENvbW1hbmQoYnVpbGRFbnZDb21tYW5kKCkpXG4gICAgLnNob3dIZWxwQWZ0ZXJFcnJvcigpO1xufVxuXG4vKiogUGFyc2UgYGFyZ3ZgIGFuZCBydW4gdGhlIG1hdGNoaW5nIGNvbW1hbmQuIFRocm93cyB7QGxpbmsgQ29tbWFuZGVyRXJyb3J9IG9uIGZsYWcgZXJyb3JzLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNsaShhcmd2OiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBidWlsZFByb2dyYW0oKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuXG5leHBvcnQgeyBDb21tYW5kZXJFcnJvciB9O1xuIl19
|
package/lib/src/env-export.d.ts
CHANGED
|
@@ -4,7 +4,13 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @module
|
|
6
6
|
*/
|
|
7
|
-
|
|
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).
|
package/lib/src/env-export.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
28
|
-
"@dbx-tools/
|
|
29
|
-
"
|
|
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.
|
|
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:
|
|
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
|
-
|
|
56
|
-
.description("Run AppKit auto-config and print new/changed env vars.")
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|