@dbx-tools/cli-appkit-env 0.6.74 → 0.6.76

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
@@ -2,7 +2,7 @@
2
2
 
3
3
  CLI and formatting helpers for exporting AppKit auto-configuration results.
4
4
 
5
- Use the `dbx-tools-appkit-env` bin when a shell or process manager needs the Lakebase /
5
+ Use `dbx appkit env` when a shell or process manager needs the Lakebase /
6
6
  AppKit environment that [`@dbx-tools/appkit`](../../node/appkit) would
7
7
  resolve before `createApp()`.
8
8
 
@@ -19,29 +19,33 @@ Key features:
19
19
  ## Load Env Into A Shell
20
20
 
21
21
  ```sh
22
- eval "$(dbx-tools-appkit-env --quiet)"
22
+ eval "$(dbx appkit env --quiet)"
23
23
  ```
24
24
 
25
25
  The command snapshots `process.env`, runs AppKit auto-config, diffs the result,
26
26
  and prints only new or changed variables. On POSIX shells the default output is
27
27
  `export KEY=value`.
28
28
 
29
- The package installs two equivalent commands: `dbx-tools-appkit-env` and the
30
- shorter `dbxt-appkit-env`. Neither matches the package name, so a one-off run
31
- has to name the command explicitly:
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
32
 
33
33
  ```sh
34
- npx --package @dbx-tools/cli-appkit-env dbx-tools-appkit-env --quiet
34
+ npm install --global @dbx-tools/cli
35
+ dbx appkit env --quiet
35
36
  ```
36
37
 
38
+ `dbx` imports this package lazily, so AppKit loads only when an `appkit`
39
+ command actually runs.
40
+
37
41
  This is useful when another process must start after Lakebase discovery has
38
42
  filled `PGHOST`, `PGDATABASE`, `PGUSER`, or related AppKit variables.
39
43
 
40
44
  ## Inspect JSON Or Windows Output
41
45
 
42
46
  ```sh
43
- dbx-tools-appkit-env --format json
44
- dbx-tools-appkit-env --format windows
47
+ dbx appkit env --format json
48
+ dbx appkit env --format windows
45
49
  ```
46
50
 
47
51
  Use JSON for process managers and tests. Use Windows format for `cmd.exe`
@@ -64,6 +68,8 @@ that want the same output formats without invoking the bin.
64
68
 
65
69
  ## Modules
66
70
 
71
+ - `cli` - the `dbx appkit` commander program: `buildProgram(name?)` (what
72
+ `@dbx-tools/cli` mounts), `buildEnvCommand()`, and `runCli()`.
67
73
  - `envExport` - env snapshots, env diffs, default format detection,
68
74
  `formatEnvExport()`, and `parseEnvExportFormat()`.
69
75
 
package/index.ts CHANGED
@@ -2,5 +2,7 @@
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
 
5
+ export * as cli from "./src/cli.ts";
5
6
  export * as envExport from "./src/env-export.ts";
7
+ export { CommanderError } from "./src/cli.ts";
6
8
  export type { EnvExportFormat } from "./src/env-export.ts";
package/lib/index.d.ts CHANGED
@@ -1,2 +1,4 @@
1
+ export * as cli from "./src/cli.ts";
1
2
  export * as envExport from "./src/env-export.ts";
3
+ export { CommanderError } from "./src/cli.ts";
2
4
  export type { EnvExportFormat } from "./src/env-export.ts";
package/lib/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  // GENERATED by projen watch - DO NOT EDIT.
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
+ export * as cli from "./src/cli.js";
4
5
  export * as envExport from "./src/env-export.js";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0ICogYXMgZW52RXhwb3J0IGZyb20gXCIuL3NyYy9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgdHlwZSB7IEVudkV4cG9ydEZvcm1hdCB9IGZyb20gXCIuL3NyYy9lbnYtZXhwb3J0LnRzXCI7XG4iXX0=
6
+ export { CommanderError } from "./src/cli.js";
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZW52RXhwb3J0IGZyb20gXCIuL3NyYy9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgeyBDb21tYW5kZXJFcnJvciB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW52RXhwb3J0Rm9ybWF0IH0gZnJvbSBcIi4vc3JjL2Vudi1leHBvcnQudHNcIjtcbiJdfQ==
@@ -0,0 +1,24 @@
1
+ /**
2
+ * `dbx appkit` commander program.
3
+ *
4
+ * `env` runs AppKit auto-config and prints the env vars it added or changed as
5
+ * eval-able `export` / `set` lines (or JSON) - e.g. `eval "$(dbx appkit env)"`
6
+ * to load a resolved Lakebase connection into your shell.
7
+ *
8
+ * This package ships no bin of its own: {@link buildProgram} is mounted as the
9
+ * `appkit` subcommand of the single `dbx` CLI (`@dbx-tools/cli`), which imports
10
+ * this module lazily so `dbx dev` never pays for the AppKit load.
11
+ *
12
+ * @module
13
+ */
14
+ import { Command, CommanderError } from "commander";
15
+ /**
16
+ * Build the `env` command on its own, so a host CLI can mount it under a
17
+ * different parent than {@link buildProgram}'s.
18
+ */
19
+ export declare function buildEnvCommand(name?: string): Command;
20
+ /** Build the `dbx appkit` commander program (no side effects until parsed). */
21
+ export declare function buildProgram(name?: string): Command;
22
+ /** Parse `argv` and run the matching command. Throws {@link CommanderError} on flag errors. */
23
+ export declare function runCli(argv: string[]): Promise<void>;
24
+ export { CommanderError };
package/lib/src/cli.js ADDED
@@ -0,0 +1,55 @@
1
+ /**
2
+ * `dbx appkit` commander program.
3
+ *
4
+ * `env` runs AppKit auto-config and prints the env vars it added or changed as
5
+ * eval-able `export` / `set` lines (or JSON) - e.g. `eval "$(dbx appkit env)"`
6
+ * to load a resolved Lakebase connection into your shell.
7
+ *
8
+ * This package ships no bin of its own: {@link buildProgram} is mounted as the
9
+ * `appkit` subcommand of the single `dbx` CLI (`@dbx-tools/cli`), which imports
10
+ * this module lazily so `dbx dev` never pays for the AppKit load.
11
+ *
12
+ * @module
13
+ */
14
+ import { appkit } from "@dbx-tools/appkit";
15
+ import { log } from "@dbx-tools/shared-core";
16
+ import { Command, CommanderError } from "commander";
17
+ import { defaultEnvExportFormat, diffEnv, formatEnvExport, parseEnvExportFormat, snapshotEnv, } from "./env-export.js";
18
+ const logger = log.logger("appkit-env");
19
+ /** Run auto-config and write the resulting env delta to stdout. */
20
+ async function writeEnvExport(opts) {
21
+ if (opts.quiet) {
22
+ process.env.LOG_LEVEL = "error";
23
+ }
24
+ const format = opts.format ? parseEnvExportFormat(opts.format) : defaultEnvExportFormat();
25
+ logger.debug("Snapshotting env vars");
26
+ const before = snapshotEnv();
27
+ await appkit.autoConfigure({ autoConfigure: "env" });
28
+ const changes = diffEnv(before, snapshotEnv());
29
+ process.stdout.write(formatEnvExport(changes, format));
30
+ }
31
+ /**
32
+ * Build the `env` command on its own, so a host CLI can mount it under a
33
+ * different parent than {@link buildProgram}'s.
34
+ */
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);
41
+ }
42
+ /** Build the `dbx appkit` commander program (no side effects until parsed). */
43
+ export function buildProgram(name = "dbx appkit") {
44
+ return new Command()
45
+ .name(name)
46
+ .description("AppKit helpers: resolve the environment an AppKit app would start with.")
47
+ .addCommand(buildEnvCommand())
48
+ .showHelpAfterError();
49
+ }
50
+ /** Parse `argv` and run the matching command. Throws {@link CommanderError} on flag errors. */
51
+ export async function runCli(argv) {
52
+ await buildProgram().parseAsync(argv);
53
+ }
54
+ export { CommanderError };
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBELE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsT0FBTyxFQUNQLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsV0FBVyxHQUNaLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQVF4QyxtRUFBbUU7QUFDbkUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxJQUFhO0lBQ3pDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDMUYsTUFBTSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sTUFBTSxHQUFHLFdBQVcsRUFBRSxDQUFDO0lBQzdCLE1BQU0sTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUUvQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDekQsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBSSxHQUFHLEtBQUs7SUFDMUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDckIsV0FBVyxDQUFDLHdEQUF3RCxDQUFDO1NBQ3JFLE1BQU0sQ0FDTCx1QkFBdUIsRUFDdkIsaUZBQWlGLENBQ2xGO1NBQ0EsTUFBTSxDQUFDLGFBQWEsRUFBRSxtREFBbUQsQ0FBQztTQUMxRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQUksR0FBRyxZQUFZO0lBQzlDLE9BQU8sSUFBSSxPQUFPLEVBQUU7U0FDakIsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLFdBQVcsQ0FBQyx5RUFBeUUsQ0FBQztTQUN0RixVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDN0Isa0JBQWtCLEVBQUUsQ0FBQztBQUMxQixDQUFDO0FBRUQsK0ZBQStGO0FBQy9GLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE9BQU8sRUFBRSxjQUFjLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYGRieCBhcHBraXRgIGNvbW1hbmRlciBwcm9ncmFtLlxuICpcbiAqIGBlbnZgIHJ1bnMgQXBwS2l0IGF1dG8tY29uZmlnIGFuZCBwcmludHMgdGhlIGVudiB2YXJzIGl0IGFkZGVkIG9yIGNoYW5nZWQgYXNcbiAqIGV2YWwtYWJsZSBgZXhwb3J0YCAvIGBzZXRgIGxpbmVzIChvciBKU09OKSAtIGUuZy4gYGV2YWwgXCIkKGRieCBhcHBraXQgZW52KVwiYFxuICogdG8gbG9hZCBhIHJlc29sdmVkIExha2ViYXNlIGNvbm5lY3Rpb24gaW50byB5b3VyIHNoZWxsLlxuICpcbiAqIFRoaXMgcGFja2FnZSBzaGlwcyBubyBiaW4gb2YgaXRzIG93bjoge0BsaW5rIGJ1aWxkUHJvZ3JhbX0gaXMgbW91bnRlZCBhcyB0aGVcbiAqIGBhcHBraXRgIHN1YmNvbW1hbmQgb2YgdGhlIHNpbmdsZSBgZGJ4YCBDTEkgKGBAZGJ4LXRvb2xzL2NsaWApLCB3aGljaCBpbXBvcnRzXG4gKiB0aGlzIG1vZHVsZSBsYXppbHkgc28gYGRieCBkZXZgIG5ldmVyIHBheXMgZm9yIHRoZSBBcHBLaXQgbG9hZC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuaW1wb3J0IHsgYXBwa2l0IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0XCI7XG5pbXBvcnQgeyBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgQ29tbWFuZCwgQ29tbWFuZGVyRXJyb3IgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5cbmltcG9ydCB7XG4gIGRlZmF1bHRFbnZFeHBvcnRGb3JtYXQsXG4gIGRpZmZFbnYsXG4gIGZvcm1hdEVudkV4cG9ydCxcbiAgcGFyc2VFbnZFeHBvcnRGb3JtYXQsXG4gIHNuYXBzaG90RW52LFxufSBmcm9tIFwiLi9lbnYtZXhwb3J0LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJhcHBraXQtZW52XCIpO1xuXG4vKiogT3B0aW9ucyBmb3IgdGhlIGBlbnZgIGNvbW1hbmQuICovXG5pbnRlcmZhY2UgRW52T3B0cyB7XG4gIGZvcm1hdD86IHN0cmluZztcbiAgcXVpZXQ/OiBib29sZWFuO1xufVxuXG4vKiogUnVuIGF1dG8tY29uZmlnIGFuZCB3cml0ZSB0aGUgcmVzdWx0aW5nIGVudiBkZWx0YSB0byBzdGRvdXQuICovXG5hc3luYyBmdW5jdGlvbiB3cml0ZUVudkV4cG9ydChvcHRzOiBFbnZPcHRzKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChvcHRzLnF1aWV0KSB7XG4gICAgcHJvY2Vzcy5lbnYuTE9HX0xFVkVMID0gXCJlcnJvclwiO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0ID0gb3B0cy5mb3JtYXQgPyBwYXJzZUVudkV4cG9ydEZvcm1hdChvcHRzLmZvcm1hdCkgOiBkZWZhdWx0RW52RXhwb3J0Rm9ybWF0KCk7XG4gIGxvZ2dlci5kZWJ1ZyhcIlNuYXBzaG90dGluZyBlbnYgdmFyc1wiKTtcbiAgY29uc3QgYmVmb3JlID0gc25hcHNob3RFbnYoKTtcbiAgYXdhaXQgYXBwa2l0LmF1dG9Db25maWd1cmUoeyBhdXRvQ29uZmlndXJlOiBcImVudlwiIH0pO1xuICBjb25zdCBjaGFuZ2VzID0gZGlmZkVudihiZWZvcmUsIHNuYXBzaG90RW52KCkpO1xuXG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGZvcm1hdEVudkV4cG9ydChjaGFuZ2VzLCBmb3JtYXQpKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgYGVudmAgY29tbWFuZCBvbiBpdHMgb3duLCBzbyBhIGhvc3QgQ0xJIGNhbiBtb3VudCBpdCB1bmRlciBhXG4gKiBkaWZmZXJlbnQgcGFyZW50IHRoYW4ge0BsaW5rIGJ1aWxkUHJvZ3JhbX0ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW52Q29tbWFuZChuYW1lID0gXCJlbnZcIik6IENvbW1hbmQge1xuICByZXR1cm4gbmV3IENvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oXCJSdW4gQXBwS2l0IGF1dG8tY29uZmlnIGFuZCBwcmludCBuZXcvY2hhbmdlZCBlbnYgdmFycy5cIilcbiAgICAub3B0aW9uKFxuICAgICAgXCItZiwgLS1mb3JtYXQgPGZvcm1hdD5cIixcbiAgICAgIFwiT3V0cHV0OiBleHBvcnQgKFBPU0lYIHNoZWxsKSwgd2luZG93cyAoY21kIHNldCksIG9yIGpzb24uIERlZmF1bHRzIGJ5IHBsYXRmb3JtLlwiLFxuICAgIClcbiAgICAub3B0aW9uKFwiLXEsIC0tcXVpZXRcIiwgXCJTdXBwcmVzcyBhdXRvLWNvbmZpZyBsb2cgb3V0cHV0IChMT0dfTEVWRUw9ZXJyb3IpXCIpXG4gICAgLmFjdGlvbih3cml0ZUVudkV4cG9ydCk7XG59XG5cbi8qKiBCdWlsZCB0aGUgYGRieCBhcHBraXRgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZSA9IFwiZGJ4IGFwcGtpdFwiKTogQ29tbWFuZCB7XG4gIHJldHVybiBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oXCJBcHBLaXQgaGVscGVyczogcmVzb2x2ZSB0aGUgZW52aXJvbm1lbnQgYW4gQXBwS2l0IGFwcCB3b3VsZCBzdGFydCB3aXRoLlwiKVxuICAgIC5hZGRDb21tYW5kKGJ1aWxkRW52Q29tbWFuZCgpKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IoKTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCBhbmQgcnVuIHRoZSBtYXRjaGluZyBjb21tYW5kLiBUaHJvd3Mge0BsaW5rIENvbW1hbmRlckVycm9yfSBvbiBmbGFnIGVycm9ycy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKCkucGFyc2VBc3luYyhhcmd2KTtcbn1cblxuZXhwb3J0IHsgQ29tbWFuZGVyRXJyb3IgfTtcbiJdfQ==
@@ -1 +1 @@
1
- {"root":["../src/env-export.ts","../index.ts","../bin/dbx-tools-appkit-env.ts"],"version":"5.9.3"}
1
+ {"root":["../src/cli.ts","../src/env-export.ts","../index.ts"],"version":"5.9.3"}
package/package.json CHANGED
@@ -3,11 +3,7 @@
3
3
  "repository": {
4
4
  "type": "git",
5
5
  "url": "git+https://github.com/reggie-db/dbx-tools.git",
6
- "directory": "js-packages/cli/appkit-env"
7
- },
8
- "bin": {
9
- "dbx-tools-appkit-env": "./lib/bin/dbx-tools-appkit-env.js",
10
- "dbxt-appkit-env": "./lib/bin/dbx-tools-appkit-env.js"
6
+ "directory": "packages/js/cli/appkit-env"
11
7
  },
12
8
  "scripts": {
13
9
  "build": "projen build",
@@ -28,8 +24,8 @@
28
24
  },
29
25
  "dependencies": {
30
26
  "@databricks/appkit": "^0.43.0",
31
- "@dbx-tools/appkit": "0.6.74",
32
- "@dbx-tools/shared-core": "0.6.74",
27
+ "@dbx-tools/appkit": "0.6.76",
28
+ "@dbx-tools/shared-core": "0.6.76",
33
29
  "commander": "^15.0.0"
34
30
  },
35
31
  "main": "./lib/index.js",
@@ -38,15 +34,15 @@
38
34
  "access": "public",
39
35
  "main": "./lib/index.js",
40
36
  "types": "./lib/index.d.ts",
41
- "bin": {
42
- "dbx-tools-appkit-env": "./lib/bin/dbx-tools-appkit-env.js",
43
- "dbxt-appkit-env": "./lib/bin/dbx-tools-appkit-env.js"
44
- },
45
37
  "exports": {
46
38
  ".": {
47
39
  "types": "./lib/index.d.ts",
48
40
  "default": "./lib/index.js"
49
41
  },
42
+ "./cli": {
43
+ "types": "./lib/src/cli.d.ts",
44
+ "default": "./lib/src/cli.js"
45
+ },
50
46
  "./env-export": {
51
47
  "types": "./lib/src/env-export.d.ts",
52
48
  "default": "./lib/src/env-export.js"
@@ -54,7 +50,7 @@
54
50
  "./package.json": "./package.json"
55
51
  }
56
52
  },
57
- "version": "0.6.74",
53
+ "version": "0.6.76",
58
54
  "types": "./lib/index.d.ts",
59
55
  "type": "module",
60
56
  "exports": {
@@ -62,6 +58,10 @@
62
58
  "types": "./lib/index.d.ts",
63
59
  "default": "./lib/index.js"
64
60
  },
61
+ "./cli": {
62
+ "types": "./lib/src/cli.d.ts",
63
+ "default": "./lib/src/cli.js"
64
+ },
65
65
  "./env-export": {
66
66
  "types": "./lib/src/env-export.d.ts",
67
67
  "default": "./lib/src/env-export.js"
package/src/cli.ts ADDED
@@ -0,0 +1,79 @@
1
+ /**
2
+ * `dbx appkit` commander program.
3
+ *
4
+ * `env` runs AppKit auto-config and prints the env vars it added or changed as
5
+ * eval-able `export` / `set` lines (or JSON) - e.g. `eval "$(dbx appkit env)"`
6
+ * to load a resolved Lakebase connection into your shell.
7
+ *
8
+ * This package ships no bin of its own: {@link buildProgram} is mounted as the
9
+ * `appkit` subcommand of the single `dbx` CLI (`@dbx-tools/cli`), which imports
10
+ * this module lazily so `dbx dev` never pays for the AppKit load.
11
+ *
12
+ * @module
13
+ */
14
+
15
+ import { appkit } from "@dbx-tools/appkit";
16
+ import { log } from "@dbx-tools/shared-core";
17
+ import { Command, CommanderError } from "commander";
18
+
19
+ import {
20
+ defaultEnvExportFormat,
21
+ diffEnv,
22
+ formatEnvExport,
23
+ parseEnvExportFormat,
24
+ snapshotEnv,
25
+ } from "./env-export.ts";
26
+
27
+ const logger = log.logger("appkit-env");
28
+
29
+ /** Options for the `env` command. */
30
+ interface EnvOpts {
31
+ format?: string;
32
+ quiet?: boolean;
33
+ }
34
+
35
+ /** Run auto-config and write the resulting env delta to stdout. */
36
+ async function writeEnvExport(opts: EnvOpts): Promise<void> {
37
+ if (opts.quiet) {
38
+ process.env.LOG_LEVEL = "error";
39
+ }
40
+
41
+ const format = opts.format ? parseEnvExportFormat(opts.format) : defaultEnvExportFormat();
42
+ logger.debug("Snapshotting env vars");
43
+ const before = snapshotEnv();
44
+ await appkit.autoConfigure({ autoConfigure: "env" });
45
+ const changes = diffEnv(before, snapshotEnv());
46
+
47
+ process.stdout.write(formatEnvExport(changes, format));
48
+ }
49
+
50
+ /**
51
+ * Build the `env` command on its own, so a host CLI can mount it under a
52
+ * different parent than {@link buildProgram}'s.
53
+ */
54
+ 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);
63
+ }
64
+
65
+ /** Build the `dbx appkit` commander program (no side effects until parsed). */
66
+ export function buildProgram(name = "dbx appkit"): Command {
67
+ return new Command()
68
+ .name(name)
69
+ .description("AppKit helpers: resolve the environment an AppKit app would start with.")
70
+ .addCommand(buildEnvCommand())
71
+ .showHelpAfterError();
72
+ }
73
+
74
+ /** Parse `argv` and run the matching command. Throws {@link CommanderError} on flag errors. */
75
+ export async function runCli(argv: string[]): Promise<void> {
76
+ await buildProgram().parseAsync(argv);
77
+ }
78
+
79
+ export { CommanderError };
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * `dbx-tools-appkit-env`: run AppKit auto-config and print the env vars it added or
4
- * changed. Snapshots `process.env`, runs auto-config, diffs, and writes
5
- * eval-able `export` / `set` lines (or JSON) to stdout - e.g.
6
- * `eval "$(dbx-tools-appkit-env)"` to load a resolved Lakebase connection into your shell.
7
- */
8
-
9
- import { appkit } from "@dbx-tools/appkit";
10
- import { log } from "@dbx-tools/shared-core";
11
- import { Command, CommanderError } from "commander";
12
- import {
13
- defaultEnvExportFormat,
14
- diffEnv,
15
- formatEnvExport,
16
- parseEnvExportFormat,
17
- snapshotEnv,
18
- } from "../src/env-export.ts";
19
-
20
- const logger = log.logger("appkit-env");
21
-
22
- const program = new Command()
23
- .name("dbx-tools-appkit-env")
24
- .description("Run AppKit auto-config and print new/changed env vars.")
25
- .option(
26
- "-f, --format <format>",
27
- "Output: export (POSIX shell), windows (cmd set), or json. Defaults by platform.",
28
- )
29
- .option("-q, --quiet", "Suppress auto-config log output (LOG_LEVEL=error)")
30
- .action(async (opts: { format?: string; quiet?: boolean }) => {
31
- if (opts.quiet) {
32
- process.env.LOG_LEVEL = "error";
33
- }
34
-
35
- const format = opts.format ? parseEnvExportFormat(opts.format) : defaultEnvExportFormat();
36
- logger.debug("Snapshotting env vars");
37
- const before = snapshotEnv();
38
- await appkit.autoConfigure({ autoConfigure: "env" });
39
- const changes = diffEnv(before, snapshotEnv());
40
-
41
- process.stdout.write(formatEnvExport(changes, format));
42
- });
43
-
44
- program.parseAsync(process.argv).catch((err: unknown) => {
45
- if (err instanceof CommanderError) {
46
- process.exit(err.exitCode);
47
- }
48
- process.stderr.write(`${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
49
- process.exit(1);
50
- });
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * `dbx-tools-appkit-env`: run AppKit auto-config and print the env vars it added or
4
- * changed. Snapshots `process.env`, runs auto-config, diffs, and writes
5
- * eval-able `export` / `set` lines (or JSON) to stdout - e.g.
6
- * `eval "$(dbx-tools-appkit-env)"` to load a resolved Lakebase connection into your shell.
7
- */
8
- export {};
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * `dbx-tools-appkit-env`: run AppKit auto-config and print the env vars it added or
4
- * changed. Snapshots `process.env`, runs auto-config, diffs, and writes
5
- * eval-able `export` / `set` lines (or JSON) to stdout - e.g.
6
- * `eval "$(dbx-tools-appkit-env)"` to load a resolved Lakebase connection into your shell.
7
- */
8
- import { appkit } from "@dbx-tools/appkit";
9
- import { log } from "@dbx-tools/shared-core";
10
- import { Command, CommanderError } from "commander";
11
- import { defaultEnvExportFormat, diffEnv, formatEnvExport, parseEnvExportFormat, snapshotEnv, } from "../src/env-export.js";
12
- const logger = log.logger("appkit-env");
13
- const program = new Command()
14
- .name("dbx-tools-appkit-env")
15
- .description("Run AppKit auto-config and print new/changed env vars.")
16
- .option("-f, --format <format>", "Output: export (POSIX shell), windows (cmd set), or json. Defaults by platform.")
17
- .option("-q, --quiet", "Suppress auto-config log output (LOG_LEVEL=error)")
18
- .action(async (opts) => {
19
- if (opts.quiet) {
20
- process.env.LOG_LEVEL = "error";
21
- }
22
- const format = opts.format ? parseEnvExportFormat(opts.format) : defaultEnvExportFormat();
23
- logger.debug("Snapshotting env vars");
24
- const before = snapshotEnv();
25
- await appkit.autoConfigure({ autoConfigure: "env" });
26
- const changes = diffEnv(before, snapshotEnv());
27
- process.stdout.write(formatEnvExport(changes, format));
28
- });
29
- program.parseAsync(process.argv).catch((err) => {
30
- if (err instanceof CommanderError) {
31
- process.exit(err.exitCode);
32
- }
33
- process.stderr.write(`${err instanceof Error ? (err.stack ?? err.message) : String(err)}\n`);
34
- process.exit(1);
35
- });
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGJ4LXRvb2xzLWFwcGtpdC1lbnYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9iaW4vZGJ4LXRvb2xzLWFwcGtpdC1lbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLE9BQU8sRUFDUCxlQUFlLEVBQ2Ysb0JBQW9CLEVBQ3BCLFdBQVcsR0FDWixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7S0FDMUIsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0tBQzVCLFdBQVcsQ0FBQyx3REFBd0QsQ0FBQztLQUNyRSxNQUFNLENBQ0wsdUJBQXVCLEVBQ3ZCLGlGQUFpRixDQUNsRjtLQUNBLE1BQU0sQ0FBQyxhQUFhLEVBQUUsbURBQW1ELENBQUM7S0FDMUUsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUEwQyxFQUFFLEVBQUU7SUFDM0QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUMxRixNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDdEMsTUFBTSxNQUFNLEdBQUcsV0FBVyxFQUFFLENBQUM7SUFDN0IsTUFBTSxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDckQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBRS9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUMsQ0FBQztBQUVMLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksRUFBRSxFQUFFO0lBQ3RELElBQUksR0FBRyxZQUFZLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcbi8qKlxuICogYGRieC10b29scy1hcHBraXQtZW52YDogcnVuIEFwcEtpdCBhdXRvLWNvbmZpZyBhbmQgcHJpbnQgdGhlIGVudiB2YXJzIGl0IGFkZGVkIG9yXG4gKiBjaGFuZ2VkLiBTbmFwc2hvdHMgYHByb2Nlc3MuZW52YCwgcnVucyBhdXRvLWNvbmZpZywgZGlmZnMsIGFuZCB3cml0ZXNcbiAqIGV2YWwtYWJsZSBgZXhwb3J0YCAvIGBzZXRgIGxpbmVzIChvciBKU09OKSB0byBzdGRvdXQgLSBlLmcuXG4gKiBgZXZhbCBcIiQoZGJ4LXRvb2xzLWFwcGtpdC1lbnYpXCJgIHRvIGxvYWQgYSByZXNvbHZlZCBMYWtlYmFzZSBjb25uZWN0aW9uIGludG8geW91ciBzaGVsbC5cbiAqL1xuXG5pbXBvcnQgeyBhcHBraXQgfSBmcm9tIFwiQGRieC10b29scy9hcHBraXRcIjtcbmltcG9ydCB7IGxvZyB9IGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlXCI7XG5pbXBvcnQgeyBDb21tYW5kLCBDb21tYW5kZXJFcnJvciB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7XG4gIGRlZmF1bHRFbnZFeHBvcnRGb3JtYXQsXG4gIGRpZmZFbnYsXG4gIGZvcm1hdEVudkV4cG9ydCxcbiAgcGFyc2VFbnZFeHBvcnRGb3JtYXQsXG4gIHNuYXBzaG90RW52LFxufSBmcm9tIFwiLi4vc3JjL2Vudi1leHBvcnQudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImFwcGtpdC1lbnZcIik7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiZGJ4LXRvb2xzLWFwcGtpdC1lbnZcIilcbiAgLmRlc2NyaXB0aW9uKFwiUnVuIEFwcEtpdCBhdXRvLWNvbmZpZyBhbmQgcHJpbnQgbmV3L2NoYW5nZWQgZW52IHZhcnMuXCIpXG4gIC5vcHRpb24oXG4gICAgXCItZiwgLS1mb3JtYXQgPGZvcm1hdD5cIixcbiAgICBcIk91dHB1dDogZXhwb3J0IChQT1NJWCBzaGVsbCksIHdpbmRvd3MgKGNtZCBzZXQpLCBvciBqc29uLiBEZWZhdWx0cyBieSBwbGF0Zm9ybS5cIixcbiAgKVxuICAub3B0aW9uKFwiLXEsIC0tcXVpZXRcIiwgXCJTdXBwcmVzcyBhdXRvLWNvbmZpZyBsb2cgb3V0cHV0IChMT0dfTEVWRUw9ZXJyb3IpXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdHM6IHsgZm9ybWF0Pzogc3RyaW5nOyBxdWlldD86IGJvb2xlYW4gfSkgPT4ge1xuICAgIGlmIChvcHRzLnF1aWV0KSB7XG4gICAgICBwcm9jZXNzLmVudi5MT0dfTEVWRUwgPSBcImVycm9yXCI7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybWF0ID0gb3B0cy5mb3JtYXQgPyBwYXJzZUVudkV4cG9ydEZvcm1hdChvcHRzLmZvcm1hdCkgOiBkZWZhdWx0RW52RXhwb3J0Rm9ybWF0KCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwiU25hcHNob3R0aW5nIGVudiB2YXJzXCIpO1xuICAgIGNvbnN0IGJlZm9yZSA9IHNuYXBzaG90RW52KCk7XG4gICAgYXdhaXQgYXBwa2l0LmF1dG9Db25maWd1cmUoeyBhdXRvQ29uZmlndXJlOiBcImVudlwiIH0pO1xuICAgIGNvbnN0IGNoYW5nZXMgPSBkaWZmRW52KGJlZm9yZSwgc25hcHNob3RFbnYoKSk7XG5cbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShmb3JtYXRFbnZFeHBvcnQoY2hhbmdlcywgZm9ybWF0KSk7XG4gIH0pO1xuXG5wcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KS5jYXRjaCgoZXJyOiB1bmtub3duKSA9PiB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBDb21tYW5kZXJFcnJvcikge1xuICAgIHByb2Nlc3MuZXhpdChlcnIuZXhpdENvZGUpO1xuICB9XG4gIHByb2Nlc3Muc3RkZXJyLndyaXRlKGAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gKGVyci5zdGFjayA/PyBlcnIubWVzc2FnZSkgOiBTdHJpbmcoZXJyKX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufSk7XG4iXX0=