@dbx-tools/cli 0.9.40 → 0.9.46
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 +85 -47
- package/index.ts +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/src/bootstrap.js +4 -29
- package/lib/src/cli.js +3 -1
- package/package.json +12 -10
- package/src/bootstrap.ts +3 -28
- package/src/cli.ts +8 -0
package/README.md
CHANGED
|
@@ -73,7 +73,6 @@ Once the workspace is initialized, use its tasks directly:
|
|
|
73
73
|
bun run sync
|
|
74
74
|
bun run sync -- --watch
|
|
75
75
|
bun run barrels
|
|
76
|
-
bun run openapi
|
|
77
76
|
```
|
|
78
77
|
|
|
79
78
|
See [`@dbx-tools/projen`](../../../../projen) for workspace configuration and
|
|
@@ -86,96 +85,135 @@ package guide documents that group's complete options and subcommands.
|
|
|
86
85
|
|
|
87
86
|
### `dbx`
|
|
88
87
|
|
|
89
|
-
```text
|
|
90
|
-
Usage: dbx [command]
|
|
91
|
-
|
|
92
88
|
Databricks developer tools: workspace lifecycle, AppKit env, auth, tunnels, and local proxies
|
|
93
89
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
appkit [args...] AppKit helpers (env: print the environment an AppKit app resolves)
|
|
97
|
-
auth [args...] Authenticate to Databricks and manage OAuth tokens
|
|
98
|
-
tunnel [args...] Run a public portr tunnel with an email-OTP gate
|
|
99
|
-
lakebase-proxy [args...] Run the Node Databricks Lakebase PostgreSQL proxy
|
|
100
|
-
model-gateway [args...] Run the foreground AppKit Databricks model gateway
|
|
101
|
-
graphiti [args...] Run Graphiti or manage its current-user desktop service
|
|
90
|
+
```sh
|
|
91
|
+
dbx [command]
|
|
102
92
|
```
|
|
103
93
|
|
|
104
|
-
|
|
94
|
+
#### Commands
|
|
105
95
|
|
|
106
|
-
|
|
107
|
-
|
|
96
|
+
| Command | Description |
|
|
97
|
+
| -------------------------- | ------------------------------------------------------------------ |
|
|
98
|
+
| `dev [projenArgs...]` | Bootstrap or repair a dbx-tools workspace, then forward to projen |
|
|
99
|
+
| `appkit [args...]` | AppKit helpers (env: print the environment an AppKit app resolves) |
|
|
100
|
+
| `auth [args...]` | Authenticate to Databricks and manage OAuth tokens |
|
|
101
|
+
| `tunnel [args...]` | Run a public portr tunnel with an email-OTP gate |
|
|
102
|
+
| `falkor-db [args...]` | Run embedded FalkorDB with optional Databricks Volume backups |
|
|
103
|
+
| `lakebase-proxy [args...]` | Run the Node Databricks Lakebase PostgreSQL proxy |
|
|
104
|
+
| `model-gateway [args...]` | Run the foreground AppKit Databricks model gateway |
|
|
105
|
+
| `graphiti [args...]` | Run Graphiti or manage its current-user desktop service |
|
|
106
|
+
|
|
107
|
+
### `dbx dev`
|
|
108
108
|
|
|
109
109
|
Bootstrap or repair a dbx-tools workspace, then forward to projen
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
```sh
|
|
112
|
+
dbx dev [projenArgs...]
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
#### Arguments
|
|
116
116
|
|
|
117
|
-
|
|
118
|
-
|
|
117
|
+
| Argument | Description |
|
|
118
|
+
| ------------ | --------------------------------------------- |
|
|
119
|
+
| `projenArgs` | projen task and arguments (e.g. sync --watch) |
|
|
120
|
+
|
|
121
|
+
### `dbx appkit`
|
|
119
122
|
|
|
120
123
|
AppKit helpers (env: print the environment an AppKit app resolves)
|
|
121
124
|
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
```sh
|
|
126
|
+
dbx appkit [args...]
|
|
124
127
|
```
|
|
125
128
|
|
|
126
|
-
|
|
129
|
+
#### Arguments
|
|
130
|
+
|
|
131
|
+
| Argument | Description |
|
|
132
|
+
| -------- | ----------------------------- |
|
|
133
|
+
| `args` | arguments forwarded to appkit |
|
|
127
134
|
|
|
128
|
-
|
|
129
|
-
Usage: dbx auth [args...]
|
|
135
|
+
### `dbx auth`
|
|
130
136
|
|
|
131
137
|
Authenticate to Databricks and manage OAuth tokens
|
|
132
138
|
|
|
133
|
-
|
|
134
|
-
|
|
139
|
+
```sh
|
|
140
|
+
dbx auth [args...]
|
|
135
141
|
```
|
|
136
142
|
|
|
137
|
-
|
|
143
|
+
#### Arguments
|
|
138
144
|
|
|
139
|
-
|
|
140
|
-
|
|
145
|
+
| Argument | Description |
|
|
146
|
+
| -------- | --------------------------- |
|
|
147
|
+
| `args` | arguments forwarded to auth |
|
|
148
|
+
|
|
149
|
+
### `dbx tunnel`
|
|
141
150
|
|
|
142
151
|
Run a public portr tunnel with an email-OTP gate
|
|
143
152
|
|
|
144
|
-
|
|
145
|
-
|
|
153
|
+
```sh
|
|
154
|
+
dbx tunnel [args...]
|
|
146
155
|
```
|
|
147
156
|
|
|
148
|
-
|
|
157
|
+
#### Arguments
|
|
158
|
+
|
|
159
|
+
| Argument | Description |
|
|
160
|
+
| -------- | ----------------------------- |
|
|
161
|
+
| `args` | arguments forwarded to tunnel |
|
|
149
162
|
|
|
150
|
-
|
|
151
|
-
|
|
163
|
+
### `dbx falkor-db`
|
|
164
|
+
|
|
165
|
+
Run embedded FalkorDB with optional Databricks Volume backups
|
|
166
|
+
|
|
167
|
+
```sh
|
|
168
|
+
dbx falkor-db [args...]
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
#### Arguments
|
|
172
|
+
|
|
173
|
+
| Argument | Description |
|
|
174
|
+
| -------- | -------------------------------- |
|
|
175
|
+
| `args` | arguments forwarded to falkor-db |
|
|
176
|
+
|
|
177
|
+
### `dbx lakebase-proxy`
|
|
152
178
|
|
|
153
179
|
Run the Node Databricks Lakebase PostgreSQL proxy
|
|
154
180
|
|
|
155
|
-
|
|
156
|
-
|
|
181
|
+
```sh
|
|
182
|
+
dbx lakebase-proxy [args...]
|
|
157
183
|
```
|
|
158
184
|
|
|
159
|
-
|
|
185
|
+
#### Arguments
|
|
160
186
|
|
|
161
|
-
|
|
162
|
-
|
|
187
|
+
| Argument | Description |
|
|
188
|
+
| -------- | ------------------------------------- |
|
|
189
|
+
| `args` | arguments forwarded to lakebase-proxy |
|
|
190
|
+
|
|
191
|
+
### `dbx model-gateway`
|
|
163
192
|
|
|
164
193
|
Run the foreground AppKit Databricks model gateway
|
|
165
194
|
|
|
166
|
-
|
|
167
|
-
|
|
195
|
+
```sh
|
|
196
|
+
dbx model-gateway [args...]
|
|
168
197
|
```
|
|
169
198
|
|
|
170
|
-
|
|
199
|
+
#### Arguments
|
|
171
200
|
|
|
172
|
-
|
|
173
|
-
|
|
201
|
+
| Argument | Description |
|
|
202
|
+
| -------- | ------------------------------------ |
|
|
203
|
+
| `args` | arguments forwarded to model-gateway |
|
|
204
|
+
|
|
205
|
+
### `dbx graphiti`
|
|
174
206
|
|
|
175
207
|
Run Graphiti or manage its current-user desktop service
|
|
176
208
|
|
|
177
|
-
|
|
178
|
-
|
|
209
|
+
```sh
|
|
210
|
+
dbx graphiti [args...]
|
|
179
211
|
```
|
|
180
212
|
|
|
213
|
+
#### Arguments
|
|
214
|
+
|
|
215
|
+
| Argument | Description |
|
|
216
|
+
| -------- | ------------------------------- |
|
|
217
|
+
| `args` | arguments forwarded to graphiti |
|
|
218
|
+
|
|
181
219
|
<!-- cli-reference:end -->
|
package/index.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
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";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.46";
|
|
7
7
|
export * as bootstrap from "./src/bootstrap.ts";
|
|
8
8
|
export * as bun from "./src/bun.ts";
|
|
9
9
|
export * as cli from "./src/cli.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/cli";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.46";
|
|
3
3
|
export * as bootstrap from "./src/bootstrap.ts";
|
|
4
4
|
export * as bun from "./src/bun.ts";
|
|
5
5
|
export * as cli from "./src/cli.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
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";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.46";
|
|
6
6
|
export * as bootstrap from "./src/bootstrap.js";
|
|
7
7
|
export * as bun from "./src/bun.js";
|
|
8
8
|
export * as cli from "./src/cli.js";
|
|
9
9
|
export * as root from "./src/root.js";
|
|
10
10
|
export { resolveBunArgv } from "./src/bun.js";
|
|
11
11
|
export { workspaceRoot } from "./src/root.js";
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUNuRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxTQUFTLE1BQU0sb0JBQW9CLENBQUM7QUFDaEQsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUM7QUFDcEMsT0FBTyxLQUFLLElBQUksTUFBTSxlQUFlLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9jbGlcIjtcbmV4cG9ydCBjb25zdCBQQUNLQUdFX1ZFUlNJT04gPSBcIjAuOS40NlwiO1xuZXhwb3J0ICogYXMgYm9vdHN0cmFwIGZyb20gXCIuL3NyYy9ib290c3RyYXAudHNcIjtcbmV4cG9ydCAqIGFzIGJ1biBmcm9tIFwiLi9zcmMvYnVuLnRzXCI7XG5leHBvcnQgKiBhcyBjbGkgZnJvbSBcIi4vc3JjL2NsaS50c1wiO1xuZXhwb3J0ICogYXMgcm9vdCBmcm9tIFwiLi9zcmMvcm9vdC50c1wiO1xuZXhwb3J0IHsgcmVzb2x2ZUJ1bkFyZ3YgfSBmcm9tIFwiLi9zcmMvYnVuLnRzXCI7XG5leHBvcnQgeyB3b3Jrc3BhY2VSb290IH0gZnJvbSBcIi4vc3JjL3Jvb3QudHNcIjtcbiJdfQ==
|
package/lib/src/bootstrap.js
CHANGED
|
@@ -7,7 +7,7 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
7
7
|
import { createRequire } from "node:module";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { intro, outro } from "@clack/prompts";
|
|
10
|
-
import { exec
|
|
10
|
+
import { exec } from "@dbx-tools/core";
|
|
11
11
|
import { json, log } from "@dbx-tools/shared-core";
|
|
12
12
|
import { childEnv, resolveBunArgv, runBun } from "./bun.js";
|
|
13
13
|
import { rootLabel } from "./root.js";
|
|
@@ -135,7 +135,6 @@ export function seedToolchain(root, projenSpecifier = defaultProjenSpecifier())
|
|
|
135
135
|
runBun(["init", "-y"], root);
|
|
136
136
|
normalizeSeedManifest(manifestPath);
|
|
137
137
|
}
|
|
138
|
-
seedRegistry(root);
|
|
139
138
|
const kernelArch = exec.spawnSync("uname", ["-m"], {
|
|
140
139
|
stdin: "ignore",
|
|
141
140
|
stdout: "capture",
|
|
@@ -151,30 +150,6 @@ export function seedToolchain(root, projenSpecifier = defaultProjenSpecifier())
|
|
|
151
150
|
});
|
|
152
151
|
runBun(["add", "-D", "projen", "typescript@^5.9.3", "@types/bun", projenSpecifier], root);
|
|
153
152
|
}
|
|
154
|
-
/**
|
|
155
|
-
* Pin a non-default registry into the new root's `.npmrc`.
|
|
156
|
-
*
|
|
157
|
-
* The CLI already forces `--registry` onto the bun invocations it makes itself,
|
|
158
|
-
* but a bootstrapped workspace outlives this process: every later `bun install`
|
|
159
|
-
* the developer (or projen's post-synth step) runs is on its own. bun ignores
|
|
160
|
-
* `npm_config_registry` from the environment, so without a file on disk those
|
|
161
|
-
* runs revert to `https://registry.npmjs.org/` - which is a hard failure where
|
|
162
|
-
* the custom registry was the only reachable one.
|
|
163
|
-
*
|
|
164
|
-
* Only writes for an actual override, never creates a file just to name npmjs,
|
|
165
|
-
* and never overwrites an existing `.npmrc` (the developer's own wins).
|
|
166
|
-
*/
|
|
167
|
-
function seedRegistry(root) {
|
|
168
|
-
const registry = projectUtils
|
|
169
|
-
.npmRegistry(null, { overrideOnly: true, envVars: true })
|
|
170
|
-
?.toString();
|
|
171
|
-
if (!registry)
|
|
172
|
-
return;
|
|
173
|
-
const npmrc = join(root, ".npmrc");
|
|
174
|
-
if (existsSync(npmrc))
|
|
175
|
-
return;
|
|
176
|
-
writeFileSync(npmrc, `registry=${registry}\n`);
|
|
177
|
-
}
|
|
178
153
|
/**
|
|
179
154
|
* Make what `bun init` produced safe to synth against: force `type: "module"`
|
|
180
155
|
* (bun runs `.projenrc.ts` fine either way, but projen's ESM sources and the
|
|
@@ -204,12 +179,12 @@ function normalizeSeedManifest(manifestPath) {
|
|
|
204
179
|
*/
|
|
205
180
|
export function runInitialSynth(root) {
|
|
206
181
|
const [command, ...prefix] = resolveBunArgv();
|
|
207
|
-
// bun runs the `.ts` directly.
|
|
208
|
-
// `childEnv`
|
|
182
|
+
// bun runs the `.ts` directly. Registry environment aliases reach nested
|
|
183
|
+
// commands through `childEnv` without writing project-level npm configuration.
|
|
209
184
|
exec.spawnSync(command, [...prefix, ".projenrc.ts"], {
|
|
210
185
|
cwd: root,
|
|
211
186
|
env: childEnv({ PROJEN_DISABLE_POST: "true" }),
|
|
212
187
|
check: true,
|
|
213
188
|
});
|
|
214
189
|
}
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDckQsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFakQsaUZBQWlGO0FBQ2pGLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBRXJDLHNGQUFzRjtBQUN0RixNQUFNLHlCQUF5QixHQUFHLDBCQUEwQixDQUFDO0FBRTdEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsc0JBQXNCO0lBQzdCLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO0lBQzdCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDO0FBQy9FLENBQUM7QUFFRCxvRkFBb0Y7QUFDcEYsU0FBUyxVQUFVO0lBQ2pCLElBQUksQ0FBQztRQUNILDRFQUE0RTtRQUM1RSx3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QUN6QixhQUFhLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsZ0ZBQWdGO0lBQ2xGLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLElBQVk7SUFDMUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDO0lBQzlDLDRFQUE0RTtJQUM1RSxzQ0FBc0M7SUFDdEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRTtRQUNuRCxHQUFHLEVBQUUsSUFBSTtRQUNULEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUM5QyxLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJvb3RzdHJhcCBhIGJyYW5kLW5ldyBmb2xkZXIgaW50byBhIHdvcmtpbmcgZGJ4LXRvb2xzIHdvcmtzcGFjZSBiZWZvcmUgcHJvamVuIHJ1bnMuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGludHJvLCBvdXRybyB9IGZyb20gXCJAY2xhY2svcHJvbXB0c1wiO1xuaW1wb3J0IHsgZXhlYywgcHJvamVjdFV0aWxzIH0gZnJvbSBcIkBkYngtdG9vbHMvY29yZVwiO1xuaW1wb3J0IHsganNvbiwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCB7IGNoaWxkRW52LCByZXNvbHZlQnVuQXJndiwgcnVuQnVuIH0gZnJvbSBcIi4vYnVuLnRzXCI7XG5pbXBvcnQgeyByb290TGFiZWwgfSBmcm9tIFwiLi9yb290LnRzXCI7XG5cbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJkYngtdG9vbHM6Ym9vdHN0cmFwXCIpO1xuXG4vKiogUHVibGlzaGVkIHBhY2thZ2UgbmFtZSB1c2VkIGZvciBOb2RlJ3Mgc2VsZi1yZWZlcmVuY2UgbWFuaWZlc3QgcmVzb2x1dGlvbi4gKi9cbmNvbnN0IENMSV9QQUNLQUdFID0gXCJAZGJ4LXRvb2xzL2NsaVwiO1xuXG4vKiogRmFsbGJhY2sgd2hlbiB0aGlzIENMSSdzIG93biB2ZXJzaW9uIGlzbid0IGEgcmVhbCByZWxlYXNlIChhbiBpbi1yZXBvIGAwLjAuMGApLiAqL1xuY29uc3QgRkFMTEJBQ0tfUFJPSkVOX1NQRUNJRklFUiA9IFwiQGRieC10b29scy9wcm9qZW5AbGF0ZXN0XCI7XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgZW5naW5lIGF0IFRISVMgQ0xJJ3Mgb3duIHZlcnNpb24uIFRoZSB0d28gYXJlIHJlbGVhc2VkIHRvZ2V0aGVyIGJ5XG4gKiB0aGUgcm9vdCBgYnVtcGAsIHNvIHRoZSBtYXRjaGluZyBlbmdpbmUgYWx3YXlzIGV4aXN0cyBvbiB0aGUgcmVnaXN0cnkuXG4gKlxuICogTm90IGBAbGF0ZXN0YCwgYW5kIG5vdCBhIGJhcmUgYEBkYngtdG9vbHMvcHJvamVuYC4gQSBiYXJlIHNwZWNpZmllciBjYW4gbGFuZCBvblxuICogYSBzdHJheSBgMC4wLjBgLCB3aG9zZSBgXjAuMC4wYCBjYXJldCB0aGVuIHJlYWNoZXMgbm8gcmVhbCByZWxlYXNlLiBBbiBleHBsaWNpdFxuICogcmFuZ2UgcGlubmVkIHRvIHRoaXMgQ0xJJ3Mgb3duIHZlcnNpb24gYWRtaXRzIG9ubHkgdGhlIG1hdGNoaW5nIGVuZ2luZSwgc28gdGhlXG4gKiBDTEkgYW5kIHRoZSBlbmdpbmUgaXQgZHJpdmVzIG5ldmVyIGRyaWZ0IGFjcm9zcyBhIHJlbGVhc2UgKHRoZXkgYXJlIGN1dFxuICogdG9nZXRoZXIgYnkgdGhlIHJvb3QgYGJ1bXBgKS5cbiAqL1xuZnVuY3Rpb24gZGVmYXVsdFByb2plblNwZWNpZmllcigpOiBzdHJpbmcge1xuICBjb25zdCB2ZXJzaW9uID0gb3duVmVyc2lvbigpO1xuICByZXR1cm4gdmVyc2lvbiA/IGBAZGJ4LXRvb2xzL3Byb2plbkBeJHt2ZXJzaW9ufWAgOiBGQUxMQkFDS19QUk9KRU5fU1BFQ0lGSUVSO1xufVxuXG4vKiogVGhpcyBDTEkncyBvd24gcmVsZWFzZWQgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgZm9yIGFuIGluLXJlcG8gYDAuMC4wYCBidWlsZC4gKi9cbmZ1bmN0aW9uIG93blZlcnNpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICAvLyBSZXNvbHZlIHRocm91Z2ggdGhlIHBhY2thZ2UncyBleHBvcnRlZCBgLi9wYWNrYWdlLmpzb25gLCB3aGljaCB3b3JrcyBmcm9tXG4gICAgLy8gYm90aCBzb3VyY2UgKGBzcmMvYm9vdHN0cmFwLnRzYCkgYW5kIHB1Ymxpc2hlZCBvdXRwdXRcbiAgICAvLyAoYGxpYi9zcmMvYm9vdHN0cmFwLmpzYCkuIEEgcmVsYXRpdmUgVVJMIGlzIG9uZSBsZXZlbCBmcm9tIHRoZSBtYW5pZmVzdFxuICAgIC8vIGluIHNvdXJjZSBidXQgdHdvIGxldmVscyBhd2F5IGFmdGVyIGNvbXBpbGF0aW9uIGFuZCBzaWxlbnRseSBmZWxsIGJhY2sgdG9cbiAgICAvLyBgQGxhdGVzdGAgaW4gZXZlcnkgaW5zdGFsbGVkIENMSS5cbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCkucmVzb2x2ZShgJHtDTElfUEFDS0FHRX0vcGFja2FnZS5qc29uYCk7XG4gICAgY29uc3QgdmVyc2lvbiA9IGpzb24ucGFyc2VSZWNvcmQocmVhZEZpbGVTeW5jKG1hbmlmZXN0UGF0aCwgXCJ1dGY4XCIpKT8udmVyc2lvbjtcbiAgICByZXR1cm4gdHlwZW9mIHZlcnNpb24gPT09IFwic3RyaW5nXCIgJiYgdmVyc2lvbiAhPT0gXCIwLjAuMFwiID8gdmVyc2lvbiA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogQ29tcGFyZSBgeC55LnpgIHRyaXBsZXM7IHJldHVybnMgPDAsIDAsIG9yID4wLiBNaXNzaW5nIHBhcnRzIGNvdW50IGFzIDAuICovXG5mdW5jdGlvbiBjb21wYXJlVmVyc2lvbnMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBudW1iZXIge1xuICBjb25zdCBwYXJ0cyA9ICh2OiBzdHJpbmcpID0+IHYuc3BsaXQoXCIuXCIpLm1hcCgocCkgPT4gTnVtYmVyLnBhcnNlSW50KHAsIDEwKSB8fCAwKTtcbiAgY29uc3QgW3gsIHldID0gW3BhcnRzKGEpLCBwYXJ0cyhiKV07XG4gIHJldHVybiB4WzBdIC0geVswXSB8fCB4WzFdIC0geVsxXSB8fCB4WzJdIC0geVsyXTtcbn1cblxuLyoqIFZlcnNpb24gb2YgdGhlIGVuZ2luZSBjdXJyZW50bHkgaW5zdGFsbGVkIGF0IGByb290YCwgaWYgYW55LiAqL1xuZnVuY3Rpb24gaW5zdGFsbGVkRW5naW5lVmVyc2lvbihyb290OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlc1wiLCBcIkBkYngtdG9vbHNcIiwgXCJwcm9qZW5cIiwgXCJwYWNrYWdlLmpzb25cIik7XG4gICAgY29uc3QgdmVyc2lvbiA9IGpzb24ucGFyc2VSZWNvcmQocmVhZEZpbGVTeW5jKG1hbmlmZXN0LCBcInV0ZjhcIikpPy52ZXJzaW9uO1xuICAgIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gXCJzdHJpbmdcIiA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBVcGdyYWRlIGFuIGVzdGFibGlzaGVkIHdvcmtzcGFjZSB3aG9zZSBpbnN0YWxsZWQgZW5naW5lIHByZWRhdGVzIHRoaXMgQ0xJLlxuICpcbiAqIEJvb3RzdHJhcHBpbmcgcGlucyB0aGUgZW5naW5lIG9uY2UsIHNvIHdpdGhvdXQgdGhpcyBhIHdvcmtzcGFjZSBjcmVhdGVkIG1vbnRocyBhZ29cbiAqIHdvdWxkIGtlZXAgcmVzb2x2aW5nIGl0cyBvcmlnaW5hbCBlbmdpbmUgbm8gbWF0dGVyIGhvdyBjdXJyZW50IHRoZSBDTEkgaW52b2tpbmcgaXRcbiAqIGlzLCBhbmQgd291bGQgZmFpbCBpbnNpZGUgVEhBVCBlbmdpbmUncyBjb2RlIChgc3luYyAtLXdhdGNoYCBkeWluZyBvbiBhXG4gKiBgY29uY3VycmVudGx5YCBpdCBuZXZlciBkZWNsYXJlZCkuIFRoZSB0d28gYXJlIHJlbGVhc2VkIGluIGxvY2tzdGVwLCBzbyB0aGlzIENMSSdzXG4gKiB2ZXJzaW9uIGlzIGV4YWN0bHkgdGhlIGVuZ2luZSBpdCBleHBlY3RzLlxuICpcbiAqIE9ubHkgZXZlciBtb3ZlcyBGT1JXQVJEOiBhbiBlbmdpbmUgYXQgb3IgYWhlYWQgb2YgdGhpcyBDTEkgaXMgbGVmdCBhbG9uZSwgc29cbiAqIGFuIG9sZGVyIENMSSBjYW5ub3QgZG93bmdyYWRlIGEgd29ya3NwYWNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW5naW5lQ3VycmVudChyb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgZXhwZWN0ZWQgPSBvd25WZXJzaW9uKCk7XG4gIGlmICghZXhwZWN0ZWQpIHJldHVybjtcbiAgY29uc3QgaW5zdGFsbGVkID0gaW5zdGFsbGVkRW5naW5lVmVyc2lvbihyb290KTtcbiAgaWYgKGluc3RhbGxlZCAmJiBjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkLCBleHBlY3RlZCkgPj0gMCkgcmV0dXJuO1xuICBydW5CdW4oW1wiYWRkXCIsIFwiLURcIiwgZGVmYXVsdFByb2plblNwZWNpZmllcigpXSwgcm9vdCk7XG59XG5cbi8vIFJlYWNoIHRoZSBjbGFzcyB0aHJvdWdoIGl0cyBtb2R1bGUgTkFNRVNQQUNFLiBDdXJyZW50IGVuZ2luZXMgYWxzbyBob2lzdCBpdFxuLy8gZmxhdCwgYnV0IGV2ZXJ5IGVuZ2luZSBldmVyIHB1Ymxpc2hlZCBleHBvcnRzIHRoZSBuYW1lc3BhY2UsIGFuZCB0aGlzIHRlbXBsYXRlXG4vLyBpcyByZXNvbHZlZCBhZ2FpbnN0IGBAbGF0ZXN0YCAtIGEgZmxhdCBpbXBvcnQgZGllcyBvbiBhbiBvbGRlciBvbmUgd2l0aFxuLy8gXCJkb2VzIG5vdCBwcm92aWRlIGFuIGV4cG9ydCBuYW1lZCAnREJYVG9vbHNOb2RlUHJvamVjdCdcIi5cbmNvbnN0IFBST0pFTlJDX1RFTVBMQVRFID0gYGltcG9ydCB7IHByb2plY3QgfSBmcm9tIFwiQGRieC10b29scy9wcm9qZW5cIjtcblxuY29uc3Qgcm9vdFByb2plY3QgPSBuZXcgcHJvamVjdC5EQlhUb29sc05vZGVQcm9qZWN0KCk7XG5yb290UHJvamVjdC5zeW50aCgpO1xuYDtcblxuLyoqXG4gKiBUdXJuIGEgZm9sZGVyIGludG8gYSBmdW5jdGlvbmluZyBkYngtdG9vbHMgd29ya3NwYWNlOiBgYnVuIGluaXRgLCBzZWVkIHRoZVxuICogYHBhY2thZ2UuanNvbmAgd29ya3NwYWNlIGZpZWxkcyAoYnVuIHJlYWRzIGB3b3Jrc3BhY2VzYC9gdHJ1c3RlZERlcGVuZGVuY2llc2BcbiAqIGZyb20gdGhlIG1hbmlmZXN0KSwgYWRkIGBwcm9qZW5gL2B0eXBlc2NyaXB0YCArIHRoZSBlbmdpbmUgcGFja2FnZSwgd3JpdGUgYVxuICogbWluaW1hbCBgLnByb2plbnJjLnRzYCwgc3ludGggb25jZSAod2l0aCBgUFJPSkVOX0RJU0FCTEVfUE9TVGApLCB0aGVuIGluc3RhbGwuXG4gKiBEb2VzIG5vdCBydW4gYmFycmVscyAtIHJ1biBgYnVuIHJ1biBiYXJyZWxzYCBvciBhIGZ1bGwgcHJvamVuIHN5bnRoIHBvc3QtaW5zdGFsbFxuICogdG8gZ2VuZXJhdGUgcGFja2FnZSBiYXJyZWxzLlxuICpcbiAqIEV2ZXJ5IHN0ZXAgaXMgaWRlbXBvdGVudCBhbmQgc2VsZi1ndWFyZGVkLCBzbyB0aGlzIGlzIHNhZmUgdG8gcnVuIGFnYWluc3QgYVxuICogZm9sZGVyIHRoYXQgQUxSRUFEWSBoYXMgYSBoYW5kLWF1dGhvcmVkIGAucHJvamVucmMudHNgIChhbmQgZXZlbiBhIGNvbW1pdHRlZFxuICogYHBhY2thZ2UuanNvbmApIGJ1dCBpcyBtaXNzaW5nIHRoZSBpbnN0YWxsZWQgdG9vbGNoYWluIC0gZS5nLiBhIGZyZXNobHkgY29waWVkXG4gKiBwcm9qZWN0IHdob3NlIGdlbmVyYXRlZCBmaWxlcyAoaW5jbHVkaW5nIG1hbmlmZXN0cykgYXJlIGdpdGlnbm9yZWQuIEluIHRoYXRcbiAqIGNhc2UgYGJ1biBpbml0YCBhbmQgdGhlIGAucHJvamVucmMudHNgIHNjYWZmb2xkIGFyZSBza2lwcGVkLCBidXQgdGhlIGVuZ2luZSArXG4gKiBwcm9qZW4gYXJlIChyZSlpbnN0YWxsZWQgc28gdGhlIHN1YnNlcXVlbnQgc3ludGggY2FuIHJlZ2VuZXJhdGUgZXZlcnl0aGluZy5cbiAqIFNlZSB7QGxpbmsgc2VlZFRvb2xjaGFpbn0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib290c3RyYXBXb3Jrc3BhY2UoXG4gIHJvb3Q6IHN0cmluZyxcbiAgcHJvamVuU3BlY2lmaWVyOiBzdHJpbmcgPSBkZWZhdWx0UHJvamVuU3BlY2lmaWVyKCksXG4pOiB2b2lkIHtcbiAgaW50cm8oYEJvb3RzdHJhcHBpbmcgZGJ4LXRvb2xzIHdvcmtzcGFjZSBpbiAke3Jvb3RMYWJlbChyb290KX1gKTtcblxuICBzZWVkVG9vbGNoYWluKHJvb3QsIHByb2plblNwZWNpZmllcik7XG5cbiAgY29uc3QgcHJvamVucmMgPSBqb2luKHJvb3QsIFwiLnByb2plbnJjLnRzXCIpO1xuICBpZiAoIWV4aXN0c1N5bmMocHJvamVucmMpKSB7XG4gICAgd3JpdGVGaWxlU3luYyhwcm9qZW5yYywgUFJPSkVOUkNfVEVNUExBVEUpO1xuICB9XG5cbiAgcnVuSW5pdGlhbFN5bnRoKHJvb3QpO1xuXG4gIHJ1bkJ1bihbXCJpbnN0YWxsXCJdLCByb290KTtcbiAgb3V0cm8oXCJXb3Jrc3BhY2UgcmVhZHkgLSByZS1ydW4gZGJ4LXRvb2xzIG9yIGFkZCBwYWNrYWdlcyB1bmRlciBwYWNrYWdlcy9cIik7XG59XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgdG9vbGNoYWluIGEgc3ludGggbmVlZHMgKGBwcm9qZW5gLCBgdHlwZXNjcmlwdGAsIGFuZCB0aGUgZGJ4LXRvb2xzXG4gKiBlbmdpbmUpLCBzZWVkaW5nIGEgYHBhY2thZ2UuanNvbmAgZmlyc3Qgd2hlbiBhYnNlbnQuIGJ1biByZWFkcyBpdHMgd29ya3NwYWNlXG4gKiBjb25maWcgKGB3b3Jrc3BhY2VzYC9gdHJ1c3RlZERlcGVuZGVuY2llc2ApIGZyb20gdGhlIG1hbmlmZXN0LCBzbyB0aGVyZSBpcyBub1xuICogc2VwYXJhdGUgd29ya3NwYWNlIGZpbGUgdG8gc2VlZCAtIHRoZSBlbmdpbmUgd3JpdGVzIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBhdFxuICogc3ludGggZm9yIHRoZSBEYXRhYnJpY2tzIEFwcHMgcGxhdGZvcm0uIElkZW1wb3RlbnQ6IHJ1biBpdCB3aGVuZXZlciB0aGUgZW5naW5lXG4gKiBpcyBtaXNzaW5nLCBzbyBhIGNvcGllZCBwcm9qZWN0IHdpdGggYSBgLnByb2plbnJjLnRzYCBidXQgbm9cbiAqIGBub2RlX21vZHVsZXNgL21hbmlmZXN0IGNhbiBiZSBicm91Z2h0IHVwIHRvIGEgc3ludGgtcmVhZHkgc3RhdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWVkVG9vbGNoYWluKFxuICByb290OiBzdHJpbmcsXG4gIHByb2plblNwZWNpZmllcjogc3RyaW5nID0gZGVmYXVsdFByb2plblNwZWNpZmllcigpLFxuKTogdm9pZCB7XG4gIGNvbnN0IG1hbmlmZXN0UGF0aCA9IGpvaW4ocm9vdCwgXCJwYWNrYWdlLmpzb25cIik7XG4gIGlmICghZXhpc3RzU3luYyhtYW5pZmVzdFBhdGgpKSB7XG4gICAgcnVuQnVuKFtcImluaXRcIiwgXCIteVwiXSwgcm9vdCk7XG4gICAgbm9ybWFsaXplU2VlZE1hbmlmZXN0KG1hbmlmZXN0UGF0aCk7XG4gIH1cblxuICBzZWVkUmVnaXN0cnkocm9vdCk7XG5cbiAgY29uc3Qga2VybmVsQXJjaCA9IGV4ZWMuc3Bhd25TeW5jKFwidW5hbWVcIiwgW1wiLW1cIl0sIHtcbiAgICBzdGRpbjogXCJpZ25vcmVcIixcbiAgICBzdGRvdXQ6IFwiY2FwdHVyZVwiLFxuICAgIHN0ZGVycjogXCJpZ25vcmVcIixcbiAgfSkuc3Rkb3V0O1xuICBsb2dnZXIuaW5mbyhcInNlZWRpbmcgdG9vbGNoYWluXCIsIHtcbiAgICBub2RlOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgYnVuOiBwcm9jZXNzLnZlcnNpb25zLmJ1bixcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICBhcmNoOiBwcm9jZXNzLmFyY2gsXG4gICAga2VybmVsQXJjaDoga2VybmVsQXJjaCB8fCBcInVua25vd25cIixcbiAgICBlbmdpbmU6IHByb2plblNwZWNpZmllcixcbiAgfSk7XG4gIHJ1bkJ1bihbXCJhZGRcIiwgXCItRFwiLCBcInByb2plblwiLCBcInR5cGVzY3JpcHRAXjUuOS4zXCIsIFwiQHR5cGVzL2J1blwiLCBwcm9qZW5TcGVjaWZpZXJdLCByb290KTtcbn1cblxuLyoqXG4gKiBQaW4gYSBub24tZGVmYXVsdCByZWdpc3RyeSBpbnRvIHRoZSBuZXcgcm9vdCdzIGAubnBtcmNgLlxuICpcbiAqIFRoZSBDTEkgYWxyZWFkeSBmb3JjZXMgYC0tcmVnaXN0cnlgIG9udG8gdGhlIGJ1biBpbnZvY2F0aW9ucyBpdCBtYWtlcyBpdHNlbGYsXG4gKiBidXQgYSBib290c3RyYXBwZWQgd29ya3NwYWNlIG91dGxpdmVzIHRoaXMgcHJvY2VzczogZXZlcnkgbGF0ZXIgYGJ1biBpbnN0YWxsYFxuICogdGhlIGRldmVsb3BlciAob3IgcHJvamVuJ3MgcG9zdC1zeW50aCBzdGVwKSBydW5zIGlzIG9uIGl0cyBvd24uIGJ1biBpZ25vcmVzXG4gKiBgbnBtX2NvbmZpZ19yZWdpc3RyeWAgZnJvbSB0aGUgZW52aXJvbm1lbnQsIHNvIHdpdGhvdXQgYSBmaWxlIG9uIGRpc2sgdGhvc2VcbiAqIHJ1bnMgcmV2ZXJ0IHRvIGBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9gIC0gd2hpY2ggaXMgYSBoYXJkIGZhaWx1cmUgd2hlcmVcbiAqIHRoZSBjdXN0b20gcmVnaXN0cnkgd2FzIHRoZSBvbmx5IHJlYWNoYWJsZSBvbmUuXG4gKlxuICogT25seSB3cml0ZXMgZm9yIGFuIGFjdHVhbCBvdmVycmlkZSwgbmV2ZXIgY3JlYXRlcyBhIGZpbGUganVzdCB0byBuYW1lIG5wbWpzLFxuICogYW5kIG5ldmVyIG92ZXJ3cml0ZXMgYW4gZXhpc3RpbmcgYC5ucG1yY2AgKHRoZSBkZXZlbG9wZXIncyBvd24gd2lucykuXG4gKi9cbmZ1bmN0aW9uIHNlZWRSZWdpc3RyeShyb290OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcmVnaXN0cnkgPSBwcm9qZWN0VXRpbHNcbiAgICAubnBtUmVnaXN0cnkobnVsbCwgeyBvdmVycmlkZU9ubHk6IHRydWUsIGVudlZhcnM6IHRydWUgfSlcbiAgICA/LnRvU3RyaW5nKCk7XG4gIGlmICghcmVnaXN0cnkpIHJldHVybjtcbiAgY29uc3QgbnBtcmMgPSBqb2luKHJvb3QsIFwiLm5wbXJjXCIpO1xuICBpZiAoZXhpc3RzU3luYyhucG1yYykpIHJldHVybjtcbiAgd3JpdGVGaWxlU3luYyhucG1yYywgYHJlZ2lzdHJ5PSR7cmVnaXN0cnl9XFxuYCk7XG59XG5cbi8qKlxuICogTWFrZSB3aGF0IGBidW4gaW5pdGAgcHJvZHVjZWQgc2FmZSB0byBzeW50aCBhZ2FpbnN0OiBmb3JjZSBgdHlwZTogXCJtb2R1bGVcImBcbiAqIChidW4gcnVucyBgLnByb2plbnJjLnRzYCBmaW5lIGVpdGhlciB3YXksIGJ1dCBwcm9qZW4ncyBFU00gc291cmNlcyBhbmQgdGhlXG4gKiBlbWl0dGVkIGNvbmZpZyBhc3N1bWUgbW9kdWxlIHR5cGUpIGFuZCBkcm9wIGFueSBgcGFja2FnZU1hbmFnZXJgL2BkZXZFbmdpbmVzYFxuICogZmllbGQgdGhhdCB3b3VsZCBwaW4gYSBkaWZmZXJlbnQgbWFuYWdlci4gcHJvamVuIHJlZ2VuZXJhdGVzIHRoZSB3aG9sZSBtYW5pZmVzdFxuICogYXQgc3ludGgsIHNvIHRoaXMgb25seSBoYXMgdG8gaG9sZCB0aGUgc2VlZCB0b2dldGhlciBsb25nIGVub3VnaCB0byBnZXQgdGhlcmUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlZWRNYW5pZmVzdChtYW5pZmVzdFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0ganNvbi5wYXJzZVJlY29yZChyZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCBcInV0ZjhcIikpO1xuICAgIGlmICghbWFuaWZlc3QpIHJldHVybjtcbiAgICBkZWxldGUgbWFuaWZlc3QuZGV2RW5naW5lcztcbiAgICBkZWxldGUgbWFuaWZlc3QucGFja2FnZU1hbmFnZXI7XG4gICAgbWFuaWZlc3QudHlwZSA9IFwibW9kdWxlXCI7XG4gICAgd3JpdGVGaWxlU3luYyhtYW5pZmVzdFBhdGgsIGAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKX1cXG5gKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQSBtYWxmb3JtZWQvYWJzZW50IG1hbmlmZXN0IGhlcmUganVzdCBtZWFucyB0aGUgbGF0ZXIgYGJ1biBhZGRgIHJlY3JlYXRlcyBpdC5cbiAgfVxufVxuXG4vKipcbiAqIFJ1biB0aGUgaW5pdGlhbCBzeW50aCBieSBleGVjdXRpbmcgYC5wcm9qZW5yYy50c2AgZGlyZWN0bHkgd2l0aCBidW4gKHdpdGhcbiAqIGBQUk9KRU5fRElTQUJMRV9QT1NUYCBzZXQpLCBOT1QgYHByb2plbiA8dGFzaz5gLiBVc2UgcmlnaHQgYWZ0ZXIgc2VlZGluZyBhXG4gKiBmcmVzaCB3b3Jrc3BhY2U6IHRoZSBwcm9qZW4gVEFTS1MgKGBzeW5jYCwgYGJhcnJlbHNgLCAuLi4pIG9ubHkgZXhpc3Qgb25jZVxuICogYC5wcm9qZW5yYy50c2AgaGFzIHJ1biBvbmNlLCBzbyBgcHJvamVuIHN5bmNgIGNhbid0IGJlIHRoZSBib290c3RyYXBwaW5nIHN0ZXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Jbml0aWFsU3ludGgocm9vdDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5wcmVmaXhdID0gcmVzb2x2ZUJ1bkFyZ3YoKTtcbiAgLy8gYnVuIHJ1bnMgdGhlIGAudHNgIGRpcmVjdGx5LiBUaGUgcmVnaXN0cnkgcmVhY2hlcyBhbnl0aGluZyBuZXN0ZWQgdGhyb3VnaFxuICAvLyBgY2hpbGRFbnZgIGFuZCB0aGUgc2VlZGVkIGAubnBtcmNgLlxuICBleGVjLnNwYXduU3luYyhjb21tYW5kLCBbLi4ucHJlZml4LCBcIi5wcm9qZW5yYy50c1wiXSwge1xuICAgIGN3ZDogcm9vdCxcbiAgICBlbnY6IGNoaWxkRW52KHsgUFJPSkVOX0RJU0FCTEVfUE9TVDogXCJ0cnVlXCIgfSksXG4gICAgY2hlY2s6IHRydWUsXG4gIH0pO1xufVxuIl19
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUVqRCxpRkFBaUY7QUFDakYsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7QUFFckMsc0ZBQXNGO0FBQ3RGLE1BQU0seUJBQXlCLEdBQUcsMEJBQTBCLENBQUM7QUFFN0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxzQkFBc0I7SUFDN0IsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLENBQUM7SUFDN0IsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUM7QUFDL0UsQ0FBQztBQUVELG9GQUFvRjtBQUNwRixTQUFTLFVBQVU7SUFDakIsSUFBSSxDQUFDO1FBQ0gsNEVBQTRFO1FBQzVFLHdEQUF3RDtRQUN4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QUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLENBQUM7UUFDOUMsS0FBSyxFQUFFLElBQUk7S0FDWixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCb290c3RyYXAgYSBicmFuZC1uZXcgZm9sZGVyIGludG8gYSB3b3JraW5nIGRieC10b29scyB3b3Jrc3BhY2UgYmVmb3JlIHByb2plbiBydW5zLlxuICpcbiAqIEBtb2R1bGVcbiAqL1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBpbnRybywgb3V0cm8gfSBmcm9tIFwiQGNsYWNrL3Byb21wdHNcIjtcbmltcG9ydCB7IGV4ZWMgfSBmcm9tIFwiQGRieC10b29scy9jb3JlXCI7XG5pbXBvcnQgeyBqc29uLCBsb2cgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgY2hpbGRFbnYsIHJlc29sdmVCdW5Bcmd2LCBydW5CdW4gfSBmcm9tIFwiLi9idW4udHNcIjtcbmltcG9ydCB7IHJvb3RMYWJlbCB9IGZyb20gXCIuL3Jvb3QudHNcIjtcblxuY29uc3QgbG9nZ2VyID0gbG9nLmxvZ2dlcihcImRieC10b29sczpib290c3RyYXBcIik7XG5cbi8qKiBQdWJsaXNoZWQgcGFja2FnZSBuYW1lIHVzZWQgZm9yIE5vZGUncyBzZWxmLXJlZmVyZW5jZSBtYW5pZmVzdCByZXNvbHV0aW9uLiAqL1xuY29uc3QgQ0xJX1BBQ0tBR0UgPSBcIkBkYngtdG9vbHMvY2xpXCI7XG5cbi8qKiBGYWxsYmFjayB3aGVuIHRoaXMgQ0xJJ3Mgb3duIHZlcnNpb24gaXNuJ3QgYSByZWFsIHJlbGVhc2UgKGFuIGluLXJlcG8gYDAuMC4wYCkuICovXG5jb25zdCBGQUxMQkFDS19QUk9KRU5fU1BFQ0lGSUVSID0gXCJAZGJ4LXRvb2xzL3Byb2plbkBsYXRlc3RcIjtcblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBlbmdpbmUgYXQgVEhJUyBDTEkncyBvd24gdmVyc2lvbi4gVGhlIHR3byBhcmUgcmVsZWFzZWQgdG9nZXRoZXIgYnlcbiAqIHRoZSByb290IGBidW1wYCwgc28gdGhlIG1hdGNoaW5nIGVuZ2luZSBhbHdheXMgZXhpc3RzIG9uIHRoZSByZWdpc3RyeS5cbiAqXG4gKiBOb3QgYEBsYXRlc3RgLCBhbmQgbm90IGEgYmFyZSBgQGRieC10b29scy9wcm9qZW5gLiBBIGJhcmUgc3BlY2lmaWVyIGNhbiBsYW5kIG9uXG4gKiBhIHN0cmF5IGAwLjAuMGAsIHdob3NlIGBeMC4wLjBgIGNhcmV0IHRoZW4gcmVhY2hlcyBubyByZWFsIHJlbGVhc2UuIEFuIGV4cGxpY2l0XG4gKiByYW5nZSBwaW5uZWQgdG8gdGhpcyBDTEkncyBvd24gdmVyc2lvbiBhZG1pdHMgb25seSB0aGUgbWF0Y2hpbmcgZW5naW5lLCBzbyB0aGVcbiAqIENMSSBhbmQgdGhlIGVuZ2luZSBpdCBkcml2ZXMgbmV2ZXIgZHJpZnQgYWNyb3NzIGEgcmVsZWFzZSAodGhleSBhcmUgY3V0XG4gKiB0b2dldGhlciBieSB0aGUgcm9vdCBgYnVtcGApLlxuICovXG5mdW5jdGlvbiBkZWZhdWx0UHJvamVuU3BlY2lmaWVyKCk6IHN0cmluZyB7XG4gIGNvbnN0IHZlcnNpb24gPSBvd25WZXJzaW9uKCk7XG4gIHJldHVybiB2ZXJzaW9uID8gYEBkYngtdG9vbHMvcHJvamVuQF4ke3ZlcnNpb259YCA6IEZBTExCQUNLX1BST0pFTl9TUEVDSUZJRVI7XG59XG5cbi8qKiBUaGlzIENMSSdzIG93biByZWxlYXNlZCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBmb3IgYW4gaW4tcmVwbyBgMC4wLjBgIGJ1aWxkLiAqL1xuZnVuY3Rpb24gb3duVmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIC8vIFJlc29sdmUgdGhyb3VnaCB0aGUgcGFja2FnZSdzIGV4cG9ydGVkIGAuL3BhY2thZ2UuanNvbmAsIHdoaWNoIHdvcmtzIGZyb21cbiAgICAvLyBib3RoIHNvdXJjZSAoYHNyYy9ib290c3RyYXAudHNgKSBhbmQgcHVibGlzaGVkIG91dHB1dFxuICAgIC8vIChgbGliL3NyYy9ib290c3RyYXAuanNgKS4gQSByZWxhdGl2ZSBVUkwgaXMgb25lIGxldmVsIGZyb20gdGhlIG1hbmlmZXN0XG4gICAgLy8gaW4gc291cmNlIGJ1dCB0d28gbGV2ZWxzIGF3YXkgYWZ0ZXIgY29tcGlsYXRpb24gYW5kIHNpbGVudGx5IGZlbGwgYmFjayB0b1xuICAgIC8vIGBAbGF0ZXN0YCBpbiBldmVyeSBpbnN0YWxsZWQgQ0xJLlxuICAgIGNvbnN0IG1hbmlmZXN0UGF0aCA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKS5yZXNvbHZlKGAke0NMSV9QQUNLQUdFfS9wYWNrYWdlLmpzb25gKTtcbiAgICBjb25zdCB2ZXJzaW9uID0ganNvbi5wYXJzZVJlY29yZChyZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCBcInV0ZjhcIikpPy52ZXJzaW9uO1xuICAgIHJldHVybiB0eXBlb2YgdmVyc2lvbiA9PT0gXCJzdHJpbmdcIiAmJiB2ZXJzaW9uICE9PSBcIjAuMC4wXCIgPyB2ZXJzaW9uIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKiBDb21wYXJlIGB4LnkuemAgdHJpcGxlczsgcmV0dXJucyA8MCwgMCwgb3IgPjAuIE1pc3NpbmcgcGFydHMgY291bnQgYXMgMC4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVWZXJzaW9ucyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnRzID0gKHY6IHN0cmluZykgPT4gdi5zcGxpdChcIi5cIikubWFwKChwKSA9PiBOdW1iZXIucGFyc2VJbnQocCwgMTApIHx8IDApO1xuICBjb25zdCBbeCwgeV0gPSBbcGFydHMoYSksIHBhcnRzKGIpXTtcbiAgcmV0dXJuIHhbMF0gLSB5WzBdIHx8IHhbMV0gLSB5WzFdIHx8IHhbMl0gLSB5WzJdO1xufVxuXG4vKiogVmVyc2lvbiBvZiB0aGUgZW5naW5lIGN1cnJlbnRseSBpbnN0YWxsZWQgYXQgYHJvb3RgLCBpZiBhbnkuICovXG5mdW5jdGlvbiBpbnN0YWxsZWRFbmdpbmVWZXJzaW9uKHJvb3Q6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgbWFuaWZlc3QgPSBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzXCIsIFwiQGRieC10b29sc1wiLCBcInByb2plblwiLCBcInBhY2thZ2UuanNvblwiKTtcbiAgICBjb25zdCB2ZXJzaW9uID0ganNvbi5wYXJzZVJlY29yZChyZWFkRmlsZVN5bmMobWFuaWZlc3QsIFwidXRmOFwiKSk/LnZlcnNpb247XG4gICAgcmV0dXJuIHR5cGVvZiB2ZXJzaW9uID09PSBcInN0cmluZ1wiID8gdmVyc2lvbiA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFVwZ3JhZGUgYW4gZXN0YWJsaXNoZWQgd29ya3NwYWNlIHdob3NlIGluc3RhbGxlZCBlbmdpbmUgcHJlZGF0ZXMgdGhpcyBDTEkuXG4gKlxuICogQm9vdHN0cmFwcGluZyBwaW5zIHRoZSBlbmdpbmUgb25jZSwgc28gd2l0aG91dCB0aGlzIGEgd29ya3NwYWNlIGNyZWF0ZWQgbW9udGhzIGFnb1xuICogd291bGQga2VlcCByZXNvbHZpbmcgaXRzIG9yaWdpbmFsIGVuZ2luZSBubyBtYXR0ZXIgaG93IGN1cnJlbnQgdGhlIENMSSBpbnZva2luZyBpdFxuICogaXMsIGFuZCB3b3VsZCBmYWlsIGluc2lkZSBUSEFUIGVuZ2luZSdzIGNvZGUgKGBzeW5jIC0td2F0Y2hgIGR5aW5nIG9uIGFcbiAqIGBjb25jdXJyZW50bHlgIGl0IG5ldmVyIGRlY2xhcmVkKS4gVGhlIHR3byBhcmUgcmVsZWFzZWQgaW4gbG9ja3N0ZXAsIHNvIHRoaXMgQ0xJJ3NcbiAqIHZlcnNpb24gaXMgZXhhY3RseSB0aGUgZW5naW5lIGl0IGV4cGVjdHMuXG4gKlxuICogT25seSBldmVyIG1vdmVzIEZPUldBUkQ6IGFuIGVuZ2luZSBhdCBvciBhaGVhZCBvZiB0aGlzIENMSSBpcyBsZWZ0IGFsb25lLCBzb1xuICogYW4gb2xkZXIgQ0xJIGNhbm5vdCBkb3duZ3JhZGUgYSB3b3Jrc3BhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVFbmdpbmVDdXJyZW50KHJvb3Q6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBleHBlY3RlZCA9IG93blZlcnNpb24oKTtcbiAgaWYgKCFleHBlY3RlZCkgcmV0dXJuO1xuICBjb25zdCBpbnN0YWxsZWQgPSBpbnN0YWxsZWRFbmdpbmVWZXJzaW9uKHJvb3QpO1xuICBpZiAoaW5zdGFsbGVkICYmIGNvbXBhcmVWZXJzaW9ucyhpbnN0YWxsZWQsIGV4cGVjdGVkKSA+PSAwKSByZXR1cm47XG4gIHJ1bkJ1bihbXCJhZGRcIiwgXCItRFwiLCBkZWZhdWx0UHJvamVuU3BlY2lmaWVyKCldLCByb290KTtcbn1cblxuLy8gUmVhY2ggdGhlIGNsYXNzIHRocm91Z2ggaXRzIG1vZHVsZSBOQU1FU1BBQ0UuIEN1cnJlbnQgZW5naW5lcyBhbHNvIGhvaXN0IGl0XG4vLyBmbGF0LCBidXQgZXZlcnkgZW5naW5lIGV2ZXIgcHVibGlzaGVkIGV4cG9ydHMgdGhlIG5hbWVzcGFjZSwgYW5kIHRoaXMgdGVtcGxhdGVcbi8vIGlzIHJlc29sdmVkIGFnYWluc3QgYEBsYXRlc3RgIC0gYSBmbGF0IGltcG9ydCBkaWVzIG9uIGFuIG9sZGVyIG9uZSB3aXRoXG4vLyBcImRvZXMgbm90IHByb3ZpZGUgYW4gZXhwb3J0IG5hbWVkICdEQlhUb29sc05vZGVQcm9qZWN0J1wiLlxuY29uc3QgUFJPSkVOUkNfVEVNUExBVEUgPSBgaW1wb3J0IHsgcHJvamVjdCB9IGZyb20gXCJAZGJ4LXRvb2xzL3Byb2plblwiO1xuXG5jb25zdCByb290UHJvamVjdCA9IG5ldyBwcm9qZWN0LkRCWFRvb2xzTm9kZVByb2plY3QoKTtcbnJvb3RQcm9qZWN0LnN5bnRoKCk7XG5gO1xuXG4vKipcbiAqIFR1cm4gYSBmb2xkZXIgaW50byBhIGZ1bmN0aW9uaW5nIGRieC10b29scyB3b3Jrc3BhY2U6IGBidW4gaW5pdGAsIHNlZWQgdGhlXG4gKiBgcGFja2FnZS5qc29uYCB3b3Jrc3BhY2UgZmllbGRzIChidW4gcmVhZHMgYHdvcmtzcGFjZXNgL2B0cnVzdGVkRGVwZW5kZW5jaWVzYFxuICogZnJvbSB0aGUgbWFuaWZlc3QpLCBhZGQgYHByb2plbmAvYHR5cGVzY3JpcHRgICsgdGhlIGVuZ2luZSBwYWNrYWdlLCB3cml0ZSBhXG4gKiBtaW5pbWFsIGAucHJvamVucmMudHNgLCBzeW50aCBvbmNlICh3aXRoIGBQUk9KRU5fRElTQUJMRV9QT1NUYCksIHRoZW4gaW5zdGFsbC5cbiAqIERvZXMgbm90IHJ1biBiYXJyZWxzIC0gcnVuIGBidW4gcnVuIGJhcnJlbHNgIG9yIGEgZnVsbCBwcm9qZW4gc3ludGggcG9zdC1pbnN0YWxsXG4gKiB0byBnZW5lcmF0ZSBwYWNrYWdlIGJhcnJlbHMuXG4gKlxuICogRXZlcnkgc3RlcCBpcyBpZGVtcG90ZW50IGFuZCBzZWxmLWd1YXJkZWQsIHNvIHRoaXMgaXMgc2FmZSB0byBydW4gYWdhaW5zdCBhXG4gKiBmb2xkZXIgdGhhdCBBTFJFQURZIGhhcyBhIGhhbmQtYXV0aG9yZWQgYC5wcm9qZW5yYy50c2AgKGFuZCBldmVuIGEgY29tbWl0dGVkXG4gKiBgcGFja2FnZS5qc29uYCkgYnV0IGlzIG1pc3NpbmcgdGhlIGluc3RhbGxlZCB0b29sY2hhaW4gLSBlLmcuIGEgZnJlc2hseSBjb3BpZWRcbiAqIHByb2plY3Qgd2hvc2UgZ2VuZXJhdGVkIGZpbGVzIChpbmNsdWRpbmcgbWFuaWZlc3RzKSBhcmUgZ2l0aWdub3JlZC4gSW4gdGhhdFxuICogY2FzZSBgYnVuIGluaXRgIGFuZCB0aGUgYC5wcm9qZW5yYy50c2Agc2NhZmZvbGQgYXJlIHNraXBwZWQsIGJ1dCB0aGUgZW5naW5lICtcbiAqIHByb2plbiBhcmUgKHJlKWluc3RhbGxlZCBzbyB0aGUgc3Vic2VxdWVudCBzeW50aCBjYW4gcmVnZW5lcmF0ZSBldmVyeXRoaW5nLlxuICogU2VlIHtAbGluayBzZWVkVG9vbGNoYWlufS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcFdvcmtzcGFjZShcbiAgcm9vdDogc3RyaW5nLFxuICBwcm9qZW5TcGVjaWZpZXI6IHN0cmluZyA9IGRlZmF1bHRQcm9qZW5TcGVjaWZpZXIoKSxcbik6IHZvaWQge1xuICBpbnRybyhgQm9vdHN0cmFwcGluZyBkYngtdG9vbHMgd29ya3NwYWNlIGluICR7cm9vdExhYmVsKHJvb3QpfWApO1xuXG4gIHNlZWRUb29sY2hhaW4ocm9vdCwgcHJvamVuU3BlY2lmaWVyKTtcblxuICBjb25zdCBwcm9qZW5yYyA9IGpvaW4ocm9vdCwgXCIucHJvamVucmMudHNcIik7XG4gIGlmICghZXhpc3RzU3luYyhwcm9qZW5yYykpIHtcbiAgICB3cml0ZUZpbGVTeW5jKHByb2plbnJjLCBQUk9KRU5SQ19URU1QTEFURSk7XG4gIH1cblxuICBydW5Jbml0aWFsU3ludGgocm9vdCk7XG5cbiAgcnVuQnVuKFtcImluc3RhbGxcIl0sIHJvb3QpO1xuICBvdXRybyhcIldvcmtzcGFjZSByZWFkeSAtIHJlLXJ1biBkYngtdG9vbHMgb3IgYWRkIHBhY2thZ2VzIHVuZGVyIHBhY2thZ2VzL1wiKTtcbn1cblxuLyoqXG4gKiBJbnN0YWxsIHRoZSB0b29sY2hhaW4gYSBzeW50aCBuZWVkcyAoYHByb2plbmAsIGB0eXBlc2NyaXB0YCwgYW5kIHRoZSBkYngtdG9vbHNcbiAqIGVuZ2luZSksIHNlZWRpbmcgYSBgcGFja2FnZS5qc29uYCBmaXJzdCB3aGVuIGFic2VudC4gYnVuIHJlYWRzIGl0cyB3b3Jrc3BhY2VcbiAqIGNvbmZpZyAoYHdvcmtzcGFjZXNgL2B0cnVzdGVkRGVwZW5kZW5jaWVzYCkgZnJvbSB0aGUgbWFuaWZlc3QsIHNvIHRoZXJlIGlzIG5vXG4gKiBzZXBhcmF0ZSB3b3Jrc3BhY2UgZmlsZSB0byBzZWVkIC0gdGhlIGVuZ2luZSB3cml0ZXMgYHBucG0td29ya3NwYWNlLnlhbWxgIGF0XG4gKiBzeW50aCBmb3IgdGhlIERhdGFicmlja3MgQXBwcyBwbGF0Zm9ybS4gSWRlbXBvdGVudDogcnVuIGl0IHdoZW5ldmVyIHRoZSBlbmdpbmVcbiAqIGlzIG1pc3NpbmcsIHNvIGEgY29waWVkIHByb2plY3Qgd2l0aCBhIGAucHJvamVucmMudHNgIGJ1dCBub1xuICogYG5vZGVfbW9kdWxlc2AvbWFuaWZlc3QgY2FuIGJlIGJyb3VnaHQgdXAgdG8gYSBzeW50aC1yZWFkeSBzdGF0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlZWRUb29sY2hhaW4oXG4gIHJvb3Q6IHN0cmluZyxcbiAgcHJvamVuU3BlY2lmaWVyOiBzdHJpbmcgPSBkZWZhdWx0UHJvamVuU3BlY2lmaWVyKCksXG4pOiB2b2lkIHtcbiAgY29uc3QgbWFuaWZlc3RQYXRoID0gam9pbihyb290LCBcInBhY2thZ2UuanNvblwiKTtcbiAgaWYgKCFleGlzdHNTeW5jKG1hbmlmZXN0UGF0aCkpIHtcbiAgICBydW5CdW4oW1wiaW5pdFwiLCBcIi15XCJdLCByb290KTtcbiAgICBub3JtYWxpemVTZWVkTWFuaWZlc3QobWFuaWZlc3RQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IGtlcm5lbEFyY2ggPSBleGVjLnNwYXduU3luYyhcInVuYW1lXCIsIFtcIi1tXCJdLCB7XG4gICAgc3RkaW46IFwiaWdub3JlXCIsXG4gICAgc3Rkb3V0OiBcImNhcHR1cmVcIixcbiAgICBzdGRlcnI6IFwiaWdub3JlXCIsXG4gIH0pLnN0ZG91dDtcbiAgbG9nZ2VyLmluZm8oXCJzZWVkaW5nIHRvb2xjaGFpblwiLCB7XG4gICAgbm9kZTogcHJvY2Vzcy52ZXJzaW9uLFxuICAgIGJ1bjogcHJvY2Vzcy52ZXJzaW9ucy5idW4sXG4gICAgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sXG4gICAgYXJjaDogcHJvY2Vzcy5hcmNoLFxuICAgIGtlcm5lbEFyY2g6IGtlcm5lbEFyY2ggfHwgXCJ1bmtub3duXCIsXG4gICAgZW5naW5lOiBwcm9qZW5TcGVjaWZpZXIsXG4gIH0pO1xuICBydW5CdW4oW1wiYWRkXCIsIFwiLURcIiwgXCJwcm9qZW5cIiwgXCJ0eXBlc2NyaXB0QF41LjkuM1wiLCBcIkB0eXBlcy9idW5cIiwgcHJvamVuU3BlY2lmaWVyXSwgcm9vdCk7XG59XG5cbi8qKlxuICogTWFrZSB3aGF0IGBidW4gaW5pdGAgcHJvZHVjZWQgc2FmZSB0byBzeW50aCBhZ2FpbnN0OiBmb3JjZSBgdHlwZTogXCJtb2R1bGVcImBcbiAqIChidW4gcnVucyBgLnByb2plbnJjLnRzYCBmaW5lIGVpdGhlciB3YXksIGJ1dCBwcm9qZW4ncyBFU00gc291cmNlcyBhbmQgdGhlXG4gKiBlbWl0dGVkIGNvbmZpZyBhc3N1bWUgbW9kdWxlIHR5cGUpIGFuZCBkcm9wIGFueSBgcGFja2FnZU1hbmFnZXJgL2BkZXZFbmdpbmVzYFxuICogZmllbGQgdGhhdCB3b3VsZCBwaW4gYSBkaWZmZXJlbnQgbWFuYWdlci4gcHJvamVuIHJlZ2VuZXJhdGVzIHRoZSB3aG9sZSBtYW5pZmVzdFxuICogYXQgc3ludGgsIHNvIHRoaXMgb25seSBoYXMgdG8gaG9sZCB0aGUgc2VlZCB0b2dldGhlciBsb25nIGVub3VnaCB0byBnZXQgdGhlcmUuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNlZWRNYW5pZmVzdChtYW5pZmVzdFBhdGg6IHN0cmluZyk6IHZvaWQge1xuICB0cnkge1xuICAgIGNvbnN0IG1hbmlmZXN0ID0ganNvbi5wYXJzZVJlY29yZChyZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCBcInV0ZjhcIikpO1xuICAgIGlmICghbWFuaWZlc3QpIHJldHVybjtcbiAgICBkZWxldGUgbWFuaWZlc3QuZGV2RW5naW5lcztcbiAgICBkZWxldGUgbWFuaWZlc3QucGFja2FnZU1hbmFnZXI7XG4gICAgbWFuaWZlc3QudHlwZSA9IFwibW9kdWxlXCI7XG4gICAgd3JpdGVGaWxlU3luYyhtYW5pZmVzdFBhdGgsIGAke0pTT04uc3RyaW5naWZ5KG1hbmlmZXN0LCBudWxsLCAyKX1cXG5gKTtcbiAgfSBjYXRjaCB7XG4gICAgLy8gQSBtYWxmb3JtZWQvYWJzZW50IG1hbmlmZXN0IGhlcmUganVzdCBtZWFucyB0aGUgbGF0ZXIgYGJ1biBhZGRgIHJlY3JlYXRlcyBpdC5cbiAgfVxufVxuXG4vKipcbiAqIFJ1biB0aGUgaW5pdGlhbCBzeW50aCBieSBleGVjdXRpbmcgYC5wcm9qZW5yYy50c2AgZGlyZWN0bHkgd2l0aCBidW4gKHdpdGhcbiAqIGBQUk9KRU5fRElTQUJMRV9QT1NUYCBzZXQpLCBOT1QgYHByb2plbiA8dGFzaz5gLiBVc2UgcmlnaHQgYWZ0ZXIgc2VlZGluZyBhXG4gKiBmcmVzaCB3b3Jrc3BhY2U6IHRoZSBwcm9qZW4gVEFTS1MgKGBzeW5jYCwgYGJhcnJlbHNgLCAuLi4pIG9ubHkgZXhpc3Qgb25jZVxuICogYC5wcm9qZW5yYy50c2AgaGFzIHJ1biBvbmNlLCBzbyBgcHJvamVuIHN5bmNgIGNhbid0IGJlIHRoZSBib290c3RyYXBwaW5nIHN0ZXAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Jbml0aWFsU3ludGgocm9vdDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IFtjb21tYW5kLCAuLi5wcmVmaXhdID0gcmVzb2x2ZUJ1bkFyZ3YoKTtcbiAgLy8gYnVuIHJ1bnMgdGhlIGAudHNgIGRpcmVjdGx5LiBSZWdpc3RyeSBlbnZpcm9ubWVudCBhbGlhc2VzIHJlYWNoIG5lc3RlZFxuICAvLyBjb21tYW5kcyB0aHJvdWdoIGBjaGlsZEVudmAgd2l0aG91dCB3cml0aW5nIHByb2plY3QtbGV2ZWwgbnBtIGNvbmZpZ3VyYXRpb24uXG4gIGV4ZWMuc3Bhd25TeW5jKGNvbW1hbmQsIFsuLi5wcmVmaXgsIFwiLnByb2plbnJjLnRzXCJdLCB7XG4gICAgY3dkOiByb290LFxuICAgIGVudjogY2hpbGRFbnYoeyBQUk9KRU5fRElTQUJMRV9QT1NUOiBcInRydWVcIiB9KSxcbiAgICBjaGVjazogdHJ1ZSxcbiAgfSk7XG59XG4iXX0=
|
package/lib/src/cli.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* `dev` bootstraps or repairs a workspace and forwards to projen.
|
|
5
5
|
* `appkit` provides AppKit environment helpers.
|
|
6
6
|
* `auth` manages Databricks OAuth and access tokens.
|
|
7
|
+
* `falkor-db` runs an embedded foreground graph database.
|
|
7
8
|
* `tunnel` runs a public portr tunnel with passwordless access gating.
|
|
8
9
|
*
|
|
9
10
|
* Feature commands load their sibling packages only when selected and forward
|
|
@@ -87,6 +88,7 @@ export function buildProgram(name = PROGRAM_NAMES[0]) {
|
|
|
87
88
|
addForwardedCommand(program, "appkit", "AppKit helpers (env: print the environment an AppKit app resolves)", async () => (await import("@dbx-tools/cli-appkit-env/cli")).buildProgram);
|
|
88
89
|
addForwardedCommand(program, "auth", "Authenticate to Databricks and manage OAuth tokens", async () => (await import("@dbx-tools/cli-auth/cli")).buildProgram);
|
|
89
90
|
addForwardedCommand(program, "tunnel", "Run a public portr tunnel with an email-OTP gate", async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram);
|
|
91
|
+
addForwardedCommand(program, "falkor-db", "Run embedded FalkorDB with optional Databricks Volume backups", async () => (await import("@dbx-tools/cli-falkor-db/cli")).buildProgram);
|
|
90
92
|
addForwardedCommand(program, "lakebase-proxy", "Run the Node Databricks Lakebase PostgreSQL proxy", async () => (await import("@dbx-tools/cli-lakebase-proxy/cli")).buildProgram);
|
|
91
93
|
addForwardedCommand(program, "model-gateway", "Run the foreground AppKit Databricks model gateway", async () => (await import("@dbx-tools/cli-model-gateway/cli")).buildProgram);
|
|
92
94
|
addForwardedCommand(program, "graphiti", "Run Graphiti or manage its current-user desktop service", async () => (await import("@dbx-tools/cli-graphiti/cli")).buildProgram);
|
|
@@ -104,4 +106,4 @@ function programName(argv) {
|
|
|
104
106
|
export async function runCli(argv) {
|
|
105
107
|
await buildProgram(programName(argv)).parseAsync(argv);
|
|
106
108
|
}
|
|
107
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTlFLHNFQUFzRTtBQUN0RSxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQVUsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxtQkFBbUIsQ0FBQyxVQUFvQixFQUFFLFFBQWlCO0lBQy9FLE1BQU0sSUFBSSxHQUFHLE1BQU0saUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN6QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixPQUFPO0lBQ1QsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixPQUFPO0lBQ1QsQ0FBQztJQUNELG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFD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QkFBNkIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUN2RSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsV0FBVyxDQUFDLElBQWM7SUFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDekYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLEtBQUssT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRCxvRUFBb0U7QUFDcEUsTUFBTSxDQUFDLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBYztJQUN6QyxNQUFNLFlBQVksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWFuZGVyIGVudHJ5IGZvciBgZGJ4YCBhbmQgaXRzIGBkYngtdG9vbHNgIGFsaWFzLlxuICpcbiAqIGBkZXZgIGJvb3RzdHJhcHMgb3IgcmVwYWlycyBhIHdvcmtzcGFjZSBhbmQgZm9yd2FyZHMgdG8gcHJvamVuLlxuICogYGFwcGtpdGAgcHJvdmlkZXMgQXBwS2l0IGVudmlyb25tZW50IGhlbHBlcnMuXG4gKiBgYXV0aGAgbWFuYWdlcyBEYXRhYnJpY2tzIE9BdXRoIGFuZCBhY2Nlc3MgdG9rZW5zLlxuICogYHR1bm5lbGAgcnVucyBhIHB1YmxpYyBwb3J0ciB0dW5uZWwgd2l0aCBwYXNzd29yZGxlc3MgYWNjZXNzIGdhdGluZy5cbiAqXG4gKiBGZWF0dXJlIGNvbW1hbmRzIGxvYWQgdGhlaXIgc2libGluZyBwYWNrYWdlcyBvbmx5IHdoZW4gc2VsZWN0ZWQgYW5kIGZvcndhcmRcbiAqIHRoZWlyIGNvbXBsZXRlIGFyZ3VtZW50IGxpc3QsIGluY2x1ZGluZyBgLS1oZWxwYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCB7XG4gIGJvb3RzdHJhcFdvcmtzcGFjZSxcbiAgZW5zdXJlRW5naW5lQ3VycmVudCxcbiAgcnVuSW5pdGlhbFN5bnRoLFxuICBzZWVkVG9vbGNoYWluLFxufSBmcm9tIFwiLi9ib290c3RyYXAudHNcIjtcbmltcG9ydCB7IGVuc3VyZVdvcmtzcGFjZVJlYWR5LCBydW5CdW4sIHJ1blByb2plbiB9IGZyb20gXCIuL2J1bi50c1wiO1xuaW1wb3J0IHsgZmluZFdvcmtzcGFjZVJvb3QsIG5lZWRzQm9vdHN0cmFwLCBuZWVkc1Rvb2xjaGFpbiB9IGZyb20gXCIuL3Jvb3QudHNcIjtcblxuLyoqIENvbW1hbmRzIHRoZSBiaW4gZXhwb3NlcywgYW5kIHRoZSBuYW1lcyBoZWxwIGlzIHJlbmRlcmVkIHVuZGVyLiAqL1xuY29uc3QgUFJPR1JBTV9OQU1FUyA9IFtcImRieFwiLCBcImRieC10b29sc1wiXSBhcyBjb25zdDtcblxuLyoqXG4gKiBQcmVwYXJlIHRoZSB3b3Jrc3BhY2UgYXQgYHJvb3RgLCB0aGVuIHJ1biBwcm9qZW4gKHZpYSBidW4pIHdpdGggYHByb2plbkFyZ3NgLlxuICpcbiAqIFRocmVlIGNhc2VzLCBpbiBvcmRlcjpcbiAqICAgLSBubyBgLnByb2plbnJjLnRzYCBhdCBhbGwgLT4gZnVsbCBib290c3RyYXAgKHNjYWZmb2xkICsgaW5zdGFsbCArIHN5bnRoKSxcbiAqICAgICB3aGljaCBhbHJlYWR5IHJ1bnMgdGhlIGluaXRpYWwgc3ludGg7IG5vdGhpbmcgbW9yZSB0byBmb3J3YXJkLlxuICogICAtIGEgYC5wcm9qZW5yYy50c2AgYnV0IHRoZSBlbmdpbmUvdG9vbGNoYWluIGlzbid0IGluc3RhbGxlZCAoZS5nLiBhIGZyZXNobHlcbiAqICAgICBjb3BpZWQgcHJvamVjdCB3aG9zZSBnZW5lcmF0ZWQgZmlsZXMgKyBtYW5pZmVzdHMgYXJlIGdpdGlnbm9yZWQpIC0+IHNlZWRcbiAqICAgICB0aGUgdG9vbGNoYWluLCB0aGVuIHJ1biB0aGUgSU5JVElBTCBzeW50aCBkaXJlY3RseSAodGhlIHByb2plbiB0YXNrcyB0aGVcbiAqICAgICBhcmdzIHdvdWxkIG5hbWUsIGxpa2UgYHN5bmNgLCBkb24ndCBleGlzdCB1bnRpbCBgLnByb2plbnJjLnRzYCBoYXMgcnVuXG4gKiAgICAgb25jZSksIGFuZCBpbnN0YWxsLiBEb24ndCBmb3J3YXJkIGBwcm9qZW5BcmdzYCAtIHRoZSBzeW50aCBpcyB0aGUgd29yay5cbiAqICAgLSBvdGhlcndpc2UgKGVzdGFibGlzaGVkIHdvcmtzcGFjZSkgLT4gZW5zdXJlIGRlcHMsIGJyaW5nIHRoZSBlbmdpbmUgdXAgdG9cbiAqICAgICB0aGlzIENMSSdzIHZlcnNpb24sIHRoZW4gZm9yd2FyZCB0byBwcm9qZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcmVwYXJlQW5kUnVuUHJvamVuKHByb2plbkFyZ3M6IHN0cmluZ1tdLCBzdGFydERpcj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByb290ID0gYXdhaXQgZmluZFdvcmtzcGFjZVJvb3Qoc3RhcnREaXIpO1xuICBpZiAobmVlZHNCb290c3RyYXAocm9vdCkpIHtcbiAgICBib290c3RyYXBXb3Jrc3BhY2Uocm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChuZWVkc1Rvb2xjaGFpbihyb290KSkge1xuICAgIHNlZWRUb29sY2hhaW4ocm9vdCk7XG4gICAgcnVuSW5pdGlhbFN5bnRoKHJvb3QpO1xuICAgIHJ1bkJ1bihbXCJpbnN0YWxsXCJdLCByb290KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZW5zdXJlV29ya3NwYWNlUmVhZHkocm9vdCk7XG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQocm9vdCk7XG4gIHJ1blByb2plbihwcm9qZW5BcmdzLCByb290KTtcbn1cblxuLyoqXG4gKiBNb3VudCBgbmFtZWAgYXMgYSBjb21tYW5kIHRoYXQgY2FwdHVyZXMgZXZlcnkgZm9sbG93aW5nIHRva2VuIHZlcmJhdGltIGFuZFxuICogaGFuZHMgaXQgdG8gdGhlIHByb2dyYW0gYGxvYWQoKWAgcmVzb2x2ZXMuIGBoZWxwT3B0aW9uKGZhbHNlKWAgaXMgd2hhdCBsZXRzXG4gKiBgLS1oZWxwYCB0aHJvdWdoIHRvIHRoZSBjaGlsZCBpbnN0ZWFkIG9mIGJlaW5nIGFuc3dlcmVkIGhlcmUsIGFuZCB0aGUgY2hpbGRcbiAqIHByb2dyYW0gb3ducyBpdHMgb3duIGZsYWdzLCBzbyB0aGlzIHdyYXBwZXIgbmV2ZXIgaGFzIHRvIHJlc3RhdGUgdGhlbS5cbiAqL1xuZnVuY3Rpb24gYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgcHJvZ3JhbTogQ29tbWFuZCxcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBsb2FkOiAoKSA9PiBQcm9taXNlPChuYW1lOiBzdHJpbmcpID0+IENvbW1hbmQ+LFxuKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbilcbiAgICAuYXJndW1lbnQoXCJbYXJncy4uLl1cIiwgYGFyZ3VtZW50cyBmb3J3YXJkZWQgdG8gJHtuYW1lfWApXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChhcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgY29uc3QgYnVpbGRQcm9ncmFtID0gYXdhaXQgbG9hZCgpO1xuICAgICAgYXdhaXQgYnVpbGRQcm9ncmFtKGAke3Byb2dyYW0ubmFtZSgpfSAke25hbWV9YCkucGFyc2VBc3luYyhhcmdzLCB7IGZyb206IFwidXNlclwiIH0pO1xuICAgIH0pO1xufVxuXG4vKiogQnVpbGQgdGhlIGBkYnhgIGNvbW1hbmRlciBwcm9ncmFtIChubyBzaWRlIGVmZmVjdHMgdW50aWwgcGFyc2VkKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByb2dyYW0obmFtZTogc3RyaW5nID0gUFJPR1JBTV9OQU1FU1swXSk6IENvbW1hbmQge1xuICBjb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIC5uYW1lKG5hbWUpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJEYXRhYnJpY2tzIGRldmVsb3BlciB0b29sczogd29ya3NwYWNlIGxpZmVjeWNsZSwgQXBwS2l0IGVudiwgYXV0aCwgdHVubmVscywgYW5kIGxvY2FsIHByb3hpZXNcIixcbiAgICApXG4gICAgLnNob3dIZWxwQWZ0ZXJFcnJvcigpXG4gICAgLmhlbHBPcHRpb24oXCItaCwgLS1oZWxwXCIsIGBTaG93ICR7bmFtZX0gaGVscGApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImRldlwiKVxuICAgIC5kZXNjcmlwdGlvbihcIkJvb3RzdHJhcCBvciByZXBhaXIgYSBkYngtdG9vbHMgd29ya3NwYWNlLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuXCIpXG4gICAgLmFyZ3VtZW50KFwiW3Byb2plbkFyZ3MuLi5dXCIsIFwicHJvamVuIHRhc2sgYW5kIGFyZ3VtZW50cyAoZS5nLiBzeW5jIC0td2F0Y2gpXCIpXG4gICAgLmFsbG93VW5rbm93bk9wdGlvbigpXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKClcbiAgICAuaGVscE9wdGlvbihmYWxzZSlcbiAgICAuYWN0aW9uKGFzeW5jIChwcm9qZW5BcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgYXdhaXQgcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzKTtcbiAgICB9KTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJhcHBraXRcIixcbiAgICBcIkFwcEtpdCBoZWxwZXJzIChlbnY6IHByaW50IHRoZSBlbnZpcm9ubWVudCBhbiBBcHBLaXQgYXBwIHJlc29sdmVzKVwiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS1hcHBraXQtZW52L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImF1dGhcIixcbiAgICBcIkF1dGhlbnRpY2F0ZSB0byBEYXRhYnJpY2tzIGFuZCBtYW5hZ2UgT0F1dGggdG9rZW5zXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWF1dGgvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwidHVubmVsXCIsXG4gICAgXCJSdW4gYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggYW4gZW1haWwtT1RQIGdhdGVcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktdHVubmVsL2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImxha2ViYXNlLXByb3h5XCIsXG4gICAgXCJSdW4gdGhlIE5vZGUgRGF0YWJyaWNrcyBMYWtlYmFzZSBQb3N0Z3JlU1FMIHByb3h5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWxha2ViYXNlLXByb3h5L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcIm1vZGVsLWdhdGV3YXlcIixcbiAgICBcIlJ1biB0aGUgZm9yZWdyb3VuZCBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLW1vZGVsLWdhdGV3YXkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiZ3JhcGhpdGlcIixcbiAgICBcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktZ3JhcGhpdGkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixhQUFhLEdBQ2QsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUU5RSxzRUFBc0U7QUFDdEUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFVLENBQUM7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsVUFBb0IsRUFBRSxRQUFpQjtJQUMvRSxNQUFNLElBQUksR0FBRyxNQUFNLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQy9DLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3pCLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTztJQUNULENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FB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a0NBQWtDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDNUUsQ0FBQztJQUVGLG1CQUFtQixDQUNqQixPQUFPLEVBQ1AsVUFBVSxFQUNWLHlEQUF5RCxFQUN6RCxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FDdkUsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxJQUFjO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RixDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQWM7SUFDekMsTUFBTSxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbW1hbmRlciBlbnRyeSBmb3IgYGRieGAgYW5kIGl0cyBgZGJ4LXRvb2xzYCBhbGlhcy5cbiAqXG4gKiBgZGV2YCBib290c3RyYXBzIG9yIHJlcGFpcnMgYSB3b3Jrc3BhY2UgYW5kIGZvcndhcmRzIHRvIHByb2plbi5cbiAqIGBhcHBraXRgIHByb3ZpZGVzIEFwcEtpdCBlbnZpcm9ubWVudCBoZWxwZXJzLlxuICogYGF1dGhgIG1hbmFnZXMgRGF0YWJyaWNrcyBPQXV0aCBhbmQgYWNjZXNzIHRva2Vucy5cbiAqIGBmYWxrb3ItZGJgIHJ1bnMgYW4gZW1iZWRkZWQgZm9yZWdyb3VuZCBncmFwaCBkYXRhYmFzZS5cbiAqIGB0dW5uZWxgIHJ1bnMgYSBwdWJsaWMgcG9ydHIgdHVubmVsIHdpdGggcGFzc3dvcmRsZXNzIGFjY2VzcyBnYXRpbmcuXG4gKlxuICogRmVhdHVyZSBjb21tYW5kcyBsb2FkIHRoZWlyIHNpYmxpbmcgcGFja2FnZXMgb25seSB3aGVuIHNlbGVjdGVkIGFuZCBmb3J3YXJkXG4gKiB0aGVpciBjb21wbGV0ZSBhcmd1bWVudCBsaXN0LCBpbmNsdWRpbmcgYC0taGVscGAuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBiYXNlbmFtZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQge1xuICBib290c3RyYXBXb3Jrc3BhY2UsXG4gIGVuc3VyZUVuZ2luZUN1cnJlbnQsXG4gIHJ1bkluaXRpYWxTeW50aCxcbiAgc2VlZFRvb2xjaGFpbixcbn0gZnJvbSBcIi4vYm9vdHN0cmFwLnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVXb3Jrc3BhY2VSZWFkeSwgcnVuQnVuLCBydW5Qcm9qZW4gfSBmcm9tIFwiLi9idW4udHNcIjtcbmltcG9ydCB7IGZpbmRXb3Jrc3BhY2VSb290LCBuZWVkc0Jvb3RzdHJhcCwgbmVlZHNUb29sY2hhaW4gfSBmcm9tIFwiLi9yb290LnRzXCI7XG5cbi8qKiBDb21tYW5kcyB0aGUgYmluIGV4cG9zZXMsIGFuZCB0aGUgbmFtZXMgaGVscCBpcyByZW5kZXJlZCB1bmRlci4gKi9cbmNvbnN0IFBST0dSQU1fTkFNRVMgPSBbXCJkYnhcIiwgXCJkYngtdG9vbHNcIl0gYXMgY29uc3Q7XG5cbi8qKlxuICogUHJlcGFyZSB0aGUgd29ya3NwYWNlIGF0IGByb290YCwgdGhlbiBydW4gcHJvamVuICh2aWEgYnVuKSB3aXRoIGBwcm9qZW5BcmdzYC5cbiAqXG4gKiBUaHJlZSBjYXNlcywgaW4gb3JkZXI6XG4gKiAgIC0gbm8gYC5wcm9qZW5yYy50c2AgYXQgYWxsIC0+IGZ1bGwgYm9vdHN0cmFwIChzY2FmZm9sZCArIGluc3RhbGwgKyBzeW50aCksXG4gKiAgICAgd2hpY2ggYWxyZWFkeSBydW5zIHRoZSBpbml0aWFsIHN5bnRoOyBub3RoaW5nIG1vcmUgdG8gZm9yd2FyZC5cbiAqICAgLSBhIGAucHJvamVucmMudHNgIGJ1dCB0aGUgZW5naW5lL3Rvb2xjaGFpbiBpc24ndCBpbnN0YWxsZWQgKGUuZy4gYSBmcmVzaGx5XG4gKiAgICAgY29waWVkIHByb2plY3Qgd2hvc2UgZ2VuZXJhdGVkIGZpbGVzICsgbWFuaWZlc3RzIGFyZSBnaXRpZ25vcmVkKSAtPiBzZWVkXG4gKiAgICAgdGhlIHRvb2xjaGFpbiwgdGhlbiBydW4gdGhlIElOSVRJQUwgc3ludGggZGlyZWN0bHkgKHRoZSBwcm9qZW4gdGFza3MgdGhlXG4gKiAgICAgYXJncyB3b3VsZCBuYW1lLCBsaWtlIGBzeW5jYCwgZG9uJ3QgZXhpc3QgdW50aWwgYC5wcm9qZW5yYy50c2AgaGFzIHJ1blxuICogICAgIG9uY2UpLCBhbmQgaW5zdGFsbC4gRG9uJ3QgZm9yd2FyZCBgcHJvamVuQXJnc2AgLSB0aGUgc3ludGggaXMgdGhlIHdvcmsuXG4gKiAgIC0gb3RoZXJ3aXNlIChlc3RhYmxpc2hlZCB3b3Jrc3BhY2UpIC0+IGVuc3VyZSBkZXBzLCBicmluZyB0aGUgZW5naW5lIHVwIHRvXG4gKiAgICAgdGhpcyBDTEkncyB2ZXJzaW9uLCB0aGVuIGZvcndhcmQgdG8gcHJvamVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJlcGFyZUFuZFJ1blByb2plbihwcm9qZW5BcmdzOiBzdHJpbmdbXSwgc3RhcnREaXI/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgcm9vdCA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VSb290KHN0YXJ0RGlyKTtcbiAgaWYgKG5lZWRzQm9vdHN0cmFwKHJvb3QpKSB7XG4gICAgYm9vdHN0cmFwV29ya3NwYWNlKHJvb3QpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobmVlZHNUb29sY2hhaW4ocm9vdCkpIHtcbiAgICBzZWVkVG9vbGNoYWluKHJvb3QpO1xuICAgIHJ1bkluaXRpYWxTeW50aChyb290KTtcbiAgICBydW5CdW4oW1wiaW5zdGFsbFwiXSwgcm9vdCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVuc3VyZVdvcmtzcGFjZVJlYWR5KHJvb3QpO1xuICBlbnN1cmVFbmdpbmVDdXJyZW50KHJvb3QpO1xuICBydW5Qcm9qZW4ocHJvamVuQXJncywgcm9vdCk7XG59XG5cbi8qKlxuICogTW91bnQgYG5hbWVgIGFzIGEgY29tbWFuZCB0aGF0IGNhcHR1cmVzIGV2ZXJ5IGZvbGxvd2luZyB0b2tlbiB2ZXJiYXRpbSBhbmRcbiAqIGhhbmRzIGl0IHRvIHRoZSBwcm9ncmFtIGBsb2FkKClgIHJlc29sdmVzLiBgaGVscE9wdGlvbihmYWxzZSlgIGlzIHdoYXQgbGV0c1xuICogYC0taGVscGAgdGhyb3VnaCB0byB0aGUgY2hpbGQgaW5zdGVhZCBvZiBiZWluZyBhbnN3ZXJlZCBoZXJlLCBhbmQgdGhlIGNoaWxkXG4gKiBwcm9ncmFtIG93bnMgaXRzIG93biBmbGFncywgc28gdGhpcyB3cmFwcGVyIG5ldmVyIGhhcyB0byByZXN0YXRlIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gIHByb2dyYW06IENvbW1hbmQsXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgbG9hZDogKCkgPT4gUHJvbWlzZTwobmFtZTogc3RyaW5nKSA9PiBDb21tYW5kPixcbik6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLmFyZ3VtZW50KFwiW2FyZ3MuLi5dXCIsIGBhcmd1bWVudHMgZm9yd2FyZGVkIHRvICR7bmFtZX1gKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAoYXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIGNvbnN0IGJ1aWxkUHJvZ3JhbSA9IGF3YWl0IGxvYWQoKTtcbiAgICAgIGF3YWl0IGJ1aWxkUHJvZ3JhbShgJHtwcm9ncmFtLm5hbWUoKX0gJHtuYW1lfWApLnBhcnNlQXN5bmMoYXJncywgeyBmcm9tOiBcInVzZXJcIiB9KTtcbiAgICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgZGJ4YCBjb21tYW5kZXIgcHJvZ3JhbSAobm8gc2lkZSBlZmZlY3RzIHVudGlsIHBhcnNlZCkuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQcm9ncmFtKG5hbWU6IHN0cmluZyA9IFBST0dSQU1fTkFNRVNbMF0pOiBDb21tYW5kIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcbiAgICAubmFtZShuYW1lKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiRGF0YWJyaWNrcyBkZXZlbG9wZXIgdG9vbHM6IHdvcmtzcGFjZSBsaWZlY3ljbGUsIEFwcEtpdCBlbnYsIGF1dGgsIHR1bm5lbHMsIGFuZCBsb2NhbCBwcm94aWVzXCIsXG4gICAgKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IoKVxuICAgIC5oZWxwT3B0aW9uKFwiLWgsIC0taGVscFwiLCBgU2hvdyAke25hbWV9IGhlbHBgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkZXZcIilcbiAgICAuZGVzY3JpcHRpb24oXCJCb290c3RyYXAgb3IgcmVwYWlyIGEgZGJ4LXRvb2xzIHdvcmtzcGFjZSwgdGhlbiBmb3J3YXJkIHRvIHByb2plblwiKVxuICAgIC5hcmd1bWVudChcIltwcm9qZW5BcmdzLi4uXVwiLCBcInByb2plbiB0YXNrIGFuZCBhcmd1bWVudHMgKGUuZy4gc3luYyAtLXdhdGNoKVwiKVxuICAgIC5hbGxvd1Vua25vd25PcHRpb24oKVxuICAgIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cygpXG4gICAgLmhlbHBPcHRpb24oZmFsc2UpXG4gICAgLmFjdGlvbihhc3luYyAocHJvamVuQXJnczogc3RyaW5nW10pID0+IHtcbiAgICAgIGF3YWl0IHByZXBhcmVBbmRSdW5Qcm9qZW4ocHJvamVuQXJncyk7XG4gICAgfSk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiYXBwa2l0XCIsXG4gICAgXCJBcHBLaXQgaGVscGVycyAoZW52OiBwcmludCB0aGUgZW52aXJvbm1lbnQgYW4gQXBwS2l0IGFwcCByZXNvbHZlcylcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktYXBwa2l0LWVudi9jbGlcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJhdXRoXCIsXG4gICAgXCJBdXRoZW50aWNhdGUgdG8gRGF0YWJyaWNrcyBhbmQgbWFuYWdlIE9BdXRoIHRva2Vuc1wiLFxuICAgIGFzeW5jICgpID0+IChhd2FpdCBpbXBvcnQoXCJAZGJ4LXRvb2xzL2NsaS1hdXRoL2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcInR1bm5lbFwiLFxuICAgIFwiUnVuIGEgcHVibGljIHBvcnRyIHR1bm5lbCB3aXRoIGFuIGVtYWlsLU9UUCBnYXRlXCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLXR1bm5lbC9jbGlcIikpLmJ1aWxkUHJvZ3JhbSxcbiAgKTtcblxuICBhZGRGb3J3YXJkZWRDb21tYW5kKFxuICAgIHByb2dyYW0sXG4gICAgXCJmYWxrb3ItZGJcIixcbiAgICBcIlJ1biBlbWJlZGRlZCBGYWxrb3JEQiB3aXRoIG9wdGlvbmFsIERhdGFicmlja3MgVm9sdW1lIGJhY2t1cHNcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktZmFsa29yLWRiL2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcImxha2ViYXNlLXByb3h5XCIsXG4gICAgXCJSdW4gdGhlIE5vZGUgRGF0YWJyaWNrcyBMYWtlYmFzZSBQb3N0Z3JlU1FMIHByb3h5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLWxha2ViYXNlLXByb3h5L2NsaVwiKSkuYnVpbGRQcm9ncmFtLFxuICApO1xuXG4gIGFkZEZvcndhcmRlZENvbW1hbmQoXG4gICAgcHJvZ3JhbSxcbiAgICBcIm1vZGVsLWdhdGV3YXlcIixcbiAgICBcIlJ1biB0aGUgZm9yZWdyb3VuZCBBcHBLaXQgRGF0YWJyaWNrcyBtb2RlbCBnYXRld2F5XCIsXG4gICAgYXN5bmMgKCkgPT4gKGF3YWl0IGltcG9ydChcIkBkYngtdG9vbHMvY2xpLW1vZGVsLWdhdGV3YXkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgYWRkRm9yd2FyZGVkQ29tbWFuZChcbiAgICBwcm9ncmFtLFxuICAgIFwiZ3JhcGhpdGlcIixcbiAgICBcIlJ1biBHcmFwaGl0aSBvciBtYW5hZ2UgaXRzIGN1cnJlbnQtdXNlciBkZXNrdG9wIHNlcnZpY2VcIixcbiAgICBhc3luYyAoKSA9PiAoYXdhaXQgaW1wb3J0KFwiQGRieC10b29scy9jbGktZ3JhcGhpdGkvY2xpXCIpKS5idWlsZFByb2dyYW0sXG4gICk7XG5cbiAgcmV0dXJuIHByb2dyYW07XG59XG5cbi8qKlxuICogUHJvZ3JhbSBuYW1lIGZvciBoZWxwIG91dHB1dDogd2hpY2hldmVyIGJpbiB0aGUgdXNlciBhY3R1YWxseSB0eXBlZCwgc29cbiAqIGBkYngtdG9vbHMgLS1oZWxwYCBkb2Vzbid0IGRvY3VtZW50IGl0c2VsZiBhcyBgZGJ4YC4gRmFsbHMgYmFjayB0byBgZGJ4YC5cbiAqL1xuZnVuY3Rpb24gcHJvZ3JhbU5hbWUoYXJndjogc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCBpbnZva2VkID0gYXJndlsxXSA/IGJhc2VuYW1lKGFyZ3ZbMV0pLnJlcGxhY2UoL1xcLig/OltjbV0/W2p0XXMpJC8sIFwiXCIpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gUFJPR1JBTV9OQU1FUy5maW5kKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZSA9PT0gaW52b2tlZCkgPz8gUFJPR1JBTV9OQU1FU1swXTtcbn1cblxuLyoqIFBhcnNlIGBhcmd2YCAoYSBgcHJvY2Vzcy5hcmd2YCkgYW5kIHJ1biB0aGUgbWF0Y2hpbmcgY29tbWFuZC4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5DbGkoYXJndjogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRQcm9ncmFtKHByb2dyYW1OYW1lKGFyZ3YpKS5wYXJzZUFzeW5jKGFyZ3YpO1xufVxuIl19
|
package/package.json
CHANGED
|
@@ -28,15 +28,17 @@
|
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@clack/prompts": "^1.7.0",
|
|
31
|
-
"@dbx-tools/cli-appkit-env": "^0.9.
|
|
32
|
-
"@dbx-tools/cli-auth": "^0.9.
|
|
33
|
-
"@dbx-tools/cli-
|
|
34
|
-
"@dbx-tools/cli-
|
|
35
|
-
"@dbx-tools/cli-
|
|
36
|
-
"@dbx-tools/cli-
|
|
37
|
-
"@dbx-tools/
|
|
38
|
-
"@dbx-tools/
|
|
39
|
-
"
|
|
31
|
+
"@dbx-tools/cli-appkit-env": "^0.9.46",
|
|
32
|
+
"@dbx-tools/cli-auth": "^0.9.46",
|
|
33
|
+
"@dbx-tools/cli-falkor-db": "^0.9.46",
|
|
34
|
+
"@dbx-tools/cli-graphiti": "^0.9.46",
|
|
35
|
+
"@dbx-tools/cli-lakebase-proxy": "^0.9.46",
|
|
36
|
+
"@dbx-tools/cli-model-gateway": "^0.9.46",
|
|
37
|
+
"@dbx-tools/cli-tunnel": "^0.9.46",
|
|
38
|
+
"@dbx-tools/core": "^0.9.46",
|
|
39
|
+
"@dbx-tools/shared-core": "^0.9.46",
|
|
40
|
+
"commander": "^15.0.0",
|
|
41
|
+
"zod": "4.3.6"
|
|
40
42
|
},
|
|
41
43
|
"main": "./lib/index.js",
|
|
42
44
|
"license": "Apache-2.0",
|
|
@@ -72,7 +74,7 @@
|
|
|
72
74
|
"./package.json": "./package.json"
|
|
73
75
|
}
|
|
74
76
|
},
|
|
75
|
-
"version": "0.9.
|
|
77
|
+
"version": "0.9.46",
|
|
76
78
|
"types": "./lib/index.d.ts",
|
|
77
79
|
"dbxToolsConfig": {
|
|
78
80
|
"tags": [
|
package/src/bootstrap.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
7
7
|
import { createRequire } from "node:module";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { intro, outro } from "@clack/prompts";
|
|
10
|
-
import { exec
|
|
10
|
+
import { exec } from "@dbx-tools/core";
|
|
11
11
|
import { json, log } from "@dbx-tools/shared-core";
|
|
12
12
|
import { childEnv, resolveBunArgv, runBun } from "./bun.ts";
|
|
13
13
|
import { rootLabel } from "./root.ts";
|
|
@@ -153,8 +153,6 @@ export function seedToolchain(
|
|
|
153
153
|
normalizeSeedManifest(manifestPath);
|
|
154
154
|
}
|
|
155
155
|
|
|
156
|
-
seedRegistry(root);
|
|
157
|
-
|
|
158
156
|
const kernelArch = exec.spawnSync("uname", ["-m"], {
|
|
159
157
|
stdin: "ignore",
|
|
160
158
|
stdout: "capture",
|
|
@@ -171,29 +169,6 @@ export function seedToolchain(
|
|
|
171
169
|
runBun(["add", "-D", "projen", "typescript@^5.9.3", "@types/bun", projenSpecifier], root);
|
|
172
170
|
}
|
|
173
171
|
|
|
174
|
-
/**
|
|
175
|
-
* Pin a non-default registry into the new root's `.npmrc`.
|
|
176
|
-
*
|
|
177
|
-
* The CLI already forces `--registry` onto the bun invocations it makes itself,
|
|
178
|
-
* but a bootstrapped workspace outlives this process: every later `bun install`
|
|
179
|
-
* the developer (or projen's post-synth step) runs is on its own. bun ignores
|
|
180
|
-
* `npm_config_registry` from the environment, so without a file on disk those
|
|
181
|
-
* runs revert to `https://registry.npmjs.org/` - which is a hard failure where
|
|
182
|
-
* the custom registry was the only reachable one.
|
|
183
|
-
*
|
|
184
|
-
* Only writes for an actual override, never creates a file just to name npmjs,
|
|
185
|
-
* and never overwrites an existing `.npmrc` (the developer's own wins).
|
|
186
|
-
*/
|
|
187
|
-
function seedRegistry(root: string): void {
|
|
188
|
-
const registry = projectUtils
|
|
189
|
-
.npmRegistry(null, { overrideOnly: true, envVars: true })
|
|
190
|
-
?.toString();
|
|
191
|
-
if (!registry) return;
|
|
192
|
-
const npmrc = join(root, ".npmrc");
|
|
193
|
-
if (existsSync(npmrc)) return;
|
|
194
|
-
writeFileSync(npmrc, `registry=${registry}\n`);
|
|
195
|
-
}
|
|
196
|
-
|
|
197
172
|
/**
|
|
198
173
|
* Make what `bun init` produced safe to synth against: force `type: "module"`
|
|
199
174
|
* (bun runs `.projenrc.ts` fine either way, but projen's ESM sources and the
|
|
@@ -222,8 +197,8 @@ function normalizeSeedManifest(manifestPath: string): void {
|
|
|
222
197
|
*/
|
|
223
198
|
export function runInitialSynth(root: string): void {
|
|
224
199
|
const [command, ...prefix] = resolveBunArgv();
|
|
225
|
-
// bun runs the `.ts` directly.
|
|
226
|
-
// `childEnv`
|
|
200
|
+
// bun runs the `.ts` directly. Registry environment aliases reach nested
|
|
201
|
+
// commands through `childEnv` without writing project-level npm configuration.
|
|
227
202
|
exec.spawnSync(command, [...prefix, ".projenrc.ts"], {
|
|
228
203
|
cwd: root,
|
|
229
204
|
env: childEnv({ PROJEN_DISABLE_POST: "true" }),
|
package/src/cli.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* `dev` bootstraps or repairs a workspace and forwards to projen.
|
|
5
5
|
* `appkit` provides AppKit environment helpers.
|
|
6
6
|
* `auth` manages Databricks OAuth and access tokens.
|
|
7
|
+
* `falkor-db` runs an embedded foreground graph database.
|
|
7
8
|
* `tunnel` runs a public portr tunnel with passwordless access gating.
|
|
8
9
|
*
|
|
9
10
|
* Feature commands load their sibling packages only when selected and forward
|
|
@@ -123,6 +124,13 @@ export function buildProgram(name: string = PROGRAM_NAMES[0]): Command {
|
|
|
123
124
|
async () => (await import("@dbx-tools/cli-tunnel/cli")).buildProgram,
|
|
124
125
|
);
|
|
125
126
|
|
|
127
|
+
addForwardedCommand(
|
|
128
|
+
program,
|
|
129
|
+
"falkor-db",
|
|
130
|
+
"Run embedded FalkorDB with optional Databricks Volume backups",
|
|
131
|
+
async () => (await import("@dbx-tools/cli-falkor-db/cli")).buildProgram,
|
|
132
|
+
);
|
|
133
|
+
|
|
126
134
|
addForwardedCommand(
|
|
127
135
|
program,
|
|
128
136
|
"lakebase-proxy",
|