@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 +14 -8
- package/index.ts +2 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +3 -1
- package/lib/src/cli.d.ts +24 -0
- package/lib/src/cli.js +55 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -12
- package/src/cli.ts +79 -0
- package/bin/dbx-tools-appkit-env.ts +0 -50
- package/lib/bin/dbx-tools-appkit-env.d.ts +0 -8
- package/lib/bin/dbx-tools-appkit-env.js +0 -36
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
|
|
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
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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
|
|
44
|
-
dbx
|
|
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
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
|
-
|
|
6
|
+
export { CommanderError } from "./src/cli.js";
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxPQUFPLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEtBQUssU0FBUyxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHRU5FUkFURUQgYnkgcHJvamVuIHdhdGNoIC0gRE8gTk9UIEVESVQuXG4vLyBSZWdlbmVyYXRlZCBmcm9tIHRoZSBleHBvcnRpbmcgbW9kdWxlcyBpbiAuL3NyYy5cbi8vIEhhbmQgZWRpdHMgYXJlIG92ZXJ3cml0dGVuIG9uIHRoZSBuZXh0IHdhdGNoOyB0aGlzIGZpbGUgaXMgcmVhZC1vbmx5LlxuXG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgZW52RXhwb3J0IGZyb20gXCIuL3NyYy9lbnYtZXhwb3J0LnRzXCI7XG5leHBvcnQgeyBDb21tYW5kZXJFcnJvciB9IGZyb20gXCIuL3NyYy9jbGkudHNcIjtcbmV4cG9ydCB0eXBlIHsgRW52RXhwb3J0Rm9ybWF0IH0gZnJvbSBcIi4vc3JjL2Vudi1leHBvcnQudHNcIjtcbiJdfQ==
|
package/lib/src/cli.d.ts
ADDED
|
@@ -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==
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/
|
|
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": "
|
|
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.
|
|
32
|
-
"@dbx-tools/shared-core": "0.6.
|
|
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.
|
|
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=
|