@dbx-tools/cli 0.6.163 → 0.6.168
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 +26 -32
- package/lib/src/cli.js +10 -20
- package/package.json +7 -8
- package/src/cli.ts +14 -32
package/README.md
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
# @dbx-tools/cli
|
|
2
2
|
|
|
3
|
-
The
|
|
4
|
-
|
|
3
|
+
The `dbx` CLI for workspace lifecycle, AppKit env, Databricks OAuth, and a
|
|
4
|
+
gated public tunnel.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
groups:
|
|
6
|
+
Available commands:
|
|
8
7
|
|
|
9
|
-
| Command
|
|
10
|
-
|
|
|
11
|
-
| `dbx dev`
|
|
12
|
-
| `dbx
|
|
13
|
-
| `dbx
|
|
14
|
-
| `dbx tunnel`
|
|
15
|
-
| `dbx token` | Broker short-lived provider tokens for host and container clients. |
|
|
8
|
+
| Command | What it does |
|
|
9
|
+
| ---------------- | ------------------------------------------------------------------------ |
|
|
10
|
+
| `dbx dev` | Bootstrap or repair a dbx-tools workspace, then forward to projen. |
|
|
11
|
+
| `dbx appkit env` | Print the environment an AppKit app resolves, as eval-able shell output. |
|
|
12
|
+
| `dbx auth` | Generate U2M or M2M OAuth tokens with secure credential storage. |
|
|
13
|
+
| `dbx tunnel` | Front any command with a public portr tunnel and an email-OTP gate. |
|
|
16
14
|
|
|
17
15
|
Key features:
|
|
18
16
|
|
|
19
|
-
- One installed command for every dbx-tools CLI surface, so there is a single
|
|
20
|
-
thing to install and a single `--help` to discover.
|
|
21
17
|
- Bootstrap path that scaffolds bun/projen into an empty or partially-set-up
|
|
22
18
|
folder, including the initial install and synth.
|
|
23
19
|
- Toolchain repair for a cloned repo whose generated files and `node_modules`
|
|
@@ -27,12 +23,12 @@ Key features:
|
|
|
27
23
|
when the effective registry is not npmjs.
|
|
28
24
|
- Importable CLI/root/bun helpers for tests and thin wrapper commands.
|
|
29
25
|
|
|
30
|
-
Every feature group lives in its own package
|
|
31
|
-
[`@dbx-tools/cli-
|
|
32
|
-
[`@dbx-tools/cli-
|
|
33
|
-
[`@dbx-tools/cli-tunnel`](../tunnel),
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
Every feature group lives in its own package:
|
|
27
|
+
[`@dbx-tools/cli-appkit-env`](../appkit-env),
|
|
28
|
+
[`@dbx-tools/cli-auth`](../auth), and
|
|
29
|
+
[`@dbx-tools/cli-tunnel`](../tunnel). Each package is imported LAZILY, only once
|
|
30
|
+
its name is matched, so `dbx dev` never pays to load AppKit, native OAuth,
|
|
31
|
+
SMTP, or X.509 code. Run
|
|
36
32
|
`dbx <group> --help` for a group's own flags; each forwards `--help` to the child
|
|
37
33
|
program rather than answering it at the root.
|
|
38
34
|
|
|
@@ -76,29 +72,27 @@ bun run clean # remove generated (read-only) files; -y to skip the pi
|
|
|
76
72
|
`dbx dev <task>` still works and forwards to the same projen task, but the
|
|
77
73
|
`bun run` form is the documented one for an established workspace.
|
|
78
74
|
|
|
79
|
-
##
|
|
75
|
+
## Resolve AppKit Env
|
|
80
76
|
|
|
81
77
|
```sh
|
|
82
|
-
dbx model-proxy --profile my-workspace --port 4000
|
|
83
78
|
eval "$(dbx appkit env --quiet)"
|
|
84
79
|
```
|
|
85
80
|
|
|
86
|
-
See [`@dbx-tools/cli-
|
|
87
|
-
|
|
88
|
-
resolution, and output formats.
|
|
81
|
+
See [`@dbx-tools/cli-appkit-env`](../appkit-env) for output formats and
|
|
82
|
+
configuration behavior.
|
|
89
83
|
|
|
90
|
-
##
|
|
84
|
+
## Authenticate With Databricks User OAuth
|
|
91
85
|
|
|
92
86
|
```sh
|
|
93
|
-
dbx
|
|
94
|
-
|
|
95
|
-
dbx
|
|
87
|
+
dbx auth login --profile my-workspace
|
|
88
|
+
dbx auth token --profile my-workspace
|
|
89
|
+
dbx auth status --profile my-workspace
|
|
96
90
|
```
|
|
97
91
|
|
|
98
|
-
The
|
|
99
|
-
|
|
100
|
-
[`@dbx-tools/cli-
|
|
101
|
-
|
|
92
|
+
The auth command uses the generated Databricks auth bindings for preferred U2M
|
|
93
|
+
browser OAuth, M2M client credentials, refresh, locking, and file or memory
|
|
94
|
+
storage. See [`@dbx-tools/cli-auth`](../auth) for the complete command and
|
|
95
|
+
option surface.
|
|
102
96
|
|
|
103
97
|
## Put A Gated Public URL In Front Of A Command
|
|
104
98
|
|
package/lib/src/cli.js
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Commander entry for `dbx` and its `dbx-tools` alias.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* name can never shadow (or be shadowed by) a sibling command.
|
|
9
|
-
* - `model-proxy` - the local OpenAI-compatible Model Serving proxy.
|
|
10
|
-
* - `appkit` - AppKit environment helpers (`appkit env`).
|
|
11
|
-
* - `tunnel` - public portr tunnel with passwordless access gating.
|
|
12
|
-
* - `token` - local provider access-token broker.
|
|
4
|
+
* `dev` bootstraps or repairs a workspace and forwards to projen.
|
|
5
|
+
* `appkit` provides AppKit environment helpers.
|
|
6
|
+
* `auth` manages Databricks OAuth and access tokens.
|
|
7
|
+
* `tunnel` runs a public portr tunnel with passwordless access gating.
|
|
13
8
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* AppKit, tunnel, or token-broker dependencies. That lazy hop is also why they
|
|
17
|
-
* are mounted as ARG-FORWARDING commands instead of
|
|
18
|
-
* `addCommand()`: building a child program eagerly to register it would defeat
|
|
19
|
-
* the point. Each forwards its own `--help`, so the child prints its real help.
|
|
9
|
+
* Feature commands load their sibling packages only when selected and forward
|
|
10
|
+
* their complete argument list, including `--help`.
|
|
20
11
|
*
|
|
21
12
|
* @module
|
|
22
13
|
*/
|
|
@@ -80,7 +71,7 @@ function addForwardedCommand(program, name, description, load) {
|
|
|
80
71
|
export function buildProgram(name = PROGRAM_NAMES[0]) {
|
|
81
72
|
const program = new Command()
|
|
82
73
|
.name(name)
|
|
83
|
-
.description("Databricks developer tools: workspace lifecycle,
|
|
74
|
+
.description("Databricks developer tools: workspace lifecycle, AppKit env, auth, and tunnel")
|
|
84
75
|
.showHelpAfterError()
|
|
85
76
|
.helpOption("-h, --help", `Show ${name} help`);
|
|
86
77
|
program
|
|
@@ -93,10 +84,9 @@ export function buildProgram(name = PROGRAM_NAMES[0]) {
|
|
|
93
84
|
.action(async (projenArgs) => {
|
|
94
85
|
await prepareAndRunProjen(projenArgs);
|
|
95
86
|
});
|
|
96
|
-
addForwardedCommand(program, "model-proxy", "Serve a local OpenAI-compatible proxy in front of Databricks Model Serving", async () => (await import("@dbx-tools/cli-model-proxy/cli")).buildProgram);
|
|
97
87
|
addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("@dbx-tools/cli-appkit-env/cli")).buildProgram);
|
|
88
|
+
addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("@dbx-tools/cli-auth/cli")).buildProgram);
|
|
98
89
|
addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram);
|
|
99
|
-
addForwardedCommand(program, "token", "Broker short-lived provider access tokens for local development", async () => (await import("@dbx-tools/cli-token/cli")).buildProgram);
|
|
100
90
|
return program;
|
|
101
91
|
}
|
|
102
92
|
/**
|
|
@@ -111,4 +101,4 @@ function programName(argv) {
|
|
|
111
101
|
export async function runCli(argv) {
|
|
112
102
|
await buildProgram(programName(argv)).parseAsync(argv);
|
|
113
103
|
}
|
|
114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU5RSxzRUFBc0U7QUFDdEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsVUFBb0IsRUFBRSxRQUFpQjtJQUMvRSxNQUFNLElBQUksR0FBRyxNQUFNLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTztJQUNULENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxJQUFJ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UyxDQUFDO0lBQ3pGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBzaW5nbGUgYGRieGAgKGFsaWFzIGBkYngtdG9vbHNgKSBjb21tYW5kZXIgZW50cnkuXG4gKlxuICogT25lIGJpbiwgZml2ZSBjb21tYW5kIGdyb3VwczpcbiAqICAgLSBgZGV2YCAtIHdvcmtzcGFjZSBsaWZlY3ljbGU6IGRldGVjdCB0aGUgcm9vdCwgYm9vdHN0cmFwIG9yIHJlcGFpciwgdGhlblxuICogICAgIGZvcndhcmQgd2hhdGV2ZXIgZm9sbG93cyB0byBwcm9qZW4uIFRoaXMgaXMgdGhlIHBhc3N0aHJvdWdoLCBhbmQgaXQgaXMgYW5cbiAqICAgICBFWFBMSUNJVCBzdWJjb21tYW5kIHJhdGhlciB0aGFuIHRoZSBiYXJlIHJvb3QgYWN0aW9uIHNvIGEgcHJvamVuIHRhc2tcbiAqICAgICBuYW1lIGNhbiBuZXZlciBzaGFkb3cgKG9yIGJlIHNoYWRvd2VkIGJ5KSBhIHNpYmxpbmcgY29tbWFuZC5cbiAqICAgLSBgbW9kZWwtcHJveHlgIC0gdGhlIGxvY2FsIE9wZW5BSS1jb21wYXRpYmxlIE1vZGVsIFNlcnZpbmcgcHJveHkuXG4gKiAgIC0gYGFwcGtpdGAgLSBBcHBLaXQgZW52aXJvbm1lbnQgaGVscGVycyAoYGFwcGtpdCBlbnZgKS5cbiAqICAgLSBgdHVubmVsYCAtIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBwYXNzd29yZGxlc3MgYWNjZXNzIGdhdGluZy5cbiAqICAgLSBgdG9rZW5gIC0gbG9jYWwgcHJvdmlkZXIgYWNjZXNzLXRva2VuIGJyb2tlci5cbiAqXG4gKiBUaGUgZm91ciBmZWF0dXJlIGdyb3VwcyBzdGF5IGluIHNpYmxpbmcgcGFja2FnZXMgYW5kIGFyZSBgYXdhaXQgaW1wb3J0KClgZWRcbiAqIG9ubHkgb25jZSB0aGVpciBuYW1lIGlzIG1hdGNoZWQsIHNvIGBkYnggZGV2YCBuZXZlciBsb2FkcyB0aGUgRGF0YWJyaWNrcyBTREssXG4gKiBBcHBLaXQsIHR1bm5lbCwgb3IgdG9rZW4tYnJva2VyIGRlcGVuZGVuY2llcy4gVGhhdCBsYXp5IGhvcCBpcyBhbHNvIHdoeSB0aGV5XG4gKiBhcmUgbW91bnRlZCBhcyBBUkctRk9SV0FSRElORyBjb21tYW5kcyBpbnN0ZWFkIG9mXG4gKiBgYWRkQ29tbWFuZCgpYDogYnVpbGRpbmcgYSBjaGlsZCBwcm9ncmFtIGVhZ2VybHkgdG8gcmVnaXN0ZXIgaXQgd291bGQgZGVmZWF0XG4gKiB0aGUgcG9pbnQuIEVhY2ggZm9yd2FyZHMgaXRzIG93biBgLS1oZWxwYCwgc28gdGhlIGNoaWxkIHByaW50cyBpdHMgcmVhbCBoZWxwLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgYmFzZW5hbWUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcImNvbW1hbmRlclwiO1xuaW1wb3J0IHtcbiAgYm9vdHN0cmFwV29ya3NwYWNlLFxuICBlbnN1cmVFbmdpbmVDdXJyZW50LFxuICBydW5Jbml0aWFsU3ludGgsXG4gIHNlZWRUb29sY2hhaW4sXG59IGZyb20gXCIuL2Jvb3RzdHJhcC50c1wiO1xuaW1wb3J0IHsgZW5zdXJlV29ya3NwYWNlUmVhZHksIHJ1bkJ1biwgcnVuUHJvamVuIH0gZnJvbSBcIi4vYnVuLnRzXCI7XG5pbXBvcnQgeyBmaW5kV29ya3NwYWNlUm9vdCwgbmVlZHNCb290c3RyYXAsIG5lZWRzVG9vbGNoYWluIH0gZnJvbSBcIi4vcm9vdC50c1wiO1xuXG4vKiogQ29tbWFuZHMgdGhlIGJpbiBleHBvc2VzLCBhbmQgdGhlIG5hbWVzIGhlbHAgaXMgcmVuZGVyZWQgdW5kZXIuICovXG5jb25zdCBQUk9HUkFNX05BTUVTID0gW1wiZGJ4XCIsIFwiZGJ4LXRvb2xzXCJdIGFzIGNvbnN0O1xuXG4vKipcbiAqIFByZXBhcmUgdGhlIHdvcmtzcGFjZSBhdCBgcm9vdGAsIHRoZW4gcnVuIHByb2plbiAodmlhIGJ1bikgd2l0aCBgcHJvamVuQXJnc2AuXG4gKlxuICogVGhyZWUgY2FzZXMsIGluIG9yZGVyOlxuICogICAtIG5vIGAucHJvamVucmMudHNgIGF0IGFsbCAtPiBmdWxsIGJvb3RzdHJhcCAoc2NhZmZvbGQgKyBpbnN0YWxsICsgc3ludGgpLFxuICogICAgIHdoaWNoIGFscmVhZHkgcnVucyB0aGUgaW5pdGlhbCBzeW50aDsgbm90aGluZyBtb3JlIHRvIGZvcndhcmQuXG4gKiAgIC0gYSBgLnByb2plbnJjLnRzYCBidXQgdGhlIGVuZ2luZS90b29sY2hhaW4gaXNuJ3QgaW5zdGFsbGVkIChlLmcuIGEgZnJlc2hseVxuICogICAgIGNvcGllZCBwcm9qZWN0IHdob3NlIGdlbmVyYXRlZCBmaWxlcyArIG1hbmlmZXN0cyBhcmUgZ2l0aWdub3JlZCkgLT4gc2VlZFxuICogICAgIHRoZSB0b29sY2hhaW4sIHRoZW4gcnVuIHRoZSBJTklUSUFMIHN5bnRoIGRpcmVjdGx5ICh0aGUgcHJvamVuIHRhc2tzIHRoZVxuICogICAgIGFyZ3Mgd291bGQgbmFtZSwgbGlrZSBgc3luY2AsIGRvbid0IGV4aXN0IHVudGlsIGAucHJvamVucmMudHNgIGhhcyBydW5cbiAqICAgICBvbmNlKSwgYW5kIGluc3RhbGwuIERvbid0IGZvcndhcmQgYHByb2plbkFyZ3NgIC0gdGhlIHN5bnRoIGlzIHRoZSB3b3JrLlxuICogICAtIG90aGVyd2lzZSAoZXN0YWJsaXNoZWQgd29ya3NwYWNlKSAtPiBlbnN1cmUgZGVwcywgYnJpbmcgdGhlIGVuZ2luZSB1cCB0b1xuICogICAgIHRoaXMgQ0xJJ3MgdmVyc2lvbiwgdGhlbiBmb3J3YXJkIHRvIHByb2plbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByZXBhcmVBbmRSdW5Qcm9qZW4ocHJvamVuQXJnczogc3RyaW5nW10sIHN0YXJ0RGlyPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJvb3QgPSBhd2FpdCBmaW5kV29ya3NwYWNlUm9vdChzdGFydERpcik7XG4gIGlmIChuZWVkc0Jvb3RzdHJhcChyb290KSkge1xuICAgIGJvb3RzdHJhcFdvcmtzcGFjZShyb290KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKG5lZWRzVG9vbGNoYWluKHJvb3QpKSB7XG4gICAgc2VlZFRvb2xjaGFpbihyb290KTtcbiAgICBydW5Jbml0aWFsU3ludGgocm9vdCk7XG4gICAgcnVuQnVuKFtcImluc3RhbGxcIl0sIHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBlbnN1cmVXb3Jrc3BhY2VSZWFkeShyb290KTtcbiAgZW5zdXJlRW5naW5lQ3VycmVudChyb290KTtcbiAgcnVuUHJvamVuKHByb2plbkFyZ3MsIHJvb3QpO1xufVxuXG4vKipcbiAqIE1vdW50IGBuYW1lYCBhcyBhIGNvbW1hbmQgdGhhdCBjYXB0dXJlcyBldmVyeSBmb2xsb3dpbmcgdG9rZW4gdmVyYmF0aW0gYW5kXG4gKiBoYW5kcyBpdCB0byB0aGUgcHJvZ3JhbSBgbG9hZCgpYCByZXNvbHZlcy4gYGhlbHBPcHRpb24oZmFsc2UpYCBpcyB3aGF0IGxldHNcbiAqIGAtLWhlbHBgIHRocm91Z2ggdG8gdGhlIGNoaWxkIGluc3RlYWQgb2YgYmVpbmcgYW5zd2VyZWQgaGVyZSwgYW5kIHRoZSBjaGlsZFxuICogcHJvZ3JhbSBvd25zIGl0cyBvd24gZmxhZ3MsIHNvIHRoaXMgd3JhcHBlciBuZXZlciBoYXMgdG8gcmVzdGF0ZSB0aGVtLlxuICovXG5mdW5jdGlvbiBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICBwcm9ncmFtOiBDb21tYW5kLFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGxvYWQ6ICgpID0+IFByb21pc2U8KG5hbWU6IHN0cmluZykgPT4gQ29tbWFuZD4sXG4pOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKVxuICAgIC5hcmd1bWVudChcIlthcmdzLi4uXVwiLCBgYXJndW1lbnRzIGZvcndhcmRlZCB0byAke25hbWV9YClcbiAgICAuYWxsb3dVbmtub3duT3B0aW9uKClcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoKVxuICAgIC5oZWxwT3B0aW9uKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKGFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjb25zdCBidWlsZFByb2dyYW0gPSBhd2FpdCBsb2FkKCk7XG4gICAgICBhd2FpdCBidWlsZFByb2dyYW0oYCR7cHJvZ3JhbS5uYW1lKCl9ICR7bmFtZX1gKS5wYXJzZUFzeW5jKGFyZ3MsIHsgZnJvbTogXCJ1c2VyXCIgfSk7XG4gICAgfSk7XG59XG5cbi8qKiBCdWlsZCB0aGUgYGRieGAgY29tbWFuZGVyIHByb2dyYW0gKG5vIHNpZGUgZWZmZWN0cyB1bnRpbCBwYXJzZWQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUHJvZ3JhbShuYW1lOiBzdHJpbmcgPSBQUk9HUkFNX05BTUVTWzBdKTogQ29tbWFuZCB7XG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpXG4gICAgLm5hbWUobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oXG4gICAgICBcIkRhdGFicmlja3MgZGV2ZWxvcGVyIHRvb2xzOiB3b3Jrc3BhY2UgbGlmZWN5Y2xlLCBtb2RlbCBwcm94eSwgQXBwS2l0IGVudiwgdHVubmVsLCBhbmQgdG9rZW4gYnJva2VyXCIsXG4gICAgKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IoKVxuICAgIC5oZWxwT3B0aW9uKFwiLWgsIC0taGVscFwiLCBgU2hvdyAke25hbWV9IGhlbHBgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkZXZcIilcbiAgICAuZGVzY3JpcHRpb24oXCJCb290c3RyYXAgb3IgcmVwYWlyIGEgZGJ4LXRvb2xzIHdvcmtzcGFjZSwgdGhlbiBmb3J3YXJkIHRvIHByb2plblwiKVxuICAgIC5hcmd1bWVudChcIltwcm9qZW5BcmdzLi4uXVwiLCBcInByb2plbiB0YXNrIGFuZCBhcmd1bWVudHMgKGUuZy4gc3luYyAtLXdhdGNoKVwiKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAocHJvamVuQXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHByZXBhcmVBbmRSdW5Qcm9qZW4ocHJvamVuQXJncyk7XG4gICAgfSk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwibW9kZWwtcHJveHlcIixcbiAgICBcIlNlcnZlIGEgbG9jYWwgT3BlbkFJLWNvbXBhdGlibGUgcHJveHkgaW4gZnJvbnQgb2YgRGF0YWJyaWNrcyBNb2RlbCBTZXJ2aW5nXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLW1vZGVsLXByb3h5L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImFwcGtpdFwiLFxuICAgIFwiQXBwS2l0IGhlbHBlcnMgKGVudjogcHJpbnQgdGhlIGVudmlyb25tZW50IGFuIEFwcEtpdCBhcHAgcmVzb2x2ZXMpXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWFwcGtpdC1lbnYvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwidHVubmVsXCIsXG4gICAgXCJSdW4gYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggYW4gZW1haWwtT1RQIGdhdGVcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktdHVubmVsL2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcInRva2VuXCIsXG4gICAgXCJCcm9rZXIgc2hvcnQtbGl2ZWQgcHJvdmlkZXIgYWNjZXNzIHRva2VucyBmb3IgbG9jYWwgZGV2ZWxvcG1lbnRcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktdG9rZW4vY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFCLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDMUIsT0FBZ0IsRUFDaEIsSUFBWSxFQUNaLFdBQW1CLEVBQ25CLElBQThDO0lBRTlDLE9BQU87U0FDSixPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ2IsV0FBVyxDQUFDLFdBQVcsQ0FBQztTQUN4QixRQUFRLENBQUMsV0FBVyxFQUFFLDBCQUEwQixJQUFJLEVBQUUsQ0FBQztTQUN2RCxrQkFBa0IsRUFBRTtTQUNwQixvQkFBb0IsRUFBRTtTQUN0QixVQUFVLENBQUMsS0FBSyxDQUFDO1NBQ2pCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBYyxFQUFFLEVBQUU7UUFDL0IsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNsQyxNQUFNLFlBQVksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUU7U0FDMUIsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNWLFdBQVcsQ0FBQywrRUFBK0UsQ0FBQztTQUM1RixrQkFBa0IsRUFBRTtTQUNwQixVQUFVLENBQUMsWUFBWSxFQUFFLFFBQVEsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUVqRCxPQUFPO1NBQ0osT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNkLFdBQVcsQ0FBQyxtRUFBbUUsQ0FBQztTQUNoRixRQUFRLENBQUMsaUJBQWlCLEVBQUUsK0NBQStDLENBQUM7U0FDNUUsa0JBQWtCLEVBQUU7U0FDcEIsb0JBQW9CLEVBQUU7U0FDdEIsVUFBVSxDQUFDLEtBQUssQ0FBQztTQUNqQixNQUFNLENBQUMsS0FBSyxFQUFFLFVBQW9CLEVBQUUsRUFBRTtRQUNyQyxNQUFNLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBRUwsbUJBQW1CLENBQ2pCLE9BQU8sRUFDUCxRQUFRLEVBQ1Isb0VBQW9FLEVBQ3BFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUN6RSxDQUFDO0lBRUYsbUJBQW1CLENBQ2pCLE9BQU8sRUFDUCxNQUFNLEVBQ04sb0RBQW9ELEVBQ3BELEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUNuRSxDQUFDO0lBRUYsbUJBQW1CLENBQ2pCLE9BQU8sRUFDUCxRQUFRLEVBQ1Isa0RBQWtELEVBQ2xELEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUNyRSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYztJQUN6QyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGVudHJ5IGZvciBgZGJ4YCBhbmQgaXRzIGBkYngtdG9vbHNgIGFsaWFzLlxuICpcbiAqIGBkZXZgIGJvb3RzdHJhcHMgb3IgcmVwYWlycyBhIHdvcmtzcGFjZSBhbmQgZm9yd2FyZHMgdG8gcHJvamVuLlxuICogYGFwcGtpdGAgcHJvdmlkZXMgQXBwS2l0IGVudmlyb25tZW50IGhlbHBlcnMuXG4gKiBgYXV0aGAgbWFuYWdlcyBEYXRhYnJpY2tzIE9BdXRoIGFuZCBhY2Nlc3MgdG9rZW5zLlxuICogYHR1bm5lbGAgcnVucyBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBwYXNzd29yZGxlc3MgYWNjZXNzIGdhdGluZy5cbiAqXG4gKiBGZWF0dXJlIGNvbW1hbmRzIGxvYWQgdGhlaXIgc2libGluZyBwYWNrYWdlcyBvbmx5IHdoZW4gc2VsZWN0ZWQgYW5kIGZvcndhcmRcbiAqIHRoZWlyIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QsIGluY2x1ZGluZyBgLS1oZWxwYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7XG4gIGJvb3RzdHJhcFdvcmtzcGFjZSxcbiAgZW5zdXJlRW5naW5lQ3VycmVudCxcbiAgcnVuSW5pdGlhbFN5bnRoLFxuICBzZWVkVG9vbGNoYWluLFxufSBmcm9tIFwiLi9ib290c3RyYXAudHNcIjtcbmltcG9ydCB7IGVuc3VyZVdvcmtzcGFjZVJlYWR5LCBydW5CdW4sIHJ1blByb2plbiB9IGZyb20gXCIuL2J1bi50c1wiO1xuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVJvb3QsIG5lZWRzQm9vdHN0cmFwLCBuZWVkc1Rvb2xjaGFpbiB9IGZyb20gXCIuL3Jvb3QudHNcIjtcblxuLyoqIENvbW1hbmRzIHRoZSBiaW4gZXhwb3NlcywgYW5kIHRoZSBuYW1lcyBoZWxwIGlzIHJlbmRlcmVkIHVuZGVyLiAqL1xuY29uc3QgUFJPR1JBTV9OQU1FUyA9IFtcImRieFwiLCBcImRieC10b29sc1wiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSB3b3Jrc3BhY2UgYXQgYHJvb3RgLCB0aGVuIHJ1biBwcm9qZW4gKHZpYSBidW4pIHdpdGggYHByb2plbkFyZ3NgLlxuICpcbiAqIFRocmVlIGNhc2VzLCBpbiBvcmRlcjpcbiAqICAgLSBubyBgLnByb2plbnJjLnRzYCBhdCBhbGwgLT4gZnVsbCBib290c3RyYXAgKHNjYWZmb2xkICsgaW5zdGFsbCArIHN5bnRoKSxcbiAqICAgICB3aGljaCBhbHJlYWR5IHJ1bnMgdGhlIGluaXRpYWwgc3ludGg7IG5vdGhpbmcgbW9yZSB0byBmb3J3YXJkLlxuICogICAtIGEgYC5wcm9qZW5yYy50c2AgYnV0IHRoZSBlbmdpbmUvdG9vbGNoYWluIGlzbid0IGluc3RhbGxlZCAoZS5nLiBhIGZyZXNobHlcbiAqICAgICBjb3BpZWQgcHJvamVjdCB3aG9zZSBnZW5lcmF0ZWQgZmlsZXMgKyBtYW5pZmVzdHMgYXJlIGdpdGlnbm9yZWQpIC0+IHNlZWRcbiAqICAgICB0aGUgdG9vbGNoYWluLCB0aGVuIHJ1biB0aGUgSU5JVElBTCBzeW50aCBkaXJlY3RseSAodGhlIHByb2plbiB0YXNrcyB0aGVcbiAqICAgICBhcmdzIHdvdWxkIG5hbWUsIGxpa2UgYHN5bmNgLCBkb24ndCBleGlzdCB1bnRpbCBgLnByb2plbnJjLnRzYCBoYXMgcnVuXG4gKiAgICAgb25jZSksIGFuZCBpbnN0YWxsLiBEb24ndCBmb3J3YXJkIGBwcm9qZW5BcmdzYCAtIHRoZSBzeW50aCBpcyB0aGUgd29yay5cbiAqICAgLSBvdGhlcndpc2UgKGVzdGFibGlzaGVkIHdvcmtzcGFjZSkgLT4gZW5zdXJlIGRlcHMsIGJyaW5nIHRoZSBlbmdpbmUgdXAgdG9cbiAqICAgICB0aGlzIENMSSdzIHZlcnNpb24sIHRoZW4gZm9yd2FyZCB0byBwcm9qZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3M6IHN0cmluZ1tdLCBzdGFydERpcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3Qoc3RhcnREaXIpO1xuICBpZiAobmVlZHNCb290c3RyYXAocm9vdCkpIHtcbiAgICBib290c3RyYXBXb3Jrc3BhY2Uocm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChuZWVkc1Rvb2xjaGFpbihyb290KSkge1xuICAgIHNlZWRUb29sY2hhaW4ocm9vdCk7XG4gICAgcnVuSW5pdGlhbFN5bnRoKHJvb3QpO1xuICAgIHJ1bkJ1bihbXCJpbnN0YWxsXCJdLCByb290KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlV29ya3NwYWNlUmVhZHkocm9vdCk7XG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQocm9vdCk7XG4gIHJ1blByb2plbihwcm9qZW5BcmdzLCByb290KTtcbn1cblxuLyoqXG4gKiBNb3VudCBgbmFtZWAgYXMgYSBjb21tYW5kIHRoYXQgY2FwdHVyZXMgZXZlcnkgZm9sbG93aW5nIHRva2VuIHZlcmJhdGltIGFuZFxuICogaGFuZHMgaXQgdG8gdGhlIHByb2dyYW0gYGxvYWQoKWAgcmVzb2x2ZXMuIGBoZWxwT3B0aW9uKGZhbHNlKWAgaXMgd2hhdCBsZXRzXG4gKiBgLS1oZWxwYCB0aHJvdWdoIHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGJlaW5nIGFuc3dlcmVkIGhlcmUsIGFuZCB0aGUgY2hpbGRcbiAqIHByb2dyYW0gb3ducyBpdHMgb3duIGZsYWdzLCBzbyB0aGlzIHdyYXBwZXIgbmV2ZXIgaGFzIHRvIHJlc3RhdGUgdGhlbS5cbiAqL1xuZnVuY3Rpb24gYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgcHJvZ3JhbTogQ29tbWFuZCxcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBsb2FkOiAoKSA9PiBQcm9taXNlPChuYW1lOiBzdHJpbmcpID0+IENvbW1hbmQ+LFxuKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYXJndW1lbnQoXCJbYXJncy4uLl1cIiwgYGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gJHtuYW1lfWApXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChhcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRQcm9ncmFtID0gYXdhaXQgbG9hZCgpO1xuICAgICAgYXdhaXQgYnVpbGRQcm9ncmFtKGAke3Byb2dyYW0ubmFtZSgpfSAke25hbWV9YCkucGFyc2VBc3luYyhhcmdzLCB7IGZyb206IFwidXNlclwiIH0pO1xuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnhgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKFwiRGF0YWJyaWNrcyBkZXZlbG9wZXIgdG9vbHM6IHdvcmtzcGFjZSBsaWZlY3ljbGUsIEFwcEtpdCBlbnYsIGF1dGgsIGFuZCB0dW5uZWxcIilcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKClcbiAgICAuaGVscE9wdGlvbihcIi1oLCAtLWhlbHBcIiwgYFNob3cgJHtuYW1lfSBoZWxwYCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiZGV2XCIpXG4gICAgLmRlc2NyaXB0aW9uKFwiQm9vdHN0cmFwIG9yIHJlcGFpciBhIGRieC10b29scyB3b3Jrc3BhY2UsIHRoZW4gZm9yd2FyZCB0byBwcm9qZW5cIilcbiAgICAuYXJndW1lbnQoXCJbcHJvamVuQXJncy4uLl1cIiwgXCJwcm9qZW4gdGFzayBhbmQgYXJndW1lbnRzIChlLmcuIHN5bmMgLS13YXRjaClcIilcbiAgICAuYWxsb3dVbmtub3duT3B0aW9uKClcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoKVxuICAgIC5oZWxwT3B0aW9uKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKHByb2plbkFyZ3M6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBhd2FpdCBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3MpO1xuICAgIH0pO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImFwcGtpdFwiLFxuICAgIFwiQXBwS2l0IGhlbHBlcnMgKGVudjogcHJpbnQgdGhlIGVudmlyb25tZW50IGFuIEFwcEtpdCBhcHAgcmVzb2x2ZXMpXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWFwcGtpdC1lbnYvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiYXV0aFwiLFxuICAgIFwiQXV0aGVudGljYXRlIHRvIERhdGFicmlja3MgYW5kIG1hbmFnZSBPQXV0aCB0b2tlbnNcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktYXV0aC9jbGlcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJ0dW5uZWxcIixcbiAgICBcIlJ1biBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBhbiBlbWFpbC1PVFAgZ2F0ZVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS10dW5uZWwvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -22,18 +22,17 @@
|
|
|
22
22
|
"projen": "projen"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@types/bun": "
|
|
25
|
+
"@types/bun": "1.3.14",
|
|
26
26
|
"@types/node": "^24.6.0",
|
|
27
27
|
"typescript": "^5.9.3"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@clack/prompts": "^1.7.0",
|
|
31
|
-
"@dbx-tools/cli-appkit-env": "0.6.
|
|
32
|
-
"@dbx-tools/cli-
|
|
33
|
-
"@dbx-tools/cli-
|
|
34
|
-
"@dbx-tools/
|
|
35
|
-
"@dbx-tools/core": "0.6.
|
|
36
|
-
"@dbx-tools/shared-core": "0.6.163",
|
|
31
|
+
"@dbx-tools/cli-appkit-env": "0.6.168",
|
|
32
|
+
"@dbx-tools/cli-auth": "0.6.168",
|
|
33
|
+
"@dbx-tools/cli-tunnel": "0.6.168",
|
|
34
|
+
"@dbx-tools/core": "0.6.168",
|
|
35
|
+
"@dbx-tools/shared-core": "0.6.168",
|
|
37
36
|
"commander": "^15.0.0"
|
|
38
37
|
},
|
|
39
38
|
"main": "./lib/index.js",
|
|
@@ -70,7 +69,7 @@
|
|
|
70
69
|
"./package.json": "./package.json"
|
|
71
70
|
}
|
|
72
71
|
},
|
|
73
|
-
"version": "0.6.
|
|
72
|
+
"version": "0.6.168",
|
|
74
73
|
"types": "./lib/index.d.ts",
|
|
75
74
|
"type": "module",
|
|
76
75
|
"exports": {
|
package/src/cli.ts
CHANGED
|
@@ -1,22 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Commander entry for `dbx` and its `dbx-tools` alias.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* name can never shadow (or be shadowed by) a sibling command.
|
|
9
|
-
* - `model-proxy` - the local OpenAI-compatible Model Serving proxy.
|
|
10
|
-
* - `appkit` - AppKit environment helpers (`appkit env`).
|
|
11
|
-
* - `tunnel` - public portr tunnel with passwordless access gating.
|
|
12
|
-
* - `token` - local provider access-token broker.
|
|
4
|
+
* `dev` bootstraps or repairs a workspace and forwards to projen.
|
|
5
|
+
* `appkit` provides AppKit environment helpers.
|
|
6
|
+
* `auth` manages Databricks OAuth and access tokens.
|
|
7
|
+
* `tunnel` runs a public portr tunnel with passwordless access gating.
|
|
13
8
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* AppKit, tunnel, or token-broker dependencies. That lazy hop is also why they
|
|
17
|
-
* are mounted as ARG-FORWARDING commands instead of
|
|
18
|
-
* `addCommand()`: building a child program eagerly to register it would defeat
|
|
19
|
-
* the point. Each forwards its own `--help`, so the child prints its real help.
|
|
9
|
+
* Feature commands load their sibling packages only when selected and forward
|
|
10
|
+
* their complete argument list, including `--help`.
|
|
20
11
|
*
|
|
21
12
|
* @module
|
|
22
13
|
*/
|
|
@@ -94,9 +85,7 @@ function addForwardedCommand(
|
|
|
94
85
|
export function buildProgram(name: string = PROGRAM_NAMES[0]): Command {
|
|
95
86
|
const program = new Command()
|
|
96
87
|
.name(name)
|
|
97
|
-
.description(
|
|
98
|
-
"Databricks developer tools: workspace lifecycle, model proxy, AppKit env, tunnel, and token broker",
|
|
99
|
-
)
|
|
88
|
+
.description("Databricks developer tools: workspace lifecycle, AppKit env, auth, and tunnel")
|
|
100
89
|
.showHelpAfterError()
|
|
101
90
|
.helpOption("-h, --help", `Show ${name} help`);
|
|
102
91
|
|
|
@@ -111,13 +100,6 @@ export function buildProgram(name: string = PROGRAM_NAMES[0]): Command {
|
|
|
111
100
|
await prepareAndRunProjen(projenArgs);
|
|
112
101
|
});
|
|
113
102
|
|
|
114
|
-
addForwardedCommand(
|
|
115
|
-
program,
|
|
116
|
-
"model-proxy",
|
|
117
|
-
"Serve a local OpenAI-compatible proxy in front of Databricks Model Serving",
|
|
118
|
-
async () => (await import("@dbx-tools/cli-model-proxy/cli")).buildProgram,
|
|
119
|
-
);
|
|
120
|
-
|
|
121
103
|
addForwardedCommand(
|
|
122
104
|
program,
|
|
123
105
|
"appkit",
|
|
@@ -127,16 +109,16 @@ export function buildProgram(name: string = PROGRAM_NAMES[0]): Command {
|
|
|
127
109
|
|
|
128
110
|
addForwardedCommand(
|
|
129
111
|
program,
|
|
130
|
-
"
|
|
131
|
-
"
|
|
132
|
-
async () => (await import("@dbx-tools/cli-
|
|
112
|
+
"auth",
|
|
113
|
+
"Authenticate to Databricks and manage OAuth tokens",
|
|
114
|
+
async () => (await import("@dbx-tools/cli-auth/cli")).buildProgram,
|
|
133
115
|
);
|
|
134
116
|
|
|
135
117
|
addForwardedCommand(
|
|
136
118
|
program,
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
async () => (await import("@dbx-tools/cli-
|
|
119
|
+
"tunnel",
|
|
120
|
+
"Run a public portr tunnel with an email-OTP gate",
|
|
121
|
+
async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram,
|
|
140
122
|
);
|
|
141
123
|
|
|
142
124
|
return program;
|