@decohere/create 0.0.1-dev.22 → 0.0.1-dev.24
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/models/compose.model.js +56 -4
- package/commonjs/src/models/dev-container.model.js +29 -2
- package/commonjs/src/models/package-json.model.js +11 -6
- package/commonjs/src/runner.js +19 -3
- package/commonjs/src/version.js +26 -8
- package/commonjs/src/webapi/create-api.js +65 -5
- package/commonjs/src/webapi/features/auth.feature.js +287 -7
- package/commonjs/src/webapi/features/auth0-cli.js +140 -9
- package/commonjs/src/webapi/features/database.feature.js +56 -24
- package/commonjs/src/webapi/features/postman.feature.js +335 -46
- package/commonjs/src/webapi/models/api-package-json.model.js +4 -1
- package/commonjs/src/webapi/models/auth-config.model.js +4 -1
- package/commonjs/src/webapi/models/controller-source-file.model.js +15 -7
- package/commonjs/src/webapi/models/main-source-file.model.js +28 -4
- package/es6/src/models/compose.model.js +57 -6
- package/es6/src/models/dev-container.model.js +30 -8
- package/es6/src/models/package-json.model.js +11 -6
- package/es6/src/runner.js +21 -5
- package/es6/src/version.js +15 -5
- package/es6/src/webapi/create-api.js +65 -5
- package/es6/src/webapi/features/auth.feature.js +287 -7
- package/es6/src/webapi/features/auth0-cli.js +122 -9
- package/es6/src/webapi/features/database.feature.js +56 -24
- package/es6/src/webapi/features/postman.feature.js +322 -43
- package/es6/src/webapi/models/api-package-json.model.js +4 -1
- package/es6/src/webapi/models/auth-config.model.js +4 -1
- package/es6/src/webapi/models/controller-source-file.model.js +15 -7
- package/es6/src/webapi/models/main-source-file.model.js +28 -4
- package/package.json +6 -3
- package/types/src/models/compose.model.d.ts +27 -2
- package/types/src/models/dev-container.model.d.ts +12 -0
- package/types/src/models/package-json.model.d.ts +2 -0
- package/types/src/version.d.ts +2 -0
- package/types/src/webapi/features/auth.feature.d.ts +3 -0
- package/types/src/webapi/features/auth0-cli.d.ts +25 -3
- package/types/src/webapi/features/postman.feature.d.ts +5 -0
- package/types/src/webapi/models/auth-config.model.d.ts +8 -0
- package/types/src/webapi/models/controller-source-file.model.d.ts +6 -3
- package/types/src/webapi/models/main-source-file.model.d.ts +12 -0
package/es6/src/runner.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { execFileSync, spawnSync } from "node:child_process";
|
|
2
|
-
import { mkdirSync } from "node:fs";
|
|
2
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
3
|
+
import { homedir } from "node:os";
|
|
3
4
|
import { resolve } from "node:path";
|
|
4
|
-
import { CREATE_VERSION } from "./version.js";
|
|
5
|
-
const BUILDER_IMAGE =
|
|
5
|
+
import { CREATE_IMAGE_REPOSITORY, CREATE_VERSION } from "./version.js";
|
|
6
|
+
const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
|
|
6
7
|
/**
|
|
7
8
|
* Run the scaffold inside a pre-built Docker builder image.
|
|
8
9
|
*
|
|
@@ -34,6 +35,11 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
|
|
|
34
35
|
"-v",
|
|
35
36
|
"/npm-cache"
|
|
36
37
|
];
|
|
38
|
+
// Mount host .npmrc for private registry credentials, if present.
|
|
39
|
+
const npmrcPath = resolve(homedir(), ".npmrc");
|
|
40
|
+
if (existsSync(npmrcPath)) {
|
|
41
|
+
volumes.push("-v", `${npmrcPath}:/root/.npmrc:ro`);
|
|
42
|
+
}
|
|
37
43
|
const commandArgs = [
|
|
38
44
|
"webapi",
|
|
39
45
|
"-d",
|
|
@@ -52,10 +58,17 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
|
|
|
52
58
|
commandArgs.push("--install", opts.installDependencies);
|
|
53
59
|
}
|
|
54
60
|
console.log(" Running scaffolding in a sandboxed container...\n");
|
|
61
|
+
// Only allocate a TTY when stdin is itself a TTY — avoids a hung process
|
|
62
|
+
// in non-interactive environments (pipes, CI, scripts).
|
|
63
|
+
const ttyFlags = process.stdin.isTTY ? [
|
|
64
|
+
"-it"
|
|
65
|
+
] : [
|
|
66
|
+
"-i"
|
|
67
|
+
];
|
|
55
68
|
const result = spawnSync("docker", [
|
|
56
69
|
"run",
|
|
57
70
|
"--rm",
|
|
58
|
-
|
|
71
|
+
...ttyFlags,
|
|
59
72
|
...volumes,
|
|
60
73
|
"-e",
|
|
61
74
|
"DECOHERE_BUILDER=1",
|
|
@@ -70,7 +83,10 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
|
|
|
70
83
|
], {
|
|
71
84
|
stdio: "inherit"
|
|
72
85
|
});
|
|
86
|
+
if (result.status === 0) {
|
|
87
|
+
console.log(`\n Scaffold complete!\n\n Open your project:\n\n code ${targetDir}\n`);
|
|
88
|
+
}
|
|
73
89
|
process.exit(result.status ?? 0);
|
|
74
90
|
}
|
|
75
91
|
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENSRUFURV9JTUFHRV9SRVBPU0lUT1JZLCBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IEJVSUxERVJfSU1BR0UgPSBgJHtDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWX06JHtDUkVBVEVfVkVSU0lPTn1gO1xuXG4vKipcbiAqIFJ1biB0aGUgc2NhZmZvbGQgaW5zaWRlIGEgcHJlLWJ1aWx0IERvY2tlciBidWlsZGVyIGltYWdlLlxuICpcbiAqIENhbGxlZCB3aGVuIGBERUNPSEVSRV9CVUlMREVSYCBpcyBub3Qgc2V0IOKAlCBpLmUuIHRoZSBDTEkgaXMgcnVubmluZyBvbiB0aGVcbiAqIGhvc3QsIG91dHNpZGUgdGhlIGNvbnRhaW5lci4gTW91bnRzIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFzIGAvd29ya3NwYWNlYCBzb1xuICogdGhlIHNjYWZmb2xkZWQgZmlsZXMgYXJlIHdyaXR0ZW4gYmFjayB0byB0aGUgaG9zdCBmaWxlc3lzdGVtLlxuICpcbiAqIElmIGB+Ly5jb25maWcvYXV0aDBgIGV4aXN0cyBvbiB0aGUgaG9zdCB0aGUgZGlyZWN0b3J5IGlzIGFsc28gbW91bnRlZCBzb1xuICogdGhlIGF1dGgwIENMSSBpbnNpZGUgdGhlIGNvbnRhaW5lciBjYW4gcmV1c2UgZXhpc3RpbmcgY3JlZGVudGlhbHMgc2lsZW50bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRta2RpclN5bmModGFyZ2V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHQvLyBFbnN1cmUgRG9ja2VyIGlzIGF2YWlsYWJsZS5cblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJkb2NrZXJcIiwgW1wiaW5mb1wiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgRG9ja2VyIGlzIHJlcXVpcmVkIHRvIHNjYWZmb2xkIGEgRGVjb2hlcmUgcHJvamVjdC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsIERvY2tlciBEZXNrdG9wOiBodHRwczovL3d3dy5kb2NrZXIuY29tL3Byb2R1Y3RzL2RvY2tlci1kZXNrdG9wXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcIi12XCIsIGAke3RhcmdldERpcn06L3dvcmtzcGFjZWAsIFwiLXZcIiwgXCIvbnBtLWNhY2hlXCJdO1xuXG5cdC8vIE1vdW50IGhvc3QgLm5wbXJjIGZvciBwcml2YXRlIHJlZ2lzdHJ5IGNyZWRlbnRpYWxzLCBpZiBwcmVzZW50LlxuXHRjb25zdCBucG1yY1BhdGggPSByZXNvbHZlKGhvbWVkaXIoKSwgXCIubnBtcmNcIik7XG5cdGlmIChleGlzdHNTeW5jKG5wbXJjUGF0aCkpIHtcblx0XHR2b2x1bWVzLnB1c2goXCItdlwiLCBgJHtucG1yY1BhdGh9Oi9yb290Ly5ucG1yYzpyb2ApO1xuXHR9XG5cblx0Y29uc3QgY29tbWFuZEFyZ3M6IHN0cmluZ1tdID0gW1wid2ViYXBpXCIsIFwiLWRcIiwgXCIuXCJdO1xuXHRpZiAob3B0cy5kYXRhYmFzZVByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1kYXRhYmFzZVwiLCBvcHRzLmRhdGFiYXNlUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLmF1dGhQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tYXV0aFwiLCBvcHRzLmF1dGhQcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1wb3N0bWFuXCIsIG9wdHMucG9zdG1hblByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5pbnN0YWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1pbnN0YWxsXCIsIG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIiAgUnVubmluZyBzY2FmZm9sZGluZyBpbiBhIHNhbmRib3hlZCBjb250YWluZXIuLi5cXG5cIik7XG5cblx0Ly8gT25seSBhbGxvY2F0ZSBhIFRUWSB3aGVuIHN0ZGluIGlzIGl0c2VsZiBhIFRUWSDigJQgYXZvaWRzIGEgaHVuZyBwcm9jZXNzXG5cdC8vIGluIG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudHMgKHBpcGVzLCBDSSwgc2NyaXB0cykuXG5cdGNvbnN0IHR0eUZsYWdzID0gcHJvY2Vzcy5zdGRpbi5pc1RUWSA/IFtcIi1pdFwiXSA6IFtcIi1pXCJdO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcblx0XHRcImRvY2tlclwiLFxuXHRcdFtcblx0XHRcdFwicnVuXCIsXG5cdFx0XHRcIi0tcm1cIixcblx0XHRcdC4uLnR0eUZsYWdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdFwiLWVcIixcblx0XHRcdFwiREVDT0hFUkVfQlVJTERFUj0xXCIsXG5cdFx0XHRcIi1lXCIsXG5cdFx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFx0XCItZVwiLFxuXHRcdFx0XCJOUE1fQ09ORklHX1BSRUZFUl9PRkZMSU5FPXRydWVcIixcblx0XHRcdFwiLXdcIixcblx0XHRcdFwiL3dvcmtzcGFjZVwiLFxuXHRcdFx0QlVJTERFUl9JTUFHRSxcblx0XHRcdC4uLmNvbW1hbmRBcmdzLFxuXHRcdF0sXG5cdFx0eyBzdGRpbzogXCJpbmhlcml0XCIgfSxcblx0KTtcblxuXHRpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xuXHRcdGNvbnNvbGUubG9nKGBcXG4gIFNjYWZmb2xkIGNvbXBsZXRlIVxcblxcbiAgT3BlbiB5b3VyIHByb2plY3Q6XFxuXFxuICAgIGNvZGUgJHt0YXJnZXREaXJ9XFxuYCk7XG5cdH1cblxuXHRwcm9jZXNzLmV4aXQocmVzdWx0LnN0YXR1cyA/PyAwKTtcbn1cbiJdLCJuYW1lcyI6WyJleGVjRmlsZVN5bmMiLCJzcGF3blN5bmMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwiaG9tZWRpciIsInJlc29sdmUiLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicmVjdXJzaXZlIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInZvbHVtZXMiLCJucG1yY1BhdGgiLCJwdXNoIiwiY29tbWFuZEFyZ3MiLCJkYXRhYmFzZVByb3ZpZGVyIiwiYXV0aFByb3ZpZGVyIiwicG9zdG1hblByb3ZpZGVyIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsImxvZyIsInR0eUZsYWdzIiwic3RkaW4iLCJpc1RUWSIsInJlc3VsdCIsInN0YXR1cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxFQUFFQyxTQUFTLFFBQVEscUJBQXFCO0FBQzdELFNBQVNDLFVBQVUsRUFBRUMsU0FBUyxRQUFRLFVBQVU7QUFDaEQsU0FBU0MsT0FBTyxRQUFRLFVBQVU7QUFDbEMsU0FBU0MsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsdUJBQXVCLEVBQUVDLGNBQWMsUUFBUSxlQUFlO0FBR3ZFLE1BQU1DLGdCQUFnQixHQUFHRix3QkFBd0IsQ0FBQyxFQUFFQyxnQkFBZ0I7QUFFcEU7Ozs7Ozs7OztDQVNDLEdBQ0QsT0FBTyxTQUFTRSxhQUFhQyxJQUFnQjtJQUM1QyxNQUFNQyxZQUFZTixRQUFRSyxLQUFLRSxDQUFDLElBQUk7SUFDcENULFVBQVVRLFdBQVc7UUFBRUUsV0FBVztJQUFLO0lBRXZDLDhCQUE4QjtJQUM5QixJQUFJO1FBQ0hiLGFBQWEsVUFBVTtZQUFDO1NBQU8sRUFBRTtZQUFFYyxPQUFPO1FBQU87SUFDbEQsRUFBRSxPQUFNO1FBQ1BDLFFBQVFDLEtBQUssQ0FDWiw2REFDQztRQUVGQyxRQUFRQyxJQUFJLENBQUM7SUFDZDtJQUVBLE1BQU1DLFVBQW9CO1FBQUM7UUFBTSxHQUFHUixVQUFVLFdBQVcsQ0FBQztRQUFFO1FBQU07S0FBYTtJQUUvRSxrRUFBa0U7SUFDbEUsTUFBTVMsWUFBWWYsUUFBUUQsV0FBVztJQUNyQyxJQUFJRixXQUFXa0IsWUFBWTtRQUMxQkQsUUFBUUUsSUFBSSxDQUFDLE1BQU0sR0FBR0QsVUFBVSxnQkFBZ0IsQ0FBQztJQUNsRDtJQUVBLE1BQU1FLGNBQXdCO1FBQUM7UUFBVTtRQUFNO0tBQUk7SUFDbkQsSUFBSVosS0FBS2EsZ0JBQWdCLElBQUksTUFBTTtRQUNsQ0QsWUFBWUQsSUFBSSxDQUFDLGNBQWNYLEtBQUthLGdCQUFnQjtJQUNyRDtJQUNBLElBQUliLEtBQUtjLFlBQVksSUFBSSxNQUFNO1FBQzlCRixZQUFZRCxJQUFJLENBQUMsVUFBVVgsS0FBS2MsWUFBWTtJQUM3QztJQUNBLElBQUlkLEtBQUtlLGVBQWUsSUFBSSxNQUFNO1FBQ2pDSCxZQUFZRCxJQUFJLENBQUMsYUFBYVgsS0FBS2UsZUFBZTtJQUNuRDtJQUNBLElBQUlmLEtBQUtnQixtQkFBbUIsSUFBSSxNQUFNO1FBQ3JDSixZQUFZRCxJQUFJLENBQUMsYUFBYVgsS0FBS2dCLG1CQUFtQjtJQUN2RDtJQUVBWCxRQUFRWSxHQUFHLENBQUM7SUFFWix5RUFBeUU7SUFDekUsd0RBQXdEO0lBQ3hELE1BQU1DLFdBQVdYLFFBQVFZLEtBQUssQ0FBQ0MsS0FBSyxHQUFHO1FBQUM7S0FBTSxHQUFHO1FBQUM7S0FBSztJQUV2RCxNQUFNQyxTQUFTOUIsVUFDZCxVQUNBO1FBQ0M7UUFDQTtXQUNHMkI7V0FDQVQ7UUFDSDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0FYO1dBQ0djO0tBQ0gsRUFDRDtRQUFFUixPQUFPO0lBQVU7SUFHcEIsSUFBSWlCLE9BQU9DLE1BQU0sS0FBSyxHQUFHO1FBQ3hCakIsUUFBUVksR0FBRyxDQUFDLENBQUMsMkRBQTJELEVBQUVoQixVQUFVLEVBQUUsQ0FBQztJQUN4RjtJQUVBTSxRQUFRQyxJQUFJLENBQUNhLE9BQU9DLE1BQU0sSUFBSTtBQUMvQiJ9
|
package/es6/src/version.js
CHANGED
|
@@ -2,21 +2,31 @@ import { createRequire } from "node:module";
|
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
const _require = createRequire(import.meta.url);
|
|
5
|
-
|
|
5
|
+
const DEFAULT_CREATE_VERSION = "0.0.1-dev";
|
|
6
|
+
const DEFAULT_CREATE_IMAGE_REPOSITORY = "ghcr.io/typesmiths/decohere/create";
|
|
7
|
+
function resolveCreateMetadata() {
|
|
6
8
|
let dir = dirname(fileURLToPath(import.meta.url));
|
|
7
9
|
for(let i = 0; i < 5; i++){
|
|
8
10
|
try {
|
|
9
11
|
const pkg = _require(join(dir, "package.json"));
|
|
10
12
|
if (pkg.name === "@decohere/create") {
|
|
11
|
-
return
|
|
13
|
+
return {
|
|
14
|
+
version: pkg.version ?? DEFAULT_CREATE_VERSION,
|
|
15
|
+
imageRepository: pkg.decohere?.dockerImageRepository ?? DEFAULT_CREATE_IMAGE_REPOSITORY
|
|
16
|
+
};
|
|
12
17
|
}
|
|
13
18
|
} catch {}
|
|
14
19
|
const parent = dirname(dir);
|
|
15
20
|
if (parent === dir) break;
|
|
16
21
|
dir = parent;
|
|
17
22
|
}
|
|
18
|
-
return
|
|
23
|
+
return {
|
|
24
|
+
version: DEFAULT_CREATE_VERSION,
|
|
25
|
+
imageRepository: DEFAULT_CREATE_IMAGE_REPOSITORY
|
|
26
|
+
};
|
|
19
27
|
}
|
|
20
|
-
|
|
28
|
+
const createMetadata = resolveCreateMetadata();
|
|
29
|
+
/** Version of @decohere/create, used to pin scaffolded @decohere/* dependencies. */ export const CREATE_VERSION = createMetadata.version;
|
|
30
|
+
/** Canonical published Docker repository for the @decohere/create builder image. */ export const CREATE_IMAGE_REPOSITORY = createMetadata.imageRepository;
|
|
21
31
|
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvdmVyc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVSZXF1aXJlIH0gZnJvbSBcIm5vZGU6bW9kdWxlXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gXCJub2RlOnVybFwiO1xuXG5jb25zdCBfcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcblxudHlwZSBDcmVhdGVQYWNrYWdlTWV0YWRhdGEgPSB7XG5cdG5hbWU/OiBzdHJpbmc7XG5cdHZlcnNpb24/OiBzdHJpbmc7XG5cdGRlY29oZXJlPzoge1xuXHRcdGRvY2tlckltYWdlUmVwb3NpdG9yeT86IHN0cmluZztcblx0fTtcbn07XG5cbmNvbnN0IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04gPSBcIjAuMC4xLWRldlwiO1xuY29uc3QgREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSA9IFwiZ2hjci5pby90eXBlc21pdGhzL2RlY29oZXJlL2NyZWF0ZVwiO1xuXG5mdW5jdGlvbiByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKSB7XG5cdGxldCBkaXIgPSBkaXJuYW1lKGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKSk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgNTsgaSsrKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHBrZyA9IF9yZXF1aXJlKGpvaW4oZGlyLCBcInBhY2thZ2UuanNvblwiKSkgYXMgQ3JlYXRlUGFja2FnZU1ldGFkYXRhO1xuXHRcdFx0aWYgKHBrZy5uYW1lID09PSBcIkBkZWNvaGVyZS9jcmVhdGVcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHZlcnNpb246IHBrZy52ZXJzaW9uID8/IERFRkFVTFRfQ1JFQVRFX1ZFUlNJT04sXG5cdFx0XHRcdFx0aW1hZ2VSZXBvc2l0b3J5OlxuXHRcdFx0XHRcdFx0cGtnLmRlY29oZXJlPy5kb2NrZXJJbWFnZVJlcG9zaXRvcnkgPz8gREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIHt9XG5cdFx0Y29uc3QgcGFyZW50ID0gZGlybmFtZShkaXIpO1xuXHRcdGlmIChwYXJlbnQgPT09IGRpcikgYnJlYWs7XG5cdFx0ZGlyID0gcGFyZW50O1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHR2ZXJzaW9uOiBERUZBVUxUX0NSRUFURV9WRVJTSU9OLFxuXHRcdGltYWdlUmVwb3NpdG9yeTogREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSxcblx0fTtcbn1cblxuY29uc3QgY3JlYXRlTWV0YWRhdGEgPSByZXNvbHZlQ3JlYXRlTWV0YWRhdGEoKTtcblxuLyoqIFZlcnNpb24gb2YgQGRlY29oZXJlL2NyZWF0ZSwgdXNlZCB0byBwaW4gc2NhZmZvbGRlZCBAZGVjb2hlcmUvKiBkZXBlbmRlbmNpZXMuICovXG5leHBvcnQgY29uc3QgQ1JFQVRFX1ZFUlNJT04gPSBjcmVhdGVNZXRhZGF0YS52ZXJzaW9uO1xuXG4vKiogQ2Fub25pY2FsIHB1Ymxpc2hlZCBEb2NrZXIgcmVwb3NpdG9yeSBmb3IgdGhlIEBkZWNvaGVyZS9jcmVhdGUgYnVpbGRlciBpbWFnZS4gKi9cbmV4cG9ydCBjb25zdCBDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSA9IGNyZWF0ZU1ldGFkYXRhLmltYWdlUmVwb3NpdG9yeTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVSZXF1aXJlIiwiZGlybmFtZSIsImpvaW4iLCJmaWxlVVJMVG9QYXRoIiwiX3JlcXVpcmUiLCJ1cmwiLCJERUZBVUxUX0NSRUFURV9WRVJTSU9OIiwiREVGQVVMVF9DUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsInJlc29sdmVDcmVhdGVNZXRhZGF0YSIsImRpciIsImkiLCJwa2ciLCJuYW1lIiwidmVyc2lvbiIsImltYWdlUmVwb3NpdG9yeSIsImRlY29oZXJlIiwiZG9ja2VySW1hZ2VSZXBvc2l0b3J5IiwicGFyZW50IiwiY3JlYXRlTWV0YWRhdGEiLCJDUkVBVEVfVkVSU0lPTiIsIkNSRUFURV9JTUFHRV9SRVBPU0lUT1JZIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxhQUFhLFFBQVEsY0FBYztBQUM1QyxTQUFTQyxPQUFPLEVBQUVDLElBQUksUUFBUSxZQUFZO0FBQzFDLFNBQVNDLGFBQWEsUUFBUSxXQUFXO0FBRXpDLE1BQU1DLFdBQVdKLGNBQWMsWUFBWUssR0FBRztBQVU5QyxNQUFNQyx5QkFBeUI7QUFDL0IsTUFBTUMsa0NBQWtDO0FBRXhDLFNBQVNDO0lBQ1IsSUFBSUMsTUFBTVIsUUFBUUUsY0FBYyxZQUFZRSxHQUFHO0lBQy9DLElBQUssSUFBSUssSUFBSSxHQUFHQSxJQUFJLEdBQUdBLElBQUs7UUFDM0IsSUFBSTtZQUNILE1BQU1DLE1BQU1QLFNBQVNGLEtBQUtPLEtBQUs7WUFDL0IsSUFBSUUsSUFBSUMsSUFBSSxLQUFLLG9CQUFvQjtnQkFDcEMsT0FBTztvQkFDTkMsU0FBU0YsSUFBSUUsT0FBTyxJQUFJUDtvQkFDeEJRLGlCQUNDSCxJQUFJSSxRQUFRLEVBQUVDLHlCQUF5QlQ7Z0JBQ3pDO1lBQ0Q7UUFDRCxFQUFFLE9BQU0sQ0FBQztRQUNULE1BQU1VLFNBQVNoQixRQUFRUTtRQUN2QixJQUFJUSxXQUFXUixLQUFLO1FBQ3BCQSxNQUFNUTtJQUNQO0lBRUEsT0FBTztRQUNOSixTQUFTUDtRQUNUUSxpQkFBaUJQO0lBQ2xCO0FBQ0Q7QUFFQSxNQUFNVyxpQkFBaUJWO0FBRXZCLGtGQUFrRixHQUNsRixPQUFPLE1BQU1XLGlCQUFpQkQsZUFBZUwsT0FBTyxDQUFDO0FBRXJELGtGQUFrRixHQUNsRixPQUFPLE1BQU1PLDBCQUEwQkYsZUFBZUosZUFBZSxDQUFDIn0=
|
|
@@ -36,18 +36,28 @@ function createWorkspace(targetDir) {
|
|
|
36
36
|
const monoRepo = new MonoRepoScaffold();
|
|
37
37
|
monoRepo.targetDir = targetDir;
|
|
38
38
|
const name = monoRepo.name;
|
|
39
|
-
const compose = new DockerCompose().
|
|
39
|
+
const compose = new DockerCompose().setProjectName(name).addNetwork(name, {
|
|
40
|
+
name: `samples-${name}`
|
|
41
|
+
}).addService("devcontainer", {
|
|
40
42
|
build: ".",
|
|
41
43
|
volumes: [
|
|
42
|
-
|
|
44
|
+
// Workspace-local (created by initialize.sh as the host user).
|
|
45
|
+
// Do NOT bind ${HOME}/.npm/... — Docker creates missing host paths as root.
|
|
46
|
+
"./npm-auth:/home/node/.npm-config",
|
|
43
47
|
"webapi-node-modules:/workspace/node_modules"
|
|
44
48
|
],
|
|
45
49
|
environment: {
|
|
46
50
|
NPM_CONFIG_USERCONFIG: "/home/node/.npm-config/.npmrc"
|
|
47
51
|
},
|
|
48
|
-
command: "sleep infinity"
|
|
52
|
+
command: "sleep infinity",
|
|
53
|
+
networks: [
|
|
54
|
+
name
|
|
55
|
+
]
|
|
49
56
|
}).addVolume("webapi-node-modules");
|
|
50
|
-
const devContainer = new DevContainer().addExtension("biomejs.biome", "vitest.explorer").
|
|
57
|
+
const devContainer = new DevContainer().addExtension("biomejs.biome", "vitest.explorer").forwardPort(3000).setPortAttributes(3000, {
|
|
58
|
+
label: "API",
|
|
59
|
+
requireLocalPort: true
|
|
60
|
+
}).setInitializeCommand("bash .devcontainer/initialize.sh").setPostStartCommand("bash .devcontainer/post-start.sh").useCompose();
|
|
51
61
|
// Workspace-level models (repo root)
|
|
52
62
|
monoRepo.addModel(compose);
|
|
53
63
|
monoRepo.addModel(devContainer);
|
|
@@ -132,6 +142,56 @@ function createWorkspace(targetDir) {
|
|
|
132
142
|
{
|
|
133
143
|
filePath: ".env.local",
|
|
134
144
|
content: "# Set your npm access token here (created with: npm token create)\nNPM_TOKEN=\n"
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
filePath: ".devcontainer/initialize.sh",
|
|
148
|
+
content: [
|
|
149
|
+
"#!/usr/bin/env bash",
|
|
150
|
+
"# Runs on the host before the container is created (devcontainer initializeCommand).",
|
|
151
|
+
"# Creates npm-auth as the host user so the bind mount is not root-owned.",
|
|
152
|
+
"set -euo pipefail",
|
|
153
|
+
"",
|
|
154
|
+
'root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"',
|
|
155
|
+
'npm_dir="$root/.devcontainer/npm-auth"',
|
|
156
|
+
'mkdir -p "$npm_dir"',
|
|
157
|
+
"",
|
|
158
|
+
'if [[ ! -f "$npm_dir/.npmrc" ]]; then',
|
|
159
|
+
'\tif [[ -f "${HOME}/.npmrc" ]]; then',
|
|
160
|
+
'\t\tcp -a "${HOME}/.npmrc" "$npm_dir/.npmrc"',
|
|
161
|
+
"\tfi",
|
|
162
|
+
"fi",
|
|
163
|
+
""
|
|
164
|
+
].join("\n")
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
filePath: ".devcontainer/post-start.sh",
|
|
168
|
+
content: [
|
|
169
|
+
"#!/usr/bin/env bash",
|
|
170
|
+
"# Runs on every container start (devcontainer postStartCommand).",
|
|
171
|
+
"set -euo pipefail",
|
|
172
|
+
"",
|
|
173
|
+
'AUTH_REGISTRY="https://registry.npmjs.org"',
|
|
174
|
+
"",
|
|
175
|
+
'if npm whoami --registry "$AUTH_REGISTRY" >/dev/null 2>&1; then',
|
|
176
|
+
'\techo "npm: logged in as $(npm whoami --registry "$AUTH_REGISTRY")"',
|
|
177
|
+
"\texit 0",
|
|
178
|
+
"fi",
|
|
179
|
+
"",
|
|
180
|
+
"if [[ -t 0 && -t 1 ]]; then",
|
|
181
|
+
'\techo "npm: not authenticated — starting login..."',
|
|
182
|
+
'\tnpm login --registry "$AUTH_REGISTRY"',
|
|
183
|
+
"\texit 0",
|
|
184
|
+
"fi",
|
|
185
|
+
"",
|
|
186
|
+
'echo "npm: not authenticated. Open a terminal and run: npm login" >&2',
|
|
187
|
+
'echo " (creds persist in .devcontainer/npm-auth/)" >&2',
|
|
188
|
+
"exit 1",
|
|
189
|
+
""
|
|
190
|
+
].join("\n")
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
filePath: ".devcontainer/npm-auth/.gitignore",
|
|
194
|
+
content: "*\n!.gitignore\n"
|
|
135
195
|
}
|
|
136
196
|
]
|
|
137
197
|
});
|
|
@@ -148,4 +208,4 @@ function createWorkspace(targetDir) {
|
|
|
148
208
|
return monoRepo;
|
|
149
209
|
}
|
|
150
210
|
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuYWRkU2VydmljZShcImRldmNvbnRhaW5lclwiLCB7XG5cdFx0XHRidWlsZDogXCIuXCIsXG5cdFx0XHR2b2x1bWVzOiBbXG5cdFx0XHRcdGBcXCR7SE9NRX0vLm5wbS8ke25hbWV9Oi9ob21lL25vZGUvLm5wbS1jb25maWdgLFxuXHRcdFx0XHRcIndlYmFwaS1ub2RlLW1vZHVsZXM6L3dvcmtzcGFjZS9ub2RlX21vZHVsZXNcIixcblx0XHRcdF0sXG5cdFx0XHRlbnZpcm9ubWVudDogeyBOUE1fQ09ORklHX1VTRVJDT05GSUc6IFwiL2hvbWUvbm9kZS8ubnBtLWNvbmZpZy8ubnBtcmNcIiB9LFxuXHRcdFx0Y29tbWFuZDogXCJzbGVlcCBpbmZpbml0eVwiLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuc2V0UG9zdFN0YXJ0Q29tbWFuZChcIm5wbSB3aG9hbWkgMj4vZGV2L251bGwgfHwgbnBtIGxvZ2luXCIpXG5cdFx0LnVzZUNvbXBvc2UoKTtcblxuXHQvLyBXb3Jrc3BhY2UtbGV2ZWwgbW9kZWxzIChyZXBvIHJvb3QpXG5cdG1vbm9SZXBvLmFkZE1vZGVsKGNvbXBvc2UpO1xuXHRtb25vUmVwby5hZGRNb2RlbChkZXZDb250YWluZXIpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpRGV2Q29udGFpbmVyKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVlNDb2RlU2V0dGluZ3MobmFtZSkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgTGF1bmNoSnNvbigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFRzQ29uZmlnKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgUGFja2FnZUpzb24oYCR7bmFtZX0uYXBpYCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MLCBcImNvbmZpZy9jb25maWcueWFtbFwiLCBcIlwiKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBHaXRpZ25vcmUoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBFbnZGaWxlKCkpO1xuXG5cdC8vIEJpb21lIGZvcm1hdHRlci9saW50ZXIgY29uZmlnXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcImJpb21lLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0JHNjaGVtYTogXCJodHRwczovL2Jpb21lanMuZGV2L3NjaGVtYXMvMi4wLjAvc2NoZW1hLmpzb25cIixcblx0XHRcdFx0XHRcdGZpbGVzOiB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLnRzXCIsIFwiKiovKi5qc1wiLCBcIioqLyouanNvblwiLCBcIioqLyoueW1sXCIsIFwiKiovKi55YW1sXCJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFzc2lzdDogeyBhY3Rpb25zOiB7IHNvdXJjZTogeyBvcmdhbml6ZUltcG9ydHM6IFwib25cIiB9IH0gfSxcblx0XHRcdFx0XHRcdHZjczogeyBlbmFibGVkOiB0cnVlLCBjbGllbnRLaW5kOiBcImdpdFwiLCB1c2VJZ25vcmVGaWxlOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Zm9ybWF0V2l0aEVycm9yczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5kZW50U3R5bGU6IFwidGFiXCIsXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogOTUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0amF2YXNjcmlwdDogeyBwYXJzZXI6IHsgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ6IHRydWUgfSB9LFxuXHRcdFx0XHRcdFx0bGludGVyOiB7XG5cdFx0XHRcdFx0XHRcdHJ1bGVzOiB7XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldmVsOiBcImVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHsgYWNjZXNzaWJpbGl0eTogXCJleHBsaWNpdFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3ZlcnJpZGVzOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi5qc29uXCJdLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdHRlcjogeyBpbmRlbnRTdHlsZTogXCJzcGFjZVwiLCBpbmRlbnRXaWR0aDogMiB9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gTlBNIHRva2VuIHBsYWNlaG9sZGVyIOKAlCBnaXRpZ25vcmVkLCBzZXQgbWFudWFsbHkgYWZ0ZXIgc2NhZmZvbGRcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmVudi5sb2NhbFwiLFxuXHRcdFx0XHRjb250ZW50OlxuXHRcdFx0XHRcdFwiIyBTZXQgeW91ciBucG0gYWNjZXNzIHRva2VuIGhlcmUgKGNyZWF0ZWQgd2l0aDogbnBtIHRva2VuIGNyZWF0ZSlcXG5OUE1fVE9LRU49XFxuXCIsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIFByb2plY3QtbGV2ZWwgbW9kZWxzIChwYXRocyByZWxhdGl2ZSB0byBwcm9qZWN0cy9hcGkpXG5cdGNvbnN0IGFwaVByb2plY3QgPSBuZXcgUHJvamVjdFNjYWZmb2xkKFdFQkFQSV9QUk9KRUNUX0RJUik7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IEFwaVBhY2thZ2VKc29uKG5hbWUpKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgTWFpblNvdXJjZUZpbGUoYCR7bmFtZX0uYXBpYCkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBDb250cm9sbGVyU291cmNlRmlsZSgpKTtcblxuXHQvLyBTYW1wbGVTZXJ2aWNlICsgU2FtcGxlQ29uZmlnIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIHNjYWZmb2xkIOKAlCBIZWxsb0NvbnRyb2xsZXJcblx0Ly8gaW5qZWN0cyBTYW1wbGVTZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIGNvbmZpZy1kcml2ZW4gYmVoYXZpb3VyIG91dCBvZiB0aGUgYm94LlxuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZUNvbmZpZ01vZGVsKCkpO1xuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZVNlcnZpY2VNb2RlbCgpKTtcblxuXHRtb25vUmVwby5hZGRQcm9qZWN0KGFwaVByb2plY3QpO1xuXG5cdHJldHVybiBtb25vUmVwbztcbn1cbiJdLCJuYW1lcyI6WyJyZXNvbHZlIiwiRG9ja2VyQ29tcG9zZSIsIkNvbmZpZ1lhbWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiRGV2Q29udGFpbmVyIiwiRW52RmlsZSIsIkdpdGlnbm9yZSIsIkxhdW5jaEpzb24iLCJQYWNrYWdlSnNvbiIsIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJUc0NvbmZpZyIsIlZTQ29kZVNldHRpbmdzIiwiU2NhZmZvbGRTZXJ2aWNlIiwiQXV0aEZlYXR1cmUiLCJEYXRhYmFzZUZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJQb3N0bWFuRmVhdHVyZSIsIkFwaVBhY2thZ2VKc29uIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJNYWluU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiV0VCQVBJX1BST0pFQ1RfRElSIiwiZmVhdHVyZXMiLCJzY2FmZm9sZEFwaSIsImNsaU9wdGlvbnMiLCJ0YXJnZXREaXIiLCJkIiwid29ya3NwYWNlIiwiY3JlYXRlV29ya3NwYWNlIiwic2NhZmZvbGQiLCJtb25vUmVwbyIsIm5hbWUiLCJjb21wb3NlIiwiYWRkU2VydmljZSIsImJ1aWxkIiwidm9sdW1lcyIsImVudmlyb25tZW50IiwiTlBNX0NPTkZJR19VU0VSQ09ORklHIiwiY29tbWFuZCIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiYXBpUHJvamVjdCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGFBQWEsUUFBUSw2QkFBNkI7QUFDM0QsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxT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
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuc2V0UHJvamVjdE5hbWUobmFtZSlcblx0XHQuYWRkTmV0d29yayhuYW1lLCB7IG5hbWU6IGBzYW1wbGVzLSR7bmFtZX1gIH0pXG5cdFx0LmFkZFNlcnZpY2UoXCJkZXZjb250YWluZXJcIiwge1xuXHRcdFx0YnVpbGQ6IFwiLlwiLFxuXHRcdFx0dm9sdW1lczogW1xuXHRcdFx0XHQvLyBXb3Jrc3BhY2UtbG9jYWwgKGNyZWF0ZWQgYnkgaW5pdGlhbGl6ZS5zaCBhcyB0aGUgaG9zdCB1c2VyKS5cblx0XHRcdFx0Ly8gRG8gTk9UIGJpbmQgJHtIT01FfS8ubnBtLy4uLiDigJQgRG9ja2VyIGNyZWF0ZXMgbWlzc2luZyBob3N0IHBhdGhzIGFzIHJvb3QuXG5cdFx0XHRcdFwiLi9ucG0tYXV0aDovaG9tZS9ub2RlLy5ucG0tY29uZmlnXCIsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0XHRuZXR3b3JrczogW25hbWVdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuZm9yd2FyZFBvcnQoMzAwMClcblx0XHQuc2V0UG9ydEF0dHJpYnV0ZXMoMzAwMCwgeyBsYWJlbDogXCJBUElcIiwgcmVxdWlyZUxvY2FsUG9ydDogdHJ1ZSB9KVxuXHRcdC5zZXRJbml0aWFsaXplQ29tbWFuZChcImJhc2ggLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIpXG5cdFx0LnNldFBvc3RTdGFydENvbW1hbmQoXCJiYXNoIC5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiKVxuXHRcdC51c2VDb21wb3NlKCk7XG5cblx0Ly8gV29ya3NwYWNlLWxldmVsIG1vZGVscyAocmVwbyByb290KVxuXHRtb25vUmVwby5hZGRNb2RlbChjb21wb3NlKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoZGV2Q29udGFpbmVyKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaURldkNvbnRhaW5lcigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFZTQ29kZVNldHRpbmdzKG5hbWUpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IExhdW5jaEpzb24oKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBUc0NvbmZpZygpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFBhY2thZ2VKc29uKGAke25hbWV9LmFwaWApKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIsIFwiXCIpLFxuXHQpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aWdub3JlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgRW52RmlsZSgpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIE5QTSB0b2tlbiBwbGFjZWhvbGRlciDigJQgZ2l0aWdub3JlZCwgc2V0IG1hbnVhbGx5IGFmdGVyIHNjYWZmb2xkXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5lbnYubG9jYWxcIixcblx0XHRcdFx0Y29udGVudDpcblx0XHRcdFx0XHRcIiMgU2V0IHlvdXIgbnBtIGFjY2VzcyB0b2tlbiBoZXJlIChjcmVhdGVkIHdpdGg6IG5wbSB0b2tlbiBjcmVhdGUpXFxuTlBNX1RPS0VOPVxcblwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFtcblx0XHRcdFx0XHRcIiMhL3Vzci9iaW4vZW52IGJhc2hcIixcblx0XHRcdFx0XHRcIiMgUnVucyBvbiB0aGUgaG9zdCBiZWZvcmUgdGhlIGNvbnRhaW5lciBpcyBjcmVhdGVkIChkZXZjb250YWluZXIgaW5pdGlhbGl6ZUNvbW1hbmQpLlwiLFxuXHRcdFx0XHRcdFwiIyBDcmVhdGVzIG5wbS1hdXRoIGFzIHRoZSBob3N0IHVzZXIgc28gdGhlIGJpbmQgbW91bnQgaXMgbm90IHJvb3Qtb3duZWQuXCIsXG5cdFx0XHRcdFx0XCJzZXQgLWV1byBwaXBlZmFpbFwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdFx0J3Jvb3Q9XCIkKGNkIFwiJChkaXJuYW1lIFwiJHtCQVNIX1NPVVJDRVswXX1cIikvLi5cIiAmJiBwd2QpXCInLFxuXHRcdFx0XHRcdCducG1fZGlyPVwiJHJvb3QvLmRldmNvbnRhaW5lci9ucG0tYXV0aFwiJyxcblx0XHRcdFx0XHQnbWtkaXIgLXAgXCIkbnBtX2RpclwiJyxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdpZiBbWyAhIC1mIFwiJG5wbV9kaXIvLm5wbXJjXCIgXV07IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRpZiBbWyAtZiBcIiR7SE9NRX0vLm5wbXJjXCIgXV07IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRcXHRjcCAtYSBcIiR7SE9NRX0vLm5wbXJjXCIgXCIkbnBtX2Rpci8ubnBtcmNcIicsXG5cdFx0XHRcdFx0XCJcXHRmaVwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL3Bvc3Qtc3RhcnQuc2hcIixcblx0XHRcdFx0Y29udGVudDogW1xuXHRcdFx0XHRcdFwiIyEvdXNyL2Jpbi9lbnYgYmFzaFwiLFxuXHRcdFx0XHRcdFwiIyBSdW5zIG9uIGV2ZXJ5IGNvbnRhaW5lciBzdGFydCAoZGV2Y29udGFpbmVyIHBvc3RTdGFydENvbW1hbmQpLlwiLFxuXHRcdFx0XHRcdFwic2V0IC1ldW8gcGlwZWZhaWxcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdBVVRIX1JFR0lTVFJZPVwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmdcIicsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHQnaWYgbnBtIHdob2FtaSAtLXJlZ2lzdHJ5IFwiJEFVVEhfUkVHSVNUUllcIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwibnBtOiBsb2dnZWQgaW4gYXMgJChucG0gd2hvYW1pIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiKVwiJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMFwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFwiaWYgW1sgLXQgMCAmJiAtdCAxIF1dOyB0aGVuXCIsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJucG06IG5vdCBhdXRoZW50aWNhdGVkIOKAlCBzdGFydGluZyBsb2dpbi4uLlwiJyxcblx0XHRcdFx0XHQnXFx0bnBtIGxvZ2luIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMFwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdlY2hvIFwibnBtOiBub3QgYXV0aGVudGljYXRlZC4gT3BlbiBhIHRlcm1pbmFsIGFuZCBydW46IG5wbSBsb2dpblwiID4mMicsXG5cdFx0XHRcdFx0J2VjaG8gXCIgICAgKGNyZWRzIHBlcnNpc3QgaW4gLmRldmNvbnRhaW5lci9ucG0tYXV0aC8pXCIgPiYyJyxcblx0XHRcdFx0XHRcImV4aXQgMVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5kZXZjb250YWluZXIvbnBtLWF1dGgvLmdpdGlnbm9yZVwiLFxuXHRcdFx0XHRjb250ZW50OiBcIipcXG4hLmdpdGlnbm9yZVxcblwiLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBQcm9qZWN0LWxldmVsIG1vZGVscyAocGF0aHMgcmVsYXRpdmUgdG8gcHJvamVjdHMvYXBpKVxuXHRjb25zdCBhcGlQcm9qZWN0ID0gbmV3IFByb2plY3RTY2FmZm9sZChXRUJBUElfUFJPSkVDVF9ESVIpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBBcGlQYWNrYWdlSnNvbihuYW1lKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IE1haW5Tb3VyY2VGaWxlKGAke25hbWV9LmFwaWApKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQ29udHJvbGxlclNvdXJjZUZpbGUoKSk7XG5cblx0Ly8gU2FtcGxlU2VydmljZSArIFNhbXBsZUNvbmZpZyBhcmUgcGFydCBvZiB0aGUgY29yZSBzY2FmZm9sZCDigJQgSGVsbG9Db250cm9sbGVyXG5cdC8vIGluamVjdHMgU2FtcGxlU2VydmljZSB0byBkZW1vbnN0cmF0ZSBjb25maWctZHJpdmVuIGJlaGF2aW91ciBvdXQgb2YgdGhlIGJveC5cblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVDb25maWdNb2RlbCgpKTtcblx0YXBpUHJvamVjdC5hZGRGaWxlKG5ldyBTYW1wbGVTZXJ2aWNlTW9kZWwoKSk7XG5cblx0bW9ub1JlcG8uYWRkUHJvamVjdChhcGlQcm9qZWN0KTtcblxuXHRyZXR1cm4gbW9ub1JlcG87XG59XG4iXSwibmFtZXMiOlsicmVzb2x2ZSIsIkRvY2tlckNvbXBvc2UiLCJDb25maWdZYW1sIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkRldkNvbnRhaW5lciIsIkVudkZpbGUiLCJHaXRpZ25vcmUiLCJMYXVuY2hKc29uIiwiUGFja2FnZUpzb24iLCJNb25vUmVwb1NjYWZmb2xkIiwiUHJvamVjdFNjYWZmb2xkIiwiVHNDb25maWciLCJWU0NvZGVTZXR0aW5ncyIsIlNjYWZmb2xkU2VydmljZSIsIkF1dGhGZWF0dXJlIiwiRGF0YWJhc2VGZWF0dXJlIiwiRmluYWxpemVGZWF0dXJlIiwiUG9zdG1hbkZlYXR1cmUiLCJBcGlQYWNrYWdlSnNvbiIsIkNvbnRyb2xsZXJTb3VyY2VGaWxlIiwiTWFpblNvdXJjZUZpbGUiLCJTYW1wbGVDb25maWdNb2RlbCIsIlNhbXBsZVNlcnZpY2VNb2RlbCIsIldlYmFwaURldkNvbnRhaW5lciIsIldFQkFQSV9QUk9KRUNUX0RJUiIsImZlYXR1cmVzIiwic2NhZmZvbGRBcGkiLCJjbGlPcHRpb25zIiwidGFyZ2V0RGlyIiwiZCIsIndvcmtzcGFjZSIsImNyZWF0ZVdvcmtzcGFjZSIsInNjYWZmb2xkIiwibW9ub1JlcG8iLCJuYW1lIiwiY29tcG9zZSIsInNldFByb2plY3ROYW1lIiwiYWRkTmV0d29yayIsImFkZFNlcnZpY2UiLCJidWlsZCIsInZvbHVtZXMiLCJlbnZpcm9ubWVudCIsIk5QTV9DT05GSUdfVVNFUkNPTkZJRyIsImNvbW1hbmQiLCJuZXR3b3JrcyIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsImZvcndhcmRQb3J0Iiwic2V0UG9ydEF0dHJpYnV0ZXMiLCJsYWJlbCIsInJlcXVpcmVMb2NhbFBvcnQiLCJzZXRJbml0aWFsaXplQ29tbWFuZCIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiam9pbiIsImFwaVByb2plY3QiLCJhZGRQcm9qZWN0Il0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyxhQUFhLFFBQVEsNkJBQTZCO0FBQzNELFNBQVNDLFVBQVUsUUFBUSxpQ0FBaUM7QUFDNUQsU0FBU0MsZ0JBQWdCLFFBQVEscUJBQXFCO0FBQ3RELFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsU0FBU0MsT0FBTyxRQUFRLDhCQUE4QjtBQUN0RCxTQUFTQyxTQUFTLFFBQVEsK0JBQStCO0FBQ3pELFNBQVNDLFVBQVUsUUFBUSxpQ0FBaUM7QUFDNUQsU0FBU0MsV0FBVyxRQUFRLGtDQUFrQztBQUM5RCxTQUFTQyxnQkFBZ0IsRUFBRUMsZUFBZSxR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
|