@decohere/scaffold 0.0.1-dev.126 → 0.0.1-dev.80
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/commonjs/src/add-api.action.js +3 -1
- package/commonjs/src/add-api.command.js +3 -1
- package/commonjs/src/add.command.js +3 -1
- package/commonjs/src/add.module.js +3 -1
- package/commonjs/src/cli.js +3 -2
- package/commonjs/src/create.command.js +3 -1
- package/commonjs/src/create.module.js +3 -1
- package/commonjs/src/domain/prompt.js +2 -0
- package/commonjs/src/index.js +2 -12
- package/commonjs/src/models/compose.model.js +3 -111
- package/commonjs/src/models/config-yaml.model.js +2 -0
- package/commonjs/src/models/const.js +2 -0
- package/commonjs/src/models/dev-container.model.js +10 -66
- package/commonjs/src/models/docker-image.model.js +6 -24
- package/commonjs/src/models/env-file.model.js +2 -0
- package/commonjs/src/models/gitignore.model.js +2 -7
- package/commonjs/src/models/launch-json.model.js +4 -0
- package/commonjs/src/models/package-json.model.js +7 -14
- package/commonjs/src/models/project.model.js +2 -0
- package/commonjs/src/models/source-file.js +2 -0
- package/commonjs/src/models/tsconfig.model.js +2 -0
- package/commonjs/src/models/vitest-config.model.js +2 -0
- package/commonjs/src/models/vscode-settings.model.js +2 -0
- package/commonjs/src/program.js +6 -13
- package/commonjs/src/resolve-target-dir.js +2 -0
- package/commonjs/src/services/scaffold.service.js +2 -0
- package/commonjs/src/version.js +2 -0
- package/commonjs/src/webapi/api-name.js +2 -0
- package/commonjs/src/webapi/cli-options.js +2 -0
- package/commonjs/src/webapi/const.js +3 -7
- package/commonjs/src/webapi/create-api.js +18 -46
- package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +2 -0
- package/commonjs/src/webapi/devcontainer/host-scripts.js +2 -0
- package/commonjs/src/webapi/features/auth.feature.js +44 -11
- package/commonjs/src/webapi/features/auth0-cli.js +3 -40
- package/commonjs/src/webapi/features/biome-format.js +2 -0
- package/commonjs/src/webapi/features/database.feature.js +10 -10
- package/commonjs/src/webapi/features/finalize.feature.js +4 -2
- package/commonjs/src/webapi/features/postman.feature.js +2 -0
- package/commonjs/src/webapi/models/api-package-json.model.js +3 -1
- package/commonjs/src/webapi/models/auth-config.model.js +2 -0
- package/commonjs/src/webapi/models/controller-source-file.model.js +8 -5
- package/commonjs/src/webapi/models/github-ci.model.js +6 -6
- package/commonjs/src/webapi/models/main-source-file.model.js +5 -3
- package/commonjs/src/webapi/models/production-dockerfile.model.js +109 -27
- package/commonjs/src/webapi/models/sample-files.model.js +4 -2
- package/commonjs/src/webapi/models/webapi-image.model.js +2 -0
- package/commonjs/src/webapi/postman/hello-openapi.js +2 -0
- package/commonjs/src/webapi/postman/local-view.js +2 -0
- package/commonjs/src/webapi/postman/openapi-to-postman.js +8 -44
- package/commonjs/src/webapi/workspace-readme.js +5 -4
- package/commonjs/src/webapi.action.js +3 -1
- package/commonjs/src/webapi.command.js +4 -2
- package/es6/src/add-api.action.js +3 -1
- package/es6/src/add-api.command.js +3 -1
- package/es6/src/add.command.js +3 -1
- package/es6/src/add.module.js +3 -1
- package/es6/src/cli.js +3 -2
- package/es6/src/create.command.js +3 -1
- package/es6/src/create.module.js +3 -1
- package/es6/src/domain/prompt.js +2 -0
- package/es6/src/index.js +2 -3
- package/es6/src/models/compose.model.js +3 -113
- package/es6/src/models/config-yaml.model.js +2 -0
- package/es6/src/models/const.js +2 -0
- package/es6/src/models/dev-container.model.js +10 -66
- package/es6/src/models/docker-image.model.js +6 -24
- package/es6/src/models/env-file.model.js +2 -0
- package/es6/src/models/gitignore.model.js +2 -7
- package/es6/src/models/launch-json.model.js +4 -0
- package/es6/src/models/package-json.model.js +7 -11
- package/es6/src/models/project.model.js +2 -0
- package/es6/src/models/source-file.js +2 -0
- package/es6/src/models/tsconfig.model.js +2 -0
- package/es6/src/models/vitest-config.model.js +2 -0
- package/es6/src/models/vscode-settings.model.js +2 -0
- package/es6/src/program.js +7 -18
- package/es6/src/resolve-target-dir.js +2 -0
- package/es6/src/services/scaffold.service.js +2 -0
- package/es6/src/version.js +2 -0
- package/es6/src/webapi/api-name.js +2 -0
- package/es6/src/webapi/cli-options.js +2 -0
- package/es6/src/webapi/const.js +3 -4
- package/es6/src/webapi/create-api.js +20 -48
- package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +2 -0
- package/es6/src/webapi/devcontainer/host-scripts.js +2 -0
- package/es6/src/webapi/features/auth.feature.js +44 -11
- package/es6/src/webapi/features/auth0-cli.js +4 -35
- package/es6/src/webapi/features/biome-format.js +2 -0
- package/es6/src/webapi/features/database.feature.js +10 -10
- package/es6/src/webapi/features/finalize.feature.js +4 -2
- package/es6/src/webapi/features/postman.feature.js +2 -0
- package/es6/src/webapi/models/api-package-json.model.js +4 -2
- package/es6/src/webapi/models/auth-config.model.js +2 -0
- package/es6/src/webapi/models/controller-source-file.model.js +8 -5
- package/es6/src/webapi/models/github-ci.model.js +6 -6
- package/es6/src/webapi/models/main-source-file.model.js +5 -3
- package/es6/src/webapi/models/production-dockerfile.model.js +117 -35
- package/es6/src/webapi/models/sample-files.model.js +4 -2
- package/es6/src/webapi/models/webapi-image.model.js +2 -0
- package/es6/src/webapi/postman/hello-openapi.js +2 -0
- package/es6/src/webapi/postman/local-view.js +2 -0
- package/es6/src/webapi/postman/openapi-to-postman.js +4 -4
- package/es6/src/webapi/workspace-readme.js +5 -4
- package/es6/src/webapi.action.js +3 -1
- package/es6/src/webapi.command.js +4 -2
- package/package.json +4 -14
- package/types/src/add-api.action.d.ts +1 -1
- package/types/src/add-api.command.d.ts +1 -1
- package/types/src/add.command.d.ts +2 -2
- package/types/src/add.module.d.ts +1 -1
- package/types/src/create.command.d.ts +2 -2
- package/types/src/create.module.d.ts +1 -1
- package/types/src/index.d.ts +0 -4
- package/types/src/models/compose.model.d.ts +0 -9
- package/types/src/models/dev-container.model.d.ts +1 -13
- package/types/src/models/docker-image.model.d.ts +0 -6
- package/types/src/models/gitignore.model.d.ts +0 -2
- package/types/src/models/package-json.model.d.ts +0 -1
- package/types/src/program.d.ts +1 -6
- package/types/src/webapi/const.d.ts +0 -2
- package/types/src/webapi/create-api.d.ts +1 -1
- package/types/src/webapi/features/auth0-cli.d.ts +0 -4
- package/types/src/webapi/models/api-package-json.model.d.ts +1 -1
- package/types/src/webapi/models/controller-source-file.model.d.ts +2 -2
- package/types/src/webapi/models/main-source-file.model.d.ts +1 -1
- package/types/src/webapi/models/production-dockerfile.model.d.ts +14 -9
- package/types/src/webapi.action.d.ts +1 -1
- package/types/src/webapi.command.d.ts +1 -1
- package/LICENSE +0 -15
- package/commonjs/src/auth0-configure.action.js +0 -28
- package/commonjs/src/auth0-configure.command.js +0 -24
- package/commonjs/src/auth0-login.action.js +0 -28
- package/commonjs/src/auth0-login.command.js +0 -23
- package/commonjs/src/auth0.command.js +0 -22
- package/commonjs/src/auth0.module.js +0 -28
- package/commonjs/src/webapi/auth0-commands.js +0 -250
- package/commonjs/src/webapi/authorize-scopes.js +0 -79
- package/es6/src/auth0-configure.action.js +0 -18
- package/es6/src/auth0-configure.command.js +0 -14
- package/es6/src/auth0-login.action.js +0 -18
- package/es6/src/auth0-login.command.js +0 -13
- package/es6/src/auth0.command.js +0 -12
- package/es6/src/auth0.module.js +0 -18
- package/es6/src/webapi/auth0-commands.js +0 -185
- package/es6/src/webapi/authorize-scopes.js +0 -55
- package/types/src/auth0-configure.action.d.ts +0 -7
- package/types/src/auth0-configure.command.d.ts +0 -6
- package/types/src/auth0-login.action.d.ts +0 -4
- package/types/src/auth0-login.command.d.ts +0 -6
- package/types/src/auth0.command.d.ts +0 -6
- package/types/src/auth0.module.d.ts +0 -18
- package/types/src/webapi/auth0-commands.d.ts +0 -11
- package/types/src/webapi/authorize-scopes.d.ts +0 -7
package/es6/src/webapi/const.js
CHANGED
|
@@ -6,10 +6,7 @@
|
|
|
6
6
|
* Forge release entry for a scaffolded API (`pack: true` → per-target outDir).
|
|
7
7
|
* Keep in sync with root `package.json` `"start"` / `"start:<name>"` and Dockerfiles.
|
|
8
8
|
*/ export function webapiReleaseEntry(name) {
|
|
9
|
-
return `dist/release/${webapiProjectDir(name)}
|
|
10
|
-
}
|
|
11
|
-
/** The same entry inside `.package/` (`forge package`), which is what the Dockerfile runs. */ export function webapiPackagedEntry() {
|
|
12
|
-
return "es6/src/main.js";
|
|
9
|
+
return `dist/release/${webapiProjectDir(name)}/es6/src/main.js`;
|
|
13
10
|
}
|
|
14
11
|
/** npm package name for a scaffolded API (`flux serve --project`). */ export function webapiPackageName(workspaceName, apiName) {
|
|
15
12
|
return `@${workspaceName}/${apiName}`;
|
|
@@ -19,3 +16,5 @@
|
|
|
19
16
|
}
|
|
20
17
|
/** @deprecated Use `webapiProjectDir(name)`. Default path for the first API. */ export const WEBAPI_PROJECT_DIR = webapiProjectDir(DEFAULT_WEBAPI_NAME);
|
|
21
18
|
/** @deprecated Use `webapiReleaseEntry(name)`. Default start entry for the first API. */ export const WEBAPI_RELEASE_ENTRY = webapiReleaseEntry(DEFAULT_WEBAPI_NAME);
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvY29uc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIERlZmF1bHQgQVBJIHByb2plY3Qgc2x1ZyB3aGVuIGAtLW5hbWVgIGlzIG9taXR0ZWQuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9XRUJBUElfTkFNRSA9IFwiYXBpXCI7XG5cbi8qKiBSZWxhdGl2ZSBwYXRoIG9mIGFuIEFQSSBwcm9qZWN0IGluc2lkZSB0aGUgbW9ub3JlcG8uICovXG5leHBvcnQgZnVuY3Rpb24gd2ViYXBpUHJvamVjdERpcihuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYHByb2plY3RzLyR7bmFtZX1gO1xufVxuXG4vKipcbiAqIEZvcmdlIHJlbGVhc2UgZW50cnkgZm9yIGEgc2NhZmZvbGRlZCBBUEkgKGBwYWNrOiB0cnVlYCDihpIgcGVyLXRhcmdldCBvdXREaXIpLlxuICogS2VlcCBpbiBzeW5jIHdpdGggcm9vdCBgcGFja2FnZS5qc29uYCBgXCJzdGFydFwiYCAvIGBcInN0YXJ0OjxuYW1lPlwiYCBhbmQgRG9ja2VyZmlsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWJhcGlSZWxlYXNlRW50cnkobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIGBkaXN0L3JlbGVhc2UvJHt3ZWJhcGlQcm9qZWN0RGlyKG5hbWUpfS9lczYvc3JjL21haW4uanNgO1xufVxuXG4vKiogbnBtIHBhY2thZ2UgbmFtZSBmb3IgYSBzY2FmZm9sZGVkIEFQSSAoYGZsdXggc2VydmUgLS1wcm9qZWN0YCkuICovXG5leHBvcnQgZnVuY3Rpb24gd2ViYXBpUGFja2FnZU5hbWUod29ya3NwYWNlTmFtZTogc3RyaW5nLCBhcGlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gYEAke3dvcmtzcGFjZU5hbWV9LyR7YXBpTmFtZX1gO1xufVxuXG4vKiogTG9jYWwgbGlzdGVuIHBvcnQgZm9yIHRoZSBudGggQVBJICgwLWJhc2VkKS4gUHJvZHVjdGlvbiB1c2VzIGBQT1JUYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWJhcGlQb3J0KGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRyZXR1cm4gMzAwMCArIGluZGV4O1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB3ZWJhcGlQcm9qZWN0RGlyKG5hbWUpYC4gRGVmYXVsdCBwYXRoIGZvciB0aGUgZmlyc3QgQVBJLiAqL1xuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IHdlYmFwaVByb2plY3REaXIoREVGQVVMVF9XRUJBUElfTkFNRSk7XG5cbi8qKiBAZGVwcmVjYXRlZCBVc2UgYHdlYmFwaVJlbGVhc2VFbnRyeShuYW1lKWAuIERlZmF1bHQgc3RhcnQgZW50cnkgZm9yIHRoZSBmaXJzdCBBUEkuICovXG5leHBvcnQgY29uc3QgV0VCQVBJX1JFTEVBU0VfRU5UUlkgPSB3ZWJhcGlSZWxlYXNlRW50cnkoREVGQVVMVF9XRUJBUElfTkFNRSk7XG4iXSwibmFtZXMiOlsiREVGQVVMVF9XRUJBUElfTkFNRSIsIndlYmFwaVByb2plY3REaXIiLCJuYW1lIiwid2ViYXBpUmVsZWFzZUVudHJ5Iiwid2ViYXBpUGFja2FnZU5hbWUiLCJ3b3Jrc3BhY2VOYW1lIiwiYXBpTmFtZSIsIndlYmFwaVBvcnQiLCJpbmRleCIsIldFQkFQSV9QUk9KRUNUX0RJUiIsIldFQkFQSV9SRUxFQVNFX0VOVFJZIl0sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQsR0FDdkQsT0FBTyxNQUFNQSxzQkFBc0IsTUFBTTtBQUV6Qyx5REFBeUQsR0FDekQsT0FBTyxTQUFTQyxpQkFBaUJDLElBQVk7SUFDNUMsT0FBTyxDQUFDLFNBQVMsRUFBRUEsTUFBTTtBQUMxQjtBQUVBOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0MsbUJBQW1CRCxJQUFZO0lBQzlDLE9BQU8sQ0FBQyxhQUFhLEVBQUVELGlCQUFpQkMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRTtBQUVBLG9FQUFvRSxHQUNwRSxPQUFPLFNBQVNFLGtCQUFrQkMsYUFBcUIsRUFBRUMsT0FBZTtJQUN2RSxPQUFPLENBQUMsQ0FBQyxFQUFFRCxjQUFjLENBQUMsRUFBRUMsU0FBUztBQUN0QztBQUVBLHlFQUF5RSxHQUN6RSxPQUFPLFNBQVNDLFdBQVdDLEtBQWE7SUFDdkMsT0FBTyxPQUFPQTtBQUNmO0FBRUEsOEVBQThFLEdBQzlFLE9BQU8sTUFBTUMscUJBQXFCUixpQkFBaUJELHFCQUFxQjtBQUV4RSx1RkFBdUYsR0FDdkYsT0FBTyxNQUFNVSx1QkFBdUJQLG1CQUFtQkgscUJBQXFCIn0=
|
|
@@ -4,11 +4,11 @@ import { DockerCompose } from "../models/compose.model.js";
|
|
|
4
4
|
import { ConfigYaml } from "../models/config-yaml.model.js";
|
|
5
5
|
import { WELL_KNOWN_FILES } from "../models/const.js";
|
|
6
6
|
import { DevContainer } from "../models/dev-container.model.js";
|
|
7
|
-
import { commandHistory
|
|
7
|
+
import { commandHistory } from "../models/docker-image.model.js";
|
|
8
8
|
import { EnvFile } from "../models/env-file.model.js";
|
|
9
9
|
import { Gitignore } from "../models/gitignore.model.js";
|
|
10
10
|
import { LaunchJson } from "../models/launch-json.model.js";
|
|
11
|
-
import { PackageJson
|
|
11
|
+
import { PackageJson } from "../models/package-json.model.js";
|
|
12
12
|
import { MonoRepoScaffold, ProjectScaffold } from "../models/project.model.js";
|
|
13
13
|
import { TsConfig } from "../models/tsconfig.model.js";
|
|
14
14
|
import { VitestConfig } from "../models/vitest-config.model.js";
|
|
@@ -50,20 +50,16 @@ function createWorkspace(targetDir, projectName, apiNames) {
|
|
|
50
50
|
monoRepo.targetDir = targetDir;
|
|
51
51
|
monoRepo.setName(projectName);
|
|
52
52
|
const name = monoRepo.name;
|
|
53
|
-
// Project-named root so Cursor Agents (and other tools) label the workspace by name.
|
|
54
|
-
const workspaceRoot = `/${name}`;
|
|
55
53
|
const compose = new DockerCompose().setProjectName(name).addHeaderComment("Merge .cursor/mcp.json in the service command. postStartCommand runs after Cursor's first MCP snapshot.").addNetwork(name, {
|
|
56
54
|
name: `samples-${name}`
|
|
57
55
|
}).addService("devcontainer", {
|
|
58
56
|
build: ".",
|
|
59
57
|
volumes: [
|
|
60
|
-
// Repo bind in Compose (survives CLI recreates; Cursor-only mounts do not).
|
|
61
|
-
`..:${workspaceRoot}`,
|
|
62
58
|
// Workspace-local (created by initialize.sh as the host user).
|
|
63
59
|
// Do NOT bind ${HOME}/.npm/... — Docker creates missing host paths as root.
|
|
64
60
|
"./npm-auth:/home/node/.npm-config",
|
|
65
61
|
"./gh-auth:/home/node/.config/gh",
|
|
66
|
-
|
|
62
|
+
"webapi-node-modules:/workspace/node_modules",
|
|
67
63
|
// Named volume (not a Cursor-only mount) so CLI recreates keep Up-arrow history.
|
|
68
64
|
`${commandHistory.volumeName}:${commandHistory.dir}`
|
|
69
65
|
],
|
|
@@ -73,22 +69,25 @@ function createWorkspace(targetDir, projectName, apiNames) {
|
|
|
73
69
|
environment: {
|
|
74
70
|
NPM_CONFIG_USERCONFIG: "/home/node/.npm-config/.npmrc"
|
|
75
71
|
},
|
|
76
|
-
command:
|
|
72
|
+
command: "'bash -c \"CODEBASE_RAG_WORKSPACE=/workspace node --experimental-strip-types /workspace/.devcontainer/codebase-rag-mcp.ts merge || true && exec sleep infinity\"'",
|
|
77
73
|
networks: [
|
|
78
74
|
name
|
|
79
75
|
]
|
|
80
76
|
}).addVolume("webapi-node-modules").addVolume(commandHistory.volumeName);
|
|
81
77
|
const installCmd = "bash .devcontainer/post-create.sh";
|
|
82
|
-
const devContainer = new DevContainer().
|
|
83
|
-
|
|
78
|
+
const devContainer = new DevContainer().addExtension("biomejs.biome", "vitest.explorer").setInitializeCommand("bash .devcontainer/initialize.sh").setPostCreateCommand(installCmd).setUpdateContentCommand(installCmd).setPostStartCommand("bash .devcontainer/post-start.sh").useCompose();
|
|
79
|
+
for (const [index, apiName] of apiNames.entries()){
|
|
80
|
+
const port = webapiPort(index);
|
|
81
|
+
devContainer.forwardPort(port);
|
|
82
|
+
devContainer.setPortAttributes(port, {
|
|
83
|
+
label: apiName === DEFAULT_WEBAPI_NAME ? "API" : apiName,
|
|
84
|
+
requireLocalPort: true
|
|
85
|
+
});
|
|
86
|
+
}
|
|
84
87
|
// Workspace-level models (repo root)
|
|
85
88
|
monoRepo.addModel(compose);
|
|
86
89
|
monoRepo.addModel(devContainer);
|
|
87
|
-
|
|
88
|
-
appDevImage.addLayer(withWorkspaceNodeModulesOwnership({
|
|
89
|
-
workspaceDir: workspaceRoot
|
|
90
|
-
}));
|
|
91
|
-
monoRepo.addModel(appDevImage);
|
|
90
|
+
monoRepo.addModel(new WebapiDevContainer());
|
|
92
91
|
monoRepo.addModel(new WebapiProductionDockerfile(apiNames));
|
|
93
92
|
monoRepo.addModel(new GithubCiWorkflows());
|
|
94
93
|
monoRepo.addModel(new VSCodeSettings(name));
|
|
@@ -194,30 +193,15 @@ function createAddWorkspace(targetDir, projectName, apiNames) {
|
|
|
194
193
|
monoRepo.addModel(existsSync(join(targetDir, ".env")) ? EnvFile.fromFile(join(targetDir, ".env")) : new EnvFile());
|
|
195
194
|
monoRepo.addModel(existsSync(join(targetDir, "config/config.yaml")) ? ConfigYaml.fromFile(WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", join(targetDir, "config/config.yaml")) : new ConfigYaml(WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", ""));
|
|
196
195
|
monoRepo.addModel(existsSync(join(targetDir, "config/config.dev.yaml")) ? ConfigYaml.fromFile(WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", join(targetDir, "config/config.dev.yaml")) : new ConfigYaml(WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", ""));
|
|
197
|
-
// Load the workspace files features merge into, so e.g. --database on a workspace
|
|
198
|
-
// created without one adds the Postgres service instead of only the db:* scripts.
|
|
199
|
-
const compose = loadIfExists(targetDir, ".devcontainer/docker-compose.yml", (path)=>DockerCompose.fromFile(path));
|
|
200
|
-
if (compose) monoRepo.addModel(compose);
|
|
201
|
-
const devContainer = loadIfExists(targetDir, ".devcontainer/devcontainer.json", (path)=>DevContainer.fromFile(path));
|
|
202
|
-
if (devContainer) {
|
|
203
|
-
forwardApiPorts(devContainer, apiNames, existing.length);
|
|
204
|
-
monoRepo.addModel(devContainer);
|
|
205
|
-
}
|
|
206
|
-
const devImage = loadIfExists(targetDir, ".devcontainer/Dockerfile", (path)=>DockerfileModel.fromFile(path, ".devcontainer/Dockerfile"));
|
|
207
|
-
if (devImage) monoRepo.addModel(devImage);
|
|
208
|
-
const gitignore = loadIfExists(targetDir, ".gitignore", (path)=>Gitignore.fromFile(path));
|
|
209
|
-
if (gitignore) monoRepo.addModel(gitignore);
|
|
210
|
-
if (!pkg.hasScript("package")) {
|
|
211
|
-
pkg.addScript("package", "pnpm run build && forge package");
|
|
212
|
-
}
|
|
213
196
|
for (const [offset, apiName] of apiNames.entries()){
|
|
214
197
|
const port = webapiPort(existing.length + offset);
|
|
215
198
|
pkg.addScript(`start:${apiName}`, `node ${webapiReleaseEntry(apiName)}`);
|
|
216
|
-
pkg.addScript(`
|
|
217
|
-
pkg.addScript(`dev:${apiName}`, `PORT=${port} flux serve --env-file-if-exists .env --project ${webapiPackageName(name, apiName)}`);
|
|
199
|
+
pkg.addScript(`dev:${apiName}`, `PORT=${port} flux serve --project ${webapiPackageName(name, apiName)}`);
|
|
218
200
|
addApiProject(monoRepo, name, apiName);
|
|
219
201
|
}
|
|
220
|
-
monoRepo.addModel(new WebapiProductionDockerfile(apiNames
|
|
202
|
+
monoRepo.addModel(new WebapiProductionDockerfile(apiNames, {
|
|
203
|
+
namedOnly: true
|
|
204
|
+
}));
|
|
221
205
|
return monoRepo;
|
|
222
206
|
}
|
|
223
207
|
function addApiProject(monoRepo, workspaceName, apiName) {
|
|
@@ -229,17 +213,5 @@ function addApiProject(monoRepo, workspaceName, apiName) {
|
|
|
229
213
|
apiProject.addFile(new SampleServiceModel());
|
|
230
214
|
monoRepo.addProject(apiProject);
|
|
231
215
|
}
|
|
232
|
-
|
|
233
|
-
for (const [offset, apiName] of apiNames.entries()){
|
|
234
|
-
const port = webapiPort(firstIndex + offset);
|
|
235
|
-
devContainer.forwardPort(port);
|
|
236
|
-
devContainer.setPortAttributes(port, {
|
|
237
|
-
label: apiName === DEFAULT_WEBAPI_NAME ? "API" : apiName,
|
|
238
|
-
requireLocalPort: true
|
|
239
|
-
});
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
function loadIfExists(targetDir, relativePath, load) {
|
|
243
|
-
const absolutePath = join(targetDir, relativePath);
|
|
244
|
-
return existsSync(absolutePath) ? load(absolutePath) : undefined;
|
|
245
|
-
}
|
|
216
|
+
|
|
217
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvY3JlYXRlLWFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgRG9ja2VyQ29tcG9zZSB9IGZyb20gXCIuLi9tb2RlbHMvY29tcG9zZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29uZmlnWWFtbCB9IGZyb20gXCIuLi9tb2RlbHMvY29uZmlnLXlhbWwubW9kZWwuanNcIjtcbmltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbnN0LmpzXCI7XG5pbXBvcnQgeyBEZXZDb250YWluZXIgfSBmcm9tIFwiLi4vbW9kZWxzL2Rldi1jb250YWluZXIubW9kZWwuanNcIjtcbmltcG9ydCB7IGNvbW1hbmRIaXN0b3J5IH0gZnJvbSBcIi4uL21vZGVscy9kb2NrZXItaW1hZ2UubW9kZWwuanNcIjtcbmltcG9ydCB7IEVudkZpbGUgfSBmcm9tIFwiLi4vbW9kZWxzL2Vudi1maWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBHaXRpZ25vcmUgfSBmcm9tIFwiLi4vbW9kZWxzL2dpdGlnbm9yZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTGF1bmNoSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvbGF1bmNoLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IFBhY2thZ2VKc29uIH0gZnJvbSBcIi4uL21vZGVscy9wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IE1vbm9SZXBvU2NhZmZvbGQsIFByb2plY3RTY2FmZm9sZCB9IGZyb20gXCIuLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVHNDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL3RzY29uZmlnLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBWaXRlc3RDb25maWcgfSBmcm9tIFwiLi4vbW9kZWxzL3ZpdGVzdC1jb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQge1xuXHRDcmVhdGVDbGlFcnJvcixcblx0aXNEZWNvaGVyZVdvcmtzcGFjZSxcblx0bGlzdEV4aXN0aW5nQXBpTmFtZXMsXG5cdHBhcnNlQXBpTmFtZXMsXG59IGZyb20gXCIuL2FwaS1uYW1lLmpzXCI7XG5pbXBvcnQge1xuXHRERUZBVUxUX1dFQkFQSV9OQU1FLFxuXHR3ZWJhcGlQYWNrYWdlTmFtZSxcblx0d2ViYXBpUG9ydCxcblx0d2ViYXBpUHJvamVjdERpcixcblx0d2ViYXBpUmVsZWFzZUVudHJ5LFxufSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVySG9zdFNjcmlwdHMgfSBmcm9tIFwiLi9kZXZjb250YWluZXIvaG9zdC1zY3JpcHRzLmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGh1YkNpV29ya2Zsb3dzIH0gZnJvbSBcIi4vbW9kZWxzL2dpdGh1Yi1jaS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvcHJvZHVjdGlvbi1kb2NrZXJmaWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBTYW1wbGVDb25maWdNb2RlbCwgU2FtcGxlU2VydmljZU1vZGVsIH0gZnJvbSBcIi4vbW9kZWxzL3NhbXBsZS1maWxlcy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgV2ViYXBpRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4vbW9kZWxzL3dlYmFwaS1pbWFnZS5tb2RlbC5qc1wiO1xuXG5leHBvcnQgeyBXRUJBUElfUFJPSkVDVF9ESVIsIFdFQkFQSV9SRUxFQVNFX0VOVFJZIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcblxuZXhwb3J0IHR5cGUgQXBpT3B0aW9ucyA9IHtcblx0ZD86IHN0cmluZztcblx0LyoqIEhvc3QgcHJvamVjdCBuYW1lIChkaXJlY3RvcnkgYmFzZW5hbWUpLiBSZXF1aXJlZCB3aGVuIHNjYWZmb2xkaW5nIGludG8gYC93b3Jrc3BhY2VgLiAqL1xuXHRwcm9qZWN0TmFtZT86IHN0cmluZztcblx0LyoqIEFQSSBzbHVncyB1bmRlciBgcHJvamVjdHMvYC4gRGVmYXVsdCBgW1wiYXBpXCJdYC4gUmVwZWF0YWJsZSBgLS1uYW1lYC4gKi9cblx0bmFtZXM/OiBzdHJpbmdbXTtcblx0LyoqIEFkZCBBUElzIHRvIGFuIGV4aXN0aW5nIERlY29oZXJlIHdvcmtzcGFjZSBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gKi9cblx0YWRkPzogYm9vbGVhbjtcblx0YXV0aFByb3ZpZGVyPzogXCJhdXRoMFwiIHwgXCJub25lXCI7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuY29uc3QgZmVhdHVyZXMgPSBbRGF0YWJhc2VGZWF0dXJlLCBBdXRoRmVhdHVyZSwgUG9zdG1hbkZlYXR1cmUsIEZpbmFsaXplRmVhdHVyZV07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZEFwaShjbGlPcHRpb25zOiBBcGlPcHRpb25zKSB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoY2xpT3B0aW9ucy5kID8/IFwiLlwiKTtcblx0Y29uc3QgcHJvamVjdE5hbWUgPVxuXHRcdGNsaU9wdGlvbnMucHJvamVjdE5hbWU/LnRyaW0oKSB8fFxuXHRcdHByb2Nlc3MuZW52LkRFQ09IRVJFX1BST0pFQ1RfTkFNRT8udHJpbSgpIHx8XG5cdFx0YmFzZW5hbWUodGFyZ2V0RGlyKTtcblx0Y29uc3QgbmFtZXMgPSBwYXJzZUFwaU5hbWVzKGNsaU9wdGlvbnMubmFtZXMpO1xuXHRjb25zdCB3b3Jrc3BhY2UgPSBjbGlPcHRpb25zLmFkZFxuXHRcdD8gY3JlYXRlQWRkV29ya3NwYWNlKHRhcmdldERpciwgcHJvamVjdE5hbWUsIG5hbWVzKVxuXHRcdDogY3JlYXRlV29ya3NwYWNlKHRhcmdldERpciwgcHJvamVjdE5hbWUsIG5hbWVzKTtcblx0YXdhaXQgU2NhZmZvbGRTZXJ2aWNlLnNjYWZmb2xkKHdvcmtzcGFjZSwgeyAuLi5jbGlPcHRpb25zLCBuYW1lcyB9LCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZShcblx0dGFyZ2V0RGlyOiBzdHJpbmcsXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGFwaU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0bW9ub1JlcG8uc2V0TmFtZShwcm9qZWN0TmFtZSk7XG5cdGNvbnN0IG5hbWUgPSBtb25vUmVwby5uYW1lO1xuXG5cdGNvbnN0IGNvbXBvc2UgPSBuZXcgRG9ja2VyQ29tcG9zZSgpXG5cdFx0LnNldFByb2plY3ROYW1lKG5hbWUpXG5cdFx0LmFkZEhlYWRlckNvbW1lbnQoXG5cdFx0XHRcIk1lcmdlIC5jdXJzb3IvbWNwLmpzb24gaW4gdGhlIHNlcnZpY2UgY29tbWFuZC4gcG9zdFN0YXJ0Q29tbWFuZCBydW5zIGFmdGVyIEN1cnNvcidzIGZpcnN0IE1DUCBzbmFwc2hvdC5cIixcblx0XHQpXG5cdFx0LmFkZE5ldHdvcmsobmFtZSwgeyBuYW1lOiBgc2FtcGxlcy0ke25hbWV9YCB9KVxuXHRcdC5hZGRTZXJ2aWNlKFwiZGV2Y29udGFpbmVyXCIsIHtcblx0XHRcdGJ1aWxkOiBcIi5cIixcblx0XHRcdHZvbHVtZXM6IFtcblx0XHRcdFx0Ly8gV29ya3NwYWNlLWxvY2FsIChjcmVhdGVkIGJ5IGluaXRpYWxpemUuc2ggYXMgdGhlIGhvc3QgdXNlcikuXG5cdFx0XHRcdC8vIERvIE5PVCBiaW5kICR7SE9NRX0vLm5wbS8uLi4g4oCUIERvY2tlciBjcmVhdGVzIG1pc3NpbmcgaG9zdCBwYXRocyBhcyByb290LlxuXHRcdFx0XHRcIi4vbnBtLWF1dGg6L2hvbWUvbm9kZS8ubnBtLWNvbmZpZ1wiLFxuXHRcdFx0XHRcIi4vZ2gtYXV0aDovaG9tZS9ub2RlLy5jb25maWcvZ2hcIixcblx0XHRcdFx0XCJ3ZWJhcGktbm9kZS1tb2R1bGVzOi93b3Jrc3BhY2Uvbm9kZV9tb2R1bGVzXCIsXG5cdFx0XHRcdC8vIE5hbWVkIHZvbHVtZSAobm90IGEgQ3Vyc29yLW9ubHkgbW91bnQpIHNvIENMSSByZWNyZWF0ZXMga2VlcCBVcC1hcnJvdyBoaXN0b3J5LlxuXHRcdFx0XHRgJHtjb21tYW5kSGlzdG9yeS52b2x1bWVOYW1lfToke2NvbW1hbmRIaXN0b3J5LmRpcn1gLFxuXHRcdFx0XSxcblx0XHRcdGVudl9maWxlOiBbXCIuL2doLmVudlwiXSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOlxuXHRcdFx0XHRcIidiYXNoIC1jIFxcXCJDT0RFQkFTRV9SQUdfV09SS1NQQUNFPS93b3Jrc3BhY2Ugbm9kZSAtLWV4cGVyaW1lbnRhbC1zdHJpcC10eXBlcyAvd29ya3NwYWNlLy5kZXZjb250YWluZXIvY29kZWJhc2UtcmFnLW1jcC50cyBtZXJnZSB8fCB0cnVlICYmIGV4ZWMgc2xlZXAgaW5maW5pdHlcXFwiJ1wiLFxuXHRcdFx0bmV0d29ya3M6IFtuYW1lXSxcblx0XHR9KVxuXHRcdC5hZGRWb2x1bWUoXCJ3ZWJhcGktbm9kZS1tb2R1bGVzXCIpXG5cdFx0LmFkZFZvbHVtZShjb21tYW5kSGlzdG9yeS52b2x1bWVOYW1lKTtcblxuXHRjb25zdCBpbnN0YWxsQ21kID0gXCJiYXNoIC5kZXZjb250YWluZXIvcG9zdC1jcmVhdGUuc2hcIjtcblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuc2V0SW5pdGlhbGl6ZUNvbW1hbmQoXCJiYXNoIC5kZXZjb250YWluZXIvaW5pdGlhbGl6ZS5zaFwiKVxuXHRcdC5zZXRQb3N0Q3JlYXRlQ29tbWFuZChpbnN0YWxsQ21kKVxuXHRcdC5zZXRVcGRhdGVDb250ZW50Q29tbWFuZChpbnN0YWxsQ21kKVxuXHRcdC5zZXRQb3N0U3RhcnRDb21tYW5kKFwiYmFzaCAuZGV2Y29udGFpbmVyL3Bvc3Qtc3RhcnQuc2hcIilcblx0XHQudXNlQ29tcG9zZSgpO1xuXG5cdGZvciAoY29uc3QgW2luZGV4LCBhcGlOYW1lXSBvZiBhcGlOYW1lcy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCBwb3J0ID0gd2ViYXBpUG9ydChpbmRleCk7XG5cdFx0ZGV2Q29udGFpbmVyLmZvcndhcmRQb3J0KHBvcnQpO1xuXHRcdGRldkNvbnRhaW5lci5zZXRQb3J0QXR0cmlidXRlcyhwb3J0LCB7XG5cdFx0XHRsYWJlbDogYXBpTmFtZSA9PT0gREVGQVVMVF9XRUJBUElfTkFNRSA/IFwiQVBJXCIgOiBhcGlOYW1lLFxuXHRcdFx0cmVxdWlyZUxvY2FsUG9ydDogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXG5cdC8vIFdvcmtzcGFjZS1sZXZlbCBtb2RlbHMgKHJlcG8gcm9vdClcblx0bW9ub1JlcG8uYWRkTW9kZWwoY29tcG9zZSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKGRldkNvbnRhaW5lcik7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBXZWJhcGlEZXZDb250YWluZXIoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBXZWJhcGlQcm9kdWN0aW9uRG9ja2VyZmlsZShhcGlOYW1lcykpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aHViQ2lXb3JrZmxvd3MoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBWU0NvZGVTZXR0aW5ncyhuYW1lKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBMYXVuY2hKc29uKGFwaU5hbWVzKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBUc0NvbmZpZygpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFZpdGVzdENvbmZpZygpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFBhY2thZ2VKc29uKGAke25hbWV9LmFwaWAsIHsgYXBpTmFtZXMsIHdvcmtzcGFjZU5hbWU6IG5hbWUgfSkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MLCBcImNvbmZpZy9jb25maWcueWFtbFwiLCBcIlwiKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBHaXRpZ25vcmUoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBFbnZGaWxlKCkpO1xuXHRtb25vUmVwby5hZGRGaWxlKG5ldyBEZXZDb250YWluZXJIb3N0U2NyaXB0cygpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdGZvciAoY29uc3QgYXBpTmFtZSBvZiBhcGlOYW1lcykge1xuXHRcdGFkZEFwaVByb2plY3QobW9ub1JlcG8sIG5hbWUsIGFwaU5hbWUpO1xuXHR9XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZGRXb3Jrc3BhY2UoXG5cdHRhcmdldERpcjogc3RyaW5nLFxuXHRwcm9qZWN0TmFtZTogc3RyaW5nLFxuXHRhcGlOYW1lczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBNb25vUmVwb1NjYWZmb2xkIHtcblx0aWYgKCFpc0RlY29oZXJlV29ya3NwYWNlKHRhcmdldERpcikpIHtcblx0XHR0aHJvdyBuZXcgQ3JlYXRlQ2xpRXJyb3IoXG5cdFx0XHRgTm90IGEgRGVjb2hlcmUgd29ya3NwYWNlOiAke3RhcmdldERpcn0uIFNjYWZmb2xkIG9uZSBmaXJzdCB3aXRoIFxcYG5weCBAZGVjb2hlcmUvY3JlYXRlIHdlYmFwaVxcYC5gLFxuXHRcdCk7XG5cdH1cblxuXHRjb25zdCBleGlzdGluZyA9IGxpc3RFeGlzdGluZ0FwaU5hbWVzKHRhcmdldERpcik7XG5cdGZvciAoY29uc3QgYXBpTmFtZSBvZiBhcGlOYW1lcykge1xuXHRcdGlmIChleGlzdGluZy5pbmNsdWRlcyhhcGlOYW1lKSkge1xuXHRcdFx0dGhyb3cgbmV3IENyZWF0ZUNsaUVycm9yKFxuXHRcdFx0XHRgQVBJIFwiJHthcGlOYW1lfVwiIGFscmVhZHkgZXhpc3RzIGF0ICR7d2ViYXBpUHJvamVjdERpcihhcGlOYW1lKX0uYCxcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0Y29uc3QgbW9ub1JlcG8gPSBuZXcgTW9ub1JlcG9TY2FmZm9sZCgpO1xuXHRtb25vUmVwby50YXJnZXREaXIgPSB0YXJnZXREaXI7XG5cdG1vbm9SZXBvLnNldE5hbWUocHJvamVjdE5hbWUpO1xuXHRjb25zdCBuYW1lID0gbW9ub1JlcG8ubmFtZTtcblxuXHRjb25zdCBwa2cgPSBQYWNrYWdlSnNvbi5mcm9tRmlsZShqb2luKHRhcmdldERpciwgXCJwYWNrYWdlLmpzb25cIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChwa2cpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRleGlzdHNTeW5jKGpvaW4odGFyZ2V0RGlyLCBcIi5lbnZcIikpXG5cdFx0XHQ/IEVudkZpbGUuZnJvbUZpbGUoam9pbih0YXJnZXREaXIsIFwiLmVudlwiKSlcblx0XHRcdDogbmV3IEVudkZpbGUoKSxcblx0KTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0ZXhpc3RzU3luYyhqb2luKHRhcmdldERpciwgXCJjb25maWcvY29uZmlnLnlhbWxcIikpXG5cdFx0XHQ/IENvbmZpZ1lhbWwuZnJvbUZpbGUoXG5cdFx0XHRcdFx0V0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCxcblx0XHRcdFx0XHRcImNvbmZpZy9jb25maWcueWFtbFwiLFxuXHRcdFx0XHRcdGpvaW4odGFyZ2V0RGlyLCBcImNvbmZpZy9jb25maWcueWFtbFwiKSxcblx0XHRcdFx0KVxuXHRcdFx0OiBuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MLCBcImNvbmZpZy9jb25maWcueWFtbFwiLCBcIlwiKSxcblx0KTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0ZXhpc3RzU3luYyhqb2luKHRhcmdldERpciwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIpKVxuXHRcdFx0PyBDb25maWdZYW1sLmZyb21GaWxlKFxuXHRcdFx0XHRcdFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLFxuXHRcdFx0XHRcdFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiLFxuXHRcdFx0XHRcdGpvaW4odGFyZ2V0RGlyLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiksXG5cdFx0XHRcdClcblx0XHRcdDogbmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwsIFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiLCBcIlwiKSxcblx0KTtcblxuXHRmb3IgKGNvbnN0IFtvZmZzZXQsIGFwaU5hbWVdIG9mIGFwaU5hbWVzLmVudHJpZXMoKSkge1xuXHRcdGNvbnN0IHBvcnQgPSB3ZWJhcGlQb3J0KGV4aXN0aW5nLmxlbmd0aCArIG9mZnNldCk7XG5cdFx0cGtnLmFkZFNjcmlwdChgc3RhcnQ6JHthcGlOYW1lfWAsIGBub2RlICR7d2ViYXBpUmVsZWFzZUVudHJ5KGFwaU5hbWUpfWApO1xuXHRcdHBrZy5hZGRTY3JpcHQoXG5cdFx0XHRgZGV2OiR7YXBpTmFtZX1gLFxuXHRcdFx0YFBPUlQ9JHtwb3J0fSBmbHV4IHNlcnZlIC0tcHJvamVjdCAke3dlYmFwaVBhY2thZ2VOYW1lKG5hbWUsIGFwaU5hbWUpfWAsXG5cdFx0KTtcblx0XHRhZGRBcGlQcm9qZWN0KG1vbm9SZXBvLCBuYW1lLCBhcGlOYW1lKTtcblx0fVxuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUoYXBpTmFtZXMsIHsgbmFtZWRPbmx5OiB0cnVlIH0pKTtcblxuXHRyZXR1cm4gbW9ub1JlcG87XG59XG5cbmZ1bmN0aW9uIGFkZEFwaVByb2plY3QoXG5cdG1vbm9SZXBvOiBNb25vUmVwb1NjYWZmb2xkLFxuXHR3b3Jrc3BhY2VOYW1lOiBzdHJpbmcsXG5cdGFwaU5hbWU6IHN0cmluZyxcbik6IHZvaWQge1xuXHRjb25zdCBhcGlQcm9qZWN0ID0gbmV3IFByb2plY3RTY2FmZm9sZCh3ZWJhcGlQcm9qZWN0RGlyKGFwaU5hbWUpKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQXBpUGFja2FnZUpzb24od29ya3NwYWNlTmFtZSwgYXBpTmFtZSkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBNYWluU291cmNlRmlsZShgJHt3b3Jrc3BhY2VOYW1lfS4ke2FwaU5hbWV9YCkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBDb250cm9sbGVyU291cmNlRmlsZSgpKTtcblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVDb25maWdNb2RlbCgpKTtcblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVTZXJ2aWNlTW9kZWwoKSk7XG5cdG1vbm9SZXBvLmFkZFByb2plY3QoYXBpUHJvamVjdCk7XG59XG4iXSwibmFtZXMiOlsiZXhpc3RzU3luYyIsImJhc2VuYW1lIiwiam9pbiIsInJlc29sdmUiLCJEb2NrZXJDb21wb3NlIiwiQ29uZmlnWWFtbCIsIldFTExfS05PV05fRklMRVMiLCJEZXZDb250YWluZXIiLCJjb21tYW5kSGlzdG9yeSIsIkVudkZpbGUiLCJHaXRpZ25vcmUiLCJMYXVuY2hKc29uIiwiUGFja2FnZUpzb24iLCJNb25vUmVwb1NjYWZmb2xkIiwiUHJvamVjdFNjYWZmb2xkIiwiVHNDb25maWciLCJWaXRlc3RDb25maWciLCJWU0NvZGVTZXR0aW5ncyIsIlNjYWZmb2xkU2VydmljZSIsIkNyZWF0ZUNsaUVycm9yIiwiaXNEZWNvaGVyZVdvcmtzcGFjZSIsImxpc3RFeGlzdGluZ0FwaU5hbWVzIiwicGFyc2VBcGlOYW1lcyIsIkRFRkFVTFRfV0VCQVBJX05BTUUiLCJ3ZWJhcGlQYWNrYWdlTmFtZSIsIndlYmFwaVBvcnQiLCJ3ZWJhcGlQcm9qZWN0RGlyIiwid2ViYXBpUmVsZWFzZUVudHJ5IiwiRGV2Q29udGFpbmVySG9zdFNjcmlwdHMiLCJBdXRoRmVhdHVyZSIsIkRhdGFiYXNlRmVhdHVyZSIsIkZpbmFsaXplRmVhdHVyZSIsIlBvc3RtYW5GZWF0dXJlIiwiQXBpUGFja2FnZUpzb24iLCJDb250cm9sbGVyU291cmNlRmlsZSIsIkdpdGh1YkNpV29ya2Zsb3dzIiwiTWFpblNvdXJjZUZpbGUiLCJXZWJhcGlQcm9kdWN0aW9uRG9ja2VyZmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiV0VCQVBJX1BST0pFQ1RfRElSIiwiV0VCQVBJX1JFTEVBU0VfRU5UUlkiLCJmZWF0dXJlcyIsInNjYWZmb2xkQXBpIiwiY2xpT3B0aW9ucyIsInRhcmdldERpciIsImQiLCJwcm9qZWN0TmFtZSIsInRyaW0iLCJwcm9jZXNzIiwiZW52IiwiREVDT0hFUkVfUFJPSkVDVF9OQU1FIiwibmFtZXMiLCJ3b3Jrc3BhY2UiLCJhZGQiLCJjcmVhdGVBZGRXb3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJzY2FmZm9sZCIsImFwaU5hbWVzIiwibW9ub1JlcG8iLCJzZXROYW1lIiwibmFtZSIsImNvbXBvc2UiLCJzZXRQcm9qZWN0TmFtZSIsImFkZEhlYWRlckNvbW1lbnQiLCJhZGROZXR3b3JrIiwiYWRkU2VydmljZSIsImJ1aWxkIiwidm9sdW1lcyIsInZvbHVtZU5hbWUiLCJkaXIiLCJlbnZfZmlsZSIsImVudmlyb25tZW50IiwiTlBNX0NPTkZJR19VU0VSQ09ORklHIiwiY29tbWFuZCIsIm5ldHdvcmtzIiwiYWRkVm9sdW1lIiwiaW5zdGFsbENtZCIsImRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsInNldEluaXRpYWxpemVDb21tYW5kIiwic2V0UG9zdENyZWF0ZUNvbW1hbmQiLCJzZXRVcGRhdGVDb250ZW50Q29tbWFuZCIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiaW5kZXgiLCJhcGlOYW1lIiwiZW50cmllcyIsInBvcnQiLCJmb3J3YXJkUG9ydCIsInNldFBvcnRBdHRyaWJ1dGVzIiwibGFiZWwiLCJyZXF1aXJlTG9jYWxQb3J0IiwiYWRkTW9kZWwiLCJ3b3Jrc3BhY2VOYW1lIiwiQ09ORklHX1lBTUwiLCJDT05GSUdfREVWX1lBTUwiLCJhZGRGaWxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiJHNjaGVtYSIsImluY2x1ZGVzIiwiYXNzaXN0IiwiYWN0aW9ucyIsInNvdXJjZSIsIm9yZ2FuaXplSW1wb3J0cyIsInZjcyIsImVuYWJsZWQiLCJjbGllbnRLaW5kIiwidXNlSWdub3JlRmlsZSIsImZvcm1hdHRlciIsImZvcm1hdFdpdGhFcnJvcnMiLCJpbmRlbnRTdHlsZSIsImxpbmVXaWR0aCIsImphdmFzY3JpcHQiLCJwYXJzZXIiLCJ1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCIsImxpbnRlciIsInJ1bGVzIiwic3R5bGUiLCJ1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eSIsImxldmVsIiwib3B0aW9ucyIsImFjY2Vzc2liaWxpdHkiLCJvdmVycmlkZXMiLCJpbmRlbnRXaWR0aCIsImFkZEFwaVByb2plY3QiLCJleGlzdGluZyIsInBrZyIsImZyb21GaWxlIiwib2Zmc2V0IiwibGVuZ3RoIiwiYWRkU2NyaXB0IiwibmFtZWRPbmx5IiwiYXBpUHJvamVjdCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxVQUFVO0FBQ3JDLFNBQVNDLFFBQVEsRUFBRUMsSUFBSSxFQUFFQyxPQUFPLFFBQVEsWUFBWTtBQUNwRCxTQUFTQyxhQUFhLFFBQVEsNkJBQTZCO0FBQzNELFNBQVNDLFVBQVUsUUFBUSxpQ0FBaUM7QUFDNUQsU0FBU0MsZ0JBQWdCLFFBQVEscUJBQXFCO0FBQ3RELFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsU0FBU0MsY0FBYyxRQUFRLGtDQUFrQztBQUNqRSxTQUFTQyxPQUFPLFFBQVEsOEJBQThCO0FBQ3RELFNBQVNDLFNBQVMsUUFBUSwrQkFBK0I7QUFDekQsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxTQUFTQyxXQUFXLFFBQVEsa0NBQWtDO0FBQzlELFNBQVNDLGdCQUFnQixFQUFFQyxlQUFlLFFBQVEsNkJBQTZCO0FBQy9FLFNBQVNDLFFBQVEsUUFBUSw4QkFBOEI7QUFDdkQsU0FBU0MsWUFBWSxRQUFRLG1DQUFtQztBQUNoRSxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLGVBQWUsUUFBUSxrQ0FBa0M7QUFDbEUsU0FDQ0MsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLG9CQUFvQixFQUNwQkMsYUFBYSxRQUNQLGdCQUFnQjtBQUN2QixTQUNDQyxtQkFBbUIsRUFDbkJDLGlCQUFpQixFQUNqQkMsVUFBVSxFQUNWQyxnQkFBZ0IsRUFDaEJDLGtCQUFrQixRQUNaLGFBQWE7QUFDcEIsU0FBU0MsdUJBQXVC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
|
|
@@ -152,3 +152,5 @@ export const codebaseRagMcp = {
|
|
|
152
152
|
seedPrint,
|
|
153
153
|
main
|
|
154
154
|
};
|
|
155
|
+
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvZGV2Y29udGFpbmVyL2NvZGViYXNlLXJhZy1tY3AudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Y2htb2RTeW5jLFxuXHRta2RpclN5bmMsXG5cdHJlYWRGaWxlU3luYyxcblx0cmVuYW1lU3luYyxcblx0c3RhdFN5bmMsXG5cdHdyaXRlRmlsZVN5bmMsXG59IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5leHBvcnQgdHlwZSBDb2RlYmFzZVJhZ0NyZWRlbnRpYWxzID0ge1xuXHR1cmw6IHN0cmluZztcblx0dG9rZW46IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE1jcEpzb24gPSB7XG5cdG1jcFNlcnZlcnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmZ1bmN0aW9uIGlzUmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRyZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBsb2FkRG90ZW52KHBhdGg6IHN0cmluZywgZW52OiBOb2RlSlMuUHJvY2Vzc0Vudik6IHZvaWQge1xuXHRsZXQgcmF3OiBzdHJpbmc7XG5cdHRyeSB7XG5cdFx0cmF3ID0gcmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGZvciAoY29uc3QgbGluZSBvZiByYXcuc3BsaXQoL1xccj9cXG4vKSkge1xuXHRcdGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcblx0XHRpZiAoIXRyaW1tZWQgfHwgdHJpbW1lZC5zdGFydHNXaXRoKFwiI1wiKSB8fCAhdHJpbW1lZC5pbmNsdWRlcyhcIj1cIikpIGNvbnRpbnVlO1xuXHRcdGNvbnN0IGVxID0gdHJpbW1lZC5pbmRleE9mKFwiPVwiKTtcblx0XHRjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxKS50cmltKCk7XG5cdFx0Y29uc3QgdmFsdWUgPSB0cmltbWVkXG5cdFx0XHQuc2xpY2UoZXEgKyAxKVxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15bXCInXXxbXCInXSQvZywgXCJcIik7XG5cdFx0aWYgKGtleSAmJiBlbnZba2V5XSA9PT0gdW5kZWZpbmVkKSBlbnZba2V5XSA9IHZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNlZWRGcm9tTWNwSnNvbihyYXc6IHN0cmluZyk6IENvZGViYXNlUmFnQ3JlZGVudGlhbHMgfCBudWxsIHtcblx0bGV0IGRhdGE6IHVua25vd247XG5cdHRyeSB7XG5cdFx0ZGF0YSA9IEpTT04ucGFyc2UocmF3KTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKCFpc1JlY29yZChkYXRhKSkgcmV0dXJuIG51bGw7XG5cdGNvbnN0IHNlcnZlcnMgPSBkYXRhLm1jcFNlcnZlcnM7XG5cdGlmICghaXNSZWNvcmQoc2VydmVycykpIHJldHVybiBudWxsO1xuXHRjb25zdCBzZXJ2ZXIgPSBzZXJ2ZXJzW1wiY29kZWJhc2UtcmFnXCJdO1xuXHRpZiAoIWlzUmVjb3JkKHNlcnZlcikpIHJldHVybiBudWxsO1xuXHRjb25zdCB1cmwgPSB0eXBlb2Ygc2VydmVyLnVybCA9PT0gXCJzdHJpbmdcIiA/IHNlcnZlci51cmwudHJpbSgpIDogXCJcIjtcblx0Y29uc3QgaGVhZGVycyA9IGlzUmVjb3JkKHNlcnZlci5oZWFkZXJzKSA/IHNlcnZlci5oZWFkZXJzIDoge307XG5cdGNvbnN0IGF1dGggPSB0eXBlb2YgaGVhZGVycy5BdXRob3JpemF0aW9uID09PSBcInN0cmluZ1wiID8gaGVhZGVycy5BdXRob3JpemF0aW9uLnRyaW0oKSA6IFwiXCI7XG5cdGNvbnN0IHRva2VuID0gYXV0aC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoXCJiZWFyZXIgXCIpID8gYXV0aC5zbGljZSg3KS50cmltKCkgOiBcIlwiO1xuXHRpZiAoIXVybC5zdGFydHNXaXRoKFwiaHR0cFwiKSB8fCB0b2tlbi5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuXHRyZXR1cm4geyB1cmwsIHRva2VuIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlSW50b01jcEpzb24oaW5wdXQ6IHtcblx0bWNwUGF0aDogc3RyaW5nO1xuXHR1cmw6IHN0cmluZztcblx0dG9rZW46IHN0cmluZztcblx0aG9zdFJvb3Q6IHN0cmluZztcbn0pOiB7IHNraXBwZWQ/OiBzdHJpbmc7IHBhdGg/OiBzdHJpbmc7IHJvb3Q/OiBzdHJpbmcgfSB7XG5cdGNvbnN0IHsgbWNwUGF0aCwgdXJsLCB0b2tlbiwgaG9zdFJvb3QgfSA9IGlucHV0O1xuXHRpZiAoIXVybCB8fCAhdG9rZW4pIHtcblx0XHRyZXR1cm4geyBza2lwcGVkOiBcIm5vIFVSTC90b2tlblwiIH07XG5cdH1cblxuXHRjb25zdCB4Um9vdCA9IGhvc3RSb290IHx8IFwiJHt3b3Jrc3BhY2VGb2xkZXJ9XCI7XG5cdG1rZGlyU3luYyhkaXJuYW1lKG1jcFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRsZXQgZGF0YTogTWNwSnNvbiA9IHsgbWNwU2VydmVyczoge30gfTtcblx0dHJ5IHtcblx0XHRpZiAoc3RhdFN5bmMobWNwUGF0aCkuc2l6ZSA+IDApIHtcblx0XHRcdGNvbnN0IGxvYWRlZDogdW5rbm93biA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKG1jcFBhdGgsIFwidXRmOFwiKSk7XG5cdFx0XHRpZiAoaXNSZWNvcmQobG9hZGVkKSkgZGF0YSA9IGxvYWRlZCBhcyBNY3BKc29uO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Y29uc3QgY29kZSA9IGlzUmVjb3JkKGVycikgJiYgdHlwZW9mIGVyci5jb2RlID09PSBcInN0cmluZ1wiID8gZXJyLmNvZGUgOiBcIlwiO1xuXHRcdGlmIChjb2RlICE9PSBcIkVOT0VOVFwiKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcblx0XHRcdFx0XCJjb2RlYmFzZS1yYWcgTUNQOiBleGlzdGluZyBtY3AuanNvbiBpcyBpbnZhbGlkIEpTT047IHJlcGxhY2luZyByYWcgZW50cnkgb25seSBhZnRlciBiYWNrdXBcIixcblx0XHRcdCk7XG5cdFx0XHRyZW5hbWVTeW5jKG1jcFBhdGgsIGAke21jcFBhdGh9LmJha2ApO1xuXHRcdH1cblx0fVxuXG5cdGNvbnN0IHNlcnZlcnMgPSBpc1JlY29yZChkYXRhLm1jcFNlcnZlcnMpID8gZGF0YS5tY3BTZXJ2ZXJzIDoge307XG5cdGRhdGEubWNwU2VydmVycyA9IHNlcnZlcnM7XG5cdHNlcnZlcnNbXCJjb2RlYmFzZS1yYWdcIl0gPSB7XG5cdFx0dXJsLFxuXHRcdGhlYWRlcnM6IHtcblx0XHRcdEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuXHRcdFx0XCJYLUNvZGViYXNlLVJvb3RcIjogeFJvb3QsXG5cdFx0fSxcblx0fTtcblx0d3JpdGVGaWxlU3luYyhtY3BQYXRoLCBgJHtKU09OLnN0cmluZ2lmeShkYXRhLCBudWxsLCAyKX1cXG5gLCBcInV0ZjhcIik7XG5cdHRyeSB7XG5cdFx0Y2htb2RTeW5jKG1jcFBhdGgsIDBvNjAwKTtcblx0fSBjYXRjaCB7XG5cdFx0Ly8gbWVtZnMgYW5kIHNvbWUgaG9zdHMgb21pdCBjaG1vZFxuXHR9XG5cdHJldHVybiB7IHBhdGg6IG1jcFBhdGgsIHJvb3Q6IHhSb290IH07XG59XG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVJvb3QoZW52OiBOb2RlSlMuUHJvY2Vzc0VudiA9IHByb2Nlc3MuZW52KTogc3RyaW5nIHtcblx0Y29uc3QgZnJvbUVudiA9IGVudi5DT0RFQkFTRV9SQUdfV09SS1NQQUNFPy50cmltKCk7XG5cdGlmIChmcm9tRW52KSByZXR1cm4gZnJvbUVudjtcblx0Ly8gU2NhZmZvbGRlZCBjb3B5IGxpdmVzIGF0IDxyZXBvPi8uZGV2Y29udGFpbmVyL2NvZGViYXNlLXJhZy1tY3AudHNcblx0cmV0dXJuIGRpcm5hbWUoZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VGcm9tRW52KGVudjogTm9kZUpTLlByb2Nlc3NFbnYgPSBwcm9jZXNzLmVudik6IG51bWJlciB7XG5cdGNvbnN0IHJvb3QgPSB3b3Jrc3BhY2VSb290KGVudik7XG5cdGNvbnN0IGN1cnNvckRpciA9IGpvaW4ocm9vdCwgXCIuY3Vyc29yXCIpO1xuXHRsb2FkRG90ZW52KGpvaW4oY3Vyc29yRGlyLCBcImNvZGViYXNlLXJhZy5lbnZcIiksIGVudik7XG5cdGNvbnN0IHVybCA9IChlbnYuQ09ERUJBU0VfUkFHX01DUF9VUkwgPz8gXCJcIikudHJpbSgpO1xuXHRjb25zdCB0b2tlbiA9IChlbnYuQ09ERUJBU0VfUkFHX01DUF9UT0tFTiA/PyBcIlwiKS50cmltKCk7XG5cdGNvbnN0IGhvc3RSb290ID0gKGVudi5DT0RFQkFTRV9SQUdfTUNQX1JPT1QgPz8gXCJcIikudHJpbSgpIHx8IHJvb3Q7XG5cdGNvbnN0IHJlc3VsdCA9IG1lcmdlSW50b01jcEpzb24oe1xuXHRcdG1jcFBhdGg6IGpvaW4oY3Vyc29yRGlyLCBcIm1jcC5qc29uXCIpLFxuXHRcdHVybCxcblx0XHR0b2tlbixcblx0XHRob3N0Um9vdCxcblx0fSk7XG5cdGlmIChyZXN1bHQuc2tpcHBlZCAhPSBudWxsKSB7XG5cdFx0Y29uc29sZS5sb2coYGNvZGViYXNlLXJhZyBNQ1A6IHNraXBwZWQgKCR7cmVzdWx0LnNraXBwZWR9KWApO1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGNvbnNvbGUubG9nKGBjb2RlYmFzZS1yYWcgTUNQOiB3cm90ZSAke3Jlc3VsdC5wYXRofSB1cmw9JHt1cmx9IHJvb3Q9JHtyZXN1bHQucm9vdH1gKTtcblx0cmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHNlZWRQcmludChtY3BQYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuXHRsZXQgcmF3OiBzdHJpbmc7XG5cdHRyeSB7XG5cdFx0cmF3ID0gcmVhZEZpbGVTeW5jKG1jcFBhdGgsIFwidXRmOFwiKTtcblx0fSBjYXRjaCB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblx0Y29uc3QgY3JlZHMgPSBzZWVkRnJvbU1jcEpzb24ocmF3KTtcblx0aWYgKGNyZWRzID09IG51bGwpIHJldHVybiAxO1xuXHRjb25zb2xlLmxvZyhjcmVkcy51cmwpO1xuXHRjb25zb2xlLmxvZyhjcmVkcy50b2tlbik7XG5cdHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBtYWluKGFyZ3YgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpOiBudW1iZXIge1xuXHRjb25zdCBjb21tYW5kID0gYXJndlswXSA/PyBcIm1lcmdlXCI7XG5cdGlmIChjb21tYW5kID09PSBcInNlZWQtcHJpbnRcIikge1xuXHRcdGNvbnN0IG1jcFBhdGggPSBhcmd2WzFdO1xuXHRcdGlmIChtY3BQYXRoID09IG51bGwgfHwgbWNwUGF0aC5sZW5ndGggPT09IDApIHJldHVybiAxO1xuXHRcdHJldHVybiBzZWVkUHJpbnQobWNwUGF0aCk7XG5cdH1cblx0aWYgKGNvbW1hbmQgPT09IFwibWVyZ2VcIikge1xuXHRcdHJldHVybiBtZXJnZUZyb21FbnYoKTtcblx0fVxuXHRjb25zb2xlLmVycm9yKGBjb2RlYmFzZS1yYWcgTUNQOiB1bmtub3duIGNvbW1hbmQgJHtjb21tYW5kfWApO1xuXHRyZXR1cm4gMTtcbn1cblxuY29uc3QgaW52b2tlZCA9IChwcm9jZXNzLmFyZ3ZbMV0gPz8gXCJcIikucmVwbGFjZUFsbChcIlxcXFxcIiwgXCIvXCIpO1xuaWYgKGludm9rZWQuZW5kc1dpdGgoXCIvY29kZWJhc2UtcmFnLW1jcC50c1wiKSB8fCBpbnZva2VkLmVuZHNXaXRoKFwiL2NvZGViYXNlLXJhZy1tY3AuanNcIikpIHtcblx0cHJvY2Vzcy5leGl0KG1haW4oKSk7XG59XG5cbmV4cG9ydCBjb25zdCBjb2RlYmFzZVJhZ01jcCA9IHtcblx0bG9hZERvdGVudixcblx0c2VlZEZyb21NY3BKc29uLFxuXHRtZXJnZUludG9NY3BKc29uLFxuXHRtZXJnZUZyb21FbnYsXG5cdHNlZWRQcmludCxcblx0bWFpbixcbn07XG4iXSwibmFtZXMiOlsiY2htb2RTeW5jIiwibWtkaXJTeW5jIiwicmVhZEZpbGVTeW5jIiwicmVuYW1lU3luYyIsInN0YXRTeW5jIiwid3JpdGVGaWxlU3luYyIsImRpcm5hbWUiLCJqb2luIiwiZmlsZVVSTFRvUGF0aCIsImlzUmVjb3JkIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJsb2FkRG90ZW52IiwicGF0aCIsImVudiIsInJhdyIsImxpbmUiLCJzcGxpdCIsInRyaW1tZWQiLCJ0cmltIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwiZXEiLCJpbmRleE9mIiwia2V5Iiwic2xpY2UiLCJyZXBsYWNlIiwidW5kZWZpbmVkIiwic2VlZEZyb21NY3BKc29uIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInNlcnZlcnMiLCJtY3BTZXJ2ZXJzIiwic2VydmVyIiwidXJsIiwiaGVhZGVycyIsImF1dGgiLCJBdXRob3JpemF0aW9uIiwidG9rZW4iLCJ0b0xvd2VyQ2FzZSIsImxlbmd0aCIsIm1lcmdlSW50b01jcEpzb24iLCJpbnB1dCIsIm1jcFBhdGgiLCJob3N0Um9vdCIsInNraXBwZWQiLCJ4Um9vdCIsInJlY3Vyc2l2ZSIsInNpemUiLCJsb2FkZWQiLCJlcnIiLCJjb2RlIiwiY29uc29sZSIsImxvZyIsInN0cmluZ2lmeSIsInJvb3QiLCJ3b3Jrc3BhY2VSb290IiwicHJvY2VzcyIsImZyb21FbnYiLCJDT0RFQkFTRV9SQUdfV09SS1NQQUNFIiwibWVyZ2VGcm9tRW52IiwiY3Vyc29yRGlyIiwiQ09ERUJBU0VfUkFHX01DUF9VUkwiLCJDT0RFQkFTRV9SQUdfTUNQX1RPS0VOIiwiQ09ERUJBU0VfUkFHX01DUF9ST09UIiwicmVzdWx0Iiwic2VlZFByaW50IiwiY3JlZHMiLCJtYWluIiwiYXJndiIsImNvbW1hbmQiLCJlcnJvciIsImludm9rZWQiLCJyZXBsYWNlQWxsIiwiZW5kc1dpdGgiLCJleGl0IiwiY29kZWJhc2VSYWdNY3AiXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0NBLFNBQVMsRUFDVEMsU0FBUyxFQUNUQyxZQUFZLEVBQ1pDLFVBQVUsRUFDVkMsUUFBUSxFQUNSQyxhQUFhLFFBQ1AsVUFBVTtBQUNqQixTQUFTQyxPQUFPLEVBQUVDLElBQUksUUFBUSxZQUFZO0FBQzFDLFNBQVNDLGFBQWEsUUFBUSxXQUFXO0FBWXpDLFNBQVNDLFNBQVNDLEtBQWM7SUFDL0IsT0FBT0EsU0FBUyxRQUFRLE9BQU9BLFVBQVUsWUFBWSxDQUFDQyxNQUFNQyxPQUFPLENBQUNGO0FBQ3JFO0FBRUEsU0FBU0csV0FBV0MsSUFBWSxFQUFFQyxHQUFzQjtJQUN2RCxJQUFJQztJQUNKLElBQUk7UUFDSEEsTUFBTWQsYUFBYVksTUFBTTtJQUMxQixFQUFFLE9BQU07UUFDUDtJQUNEO0lBQ0EsS0FBSyxNQUFNRyxRQUFRRCxJQUFJRSxLQUFLLENBQUMsU0FBVTtRQUN0QyxNQUFNQyxVQUFVRixLQUFLRyxJQUFJO1FBQ3pCLElBQUksQ0FBQ0QsV0FBV0EsUUFBUUUsVUFBVSxDQUFDLFFBQVEsQ0FBQ0YsUUFBUUcsUUFBUSxDQUFDLE1BQU07UUFDbkUsTUFBTUMsS0FBS0osUUFBUUssT0FBTyxDQUFDO1FBQzNCLE1BQU1DLE1BQU1OLFFBQVFPLEtBQUssQ0FBQyxHQUFHSCxJQUFJSCxJQUFJO1FBQ3JDLE1BQU1WLFFBQVFTLFFBQ1pPLEtBQUssQ0FBQ0gsS0FBSyxHQUNYSCxJQUFJLEdBQ0pPLE9BQU8sQ0FBQyxnQkFBZ0I7UUFDMUIsSUFBSUYsT0FBT1YsR0FBRyxDQUFDVSxJQUFJLEtBQUtHLFdBQVdiLEdBQUcsQ0FBQ1UsSUFBSSxHQUFHZjtJQUMvQztBQUNEO0FBRUEsU0FBU21CLGdCQUFnQmIsR0FBVztJQUNuQyxJQUFJYztJQUNKLElBQUk7UUFDSEEsT0FBT0MsS0FBS0MsS0FBSyxDQUFDaEI7SUFDbkIsRUFBRSxPQUFNO1FBQ1AsT0FBTztJQUNSO0lBQ0EsSUFBSSxDQUFDUCxTQUFTcUIsT0FBTyxPQUFPO0lBQzVCLE1BQU1HLFVBQVVILEtBQUtJLFVBQVU7SUFDL0IsSUFBSSxDQUFDekIsU0FBU3dCLFVBQVUsT0FBTztJQUMvQixNQUFNRSxTQUFTRixPQUFPLENBQUMsZUFBZTtJQUN0QyxJQUFJLENBQUN4QixTQUFTMEIsU0FBUyxPQUFPO0lBQzlCLE1BQU1DLE1BQU0sT0FBT0QsT0FBT0MsR0FBRyxLQUFLLFdBQVdELE9BQU9DLEdBQUcsQ0FBQ2hCLElBQUksS0FBSztJQUNqRSxNQUFNaUIsVUFBVTVCLFNBQVMwQixPQUFPRSxPQUFPLElBQUlGLE9BQU9FLE9BQU8sR0FBRyxDQUFDO0lBQzdELE1BQU1DLE9BQU8sT0FBT0QsUUFBUUUsYUFBYSxLQUFLLFdBQVdGLFFBQVFFLGFBQWEsQ0FBQ25CLElBQUksS0FBSztJQUN4RixNQUFNb0IsUUFBUUYsS0FBS0csV0FBVyxHQUFHcEIsVUFBVSxDQUFDLGFBQWFpQixLQUFLWixLQUFLLENBQUMsR0FBR04sSUFBSSxLQUFLO0lBQ2hGLElBQUksQ0FBQ2dCLElBQUlmLFVBQVUsQ0FBQyxXQUFXbUIsTUFBTUUsTUFBTSxLQUFLLEdBQUcsT0FBTztJQUMxRCxPQUFPO1FBQUVOO1FBQUtJO0lBQU07QUFDckI7QUFFQSxTQUFTRyxpQkFBaUJDLEtBS3pCO0lBQ0EsTUFBTSxFQUFFQyxPQUFPLEVBQUVULEdBQUcsRUFBRUksS0FBSyxFQUFFTSxRQUFRLEVBQUUsR0FBR0Y7SUFDMUMsSUFBSSxDQUFDUixPQUFPLENBQUNJLE9BQU87UUFDbkIsT0FBTztZQUFFTyxTQUFTO1FBQWU7SUFDbEM7SUFFQSxNQUFNQyxRQUFRRixZQUFZO0lBQzFCN0MsVUFBVUssUUFBUXVDLFVBQVU7UUFBRUksV0FBVztJQUFLO0lBRTlDLElBQUluQixPQUFnQjtRQUFFSSxZQUFZLENBQUM7SUFBRTtJQUNyQyxJQUFJO1FBQ0gsSUFBSTlCLFNBQVN5QyxTQUFTSyxJQUFJLEdBQUcsR0FBRztZQUMvQixNQUFNQyxTQUFrQnBCLEtBQUtDLEtBQUssQ0FBQzlCLGFBQWEyQyxTQUFTO1lBQ3pELElBQUlwQyxTQUFTMEMsU0FBU3JCLE9BQU9xQjtRQUM5QjtJQUNELEVBQUUsT0FBT0MsS0FBSztRQUNiLE1BQU1DLE9BQU81QyxTQUFTMkMsUUFBUSxPQUFPQSxJQUFJQyxJQUFJLEtBQUssV0FBV0QsSUFBSUMsSUFBSSxHQUFHO1FBQ3hFLElBQUlBLFNBQVMsVUFBVTtZQUN0QkMsUUFBUUMsR0FBRyxDQUNWO1lBRURwRCxXQUFXMEMsU0FBUyxHQUFHQSxRQUFRLElBQUksQ0FBQztRQUNyQztJQUNEO0lBRUEsTUFBTVosVUFBVXhCLFNBQVNxQixLQUFLSSxVQUFVLElBQUlKLEtBQUtJLFVBQVUsR0FBRyxDQUFDO0lBQy9ESixLQUFLSSxVQUFVLEdBQUdEO0lBQ2xCQSxPQUFPLENBQUMsZUFBZSxHQUFHO1FBQ3pCRztRQUNBQyxTQUFTO1lBQ1JFLGVBQWUsQ0FBQyxPQUFPLEVBQUVDLE9BQU87WUFDaEMsbUJBQW1CUTtRQUNwQjtJQUNEO0lBQ0EzQyxjQUFjd0MsU0FBUyxHQUFHZCxLQUFLeUIsU0FBUyxDQUFDMUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEVBQUU7SUFDN0QsSUFBSTtRQUNIOUIsVUFBVTZDLFNBQVM7SUFDcEIsRUFBRSxPQUFNO0lBQ1Asa0NBQWtDO0lBQ25DO0lBQ0EsT0FBTztRQUFFL0IsTUFBTStCO1FBQVNZLE1BQU1UO0lBQU07QUFDckM7QUFFQSxTQUFTVSxjQUFjM0MsTUFBeUI0QyxRQUFRNUMsR0FBRztJQUMxRCxNQUFNNkMsVUFBVTdDLElBQUk4QyxzQkFBc0IsRUFBRXpDO0lBQzVDLElBQUl3QyxTQUFTLE9BQU9BO0lBQ3BCLG9FQUFvRTtJQUNwRSxPQUFPdEQsUUFBUUEsUUFBUUUsY0FBYyxZQUFZNEIsR0FBRztBQUNyRDtBQUVBLFNBQVMwQixhQUFhL0MsTUFBeUI0QyxRQUFRNUMsR0FBRztJQUN6RCxNQUFNMEMsT0FBT0MsY0FBYzNDO0lBQzNCLE1BQU1nRCxZQUFZeEQsS0FBS2tELE1BQU07SUFDN0I1QyxXQUFXTixLQUFLd0QsV0FBVyxxQkFBcUJoRDtJQUNoRCxNQUFNcUIsTUFBTSxBQUFDckIsQ0FBQUEsSUFBSWlELG9CQUFvQixJQUFJLEVBQUMsRUFBRzVDLElBQUk7SUFDakQsTUFBTW9CLFFBQVEsQUFBQ3pCLENBQUFBLElBQUlrRCxzQkFBc0IsSUFBSSxFQUFDLEVBQUc3QyxJQUFJO0lBQ3JELE1BQU0wQixXQUFXLEFBQUMvQixDQUFBQSxJQUFJbUQscUJBQXFCLElBQUksRUFBQyxFQUFHOUMsSUFBSSxNQUFNcUM7SUFDN0QsTUFBTVUsU0FBU3hCLGlCQUFpQjtRQUMvQkUsU0FBU3RDLEtBQUt3RCxXQUFXO1FBQ3pCM0I7UUFDQUk7UUFDQU07SUFDRDtJQUNBLElBQUlxQixPQUFPcEIsT0FBTyxJQUFJLE1BQU07UUFDM0JPLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLDJCQUEyQixFQUFFWSxPQUFPcEIsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPO0lBQ1I7SUFDQU8sUUFBUUMsR0FBRyxDQUFDLENBQUMsd0JBQXdCLEVBQUVZLE9BQU9yRCxJQUFJLENBQUMsS0FBSyxFQUFFc0IsSUFBSSxNQUFNLEVBQUUrQixPQUFPVixJQUFJLEVBQUU7SUFDbkYsT0FBTztBQUNSO0FBRUEsU0FBU1csVUFBVXZCLE9BQWU7SUFDakMsSUFBSTdCO0lBQ0osSUFBSTtRQUNIQSxNQUFNZCxhQUFhMkMsU0FBUztJQUM3QixFQUFFLE9BQU07UUFDUCxPQUFPO0lBQ1I7SUFDQSxNQUFNd0IsUUFBUXhDLGdCQUFnQmI7SUFDOUIsSUFBSXFELFNBQVMsTUFBTSxPQUFPO0lBQzFCZixRQUFRQyxHQUFHLENBQUNjLE1BQU1qQyxHQUFHO0lBQ3JCa0IsUUFBUUMsR0FBRyxDQUFDYyxNQUFNN0IsS0FBSztJQUN2QixPQUFPO0FBQ1I7QUFFQSxTQUFTOEIsS0FBS0MsT0FBT1osUUFBUVksSUFBSSxDQUFDN0MsS0FBSyxDQUFDLEVBQUU7SUFDekMsTUFBTThDLFVBQVVELElBQUksQ0FBQyxFQUFFLElBQUk7SUFDM0IsSUFBSUMsWUFBWSxjQUFjO1FBQzdCLE1BQU0zQixVQUFVMEIsSUFBSSxDQUFDLEVBQUU7UUFDdkIsSUFBSTFCLFdBQVcsUUFBUUEsUUFBUUgsTUFBTSxLQUFLLEdBQUcsT0FBTztRQUNwRCxPQUFPMEIsVUFBVXZCO0lBQ2xCO0lBQ0EsSUFBSTJCLFlBQVksU0FBUztRQUN4QixPQUFPVjtJQUNSO0lBQ0FSLFFBQVFtQixLQUFLLENBQUMsQ0FBQyxrQ0FBa0MsRUFBRUQsU0FBUztJQUM1RCxPQUFPO0FBQ1I7QUFFQSxNQUFNRSxVQUFVLEFBQUNmLENBQUFBLFFBQVFZLElBQUksQ0FBQyxFQUFFLElBQUksRUFBQyxFQUFHSSxVQUFVLENBQUMsTUFBTTtBQUN6RCxJQUFJRCxRQUFRRSxRQUFRLENBQUMsMkJBQTJCRixRQUFRRSxRQUFRLENBQUMseUJBQXlCO0lBQ3pGakIsUUFBUWtCLElBQUksQ0FBQ1A7QUFDZDtBQUVBLE9BQU8sTUFBTVEsaUJBQWlCO0lBQzdCakU7SUFDQWdCO0lBQ0FjO0lBQ0FtQjtJQUNBTTtJQUNBRTtBQUNELEVBQUUifQ==
|
|
@@ -27,3 +27,5 @@ export function codebaseRagMcpSourcePath() {
|
|
|
27
27
|
];
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvZGV2Y29udGFpbmVyL2hvc3Qtc2NyaXB0cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBTb3VyY2VGaWxlLCBTb3VyY2VGaWxlUHJvdmlkZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL3NvdXJjZS1maWxlLmpzXCI7XG5cbmNvbnN0IFRFTVBMQVRFX0ZJTEVTID0gW1xuXHRcImluaXRpYWxpemUuc2hcIixcblx0XCJwb3N0LWNyZWF0ZS5zaFwiLFxuXHRcInBvc3Qtc3RhcnQuc2hcIixcblx0XCJ0dHktcHJvbXB0LnNoXCIsXG5cdFwiY29kZWJhc2UtcmFnLmVudi5leGFtcGxlXCIsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gZGV2Y29udGFpbmVyVGVtcGxhdGVQYXRoKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoYC4vdGVtcGxhdGVzLyR7bmFtZX1gLCBpbXBvcnQubWV0YS51cmwpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvZGViYXNlUmFnTWNwU291cmNlUGF0aCgpOiBzdHJpbmcge1xuXHRyZXR1cm4gZmlsZVVSTFRvUGF0aChuZXcgVVJMKFwiLi9jb2RlYmFzZS1yYWctbWNwLnRzXCIsIGltcG9ydC5tZXRhLnVybCkpO1xufVxuXG4vKiogSG9zdCArIGNvbnRhaW5lciBzY3JpcHRzIGZvciB0aGUgc2NhZmZvbGRlZCBEZXYgQ29udGFpbmVyLiAqL1xuZXhwb3J0IGNsYXNzIERldkNvbnRhaW5lckhvc3RTY3JpcHRzIGltcGxlbWVudHMgU291cmNlRmlsZVByb3ZpZGVyIHtcblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdC4uLlRFTVBMQVRFX0ZJTEVTLm1hcCgobmFtZSkgPT4gKHtcblx0XHRcdFx0ZmlsZVBhdGg6IGAuZGV2Y29udGFpbmVyLyR7bmFtZX1gLFxuXHRcdFx0XHRjb250ZW50OiByZWFkRmlsZVN5bmMoZGV2Y29udGFpbmVyVGVtcGxhdGVQYXRoKG5hbWUpLCBcInV0ZjhcIiksXG5cdFx0XHR9KSksXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvY29kZWJhc2UtcmFnLW1jcC50c1wiLFxuXHRcdFx0XHRjb250ZW50OiByZWFkRmlsZVN5bmMoY29kZWJhc2VSYWdNY3BTb3VyY2VQYXRoKCksIFwidXRmOFwiKSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbInJlYWRGaWxlU3luYyIsImZpbGVVUkxUb1BhdGgiLCJURU1QTEFURV9GSUxFUyIsImRldmNvbnRhaW5lclRlbXBsYXRlUGF0aCIsIm5hbWUiLCJVUkwiLCJ1cmwiLCJjb2RlYmFzZVJhZ01jcFNvdXJjZVBhdGgiLCJEZXZDb250YWluZXJIb3N0U2NyaXB0cyIsImZpbGVzIiwibWFwIiwiZmlsZVBhdGgiLCJjb250ZW50Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLFFBQVEsVUFBVTtBQUN2QyxTQUFTQyxhQUFhLFFBQVEsV0FBVztBQUd6QyxNQUFNQyxpQkFBaUI7SUFDdEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUQsT0FBTyxTQUFTQyx5QkFBeUJDLElBQVk7SUFDcEQsT0FBT0gsY0FBYyxJQUFJSSxJQUFJLENBQUMsWUFBWSxFQUFFRCxNQUFNLEVBQUUsWUFBWUUsR0FBRztBQUNwRTtBQUVBLE9BQU8sU0FBU0M7SUFDZixPQUFPTixjQUFjLElBQUlJLElBQUkseUJBQXlCLFlBQVlDLEdBQUc7QUFDdEU7QUFFQSwrREFBK0QsR0FDL0QsT0FBTyxNQUFNRTtJQUNMQyxRQUFzQjtRQUM1QixPQUFPO2VBQ0hQLGVBQWVRLEdBQUcsQ0FBQyxDQUFDTixPQUFVLENBQUE7b0JBQ2hDTyxVQUFVLENBQUMsY0FBYyxFQUFFUCxNQUFNO29CQUNqQ1EsU0FBU1osYUFBYUcseUJBQXlCQyxPQUFPO2dCQUN2RCxDQUFBO1lBQ0E7Z0JBQ0NPLFVBQVU7Z0JBQ1ZDLFNBQVNaLGFBQWFPLDRCQUE0QjtZQUNuRDtTQUNBO0lBQ0Y7QUFDRCJ9
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { ask, pick } from "../../domain/prompt.js";
|
|
2
2
|
import { WELL_KNOWN_FILES } from "../../models/const.js";
|
|
3
|
-
import { ensureLoggedIn } from "../auth0-commands.js";
|
|
4
3
|
import { AuthConfigModel } from "../models/auth-config.model.js";
|
|
5
4
|
import { ControllerSourceFile } from "../models/controller-source-file.model.js";
|
|
6
5
|
import * as auth0Cli from "./auth0-cli.js";
|
|
7
6
|
const ADMIN_ROLE = "admin";
|
|
8
7
|
const USER_ENTITY_TS = `import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
|
|
9
|
-
import type { Entity as IEntity } from "@decohere/
|
|
8
|
+
import type { Entity as IEntity } from "@decohere/codex";
|
|
10
9
|
|
|
11
10
|
@Entity()
|
|
12
11
|
export class UserEntity implements IEntity {
|
|
@@ -28,8 +27,8 @@ export class UserEntity implements IEntity {
|
|
|
28
27
|
}
|
|
29
28
|
`;
|
|
30
29
|
const USER_REPOSITORY_TS = `import { injectable } from "@decohere/crucible/decorators";
|
|
31
|
-
import { injectUnitOfWork } from "@decohere/
|
|
32
|
-
import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/
|
|
30
|
+
import { injectUnitOfWork } from "@decohere/codex";
|
|
31
|
+
import { TypeOrmRepository, TypeOrmUnitOfWork } from "@decohere/codex-typeorm";
|
|
33
32
|
import { UserEntity } from "../entities/user.entity.js";
|
|
34
33
|
|
|
35
34
|
@injectable()
|
|
@@ -44,7 +43,7 @@ export class UserEntityRepository extends TypeOrmRepository<UserEntity> {
|
|
|
44
43
|
}
|
|
45
44
|
`;
|
|
46
45
|
const USER_SERVICE_TS = `import { injectable } from "@decohere/crucible/decorators";
|
|
47
|
-
import type { Principal } from "@decohere/
|
|
46
|
+
import type { Principal } from "@decohere/cortex";
|
|
48
47
|
import { UserEntity } from "../entities/user.entity.js";
|
|
49
48
|
import { UserEntityRepository } from "../repositories/user.repository.js";
|
|
50
49
|
|
|
@@ -99,17 +98,17 @@ export class UserService {
|
|
|
99
98
|
\t}
|
|
100
99
|
}
|
|
101
100
|
`;
|
|
102
|
-
const ABILITY_FACTORY_TS = `import type { Principal } from "@decohere/
|
|
101
|
+
const ABILITY_FACTORY_TS = `import type { Principal } from "@decohere/cortex";
|
|
103
102
|
import {
|
|
104
103
|
\tADMIN_ROLE,
|
|
105
104
|
\tcreatePrincipalFromPayload,
|
|
106
105
|
\tdefineAbilitiesFor as defaultDefineAbilitiesFor,
|
|
107
|
-
} from "@decohere/
|
|
106
|
+
} from "@decohere/cortex";
|
|
108
107
|
|
|
109
108
|
/**
|
|
110
109
|
* Customize CASL authorization here (product-specific rules).
|
|
111
110
|
*
|
|
112
|
-
* Default delegates to
|
|
111
|
+
* Default delegates to cortex: \`admin\` role → \`manage\`/\`all\`; IdP scopes
|
|
113
112
|
* (\`action:Subject\`) → abilities. Replace the body when you need app rules
|
|
114
113
|
* beyond that — this file is the intentional extension point, not framework
|
|
115
114
|
* infrastructure to copy.
|
|
@@ -157,7 +156,35 @@ async function getOptions(workspace, cliOptions) {
|
|
|
157
156
|
return getAuth0Options(workspace, cliOptions);
|
|
158
157
|
}
|
|
159
158
|
async function getAuth0Options(workspace, cliOptions) {
|
|
160
|
-
|
|
159
|
+
if (!auth0Cli.isInstalled()) {
|
|
160
|
+
console.error("\n The Auth0 CLI is required for automated setup.\n" + " Install: brew install auth0/auth0-cli/auth0\n" + " Or visit: https://github.com/auth0/auth0-cli\n");
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
process.stdout.write("\n Checking Auth0 credentials...");
|
|
164
|
+
let tenants = auth0Cli.listTenants();
|
|
165
|
+
if (tenants.length === 0) {
|
|
166
|
+
process.stdout.write(" not logged in.\n");
|
|
167
|
+
console.log(" Logging in to Auth0 (your browser will open)...");
|
|
168
|
+
if (!auth0Cli.login()) {
|
|
169
|
+
console.error("\n Auth0 login failed.");
|
|
170
|
+
process.exit(1);
|
|
171
|
+
}
|
|
172
|
+
tenants = auth0Cli.listTenants();
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
auth0Cli.listApis();
|
|
176
|
+
process.stdout.write(" ok.\n");
|
|
177
|
+
} catch (err) {
|
|
178
|
+
if (err instanceof auth0Cli.Auth0AuthError) {
|
|
179
|
+
process.stdout.write(" token expired.\n");
|
|
180
|
+
console.log(" Re-authenticating (your browser will open)...");
|
|
181
|
+
if (!auth0Cli.login()) {
|
|
182
|
+
console.error("\n Auth0 login failed.");
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
const active = tenants.find((t)=>t.active) ?? tenants[0];
|
|
161
188
|
const issuerBaseUrl = `https://${active.name}`;
|
|
162
189
|
console.log(`\n ✓ Auth0 tenant: ${issuerBaseUrl}`);
|
|
163
190
|
process.stdout.write("\n Fetching Auth0 APIs...");
|
|
@@ -293,9 +320,10 @@ function scaffoldLocalUserProfile(workspace) {
|
|
|
293
320
|
});
|
|
294
321
|
}
|
|
295
322
|
for (const controller of workspace.getModels(ControllerSourceFile)){
|
|
296
|
-
controller.addImport("UserService", "../services/user.service.js").addImport("inject", "@decohere/crucible/decorators").addConstructorParam(
|
|
323
|
+
controller.addImport("UserService", "../services/user.service.js").addImport("inject", "@decohere/crucible/decorators").addConstructorParam('@inject("UserService") private readonly users: UserService');
|
|
297
324
|
controller.getMethod("getOne").setAsync(true).setBody([
|
|
298
325
|
"const user = await this.users.ensureFromPrincipal(this.principalProvider.currentPrincipal);",
|
|
326
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: template literal in generated code
|
|
299
327
|
"return { id, message: `Hello ${user.displayName}!`, username: user.displayName };"
|
|
300
328
|
]);
|
|
301
329
|
}
|
|
@@ -317,6 +345,7 @@ function scaffold(workspace, options) {
|
|
|
317
345
|
'\t(typeof principal?.preferred_username === "string" && principal.preferred_username) ||',
|
|
318
346
|
"\tprincipal?.sub ||",
|
|
319
347
|
'\t"unknown";',
|
|
348
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: template literal in generated code
|
|
320
349
|
"return { id, message: `Hello ${username}!`, username };"
|
|
321
350
|
]);
|
|
322
351
|
}
|
|
@@ -325,7 +354,7 @@ function scaffold(workspace, options) {
|
|
|
325
354
|
controller.getMethod("remove").addDecorator(`@Authorize("delete", "${resource}")`);
|
|
326
355
|
}
|
|
327
356
|
for (const project of workspace.getProjects()){
|
|
328
|
-
project.getModel(WELL_KNOWN_FILES.MAIN_TS)?.addSideEffectImport("@decohere/
|
|
357
|
+
project.getModel(WELL_KNOWN_FILES.MAIN_TS)?.addSideEffectImport("@decohere/cortex/auth");
|
|
329
358
|
}
|
|
330
359
|
if (withLocalUsers) {
|
|
331
360
|
scaffoldLocalUserProfile(workspace);
|
|
@@ -337,7 +366,9 @@ function scaffold(workspace, options) {
|
|
|
337
366
|
project.getModel(WELL_KNOWN_FILES.MAIN_TS)?.addBuilderCall(".withAuth()");
|
|
338
367
|
}
|
|
339
368
|
}
|
|
369
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
|
|
340
370
|
const issuerPlaceholder = "${AUTH0_ISSUER_BASE_URL}";
|
|
371
|
+
// biome-ignore lint/suspicious/noTemplateCurlyInString: intentional YAML env-var placeholders
|
|
341
372
|
const audPlaceholder = "${AUTH0_AUDIENCE}";
|
|
342
373
|
const configSection = `auth:\n discoveryUrl: ${issuerPlaceholder}\n audience: ${audPlaceholder}\n`;
|
|
343
374
|
workspace.getModel(WELL_KNOWN_FILES.CONFIG_YAML)?.addSection(configSection);
|
|
@@ -355,3 +386,5 @@ export const AuthFeature = {
|
|
|
355
386
|
getOptions,
|
|
356
387
|
scaffold
|
|
357
388
|
};
|
|
389
|
+
|
|
390
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvZmVhdHVyZXMvYXV0aC5mZWF0dXJlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzaywgcGljayB9IGZyb20gXCIuLi8uLi9kb21haW4vcHJvbXB0LmpzXCI7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhDb25maWdNb2RlbCB9IGZyb20gXCIuLi9tb2RlbHMvYXV0aC1jb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9jb250cm9sbGVyLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9tYWluLXNvdXJjZS1maWxlLm1vZGVsLmpzXCI7XG5pbXBvcnQgKiBhcyBhdXRoMENsaSBmcm9tIFwiLi9hdXRoMC1jbGkuanNcIjtcblxuZXhwb3J0IHR5cGUgQXV0aE9wdGlvbnMgPSB7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRpc3N1ZXJCYXNlVXJsPzogc3RyaW5nO1xuXHRhdWRpZW5jZT86IHN0cmluZztcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdGFkbWluVXNlcm5hbWU/OiBzdHJpbmc7XG5cdGFkbWluUGFzc3dvcmQ/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBBRE1JTl9ST0xFID0gXCJhZG1pblwiO1xuXG5jb25zdCBVU0VSX0VOVElUWV9UUyA9IGBpbXBvcnQgeyBDb2x1bW4sIEVudGl0eSwgUHJpbWFyeUdlbmVyYXRlZENvbHVtbiB9IGZyb20gXCJ0eXBlb3JtXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSBhcyBJRW50aXR5IH0gZnJvbSBcIkBkZWNvaGVyZS9jb2RleFwiO1xuXG5ARW50aXR5KClcbmV4cG9ydCBjbGFzcyBVc2VyRW50aXR5IGltcGxlbWVudHMgSUVudGl0eSB7XG5cXHRAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpXG5cXHRwdWJsaWMgaWQhOiBudW1iZXI7XG5cblxcdEBDb2x1bW4oeyB1bmlxdWU6IHRydWUgfSlcblxcdHB1YmxpYyBzdWIhOiBzdHJpbmc7XG5cblxcdEBDb2x1bW4oeyB0eXBlOiBcInZhcmNoYXJcIiwgbnVsbGFibGU6IHRydWUgfSlcblxcdHB1YmxpYyBlbWFpbCE6IHN0cmluZyB8IG51bGw7XG5cblxcdEBDb2x1bW4oKVxuXFx0cHVibGljIGRpc3BsYXlOYW1lITogc3RyaW5nO1xuXG5cXHQvKiogQXBwLW93bmVkIHJvbGVzLiBUaGUgXFxgYWRtaW5cXGAgcm9sZSBncmFudHMgQ0FTTCBcXGBtYW5hZ2VcXGAvXFxgYWxsXFxgICh3aWxkY2FyZCkuICovXG5cXHRAQ29sdW1uKHsgdHlwZTogXCJzaW1wbGUtanNvblwiLCBkZWZhdWx0OiBcIltdXCIgfSlcblxcdHB1YmxpYyByb2xlcyE6IHN0cmluZ1tdO1xufVxuYDtcblxuY29uc3QgVVNFUl9SRVBPU0lUT1JZX1RTID0gYGltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IGluamVjdFVuaXRPZldvcmsgfSBmcm9tIFwiQGRlY29oZXJlL2NvZGV4XCI7XG5pbXBvcnQgeyBUeXBlT3JtUmVwb3NpdG9yeSwgVHlwZU9ybVVuaXRPZldvcmsgfSBmcm9tIFwiQGRlY29oZXJlL2NvZGV4LXR5cGVvcm1cIjtcbmltcG9ydCB7IFVzZXJFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXRpZXMvdXNlci5lbnRpdHkuanNcIjtcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJFbnRpdHlSZXBvc2l0b3J5IGV4dGVuZHMgVHlwZU9ybVJlcG9zaXRvcnk8VXNlckVudGl0eT4ge1xuXFx0cHVibGljIGNvbnN0cnVjdG9yKEBpbmplY3RVbml0T2ZXb3JrKCkgdW5pdE9mV29yazogVHlwZU9ybVVuaXRPZldvcmspIHtcblxcdFxcdHN1cGVyKHVuaXRPZldvcmssIFVzZXJFbnRpdHkpO1xuXFx0fVxuXG5cXHRwdWJsaWMgZmluZEJ5U3ViKHN1Yjogc3RyaW5nKTogUHJvbWlzZTxVc2VyRW50aXR5IHwgbnVsbD4ge1xuXFx0XFx0cmV0dXJuIHRoaXMuZmlyc3RPckRlZmF1bHQoeyB3aGVyZTogeyBzdWIgfSB9KTtcblxcdH1cbn1cbmA7XG5cbmNvbnN0IFVTRVJfU0VSVklDRV9UUyA9IGBpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7IFByaW5jaXBhbCB9IGZyb20gXCJAZGVjb2hlcmUvY29ydGV4XCI7XG5pbXBvcnQgeyBVc2VyRW50aXR5IH0gZnJvbSBcIi4uL2VudGl0aWVzL3VzZXIuZW50aXR5LmpzXCI7XG5pbXBvcnQgeyBVc2VyRW50aXR5UmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LmpzXCI7XG5cbmZ1bmN0aW9uIGNsYWltU3RyaW5nKHByaW5jaXBhbDogUHJpbmNpcGFsIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cXHRjb25zdCB2YWx1ZSA9IHByaW5jaXBhbD8uW2tleV07XG5cXHRyZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcblxcdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHVzZXJzOiBVc2VyRW50aXR5UmVwb3NpdG9yeSkge31cblxuXFx0LyoqXG5cXHQgKiBVcHNlcnQgYSBsb2NhbCBwcm9maWxlIGtleWVkIGJ5IEpXVCBcXGBzdWJcXGAuXG5cXHQgKiBQcm9maWxlIGZpZWxkcyBmcm9tIHRoZSB0b2tlbiBmaWxsIGdhcHM7IHNlZWRlZCByb3dzIGtlZXAgZGlzcGxheU5hbWUvZW1haWwvcm9sZXMuXG5cXHQgKi9cblxcdHB1YmxpYyBhc3luYyBlbnN1cmVGcm9tUHJpbmNpcGFsKHByaW5jaXBhbDogUHJpbmNpcGFsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxVc2VyRW50aXR5PiB7XG5cXHRcXHRjb25zdCBzdWIgPSBwcmluY2lwYWw/LnN1YjtcblxcdFxcdGlmICghc3ViKSB7XG5cXHRcXHRcXHR0aHJvdyBuZXcgRXJyb3IoXCJBdXRoZW50aWNhdGVkIHJlcXVlc3QgaXMgbWlzc2luZyBwcmluY2lwYWwuc3ViXCIpO1xuXFx0XFx0fVxuXG5cXHRcXHRjb25zdCBlbWFpbCA9XG5cXHRcXHRcXHRjbGFpbVN0cmluZyhwcmluY2lwYWwsIFwiZW1haWxcIikgPz8gY2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcInByZWZlcnJlZF91c2VybmFtZVwiKTtcblxcdFxcdGNvbnN0IGRpc3BsYXlGcm9tVG9rZW4gPVxuXFx0XFx0XFx0Y2xhaW1TdHJpbmcocHJpbmNpcGFsLCBcIm5hbWVcIikgPz9cblxcdFxcdFxcdGNsYWltU3RyaW5nKHByaW5jaXBhbCwgXCJuaWNrbmFtZVwiKSA/P1xuXFx0XFx0XFx0ZW1haWw7XG5cblxcdFxcdGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgdGhpcy51c2Vycy5maW5kQnlTdWIoc3ViKTtcblxcdFxcdGlmIChleGlzdGluZykge1xuXFx0XFx0XFx0bGV0IGRpcnR5ID0gZmFsc2U7XG5cXHRcXHRcXHRpZiAoIWV4aXN0aW5nLmVtYWlsICYmIGVtYWlsKSB7XG5cXHRcXHRcXHRcXHRleGlzdGluZy5lbWFpbCA9IGVtYWlsO1xuXFx0XFx0XFx0XFx0ZGlydHkgPSB0cnVlO1xuXFx0XFx0XFx0fVxuXFx0XFx0XFx0aWYgKGV4aXN0aW5nLmRpc3BsYXlOYW1lID09PSBleGlzdGluZy5zdWIgJiYgZGlzcGxheUZyb21Ub2tlbikge1xuXFx0XFx0XFx0XFx0ZXhpc3RpbmcuZGlzcGxheU5hbWUgPSBkaXNwbGF5RnJvbVRva2VuO1xuXFx0XFx0XFx0XFx0ZGlydHkgPSB0cnVlO1xuXFx0XFx0XFx0fVxuXFx0XFx0XFx0cmV0dXJuIGRpcnR5ID8gdGhpcy51c2Vycy5zYXZlKGV4aXN0aW5nKSA6IGV4aXN0aW5nO1xuXFx0XFx0fVxuXG5cXHRcXHRjb25zdCBjcmVhdGVkID0gbmV3IFVzZXJFbnRpdHkoKTtcblxcdFxcdGNyZWF0ZWQuc3ViID0gc3ViO1xuXFx0XFx0Y3JlYXRlZC5lbWFpbCA9IGVtYWlsID8/IG51bGw7XG5cXHRcXHRjcmVhdGVkLmRpc3BsYXlOYW1lID0gZGlzcGxheUZyb21Ub2tlbiA/PyBzdWI7XG5cXHRcXHRjcmVhdGVkLnJvbGVzID0gQXJyYXkuaXNBcnJheShwcmluY2lwYWwucm9sZXMpXG5cXHRcXHRcXHQ/IHByaW5jaXBhbC5yb2xlcy5maWx0ZXIoKHIpOiByIGlzIHN0cmluZyA9PiB0eXBlb2YgciA9PT0gXCJzdHJpbmdcIilcblxcdFxcdFxcdDogW107XG5cXHRcXHRyZXR1cm4gdGhpcy51c2Vycy5zYXZlKGNyZWF0ZWQpO1xuXFx0fVxufVxuYDtcblxuY29uc3QgQUJJTElUWV9GQUNUT1JZX1RTID0gYGltcG9ydCB0eXBlIHsgUHJpbmNpcGFsIH0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXhcIjtcbmltcG9ydCB7XG5cXHRBRE1JTl9ST0xFLFxuXFx0Y3JlYXRlUHJpbmNpcGFsRnJvbVBheWxvYWQsXG5cXHRkZWZpbmVBYmlsaXRpZXNGb3IgYXMgZGVmYXVsdERlZmluZUFiaWxpdGllc0Zvcixcbn0gZnJvbSBcIkBkZWNvaGVyZS9jb3J0ZXhcIjtcblxuLyoqXG4gKiBDdXN0b21pemUgQ0FTTCBhdXRob3JpemF0aW9uIGhlcmUgKHByb2R1Y3Qtc3BlY2lmaWMgcnVsZXMpLlxuICpcbiAqIERlZmF1bHQgZGVsZWdhdGVzIHRvIGNvcnRleDogXFxgYWRtaW5cXGAgcm9sZSDihpIgXFxgbWFuYWdlXFxgL1xcYGFsbFxcYDsgSWRQIHNjb3Blc1xuICogKFxcYGFjdGlvbjpTdWJqZWN0XFxgKSDihpIgYWJpbGl0aWVzLiBSZXBsYWNlIHRoZSBib2R5IHdoZW4geW91IG5lZWQgYXBwIHJ1bGVzXG4gKiBiZXlvbmQgdGhhdCDigJQgdGhpcyBmaWxlIGlzIHRoZSBpbnRlbnRpb25hbCBleHRlbnNpb24gcG9pbnQsIG5vdCBmcmFtZXdvcmtcbiAqIGluZnJhc3RydWN0dXJlIHRvIGNvcHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVBYmlsaXRpZXNGb3IocHJpbmNpcGFsOiBQcmluY2lwYWwpIHtcblxcdHJldHVybiBkZWZhdWx0RGVmaW5lQWJpbGl0aWVzRm9yKHByaW5jaXBhbCk7XG59XG5cbi8qKlxuICogQ3VzdG9taXplIEpXVCDihpIgUHJpbmNpcGFsIG1hcHBpbmcgaGVyZSAoSWRQLXNwZWNpZmljIGNsYWltcykuXG4gKlxuICogRWxldmF0ZXMgXFxgQVVUSDBfQURNSU5fVVNFUl9TVUJcXGAgdG8gdGhlIGFkbWluIHJvbGUgc28gdGhlIHNlZWRlZCBhZG1pbiB3b3Jrc1xuICogYmVmb3JlL3dpdGhvdXQgcm9sZXMgb24gdGhlIGFjY2VzcyB0b2tlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFByaW5jaXBhbChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByaW5jaXBhbCB7XG5cXHRjb25zdCBwcmluY2lwYWwgPSBjcmVhdGVQcmluY2lwYWxGcm9tUGF5bG9hZChwYXlsb2FkKTtcblxcdGNvbnN0IHN1YiA9IHByaW5jaXBhbC5zdWI7XG5cXHRpZiAoc3ViICYmIHN1YiA9PT0gcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUl9TVUIpIHtcblxcdFxcdHJldHVybiB7XG5cXHRcXHRcXHQuLi5wcmluY2lwYWwsXG5cXHRcXHRcXHRyb2xlczogWy4uLm5ldyBTZXQoW0FETUlOX1JPTEUsIC4uLihwcmluY2lwYWwucm9sZXMgPz8gW10pXSldLFxuXFx0XFx0fTtcblxcdH1cblxcdHJldHVybiBwcmluY2lwYWw7XG59XG5gO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRPcHRpb25zKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBQYXJ0aWFsPEF1dGhPcHRpb25zPixcbik6IFByb21pc2U8UGFydGlhbDxBdXRoT3B0aW9ucz4+IHtcblx0aWYgKGNsaU9wdGlvbnMuYXV0aFByb3ZpZGVyID09PSBcImF1dGgwXCIgJiYgIWNsaU9wdGlvbnMuaXNzdWVyQmFzZVVybCkge1xuXHRcdHJldHVybiBnZXRBdXRoME9wdGlvbnMod29ya3NwYWNlLCBjbGlPcHRpb25zKTtcblx0fVxuXHRpZiAoY2xpT3B0aW9ucy5hdXRoUHJvdmlkZXIgIT0gbnVsbCkgcmV0dXJuIHt9O1xuXG5cdGNvbnN0IGNob2ljZXMgPSBbeyBsYWJlbDogXCJub25lXCIgYXMgY29uc3QgfSwgeyBsYWJlbDogXCJhdXRoMFwiIGFzIGNvbnN0IH1dO1xuXHRjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHBpY2soXCJcXG4gIEF1dGggcHJvdmlkZXI6IFwiLCBjaG9pY2VzLCAoYykgPT4gYy5sYWJlbCk7XG5cdGNvbnN0IHByb3ZpZGVyID0gc2VsZWN0ZWQ/LmxhYmVsID8/IFwibm9uZVwiO1xuXG5cdGlmIChwcm92aWRlciAhPT0gXCJhdXRoMFwiKSByZXR1cm4geyBhdXRoUHJvdmlkZXI6IFwibm9uZVwiIH07XG5cblx0cmV0dXJuIGdldEF1dGgwT3B0aW9ucyh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRBdXRoME9wdGlvbnMoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8QXV0aE9wdGlvbnM+LFxuKTogUHJvbWlzZTxQYXJ0aWFsPEF1dGhPcHRpb25zPj4ge1xuXHRpZiAoIWF1dGgwQ2xpLmlzSW5zdGFsbGVkKCkpIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XCJcXG4gIFRoZSBBdXRoMCBDTEkgaXMgcmVxdWlyZWQgZm9yIGF1dG9tYXRlZCBzZXR1cC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsOiBicmV3IGluc3RhbGwgYXV0aDAvYXV0aDAtY2xpL2F1dGgwXFxuXCIgK1xuXHRcdFx0XHRcIiAgT3IgdmlzaXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdXRoMC9hdXRoMC1jbGlcXG5cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFxuICBDaGVja2luZyBBdXRoMCBjcmVkZW50aWFscy4uLlwiKTtcblx0bGV0IHRlbmFudHMgPSBhdXRoMENsaS5saXN0VGVuYW50cygpO1xuXHRpZiAodGVuYW50cy5sZW5ndGggPT09IDApIHtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBub3QgbG9nZ2VkIGluLlxcblwiKTtcblx0XHRjb25zb2xlLmxvZyhcIiAgTG9nZ2luZyBpbiB0byBBdXRoMCAoeW91ciBicm93c2VyIHdpbGwgb3BlbikuLi5cIik7XG5cdFx0aWYgKCFhdXRoMENsaS5sb2dpbigpKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFwiXFxuICBBdXRoMCBsb2dpbiBmYWlsZWQuXCIpO1xuXHRcdFx0cHJvY2Vzcy5leGl0KDEpO1xuXHRcdH1cblx0XHR0ZW5hbnRzID0gYXV0aDBDbGkubGlzdFRlbmFudHMoKTtcblx0fVxuXG5cdHRyeSB7XG5cdFx0YXV0aDBDbGkubGlzdEFwaXMoKTtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBvay5cXG5cIik7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBhdXRoMENsaS5BdXRoMEF1dGhFcnJvcikge1xuXHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCIgdG9rZW4gZXhwaXJlZC5cXG5cIik7XG5cdFx0XHRjb25zb2xlLmxvZyhcIiAgUmUtYXV0aGVudGljYXRpbmcgKHlvdXIgYnJvd3NlciB3aWxsIG9wZW4pLi4uXCIpO1xuXHRcdFx0aWYgKCFhdXRoMENsaS5sb2dpbigpKSB7XG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoXCJcXG4gIEF1dGgwIGxvZ2luIGZhaWxlZC5cIik7XG5cdFx0XHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRjb25zdCBhY3RpdmUgPSB0ZW5hbnRzLmZpbmQoKHQpID0+IHQuYWN0aXZlKSA/PyB0ZW5hbnRzWzBdO1xuXHRjb25zdCBpc3N1ZXJCYXNlVXJsID0gYGh0dHBzOi8vJHthY3RpdmUubmFtZX1gO1xuXHRjb25zb2xlLmxvZyhgXFxuICDinJMgQXV0aDAgdGVuYW50OiAke2lzc3VlckJhc2VVcmx9YCk7XG5cblx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoXCJcXG4gIEZldGNoaW5nIEF1dGgwIEFQSXMuLi5cIik7XG5cdGNvbnN0IHVzZXJBcGlzID0gYXV0aDBDbGkubGlzdEFwaXMoKS5maWx0ZXIoKGEpID0+ICFhLm5hbWUuaW5jbHVkZXMoXCJNYW5hZ2VtZW50IEFQSVwiKSk7XG5cdHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAgZm91bmQgJHt1c2VyQXBpcy5sZW5ndGh9LlxcbmApO1xuXG5cdHR5cGUgQXBpQ2hvaWNlID0geyBsYWJlbDogc3RyaW5nOyBleGlzdGluZzogc3RyaW5nIHwgbnVsbCB9O1xuXHRjb25zdCBwcm9qZWN0TmFtZSA9IHdvcmtzcGFjZS5uYW1lO1xuXHRjb25zdCBhcGlDaG9pY2VzOiBBcGlDaG9pY2VbXSA9IFtcblx0XHR7IGxhYmVsOiBgPG5ldz4gaHR0cHM6Ly9hcGkuJHtwcm9qZWN0TmFtZX1gLCBleGlzdGluZzogbnVsbCB9LFxuXHRcdC4uLnVzZXJBcGlzLm1hcCgoYSkgPT4gKHsgbGFiZWw6IGAke2EubmFtZX0g4oCUICR7YS5pZGVudGlmaWVyfWAsIGV4aXN0aW5nOiBhLmlkZW50aWZpZXIgfSkpLFxuXHRdO1xuXG5cdGNvbnN0IGFwaVNlbGVjdGVkID0gYXdhaXQgcGljayhcIlxcbiAgU2VsZWN0IEF1dGgwIEFQSTogXCIsIGFwaUNob2ljZXMsIChjKSA9PiBjLmxhYmVsKTtcblxuXHRsZXQgYXVkaWVuY2U6IHN0cmluZztcblx0aWYgKCFhcGlTZWxlY3RlZCB8fCBhcGlTZWxlY3RlZC5leGlzdGluZyA9PT0gbnVsbCkge1xuXHRcdGNvbnN0IGRlZmF1bHRJZCA9IGBodHRwczovL2FwaS4ke3Byb2plY3ROYW1lfWA7XG5cdFx0YXVkaWVuY2UgPSBhd2FpdCBhc2soYCAgQVBJIElkZW50aWZpZXIgWyR7ZGVmYXVsdElkfV06IGAsIGRlZmF1bHRJZCk7XG5cdFx0Y29uc29sZS5sb2coXCJcXG4gIENyZWF0aW5nIEF1dGgwIEFQSS4uLlwiKTtcblx0XHRhdWRpZW5jZSA9IGF1dGgwQ2xpLmNyZWF0ZUFwaShgJHtwcm9qZWN0TmFtZX0gQVBJYCwgYXVkaWVuY2UpLmlkZW50aWZpZXI7XG5cdFx0Y29uc29sZS5sb2coYCAgXFx1MjcxMyBBUEkgY3JlYXRlZDogJHthdWRpZW5jZX1gKTtcblx0fSBlbHNlIHtcblx0XHRhdWRpZW5jZSA9IGFwaVNlbGVjdGVkLmV4aXN0aW5nO1xuXHRcdGNvbnNvbGUubG9nKGAgIFxcdTI3MTMgU2VsZWN0ZWQ6ICR7YXVkaWVuY2V9YCk7XG5cdFx0dHJ5IHtcblx0XHRcdGF1dGgwQ2xpLnVwZGF0ZUFwaVNjb3BlcyhhdWRpZW5jZSk7XG5cdFx0XHRjb25zb2xlLmxvZyhgICBcXHUyNzEzIEFQSSBzY29wZXMgZW5zdXJlZCAoJHthdXRoMENsaS5IRUxMT19BUElfU0NPUEVTLmpvaW4oXCIsIFwiKX0pYCk7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0XHRcIiAg4pyXIEZhaWxlZCB0byB1cGRhdGUgQVBJIHNjb3BlcyDigJQgYWRkIEhlbGxvIHNjb3BlcyBpbiB0aGUgQXV0aDAgZGFzaGJvYXJkLlwiLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRjb25zdCB3aXRoTG9jYWxVc2VycyA9IGNsaU9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciA9PT0gXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdGxldCBhZG1pblVzZXJuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGxldCBhZG1pblBhc3N3b3JkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdGlmICh3aXRoTG9jYWxVc2Vycykge1xuXHRcdGFkbWluVXNlcm5hbWUgPVxuXHRcdFx0Y2xpT3B0aW9ucy5hZG1pblVzZXJuYW1lID8/IChhd2FpdCBhc2soXCJcXG4gIEFkbWluIHVzZXJuYW1lIFthZG1pbl06IFwiLCBcImFkbWluXCIpKTtcblx0XHRhZG1pblBhc3N3b3JkID0gY2xpT3B0aW9ucy5hZG1pblBhc3N3b3JkO1xuXHRcdGlmIChhZG1pblBhc3N3b3JkID09IG51bGwpIHtcblx0XHRcdGFkbWluUGFzc3dvcmQgPSBhd2FpdCBhc2soXCIgIEFkbWluIHBhc3N3b3JkIChsZWF2ZSBibGFuayB0byBnZW5lcmF0ZSk6IFwiKTtcblx0XHRcdGlmICghYWRtaW5QYXNzd29yZCkge1xuXHRcdFx0XHRhZG1pblBhc3N3b3JkID0gYXV0aDBDbGkuZ2VuZXJhdGVBZG1pblBhc3N3b3JkKCk7XG5cdFx0XHRcdGNvbnNvbGUubG9nKGAgIOKckyBHZW5lcmF0ZWQgYWRtaW4gcGFzc3dvcmQgKHdyaXR0ZW4gdG8gLmVudik6ICR7YWRtaW5QYXNzd29yZH1gKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdGF1dGhQcm92aWRlcjogXCJhdXRoMFwiLFxuXHRcdGlzc3VlckJhc2VVcmwsXG5cdFx0YXVkaWVuY2UsXG5cdFx0Li4uKHdpdGhMb2NhbFVzZXJzID8geyBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkIH0gOiB7fSksXG5cdH07XG59XG5cbmZ1bmN0aW9uIGFkbWluRW1haWwod29ya3NwYWNlTmFtZTogc3RyaW5nLCB1c2VybmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKHVzZXJuYW1lLmluY2x1ZGVzKFwiQFwiKSkgcmV0dXJuIHVzZXJuYW1lO1xuXHRjb25zdCBzbHVnID0gd29ya3NwYWNlTmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgXCItXCIpO1xuXHRyZXR1cm4gYCR7dXNlcm5hbWV9QCR7c2x1Z30uZXhhbXBsZS5jb21gO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBdXRoMEFkbWluVXNlcihcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0b3B0aW9uczogQXV0aE9wdGlvbnMsXG5cdGF1dGhDb25maWc6IEF1dGhDb25maWdNb2RlbCxcbik6IHZvaWQge1xuXHRjb25zdCB1c2VybmFtZSA9IG9wdGlvbnMuYWRtaW5Vc2VybmFtZSA/PyBcImFkbWluXCI7XG5cdGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5hZG1pblBhc3N3b3JkO1xuXHRpZiAoIXBhc3N3b3JkKSByZXR1cm47XG5cblx0Y29uc3QgZW1haWwgPSBhZG1pbkVtYWlsKHdvcmtzcGFjZS5uYW1lLCB1c2VybmFtZSk7XG5cdHRyeSB7XG5cdFx0Y29uc3QgYWRtaW4gPSBhdXRoMENsaS5jcmVhdGVBZG1pbkRhdGFiYXNlVXNlcih7IGVtYWlsLCBwYXNzd29yZCwgdXNlcm5hbWUgfSk7XG5cdFx0YXV0aENvbmZpZy5zZXRBZG1pblVzZXIoe1xuXHRcdFx0c3ViOiBhZG1pbi51c2VyX2lkLFxuXHRcdFx0ZW1haWw6IGFkbWluLmVtYWlsLFxuXHRcdFx0cGFzc3dvcmQ6IGFkbWluLnBhc3N3b3JkLFxuXHRcdFx0dXNlcm5hbWU6IGFkbWluLnVzZXJuYW1lLFxuXHRcdH0pO1xuXHRcdHdvcmtzcGFjZVxuXHRcdFx0LmdldE1vZGVsPEVudkZpbGU+KFdFTExfS05PV05fRklMRVMuRU5WX0ZJTEUpXG5cdFx0XHQ/LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUl9TVUJcIiwgYWRtaW4udXNlcl9pZClcblx0XHRcdC5hZGRFbnRyeShcIkFVVEgwX0FETUlOX1VTRVJfRU1BSUxcIiwgYWRtaW4uZW1haWwpXG5cdFx0XHQuYWRkRW50cnkoXCJBVVRIMF9BRE1JTl9VU0VSX1BBU1NXT1JEXCIsIGFkbWluLnBhc3N3b3JkKVxuXHRcdFx0LmFkZEVudHJ5KFwiQVVUSDBfQURNSU5fVVNFUk5BTUVcIiwgYWRtaW4udXNlcm5hbWUpO1xuXHRcdGNvbnNvbGUubG9nKGAgIOKckyBBdXRoMCBhZG1pbiB1c2VyIHJlYWR5OiAke2FkbWluLmVtYWlsfSAocm9sZTogJHtBRE1JTl9ST0xFfSlgKTtcblx0XHRjb25zb2xlLmxvZyhgICAgIExvZ2luIHdpdGggRU1BSUwgKG5vdCB1c2VybmFtZSk6ICR7YWRtaW4uZW1haWx9YCk7XG5cdFx0Y29uc29sZS5sb2coYCAgICBQYXNzd29yZDogc2VlIEFVVEgwX0FETUlOX1VTRVJfUEFTU1dPUkQgaW4gLmVudmApO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRjb25zb2xlLmVycm9yKFxuXHRcdFx0YCAg4pyXIEZhaWxlZCB0byBlbnN1cmUgQXV0aDAgYWRtaW4gdXNlciAoJHtlbWFpbH0pOiAke2VyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnJ9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkKTogdm9pZCB7XG5cdGZvciAoY29uc3QgcHJvamVjdCBvZiB3b3Jrc3BhY2UuZ2V0UHJvamVjdHMoKSkge1xuXHRcdHByb2plY3Rcblx0XHRcdC5nZXRNb2RlbDxNYWluU291cmNlRmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5NQUlOX1RTKVxuXHRcdFx0Py5hZGRFbnRpdHkoeyBjbGFzc05hbWU6IFwiVXNlckVudGl0eVwiLCBpbXBvcnRQYXRoOiBcIi4vZW50aXRpZXMvdXNlci5lbnRpdHkuanNcIiB9KVxuXHRcdFx0LmFkZFJlcG9zaXRvcnkoe1xuXHRcdFx0XHRjbGFzc05hbWU6IFwiVXNlckVudGl0eVJlcG9zaXRvcnlcIixcblx0XHRcdFx0aW1wb3J0UGF0aDogXCIuL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkuanNcIixcblx0XHRcdH0pXG5cdFx0XHQuYWRkU2VydmljZSh7XG5cdFx0XHRcdGNsYXNzTmFtZTogXCJVc2VyU2VydmljZVwiLFxuXHRcdFx0XHRpbXBvcnRQYXRoOiBcIi4vc2VydmljZXMvdXNlci5zZXJ2aWNlLmpzXCIsXG5cdFx0XHRcdHNjb3BlOiBcInJlcXVlc3RcIixcblx0XHRcdH0pXG5cdFx0XHQuYWRkSW1wb3J0KFwiZGVmaW5lQWJpbGl0aWVzRm9yXCIsIFwiLi9hdXRoL2FiaWxpdHkuZmFjdG9yeS5qc1wiKVxuXHRcdFx0LmFkZEltcG9ydChcIm1hcFByaW5jaXBhbFwiLCBcIi4vYXV0aC9hYmlsaXR5LmZhY3RvcnkuanNcIilcblx0XHRcdC5zZXRUeXBlT3JtU2VlZChcblx0XHRcdFx0W1xuXHRcdFx0XHRcdFwiY29uc3Qgc3ViID0gcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUl9TVUI7XCIsXG5cdFx0XHRcdFx0XCJpZiAoIXN1YikgcmV0dXJuO1wiLFxuXHRcdFx0XHRcdFwiY29uc3QgcmVwbyA9IGRhdGFTb3VyY2UuZ2V0UmVwb3NpdG9yeShVc2VyRW50aXR5KTtcIixcblx0XHRcdFx0XHRcImNvbnN0IGV4aXN0aW5nID0gYXdhaXQgcmVwby5maW5kT25lKHsgd2hlcmU6IHsgc3ViIH0gfSk7XCIsXG5cdFx0XHRcdFx0XCJpZiAoZXhpc3RpbmcpIHJldHVybjtcIixcblx0XHRcdFx0XHRcImF3YWl0IHJlcG8uc2F2ZShyZXBvLmNyZWF0ZSh7XCIsXG5cdFx0XHRcdFx0XCIgIHN1YixcIixcblx0XHRcdFx0XHRcIiAgZW1haWw6IHByb2Nlc3MuZW52LkFVVEgwX0FETUlOX1VTRVJfRU1BSUwgPz8gbnVsbCxcIixcblx0XHRcdFx0XHQnICBkaXNwbGF5TmFtZTogcHJvY2Vzcy5lbnYuQVVUSDBfQURNSU5fVVNFUk5BTUUgPz8gXCJhZG1pblwiLCcsXG5cdFx0XHRcdFx0JyAgcm9sZXM6IFtcImFkbWluXCJdLCcsXG5cdFx0XHRcdFx0XCJ9KSk7XCIsXG5cdFx0XHRcdF0uam9pbihcIiBcIiksXG5cdFx0XHQpO1xuXG5cdFx0cHJvamVjdC5hZGRGaWxlKHtcblx0XHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL2VudGl0aWVzL3VzZXIuZW50aXR5LnRzXCIsIGNvbnRlbnQ6IFVTRVJfRU5USVRZX1RTIH0sXG5cdFx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkudHNcIiwgY29udGVudDogVVNFUl9SRVBPU0lUT1JZX1RTIH0sXG5cdFx0XHRcdHsgZmlsZVBhdGg6IFwic3JjL3NlcnZpY2VzL3VzZXIuc2VydmljZS50c1wiLCBjb250ZW50OiBVU0VSX1NFUlZJQ0VfVFMgfSxcblx0XHRcdFx0eyBmaWxlUGF0aDogXCJzcmMvYXV0aC9hYmlsaXR5LmZhY3RvcnkudHNcIiwgY29udGVudDogQUJJTElUWV9GQUNUT1JZX1RTIH0sXG5cdFx0XHRdLFxuXHRcdH0pO1xuXHR9XG5cblx0Zm9yIChjb25zdCBjb250cm9sbGVyIG9mIHdvcmtzcGFjZS5nZXRNb2RlbHMoQ29udHJvbGxlclNvdXJjZUZpbGUpKSB7XG5cdFx0Y29udHJvbGxlclxuXHRcdFx0LmFkZEltcG9ydChcIlVzZXJTZXJ2aWNlXCIsIFwiLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlLmpzXCIpXG5cdFx0XHQuYWRkSW1wb3J0KFwiaW5qZWN0XCIsIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIilcblx0XHRcdC5hZGRDb25zdHJ1Y3RvclBhcmFtKCdAaW5qZWN0KFwiVXNlclNlcnZpY2VcIikgcHJpdmF0ZSByZWFkb25seSB1c2VyczogVXNlclNlcnZpY2UnKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcImdldE9uZVwiKS5zZXRBc3luYyh0cnVlKS5zZXRCb2R5KFtcblx0XHRcdFwiY29uc3QgdXNlciA9IGF3YWl0IHRoaXMudXNlcnMuZW5zdXJlRnJvbVByaW5jaXBhbCh0aGlzLnByaW5jaXBhbFByb3ZpZGVyLmN1cnJlbnRQcmluY2lwYWwpO1wiLFxuXHRcdFx0Ly8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub1RlbXBsYXRlQ3VybHlJblN0cmluZzogdGVtcGxhdGUgbGl0ZXJhbCBpbiBnZW5lcmF0ZWQgY29kZVxuXHRcdFx0XCJyZXR1cm4geyBpZCwgbWVzc2FnZTogYEhlbGxvICR7dXNlci5kaXNwbGF5TmFtZX0hYCwgdXNlcm5hbWU6IHVzZXIuZGlzcGxheU5hbWUgfTtcIixcblx0XHRdKTtcblx0fVxufVxuXG5mdW5jdGlvbiBzY2FmZm9sZCh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBBdXRoT3B0aW9ucyk6IHZvaWQge1xuXHRpZiAob3B0aW9ucy5hdXRoUHJvdmlkZXIgIT09IFwiYXV0aDBcIikgcmV0dXJuO1xuXG5cdGNvbnN0IHJlc291cmNlID0gXCJIZWxsb1wiO1xuXHRjb25zdCB3aXRoTG9jYWxVc2VycyA9IG9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciA9PT0gXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cblx0Zm9yIChjb25zdCBjb250cm9sbGVyIG9mIHdvcmtzcGFjZS5nZXRNb2RlbHMoQ29udHJvbGxlclNvdXJjZUZpbGUpKSB7XG5cdFx0Y29udHJvbGxlclxuXHRcdFx0LmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcInJlYWRcIiwgXCIke3Jlc291cmNlfVwiKWApXG5cdFx0XHQuYWRkQ29ydGV4SW1wb3J0KFwiQWxsb3dBbm9ueW1vdXNcIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJBdXRob3JpemVcIilcblx0XHRcdC5hZGRDb3J0ZXhJbXBvcnQoXCJJUHJpbmNpcGFsUHJvdmlkZXJUb2tlblwiKVxuXHRcdFx0LmFkZENvcnRleEltcG9ydChcIklQcmluY2lwYWxQcm92aWRlclwiLCB0cnVlKVxuXHRcdFx0LmFkZEltcG9ydChcImluamVjdFwiLCBcIkBkZWNvaGVyZS9jcnVjaWJsZS9kZWNvcmF0b3JzXCIpXG5cdFx0XHQuYWRkQ29uc3RydWN0b3JQYXJhbShcblx0XHRcdFx0YEBpbmplY3QoSVByaW5jaXBhbFByb3ZpZGVyVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgcHJpbmNpcGFsUHJvdmlkZXI6IElQcmluY2lwYWxQcm92aWRlcmAsXG5cdFx0XHQpO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiZ2V0QWxsXCIpLmFkZERlY29yYXRvcihcIkBBbGxvd0Fub255bW91cygpXCIpO1xuXHRcdGlmICghd2l0aExvY2FsVXNlcnMpIHtcblx0XHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwiZ2V0T25lXCIpLnNldEJvZHkoW1xuXHRcdFx0XHRcImNvbnN0IHByaW5jaXBhbCA9IHRoaXMucHJpbmNpcGFsUHJvdmlkZXIuY3VycmVudFByaW5jaXBhbDtcIixcblx0XHRcdFx0XCJjb25zdCB1c2VybmFtZSA9XCIsXG5cdFx0XHRcdCdcXHQodHlwZW9mIHByaW5jaXBhbD8ubmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwubmFtZSkgfHwnLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/Lm5pY2tuYW1lID09PSBcInN0cmluZ1wiICYmIHByaW5jaXBhbC5uaWNrbmFtZSkgfHwnLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/LmVtYWlsID09PSBcInN0cmluZ1wiICYmIHByaW5jaXBhbC5lbWFpbCkgfHwnLFxuXHRcdFx0XHQnXFx0KHR5cGVvZiBwcmluY2lwYWw/LnByZWZlcnJlZF91c2VybmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBwcmluY2lwYWwucHJlZmVycmVkX3VzZXJuYW1lKSB8fCcsXG5cdFx0XHRcdFwiXFx0cHJpbmNpcGFsPy5zdWIgfHxcIixcblx0XHRcdFx0J1xcdFwidW5rbm93blwiOycsXG5cdFx0XHRcdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IHRlbXBsYXRlIGxpdGVyYWwgaW4gZ2VuZXJhdGVkIGNvZGVcblx0XHRcdFx0XCJyZXR1cm4geyBpZCwgbWVzc2FnZTogYEhlbGxvICR7dXNlcm5hbWV9IWAsIHVzZXJuYW1lIH07XCIsXG5cdFx0XHRdKTtcblx0XHR9XG5cdFx0Y29udHJvbGxlci5nZXRNZXRob2QoXCJjcmVhdGVcIikuYWRkRGVjb3JhdG9yKGBAQXV0aG9yaXplKFwiY3JlYXRlXCIsIFwiJHtyZXNvdXJjZX1cIilgKTtcblx0XHRjb250cm9sbGVyLmdldE1ldGhvZChcInVwZGF0ZVwiKS5hZGREZWNvcmF0b3IoYEBBdXRob3JpemUoXCJ1cGRhdGVcIiwgXCIke3Jlc291cmNlfVwiKWApO1xuXHRcdGNvbnRyb2xsZXIuZ2V0TWV0aG9kKFwicmVtb3ZlXCIpLmFkZERlY29yYXRvcihgQEF1dGhvcml6ZShcImRlbGV0ZVwiLCBcIiR7cmVzb3VyY2V9XCIpYCk7XG5cdH1cblxuXHRmb3IgKGNvbnN0IHByb2plY3Qgb2Ygd29ya3NwYWNlLmdldFByb2plY3RzKCkpIHtcblx0XHRwcm9qZWN0XG5cdFx0XHQuZ2V0TW9kZWw8TWFpblNvdXJjZUZpbGU+KFdFTExfS05PV05fRklMRVMuTUFJTl9UUylcblx0XHRcdD8uYWRkU2lkZUVmZmVjdEltcG9ydChcIkBkZWNvaGVyZS9jb3J0ZXgvYXV0aFwiKTtcblx0fVxuXG5cdGlmICh3aXRoTG9jYWxVc2Vycykge1xuXHRcdHNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSh3b3Jrc3BhY2UpO1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiB3b3Jrc3BhY2UuZ2V0UHJvamVjdHMoKSkge1xuXHRcdFx0cHJvamVjdFxuXHRcdFx0XHQuZ2V0TW9kZWw8TWFpblNvdXJjZUZpbGU+KFdFTExfS05PV05fRklMRVMuTUFJTl9UUylcblx0XHRcdFx0Py5hZGRCdWlsZGVyQ2FsbChcIi53aXRoQXV0aChkZWZpbmVBYmlsaXRpZXNGb3IsIHsgcHJpbmNpcGFsTWFwcGVyOiBtYXBQcmluY2lwYWwgfSlcIik7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiB3b3Jrc3BhY2UuZ2V0UHJvamVjdHMoKSkge1xuXHRcdFx0cHJvamVjdFxuXHRcdFx0XHQuZ2V0TW9kZWw8TWFpblNvdXJjZUZpbGU+KFdFTExfS05PV05fRklMRVMuTUFJTl9UUylcblx0XHRcdFx0Py5hZGRCdWlsZGVyQ2FsbChcIi53aXRoQXV0aCgpXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9UZW1wbGF0ZUN1cmx5SW5TdHJpbmc6IGludGVudGlvbmFsIFlBTUwgZW52LXZhciBwbGFjZWhvbGRlcnNcblx0Y29uc3QgaXNzdWVyUGxhY2Vob2xkZXIgPSBcIiR7QVVUSDBfSVNTVUVSX0JBU0VfVVJMfVwiO1xuXHQvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vVGVtcGxhdGVDdXJseUluU3RyaW5nOiBpbnRlbnRpb25hbCBZQU1MIGVudi12YXIgcGxhY2Vob2xkZXJzXG5cdGNvbnN0IGF1ZFBsYWNlaG9sZGVyID0gXCIke0FVVEgwX0FVRElFTkNFfVwiO1xuXG5cdGNvbnN0IGNvbmZpZ1NlY3Rpb24gPSBgYXV0aDpcXG4gIGRpc2NvdmVyeVVybDogJHtpc3N1ZXJQbGFjZWhvbGRlcn1cXG4gIGF1ZGllbmNlOiAke2F1ZFBsYWNlaG9sZGVyfVxcbmA7XG5cblx0d29ya3NwYWNlLmdldE1vZGVsPENvbmZpZ1lhbWw+KFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwpPy5hZGRTZWN0aW9uKGNvbmZpZ1NlY3Rpb24pO1xuXG5cdHdvcmtzcGFjZVxuXHRcdC5nZXRNb2RlbDxFbnZGaWxlPihXRUxMX0tOT1dOX0ZJTEVTLkVOVl9GSUxFKVxuXHRcdD8uYWRkRW50cnkoXCJBVVRIMF9JU1NVRVJfQkFTRV9VUkxcIiwgb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIpXG5cdFx0LmFkZEVudHJ5KFwiQVVUSDBfQVVESUVOQ0VcIiwgb3B0aW9ucy5hdWRpZW5jZSA/PyBcIlwiKTtcblxuXHRjb25zdCBhdXRoQ29uZmlnID0gbmV3IEF1dGhDb25maWdNb2RlbCh7XG5cdFx0aXNzdWVyQmFzZVVybDogb3B0aW9ucy5pc3N1ZXJCYXNlVXJsID8/IFwiXCIsXG5cdFx0YXVkaWVuY2U6IG9wdGlvbnMuYXVkaWVuY2UgPz8gXCJcIixcblx0fSk7XG5cdHdvcmtzcGFjZS5hZGRNb2RlbChhdXRoQ29uZmlnKTtcblxuXHRpZiAod2l0aExvY2FsVXNlcnMgJiYgb3B0aW9ucy5hZG1pblBhc3N3b3JkKSB7XG5cdFx0Y3JlYXRlQXV0aDBBZG1pblVzZXIod29ya3NwYWNlLCBvcHRpb25zLCBhdXRoQ29uZmlnKTtcblx0fVxufVxuXG5leHBvcnQgY29uc3QgQXV0aEZlYXR1cmU6IEZlYXR1cmU8QXV0aE9wdGlvbnM+ID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCB9O1xuIl0sIm5hbWVzIjpbImFzayIsInBpY2siLCJXRUxMX0tOT1dOX0ZJTEVTIiwiQXV0aENvbmZpZ01vZGVsIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJhdXRoMENsaSIsIkFETUlOX1JPTEUiLCJVU0VSX0VOVElUWV9UUyIsIlVTRVJfUkVQT1NJVE9SWV9UUyIsIlVTRVJfU0VSVklDRV9UUyIsIkFCSUxJVFlfRkFDVE9SWV9UUyIsImdldE9wdGlvbnMiLCJ3b3Jrc3BhY2UiLCJjbGlPcHRpb25zIiwiYXV0aFByb3ZpZGVyIiwiaXNzdWVyQmFzZVVybCIsImdldEF1dGgwT3B0aW9ucyIsImNob2ljZXMiLCJsYWJlbCIsInNlbGVjdGVkIiwiYyIsInByb3ZpZGVyIiwiaXNJbnN0YWxsZWQiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInN0ZG91dCIsIndyaXRlIiwidGVuYW50cyIsImxpc3RUZW5hbnRzIiwibGVuZ3RoIiwibG9nIiwibG9naW4iLCJsaXN0QXBpcyIsImVyciIsIkF1dGgwQXV0aEVycm9yIiwiYWN0aXZlIiwiZmluZCIsInQiLCJuYW1lIiwidXNlckFwaXMiLCJmaWx0ZXIiLCJhIiwiaW5jbHVkZXMiLCJwcm9qZWN0TmFtZSIsImFwaUNob2ljZXMiLCJleGlzdGluZyIsIm1hcCIsImlkZW50aWZpZXIiLCJhcGlTZWxlY3RlZCIsImF1ZGllbmNlIiwiZGVmYXVsdElkIiwiY3JlYXRlQXBpIiwidXBkYXRlQXBpU2NvcGVzIiwiSEVMTE9fQVBJX1NDT1BFUyIsImpvaW4iLCJ3aXRoTG9jYWxVc2VycyIsImRhdGFiYXNlUHJvdmlkZXIiLCJhZG1pblVzZXJuYW1lIiwiYWRtaW5QYXNzd29yZCIsImdlbmVyYXRlQWRtaW5QYXNzd29yZCIsImFkbWluRW1haWwiLCJ3b3Jrc3BhY2VOYW1lIiwidXNlcm5hbWUiLCJzbHVnIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiY3JlYXRlQXV0aDBBZG1pblVzZXIiLCJvcHRpb25zIiwiYXV0aENvbmZpZyIsInBhc3N3b3JkIiwiZW1haWwiLCJhZG1pbiIsImNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyIiwic2V0QWRtaW5Vc2VyIiwic3ViIiwidXNlcl9pZCIsImdldE1vZGVsIiwiRU5WX0ZJTEUiLCJhZGRFbnRyeSIsIkVycm9yIiwibWVzc2FnZSIsInNjYWZmb2xkTG9jYWxVc2VyUHJvZmlsZSIsInByb2plY3QiLCJnZXRQcm9qZWN0cyIsIk1BSU5fVFMiLCJhZGRFbnRpdHkiLCJjbGFzc05hbWUiLCJpbXBvcnRQYXRoIiwiYWRkUmVwb3NpdG9yeSIsImFkZFNlcnZpY2UiLCJzY29wZSIsImFkZEltcG9ydCIsInNldFR5cGVPcm1TZWVkIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiY29udHJvbGxlciIsImdldE1vZGVscyIsImFkZENvbnN0cnVjdG9yUGFyYW0iLCJnZXRNZXRob2QiLCJzZXRBc3luYyIsInNldEJvZHkiLCJzY2FmZm9sZCIsInJlc291cmNlIiwiYWRkRGVjb3JhdG9yIiwiYWRkQ29ydGV4SW1wb3J0IiwiYWRkU2lkZUVmZmVjdEltcG9ydCIsImFkZEJ1aWxkZXJDYWxsIiwiaXNzdWVyUGxhY2Vob2xkZXIiLCJhdWRQbGFjZWhvbGRlciIsImNvbmZpZ1NlY3Rpb24iLCJDT05GSUdfWUFNTCIsImFkZFNlY3Rpb24iLCJhZGRNb2RlbCIsIkF1dGhGZWF0dXJlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxHQUFHLEVBQUVDLElBQUksUUFBUSx5QkFBeUI7QUFFbkQsU0FBU0MsZ0JBQWdCLFFBQVEsd0JBQXdCO0FBSXpELFNBQVNDLGVBQWUsUUFBUSxpQ0FBaUM7QUFDakUsU0FBU0Msb0JBQW9CLFFBQVEsNENBQTRDO0FBRWpGLFlBQVlDLGNBQWMsaUJBQWlCO0FBVzNDLE1BQU1DLGFBQWE7QUFFbkIsTUFBTUMsaUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXFCeEIsQ0FBQztBQUVELE1BQU1DLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFlNUIsQ0FBQztBQUVELE1BQU1DLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdUR6QixDQUFDO0FBRUQsTUFBTUMscUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9DNUIsQ0FBQztBQUVELGVBQWVDLFdBQ2RDLFNBQTRCLEVBQzVCQyxVQUFnQztJQUVoQyxJQUFJQSxXQUFXQyxZQUFZLEtBQUssV0FBVyxDQUFDRCxX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
|
|
@@ -88,12 +88,11 @@ export function listTenants() {
|
|
|
88
88
|
return [];
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
export function login() {
|
|
92
92
|
const result = spawnSync("auth0", [
|
|
93
93
|
"login",
|
|
94
94
|
"--scopes",
|
|
95
|
-
REQUIRED_SCOPES
|
|
96
|
-
"--no-input"
|
|
95
|
+
REQUIRED_SCOPES
|
|
97
96
|
], {
|
|
98
97
|
stdio: "inherit"
|
|
99
98
|
});
|
|
@@ -133,38 +132,6 @@ export function createApi(name, identifier, scopes = HELLO_API_SCOPES) {
|
|
|
133
132
|
]);
|
|
134
133
|
return parseJsonOutput(out);
|
|
135
134
|
}
|
|
136
|
-
export function listApiScopes(identifier) {
|
|
137
|
-
try {
|
|
138
|
-
const out = runAuth0([
|
|
139
|
-
"apis",
|
|
140
|
-
"show",
|
|
141
|
-
identifier,
|
|
142
|
-
"--json",
|
|
143
|
-
"--no-input"
|
|
144
|
-
]);
|
|
145
|
-
const api = parseJsonOutput(out);
|
|
146
|
-
return (api.scopes ?? []).map((scope)=>typeof scope === "string" ? scope : scope.value ?? scope.name ?? "").filter((scope)=>scope.length > 0);
|
|
147
|
-
} catch (err) {
|
|
148
|
-
if (err instanceof Auth0AuthError) throw err;
|
|
149
|
-
return [];
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
/** Assign API permissions to a user (Authorization Core). Idempotent when already granted. */ export function assignUserPermissions(userId, audience, permissions) {
|
|
153
|
-
if (permissions.length === 0) return;
|
|
154
|
-
runAuth0([
|
|
155
|
-
"api",
|
|
156
|
-
"post",
|
|
157
|
-
`users/${encodeURIComponent(userId)}/permissions`,
|
|
158
|
-
"--data",
|
|
159
|
-
JSON.stringify({
|
|
160
|
-
permissions: permissions.map((permission_name)=>({
|
|
161
|
-
resource_server_identifier: audience,
|
|
162
|
-
permission_name
|
|
163
|
-
}))
|
|
164
|
-
}),
|
|
165
|
-
"--no-input"
|
|
166
|
-
]);
|
|
167
|
-
}
|
|
168
135
|
/**
|
|
169
136
|
* Replace an API's scopes and enable RBAC policy enforcement.
|
|
170
137
|
* Auth0 CLI `--scopes` replaces the full set.
|
|
@@ -404,3 +371,5 @@ function isUserAlreadyExistsError(err) {
|
|
|
404
371
|
}
|
|
405
372
|
}
|
|
406
373
|
export { REQUIRED_SCOPES };
|
|
374
|
+
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvZmVhdHVyZXMvYXV0aDAtY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcblxuLyoqIE1hbmFnZW1lbnQgQVBJIHNjb3BlcyBuZWVkZWQgZm9yIEFQSSwgU1BBLCBjb25uZWN0aW9ucywgYW5kIGFkbWluIHVzZXJzLiAqL1xuY29uc3QgUkVRVUlSRURfU0NPUEVTID0gW1xuXHRcImNyZWF0ZTpjbGllbnRzXCIsXG5cdFwicmVhZDpjbGllbnRzXCIsXG5cdFwidXBkYXRlOmNsaWVudHNcIixcblx0XCJjcmVhdGU6cmVzb3VyY2Vfc2VydmVyc1wiLFxuXHRcInJlYWQ6cmVzb3VyY2Vfc2VydmVyc1wiLFxuXHRcInVwZGF0ZTpyZXNvdXJjZV9zZXJ2ZXJzXCIsXG5cdFwicmVhZDpjb25uZWN0aW9uc1wiLFxuXHRcInVwZGF0ZTpjb25uZWN0aW9uc1wiLFxuXHRcImNyZWF0ZTp1c2Vyc1wiLFxuXHRcInJlYWQ6dXNlcnNcIixcblx0XCJ1cGRhdGU6dXNlcnNcIixcbl0uam9pbihcIixcIik7XG5cbi8qKiBIYXJkIHRpbWVvdXQgZm9yIGFueSBNYW5hZ2VtZW50IEFQSSBjYWxsLiBQcmV2ZW50cyBpbmRlZmluaXRlIGhhbmdzIG9uIHRva2VuIHJlLWF1dGguICovXG5jb25zdCBBUElfVElNRU9VVF9NUyA9IDhfMDAwO1xuXG4vKiogRGVmYXVsdCBBUEkgc2NvcGVzIG1hdGNoaW5nIEhlbGxvIENBU0wgQXV0aG9yaXplIGRlY29yYXRvcnMuICovXG5leHBvcnQgY29uc3QgSEVMTE9fQVBJX1NDT1BFUyA9IFtcblx0XCJyZWFkOkhlbGxvXCIsXG5cdFwiY3JlYXRlOkhlbGxvXCIsXG5cdFwidXBkYXRlOkhlbGxvXCIsXG5cdFwiZGVsZXRlOkhlbGxvXCIsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgREJfQ09OTkVDVElPTl9OQU1FID0gXCJVc2VybmFtZS1QYXNzd29yZC1BdXRoZW50aWNhdGlvblwiO1xuXG5leHBvcnQgY2xhc3MgQXV0aDBBdXRoRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIkF1dGgwQXV0aEVycm9yXCI7XG5cdH1cbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBhbiBlcnJvciBvciBzdGRlcnIgb3V0cHV0IGxvb2tzIGxpa2UgYW4gZXhwaXJlZC9taXNzaW5nIHRva2VuLiAqL1xuZnVuY3Rpb24gaXNBdXRoRXJyb3IodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdHJldHVybiAoXG5cdFx0dGV4dC5pbmNsdWRlcyhcInJlbmV3IGFjY2VzcyB0b2tlblwiKSB8fFxuXHRcdHRleHQuaW5jbHVkZXMoXCJsb2cgaW5cIikgfHxcblx0XHR0ZXh0LmluY2x1ZGVzKFwiVW5hdXRob3JpemVkXCIpXG5cdCk7XG59XG5cbi8qKiBTdHJpcCBBdXRoMCBDTEkgYmFubmVyIGxpbmVzIGJlZm9yZSBKU09OLiAqL1xuZnVuY3Rpb24gcGFyc2VKc29uT3V0cHV0PFQ+KHN0ZG91dDogc3RyaW5nKTogVCB7XG5cdGNvbnN0IHN0YXJ0ID0gc3Rkb3V0LmluZGV4T2YoXCJ7XCIpO1xuXHRjb25zdCBhcnJheVN0YXJ0ID0gc3Rkb3V0LmluZGV4T2YoXCJbXCIpO1xuXHRsZXQgaWR4ID0gLTE7XG5cdGlmIChzdGFydCA9PT0gLTEpIGlkeCA9IGFycmF5U3RhcnQ7XG5cdGVsc2UgaWYgKGFycmF5U3RhcnQgPT09IC0xKSBpZHggPSBzdGFydDtcblx0ZWxzZSBpZHggPSBNYXRoLm1pbihzdGFydCwgYXJyYXlTdGFydCk7XG5cdGlmIChpZHggPCAwKSB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIEpTT04gZnJvbSBhdXRoMCBDTEksIGdvdDogJHtzdGRvdXQuc2xpY2UoMCwgMjAwKX1gKTtcblx0cmV0dXJuIEpTT04ucGFyc2Uoc3Rkb3V0LnNsaWNlKGlkeCkpIGFzIFQ7XG59XG5cbi8qKiBSdW4gYW4gYXV0aDAgQ0xJIGNvbW1hbmQgd2l0aCBhIGhhcmQgdGltZW91dC4gUmV0dXJucyBzdGRvdXQgb24gc3VjY2VzcywgdGhyb3dzIG9uIGZhaWx1cmUuICovXG5mdW5jdGlvbiBydW5BdXRoMChhcmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcImF1dGgwXCIsIGFyZ3MsIHtcblx0XHRlbmNvZGluZzogXCJ1dGY4XCIsXG5cdFx0dGltZW91dDogQVBJX1RJTUVPVVRfTVMsXG5cdFx0aW5wdXQ6IFwiXCIsXG5cdFx0c3RkaW86IFwicGlwZVwiLFxuXHR9KTtcblxuXHRpZiAocmVzdWx0LmVycm9yKSB7XG5cdFx0Y29uc3QgbXNnID0gcmVzdWx0LmVycm9yLm1lc3NhZ2U7XG5cdFx0aWYgKGlzQXV0aEVycm9yKG1zZykgfHwgKHJlc3VsdC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRVRJTUVET1VUXCIpIHtcblx0XHRcdHRocm93IG5ldyBBdXRoMEF1dGhFcnJvcihtc2cpO1xuXHRcdH1cblx0XHR0aHJvdyByZXN1bHQuZXJyb3I7XG5cdH1cblxuXHRpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuXHRcdGNvbnN0IHN0ZGVyciA9IHJlc3VsdC5zdGRlcnIgPz8gXCJcIjtcblx0XHRpZiAoaXNBdXRoRXJyb3Ioc3RkZXJyKSkgdGhyb3cgbmV3IEF1dGgwQXV0aEVycm9yKHN0ZGVycik7XG5cdFx0dGhyb3cgbmV3IEVycm9yKHN0ZGVyciB8fCBgYXV0aDAgZXhpdGVkIHdpdGggY29kZSAke3Jlc3VsdC5zdGF0dXN9YCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0LnN0ZG91dDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdXRoMFRlbmFudCB7XG5cdG5hbWU6IHN0cmluZztcblx0YWN0aXZlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFsbGVkKCk6IGJvb2xlYW4ge1xuXHR0cnkge1xuXHRcdGV4ZWNGaWxlU3luYyhcImF1dGgwXCIsIFtcIi0tdmVyc2lvblwiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdFRlbmFudHMoKTogQXV0aDBUZW5hbnRbXSB7XG5cdHRyeSB7XG5cdFx0Y29uc3Qgb3V0ID0gZXhlY0ZpbGVTeW5jKFwiYXV0aDBcIiwgW1widGVuYW50c1wiLCBcImxpc3RcIiwgXCItLWpzb25cIl0sIHtcblx0XHRcdGVuY29kaW5nOiBcInV0ZjhcIixcblx0XHRcdHN0ZGlvOiBcInBpcGVcIixcblx0XHR9KTtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZShvdXQpIGFzIEF1dGgwVGVuYW50W107XG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiBbXTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9naW4oKTogYm9vbGVhbiB7XG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcImF1dGgwXCIsIFtcImxvZ2luXCIsIFwiLS1zY29wZXNcIiwgUkVRVUlSRURfU0NPUEVTXSwge1xuXHRcdHN0ZGlvOiBcImluaGVyaXRcIixcblx0fSk7XG5cdHJldHVybiByZXN1bHQuc3RhdHVzID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdEFwaXMoKTogQXJyYXk8eyBpZGVudGlmaWVyOiBzdHJpbmc7IG5hbWU6IHN0cmluZyB9PiB7XG5cdHRyeSB7XG5cdFx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1wiYXBpc1wiLCBcImxpc3RcIiwgXCItLWpzb25cIiwgXCItLW5vLWlucHV0XCJdKTtcblx0XHRyZXR1cm4gcGFyc2VKc29uT3V0cHV0KG91dCk7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGlmIChlcnIgaW5zdGFuY2VvZiBBdXRoMEF1dGhFcnJvcikgdGhyb3cgZXJyO1xuXHRcdHJldHVybiBbXTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXBpKFxuXHRuYW1lOiBzdHJpbmcsXG5cdGlkZW50aWZpZXI6IHN0cmluZyxcblx0c2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSA9IEhFTExPX0FQSV9TQ09QRVMsXG4pOiB7IGlkZW50aWZpZXI6IHN0cmluZyB9IHtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBpc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS1pZGVudGlmaWVyXCIsXG5cdFx0aWRlbnRpZmllcixcblx0XHRcIi0tc2NvcGVzXCIsXG5cdFx0c2NvcGVzLmpvaW4oXCIsXCIpLFxuXHRcdC8vIFJCQUM6IG9ubHkgcGVybWlzc2lvbnMgYXNzaWduZWQgdG8gdGhlIHVzZXIvcm9sZSBhcHBlYXIgb24gdGhlIHRva2VuLlxuXHRcdFwiLS1lbmZvcmNlLXBvbGljaWVzXCIsXG5cdFx0Ly8gSW5jbHVkZSBBdXRoMCBgcGVybWlzc2lvbnNbXWAgY2xhaW0gKGNvbnN1bWVkIGJ5IHNhbXBsZSBwcmluY2lwYWxNYXBwZXIpLlxuXHRcdFwiLS10b2tlbi1kaWFsZWN0XCIsXG5cdFx0XCJhY2Nlc3NfdG9rZW5fYXV0aHpcIixcblx0XHRcIi0tanNvblwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0cmV0dXJuIHBhcnNlSnNvbk91dHB1dChvdXQpO1xufVxuXG4vKipcbiAqIFJlcGxhY2UgYW4gQVBJJ3Mgc2NvcGVzIGFuZCBlbmFibGUgUkJBQyBwb2xpY3kgZW5mb3JjZW1lbnQuXG4gKiBBdXRoMCBDTEkgYC0tc2NvcGVzYCByZXBsYWNlcyB0aGUgZnVsbCBzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBcGlTY29wZXMoXG5cdGlkZW50aWZpZXI6IHN0cmluZyxcblx0c2NvcGVzOiByZWFkb25seSBzdHJpbmdbXSA9IEhFTExPX0FQSV9TQ09QRVMsXG4pOiB2b2lkIHtcblx0cnVuQXV0aDAoW1xuXHRcdFwiYXBpc1wiLFxuXHRcdFwidXBkYXRlXCIsXG5cdFx0aWRlbnRpZmllcixcblx0XHRcIi0tc2NvcGVzXCIsXG5cdFx0c2NvcGVzLmpvaW4oXCIsXCIpLFxuXHRcdFwiLS1lbmZvcmNlLXBvbGljaWVzXCIsXG5cdFx0XCItLXRva2VuLWRpYWxlY3RcIixcblx0XHRcImFjY2Vzc190b2tlbl9hdXRoelwiLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcbn1cblxuLyoqIFRydWUgd2hlbiBBdXRoMCByZWZ1c2VzIGNyZWF0ZSBiZWNhdXNlIHRoZSB0ZW5hbnQgaGl0IGl0cyBBcHBsaWNhdGlvbnMgcXVvdGEuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoMEVudGl0eUxpbWl0RXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRleHQgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdHJldHVybiAvbGltaXQgb2YgZW50aXRpZXN8cmVhY2hlZCB0aGUgbGltaXR8dGVuYW50IGFwcGxpY2F0aW9uIGxpbWl0IHJlYWNoZWQvaS50ZXN0KHRleHQpO1xufVxuXG4vKipcbiAqIEFjdGlvbmFibGUgbWVzc2FnZSB3aGVuIEF1dGgwIHdpbGwgbm90IGNyZWF0ZSBhbm90aGVyIGFwcGxpY2F0aW9uLlxuICogRG9lcyBub3Qgc3VnZ2VzdCByZXVzaW5nIHVucmVsYXRlZCBhcHBzIOKAlCBmcmVlIHRlbmFudHMgbXVzdCBkZWxldGUgdW51c2VkIG9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRTcGFFbnRpdHlMaW1pdEVycm9yKGFwcE5hbWU6IHN0cmluZywgYXBwczogQXV0aDBBcHBbXSk6IHN0cmluZyB7XG5cdGNvbnN0IGxpc3RlZCA9XG5cdFx0YXBwcy5sZW5ndGggPT09IDBcblx0XHRcdD8gXCJDb3VsZCBub3QgbGlzdCBleGlzdGluZyBhcHBsaWNhdGlvbnMuXCJcblx0XHRcdDogYFRoaXMgdGVuYW50IGFscmVhZHkgaGFzICR7YXBwcy5sZW5ndGh9IGFwcGxpY2F0aW9uKHMpOlxcbiR7YXBwc1xuXHRcdFx0XHRcdC5tYXAoKGEpID0+IGAgIC0gJHthLm5hbWV9ICgke2EuY2xpZW50X2lkfSlgKVxuXHRcdFx0XHRcdC5qb2luKFwiXFxuXCIpfWA7XG5cblx0cmV0dXJuIFtcblx0XHRgQXV0aDAgcmVmdXNlZCB0byBjcmVhdGUgU1BBIFwiJHthcHBOYW1lfVwiOiB0ZW5hbnQgYXBwbGljYXRpb24gbGltaXQgcmVhY2hlZC5gLFxuXHRcdGxpc3RlZCxcblx0XHRcIlwiLFxuXHRcdFwiRml4OiBBdXRoMCBEYXNoYm9hcmQg4oaSIEFwcGxpY2F0aW9ucyDihpIgQXBwbGljYXRpb25zIOKGkiBkZWxldGUgdW51c2VkIGFwcHMsXCIsXG5cdFx0YHRoZW4gcmUtcnVuIHRoZSBzY2FmZm9sZCAob3IgY2hvb3NlIFBvc3RtYW4gXCJub25lXCIgdG8gc2tpcCBTUEEgY3JlYXRpb24pLmAsXG5cdFx0XCJSZS1zY2FmZm9sZCBvZiB0aGUgc2FtZSBwcm9qZWN0IG5hbWUgcmV1c2VzIGFuIGV4YWN0LW5hbWUgbWF0Y2ggd2hlbiBpdCBzdGlsbCBleGlzdHMuXCIsXG5cdF0uam9pbihcIlxcblwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZyB9IHtcblx0Y29uc3QgY2FsbGJhY2tzID0gdHlwZW9mIGNhbGxiYWNrVXJscyA9PT0gXCJzdHJpbmdcIiA/IGNhbGxiYWNrVXJscyA6IGNhbGxiYWNrVXJscy5qb2luKFwiLFwiKTtcblx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFwiYXBwc1wiLFxuXHRcdFwiY3JlYXRlXCIsXG5cdFx0XCItLW5hbWVcIixcblx0XHRuYW1lLFxuXHRcdFwiLS10eXBlXCIsXG5cdFx0XCJzcGFcIixcblx0XHRcIi0tY2FsbGJhY2tzXCIsXG5cdFx0Y2FsbGJhY2tzLFxuXHRcdFwiLS1qc29uXCIsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRjb25zdCBhcHAgPSBwYXJzZUpzb25PdXRwdXQ8eyBjbGllbnRfaWQ/OiBzdHJpbmc7IGNsaWVudElkPzogc3RyaW5nIH0+KG91dCk7XG5cdGNvbnN0IGNsaWVudElkID0gYXBwLmNsaWVudF9pZCA/PyBhcHAuY2xpZW50SWQ7XG5cdGlmICghY2xpZW50SWQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRgQXV0aDAgY3JlYXRlIFNQQSByZXNwb25zZSBtaXNzaW5nIGNsaWVudF9pZC4gc3Rkb3V0OiAke291dC5zbGljZSgwLCAzMDApfWAsXG5cdFx0KTtcblx0fVxuXHRyZXR1cm4geyBjbGllbnRfaWQ6IGNsaWVudElkIH07XG59XG5cbmV4cG9ydCB0eXBlIEF1dGgwQXBwID0geyBjbGllbnRfaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXN0QXBwcygpOiBBdXRoMEFwcFtdIHtcblx0dHJ5IHtcblx0XHRjb25zdCBvdXQgPSBydW5BdXRoMChbXCJhcHBzXCIsIFwibGlzdFwiLCBcIi0tanNvblwiLCBcIi0tbm8taW5wdXRcIl0pO1xuXHRcdGNvbnN0IGFwcHMgPVxuXHRcdFx0cGFyc2VKc29uT3V0cHV0PEFycmF5PHsgY2xpZW50X2lkPzogc3RyaW5nOyBjbGllbnRJZD86IHN0cmluZzsgbmFtZT86IHN0cmluZyB9Pj4ob3V0KTtcblx0XHRyZXR1cm4gYXBwc1xuXHRcdFx0Lm1hcCgoYSkgPT4gKHtcblx0XHRcdFx0Y2xpZW50X2lkOiBhLmNsaWVudF9pZCA/PyBhLmNsaWVudElkID8/IFwiXCIsXG5cdFx0XHRcdG5hbWU6IGEubmFtZSA/PyBcIlwiLFxuXHRcdFx0fSkpXG5cdFx0XHQuZmlsdGVyKChhKSA9PiBhLmNsaWVudF9pZCAmJiBhLm5hbWUpO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHRpZiAoZXJyIGluc3RhbmNlb2YgQXV0aDBBdXRoRXJyb3IpIHRocm93IGVycjtcblx0XHRyZXR1cm4gW107XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNwYUNhbGxiYWNrcyhcblx0Y2xpZW50SWQ6IHN0cmluZyxcblx0Y2FsbGJhY2tVcmxzOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSxcbik6IHZvaWQge1xuXHRjb25zdCBjYWxsYmFja3MgPSB0eXBlb2YgY2FsbGJhY2tVcmxzID09PSBcInN0cmluZ1wiID8gY2FsbGJhY2tVcmxzIDogY2FsbGJhY2tVcmxzLmpvaW4oXCIsXCIpO1xuXHRydW5BdXRoMChbXCJhcHBzXCIsIFwidXBkYXRlXCIsIGNsaWVudElkLCBcIi0tY2FsbGJhY2tzXCIsIGNhbGxiYWNrcywgXCItLW5vLWlucHV0XCJdKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSBQb3N0bWFuIFNQQSwgb3IgcmV1c2UgYW4gZXhpc3RpbmcgYXBwIHdpdGggdGhlIHNhbWUgbmFtZSAocmUtc2NhZmZvbGQpLlxuICogQWx3YXlzIHJldHVybnMgYSBjbGllbnRfaWQgc3VpdGFibGUgZm9yIFBvc3RtYW4gYXV0aDBDbGllbnRJZC5cbiAqIE9uIEF1dGgwIGFwcGxpY2F0aW9uLXF1b3RhIGVycm9ycywgdGhyb3dzIGEgY2xlYXIgZGVsZXRlLWFwcHMgbWVzc2FnZSAobm8gY3Jvc3MtYXBwIHJldXNlKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVNwYUFwcChcblx0bmFtZTogc3RyaW5nLFxuXHRjYWxsYmFja1VybHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLFxuKTogeyBjbGllbnRfaWQ6IHN0cmluZzsgcmV1c2VkOiBib29sZWFuIH0ge1xuXHRjb25zdCBhcHBzID0gbGlzdEFwcHMoKTtcblx0Y29uc3QgZXhpc3RpbmcgPSBhcHBzLmZpbmQoKGEpID0+IGEubmFtZSA9PT0gbmFtZSk7XG5cdGlmIChleGlzdGluZykge1xuXHRcdHRyeSB7XG5cdFx0XHR1cGRhdGVTcGFDYWxsYmFja3MoZXhpc3RpbmcuY2xpZW50X2lkLCBjYWxsYmFja1VybHMpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0Ly8gQ2FsbGJhY2tzIG1heSBhbHJlYWR5IG1hdGNoOyBzdGlsbCB1c2FibGUgZm9yIFBvc3RtYW4uXG5cdFx0fVxuXHRcdHJldHVybiB7IGNsaWVudF9pZDogZXhpc3RpbmcuY2xpZW50X2lkLCByZXVzZWQ6IHRydWUgfTtcblx0fVxuXHR0cnkge1xuXHRcdHJldHVybiB7IC4uLmNyZWF0ZVNwYUFwcChuYW1lLCBjYWxsYmFja1VybHMpLCByZXVzZWQ6IGZhbHNlIH07XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdGlmIChpc0F1dGgwRW50aXR5TGltaXRFcnJvcihlcnIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoZm9ybWF0U3BhRW50aXR5TGltaXRFcnJvcihuYW1lLCBhcHBzKSk7XG5cdFx0fVxuXHRcdHRocm93IGVycjtcblx0fVxufVxuXG50eXBlIEF1dGgwQ29ubmVjdGlvbiA9IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzdHJhdGVneTogc3RyaW5nIH07XG5cbi8qKiBFbmFibGUgYSBkYXRhYmFzZSBjb25uZWN0aW9uIGZvciBhbiBhcHBsaWNhdGlvbiAocmVxdWlyZWQgZm9yIHVzZXJuYW1lL3Bhc3N3b3JkIGxvZ2luKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVDb25uZWN0aW9uRm9yQ2xpZW50KGNvbm5lY3Rpb25OYW1lOiBzdHJpbmcsIGNsaWVudElkOiBzdHJpbmcpOiB2b2lkIHtcblx0Y29uc3QgbGlzdE91dCA9IHJ1bkF1dGgwKFtcImFwaVwiLCBcImdldFwiLCBcImNvbm5lY3Rpb25zXCIsIFwiLS1uby1pbnB1dFwiXSk7XG5cdGNvbnN0IGNvbm5lY3Rpb25zID0gcGFyc2VKc29uT3V0cHV0PEF1dGgwQ29ubmVjdGlvbltdPihsaXN0T3V0KTtcblx0Y29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3Rpb25zLmZpbmQoKGMpID0+IGMubmFtZSA9PT0gY29ubmVjdGlvbk5hbWUpO1xuXHRpZiAoIWNvbm5lY3Rpb24pIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEF1dGgwIGNvbm5lY3Rpb24gbm90IGZvdW5kOiAke2Nvbm5lY3Rpb25OYW1lfWApO1xuXHR9XG5cblx0Y29uc3QgY2xpZW50c091dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwaVwiLFxuXHRcdFwiZ2V0XCIsXG5cdFx0YGNvbm5lY3Rpb25zLyR7Y29ubmVjdGlvbi5pZH0vY2xpZW50c2AsXG5cdFx0XCItLW5vLWlucHV0XCIsXG5cdF0pO1xuXHRjb25zdCB7IGNsaWVudHMgfSA9IHBhcnNlSnNvbk91dHB1dDx7IGNsaWVudHM6IEFycmF5PHsgY2xpZW50X2lkOiBzdHJpbmcgfT4gfT4oY2xpZW50c091dCk7XG5cdGlmIChjbGllbnRzLnNvbWUoKGMpID0+IGMuY2xpZW50X2lkID09PSBjbGllbnRJZCkpIHJldHVybjtcblxuXHQvLyBEZWRpY2F0ZWQgZW5hYmxlZC1jbGllbnRzIGVuZHBvaW50IChlbmFibGVkX2NsaWVudHMgb24gY29ubmVjdGlvbiBQQVRDSCBpcyBkZXByZWNhdGVkKS5cblx0cnVuQXV0aDAoW1xuXHRcdFwiYXBpXCIsXG5cdFx0XCJwYXRjaFwiLFxuXHRcdGBjb25uZWN0aW9ucy8ke2Nvbm5lY3Rpb24uaWR9L2NsaWVudHNgLFxuXHRcdFwiLS1kYXRhXCIsXG5cdFx0SlNPTi5zdHJpbmdpZnkoW3sgY2xpZW50X2lkOiBjbGllbnRJZCwgc3RhdHVzOiB0cnVlIH1dKSxcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG59XG5cbmV4cG9ydCB0eXBlIEFkbWluRGF0YWJhc2VVc2VyID0ge1xuXHR1c2VyX2lkOiBzdHJpbmc7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHVzZXJuYW1lOiBzdHJpbmc7XG59O1xuXG4vKiogU3Ryb25nIGRlZmF1bHQgcGFzc3dvcmQgd2hlbiB0aGUgc2NhZmZvbGRlciBjYWxsZXIgbGVhdmVzIHBhc3N3b3JkIGJsYW5rLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQWRtaW5QYXNzd29yZCgpOiBzdHJpbmcge1xuXHRyZXR1cm4gYCR7cmFuZG9tQnl0ZXMoMTIpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpfWFBMSFgO1xufVxuXG5mdW5jdGlvbiBpc1VzZXJBbHJlYWR5RXhpc3RzRXJyb3IoZXJyOiB1bmtub3duKTogYm9vbGVhbiB7XG5cdGNvbnN0IHRleHQgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogU3RyaW5nKGVycik7XG5cdHJldHVybiAvYWxyZWFkeSBleGlzdHN8dXNlciBleGlzdHN8Q29uZmxpY3R8NDA5L2kudGVzdCh0ZXh0KTtcbn1cblxuLyoqIExvb2sgdXAgYSB1c2VyIGJ5IGVtYWlsIChNYW5hZ2VtZW50IEFQSSB1c2Vycy1ieS1lbWFpbCkuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZFVzZXJCeUVtYWlsKGVtYWlsOiBzdHJpbmcpOiB7IHVzZXJfaWQ6IHN0cmluZzsgZW1haWw6IHN0cmluZyB9IHwgbnVsbCB7XG5cdGNvbnN0IG91dCA9IHJ1bkF1dGgwKFtcblx0XHRcImFwaVwiLFxuXHRcdFwiZ2V0XCIsXG5cdFx0YHVzZXJzLWJ5LWVtYWlsP2VtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtYWlsKX1gLFxuXHRcdFwiLS1uby1pbnB1dFwiLFxuXHRdKTtcblx0Y29uc3QgdXNlcnMgPSBwYXJzZUpzb25PdXRwdXQ8QXJyYXk8eyB1c2VyX2lkPzogc3RyaW5nOyBlbWFpbD86IHN0cmluZyB9Pj4ob3V0KTtcblx0Y29uc3QgdXNlciA9IHVzZXJzLmZpbmQoKHUpID0+IHUudXNlcl9pZCAmJiB1LmVtYWlsKTtcblx0aWYgKCF1c2VyPy51c2VyX2lkIHx8ICF1c2VyLmVtYWlsKSByZXR1cm4gbnVsbDtcblx0cmV0dXJuIHsgdXNlcl9pZDogdXNlci51c2VyX2lkLCBlbWFpbDogdXNlci5lbWFpbCB9O1xufVxuXG4vKiogUmVzZXQgcGFzc3dvcmQgc28gYSByZS1zY2FmZm9sZCBjYW4gd3JpdGUgYSBrbm93biBwYXNzd29yZCB0byAuZW52LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVVzZXJQYXNzd29yZCh1c2VySWQ6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IHZvaWQge1xuXHRydW5BdXRoMChbXG5cdFx0XCJhcGlcIixcblx0XHRcInBhdGNoXCIsXG5cdFx0YHVzZXJzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCl9YCxcblx0XHRcIi0tZGF0YVwiLFxuXHRcdEpTT04uc3RyaW5naWZ5KHsgcGFzc3dvcmQsIGNvbm5lY3Rpb246IERCX0NPTk5FQ1RJT05fTkFNRSB9KSxcblx0XHRcIi0tbm8taW5wdXRcIixcblx0XSk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGEgREIgY29ubmVjdGlvbiByb290LWFkbWluIHVzZXIgZm9yIGxvY2FsIC8gUG9zdG1hbiBsb2dpbi5cbiAqIElmIHRoZSB1c2VyIGFscmVhZHkgZXhpc3RzLCBsb29rIHRoZW0gdXAsIHJlc2V0IHBhc3N3b3JkIHRvIGBpbnB1dC5wYXNzd29yZGAsXG4gKiBhbmQgcmV0dXJuIHRoYXQgaWRlbnRpdHkgc28gY2FsbGVycyBjYW4gc3RpbGwgd3JpdGUgLmVudiBjcmVkZW50aWFscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyKGlucHV0OiB7XG5cdGVtYWlsOiBzdHJpbmc7XG5cdHBhc3N3b3JkOiBzdHJpbmc7XG5cdHVzZXJuYW1lOiBzdHJpbmc7XG59KTogQWRtaW5EYXRhYmFzZVVzZXIge1xuXHRjb25zdCBib2R5ID0ge1xuXHRcdGVtYWlsOiBpbnB1dC5lbWFpbCxcblx0XHRjb25uZWN0aW9uOiBEQl9DT05ORUNUSU9OX05BTUUsXG5cdFx0cGFzc3dvcmQ6IGlucHV0LnBhc3N3b3JkLFxuXHRcdG5hbWU6IGlucHV0LnVzZXJuYW1lLFxuXHRcdGVtYWlsX3ZlcmlmaWVkOiB0cnVlLFxuXHRcdHZlcmlmeV9lbWFpbDogZmFsc2UsXG5cdFx0YXBwX21ldGFkYXRhOiB7IHJvbGVzOiBbXCJhZG1pblwiXSB9LFxuXHR9O1xuXG5cdHRyeSB7XG5cdFx0Y29uc3Qgb3V0ID0gcnVuQXV0aDAoW1xuXHRcdFx0XCJhcGlcIixcblx0XHRcdFwicG9zdFwiLFxuXHRcdFx0XCJ1c2Vyc1wiLFxuXHRcdFx0XCItLWRhdGFcIixcblx0XHRcdEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuXHRcdFx0XCItLW5vLWlucHV0XCIsXG5cdFx0XSk7XG5cdFx0Y29uc3QgdXNlciA9IHBhcnNlSnNvbk91dHB1dDx7IHVzZXJfaWQ/OiBzdHJpbmc7IGVtYWlsPzogc3RyaW5nIH0+KG91dCk7XG5cdFx0aWYgKCF1c2VyLnVzZXJfaWQgfHwgIXVzZXIuZW1haWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEF1dGgwIGNyZWF0ZSB1c2VyIHJlc3BvbnNlIG1pc3NpbmcgdXNlcl9pZC9lbWFpbC4gc3Rkb3V0OiAke291dC5zbGljZSgwLCAzMDApfWAsXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4ge1xuXHRcdFx0dXNlcl9pZDogdXNlci51c2VyX2lkLFxuXHRcdFx0ZW1haWw6IHVzZXIuZW1haWwsXG5cdFx0XHRwYXNzd29yZDogaW5wdXQucGFzc3dvcmQsXG5cdFx0XHR1c2VybmFtZTogaW5wdXQudXNlcm5hbWUsXG5cdFx0fTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0aWYgKCFpc1VzZXJBbHJlYWR5RXhpc3RzRXJyb3IoZXJyKSkgdGhyb3cgZXJyO1xuXG5cdFx0Y29uc3QgZXhpc3RpbmcgPSBmaW5kVXNlckJ5RW1haWwoaW5wdXQuZW1haWwpO1xuXHRcdGlmICghZXhpc3RpbmcpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0YEF1dGgwIHVzZXIgYWxyZWFkeSBleGlzdHMgZm9yICR7aW5wdXQuZW1haWx9LCBidXQgbG9va3VwIGJ5IGVtYWlsIHJldHVybmVkIG5vIHVzZXIuYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0dXBkYXRlVXNlclBhc3N3b3JkKGV4aXN0aW5nLnVzZXJfaWQsIGlucHV0LnBhc3N3b3JkKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0dXNlcl9pZDogZXhpc3RpbmcudXNlcl9pZCxcblx0XHRcdGVtYWlsOiBleGlzdGluZy5lbWFpbCxcblx0XHRcdHBhc3N3b3JkOiBpbnB1dC5wYXNzd29yZCxcblx0XHRcdHVzZXJuYW1lOiBpbnB1dC51c2VybmFtZSxcblx0XHR9O1xuXHR9XG59XG5cbmV4cG9ydCB7IFJFUVVJUkVEX1NDT1BFUyB9O1xuIl0sIm5hbWVzIjpbImV4ZWNGaWxlU3luYyIsInNwYXduU3luYyIsInJhbmRvbUJ5dGVzIiwiUkVRVUlSRURfU0NPUEVTIiwiam9pbiIsIkFQSV9USU1FT1VUX01TIiwiSEVMTE9fQVBJX1NDT1BFUyIsIkRCX0NPTk5FQ1RJT05fTkFNRSIsIkF1dGgwQXV0aEVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwibmFtZSIsImlzQXV0aEVycm9yIiwidGV4dCIsImluY2x1ZGVzIiwicGFyc2VKc29uT3V0cHV0Iiwic3Rkb3V0Iiwic3RhcnQiLCJpbmRleE9mIiwiYXJyYXlTdGFydCIsImlkeCIsIk1hdGgiLCJtaW4iLCJzbGljZSIsIkpTT04iLCJwYXJzZSIsInJ1bkF1dGgwIiwiYXJncyIsInJlc3VsdCIsImVuY29kaW5nIiwidGltZW91dCIsImlucHV0Iiwic3RkaW8iLCJlcnJvciIsIm1zZyIsImNvZGUiLCJzdGF0dXMiLCJzdGRlcnIiLCJpc0luc3RhbGxlZCIsImxpc3RUZW5hbnRzIiwib3V0IiwibG9naW4iLCJsaXN0QXBpcyIsImVyciIsImNyZWF0ZUFwaSIsImlkZW50aWZpZXIiLCJzY29wZXMiLCJ1cGRhdGVBcGlTY29wZXMiLCJpc0F1dGgwRW50aXR5TGltaXRFcnJvciIsIlN0cmluZyIsInRlc3QiLCJmb3JtYXRTcGFFbnRpdHlMaW1pdEVycm9yIiwiYXBwTmFtZSIsImFwcHMiLCJsaXN0ZWQiLCJsZW5ndGgiLCJtYXAiLCJhIiwiY2xpZW50X2lkIiwiY3JlYXRlU3BhQXBwIiwiY2FsbGJhY2tVcmxzIiwiY2FsbGJhY2tzIiwiYXBwIiwiY2xpZW50SWQiLCJsaXN0QXBwcyIsImZpbHRlciIsInVwZGF0ZVNwYUNhbGxiYWNrcyIsImVuc3VyZVNwYUFwcCIsImV4aXN0aW5nIiwiZmluZCIsInJldXNlZCIsImVuYWJsZUNvbm5lY3Rpb25Gb3JDbGllbnQiLCJjb25uZWN0aW9uTmFtZSIsImxpc3RPdXQiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb24iLCJjIiwiY2xpZW50c091dCIsImlkIiwiY2xpZW50cyIsInNvbWUiLCJzdHJpbmdpZnkiLCJnZW5lcmF0ZUFkbWluUGFzc3dvcmQiLCJ0b1N0cmluZyIsImlzVXNlckFscmVhZHlFeGlzdHNFcnJvciIsImZpbmRVc2VyQnlFbWFpbCIsImVtYWlsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXNlcnMiLCJ1c2VyIiwidSIsInVzZXJfaWQiLCJ1cGRhdGVVc2VyUGFzc3dvcmQiLCJ1c2VySWQiLCJwYXNzd29yZCIsImNyZWF0ZUFkbWluRGF0YWJhc2VVc2VyIiwiYm9keSIsInVzZXJuYW1lIiwiZW1haWxfdmVyaWZpZWQiLCJ2ZXJpZnlfZW1haWwiLCJhcHBfbWV0YWRhdGEiLCJyb2xlcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxFQUFFQyxTQUFTLFFBQVEscUJBQXFCO0FBQzdELFNBQVNDLFdBQVcsUUFBUSxjQUFjO0FBRTFDLDZFQUE2RSxHQUM3RSxNQUFNQyxrQkFBa0I7SUFDdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBLENBQUNDLElBQUksQ0FBQztBQUVQLDBGQUEwRixHQUMxRixNQUFNQyxpQkFB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
|
|
@@ -38,3 +38,5 @@ import { spawnSync } from "node:child_process";
|
|
|
38
38
|
console.error(` ✗ Biome: ${detail.slice(0, 400)}`);
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvZmVhdHVyZXMvYmlvbWUtZm9ybWF0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcblxuLyoqXG4gKiBGb3JtYXQvbGludC1maXggYWxsIGZpbGVzIGluIHRoZSBzY2FmZm9sZGVkIHdvcmtzcGFjZSB3aXRoIEJpb21lLlxuICogUHJlZmVyIGEgZ2xvYmFsIGBiaW9tZWAgYmluYXJ5IChidWlsZGVyIGltYWdlKTsgZmFsbCBiYWNrIHRvIGBucHhgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0U2NhZmZvbGRlZEZpbGVzKHRhcmdldERpcjogc3RyaW5nLCBwYXRoczogc3RyaW5nW10gPSBbXCIuXCJdKTogdm9pZCB7XG5cdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFxuICBGb3JtYXR0aW5nIHNjYWZmb2xkZWQgZmlsZXMgd2l0aCBCaW9tZS4uLlwiKTtcblxuXHRsZXQgcmVzdWx0ID0gc3Bhd25TeW5jKFwiYmlvbWVcIiwgW1wiY2hlY2tcIiwgXCItLXdyaXRlXCIsIC4uLnBhdGhzXSwge1xuXHRcdGN3ZDogdGFyZ2V0RGlyLFxuXHRcdGVuY29kaW5nOiBcInV0ZjhcIixcblx0XHRzdGRpbzogXCJwaXBlXCIsXG5cdH0pO1xuXG5cdGlmIChyZXN1bHQuZXJyb3IgJiYgKHJlc3VsdC5lcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcblx0XHRyZXN1bHQgPSBzcGF3blN5bmMoXCJucHhcIiwgW1wiLS15ZXNcIiwgXCJAYmlvbWVqcy9iaW9tZVwiLCBcImNoZWNrXCIsIFwiLS13cml0ZVwiLCAuLi5wYXRoc10sIHtcblx0XHRcdGN3ZDogdGFyZ2V0RGlyLFxuXHRcdFx0ZW5jb2Rpbmc6IFwidXRmOFwiLFxuXHRcdFx0c3RkaW86IFwicGlwZVwiLFxuXHRcdH0pO1xuXHR9XG5cblx0aWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcblx0XHRwcm9jZXNzLnN0ZG91dC53cml0ZShcIiBkb25lLlxcblwiKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBkZXRhaWwgPSAocmVzdWx0LnN0ZGVyciB8fCByZXN1bHQuc3Rkb3V0IHx8IHJlc3VsdC5lcnJvcj8ubWVzc2FnZSB8fCBcIlwiKS50cmltKCk7XG5cdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiIGZhaWxlZC5cXG5cIik7XG5cdGlmIChkZXRhaWwpIHtcblx0XHRjb25zb2xlLmVycm9yKGAgIOKclyBCaW9tZTogJHtkZXRhaWwuc2xpY2UoMCwgNDAwKX1gKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbInNwYXduU3luYyIsImZvcm1hdFNjYWZmb2xkZWRGaWxlcyIsInRhcmdldERpciIsInBhdGhzIiwicHJvY2VzcyIsInN0ZG91dCIsIndyaXRlIiwicmVzdWx0IiwiY3dkIiwiZW5jb2RpbmciLCJzdGRpbyIsImVycm9yIiwiY29kZSIsInN0YXR1cyIsImRldGFpbCIsInN0ZGVyciIsIm1lc3NhZ2UiLCJ0cmltIiwiY29uc29sZSIsInNsaWNlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxTQUFTLFFBQVEscUJBQXFCO0FBRS9DOzs7Q0FHQyxHQUNELE9BQU8sU0FBU0Msc0JBQXNCQyxTQUFpQixFQUFFQyxRQUFrQjtJQUFDO0NBQUk7SUFDL0VDLFFBQVFDLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDO0lBRXJCLElBQUlDLFNBQVNQLFVBQVUsU0FBUztRQUFDO1FBQVM7V0FBY0c7S0FBTSxFQUFFO1FBQy9ESyxLQUFLTjtRQUNMTyxVQUFVO1FBQ1ZDLE9BQU87SUFDUjtJQUVBLElBQUlILE9BQU9JLEtBQUssSUFBSSxBQUFDSixPQUFPSSxLQUFLLENBQTJCQyxJQUFJLEtBQUssVUFBVTtRQUM5RUwsU0FBU1AsVUFBVSxPQUFPO1lBQUM7WUFBUztZQUFrQjtZQUFTO2VBQWNHO1NBQU0sRUFBRTtZQUNwRkssS0FBS047WUFDTE8sVUFBVTtZQUNWQyxPQUFPO1FBQ1I7SUFDRDtJQUVBLElBQUlILE9BQU9NLE1BQU0sS0FBSyxHQUFHO1FBQ3hCVCxRQUFRQyxNQUFNLENBQUNDLEtBQUssQ0FBQztRQUNyQjtJQUNEO0lBRUEsTUFBTVEsU0FBUyxBQUFDUCxDQUFBQSxPQUFPUSxNQUFNLElBQUlSLE9BQU9GLE1BQU0sSUFBSUUsT0FBT0ksS0FBSyxFQUFFSyxXQUFXLEVBQUMsRUFBR0MsSUFBSTtJQUNuRmIsUUFBUUMsTUFBTSxDQUFDQyxLQUFLLENBQUM7SUFDckIsSUFBSVEsUUFBUTtRQUNYSSxRQUFRUCxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUVHLE9BQU9LLEtBQUssQ0FBQyxHQUFHLE1BQU07SUFDbkQ7QUFDRCJ9
|