@decohere/create 0.0.1-dev.23 → 0.0.1-dev.25
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 +26 -2
- package/commonjs/src/webapi/create-api.js +66 -5
- package/commonjs/src/webapi/features/auth.feature.js +288 -7
- package/commonjs/src/webapi/features/auth0-cli.js +256 -9
- package/commonjs/src/webapi/features/database.feature.js +56 -24
- package/commonjs/src/webapi/features/postman.feature.js +337 -48
- 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 +16 -8
- 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 +27 -3
- package/es6/src/webapi/create-api.js +66 -5
- package/es6/src/webapi/features/auth.feature.js +288 -7
- package/es6/src/webapi/features/auth0-cli.js +230 -9
- package/es6/src/webapi/features/database.feature.js +56 -24
- package/es6/src/webapi/features/postman.feature.js +324 -45
- 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 +16 -8
- package/es6/src/webapi/models/main-source-file.model.js +28 -4
- package/package.json +2 -2
- 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/webapi/features/auth.feature.d.ts +3 -0
- package/types/src/webapi/features/auth0-cli.d.ts +50 -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,5 +1,6 @@
|
|
|
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
5
|
import { CREATE_IMAGE_REPOSITORY, CREATE_VERSION } from "./version.js";
|
|
5
6
|
const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
|
|
@@ -34,6 +35,11 @@ const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${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,24 @@ const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${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
|
+
];
|
|
68
|
+
// Pass host uid/gid so the entrypoint can chown scaffolded files — the
|
|
69
|
+
// builder runs as root and would otherwise leave the tree unwritable.
|
|
70
|
+
const hostUid = process.getuid?.();
|
|
71
|
+
const hostGid = process.getgid?.();
|
|
72
|
+
const ownershipEnv = [];
|
|
73
|
+
if (hostUid != null) ownershipEnv.push("-e", `HOST_UID=${hostUid}`);
|
|
74
|
+
if (hostGid != null) ownershipEnv.push("-e", `HOST_GID=${hostGid}`);
|
|
55
75
|
const result = spawnSync("docker", [
|
|
56
76
|
"run",
|
|
57
77
|
"--rm",
|
|
58
|
-
|
|
78
|
+
...ttyFlags,
|
|
59
79
|
...volumes,
|
|
60
80
|
"-e",
|
|
61
81
|
"DECOHERE_BUILDER=1",
|
|
@@ -63,6 +83,7 @@ const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
|
|
|
63
83
|
"NPM_CONFIG_CACHE=/npm-cache",
|
|
64
84
|
"-e",
|
|
65
85
|
"NPM_CONFIG_PREFER_OFFLINE=true",
|
|
86
|
+
...ownershipEnv,
|
|
66
87
|
"-w",
|
|
67
88
|
"/workspace",
|
|
68
89
|
BUILDER_IMAGE,
|
|
@@ -70,7 +91,10 @@ const BUILDER_IMAGE = `${CREATE_IMAGE_REPOSITORY}:${CREATE_VERSION}`;
|
|
|
70
91
|
], {
|
|
71
92
|
stdio: "inherit"
|
|
72
93
|
});
|
|
94
|
+
if (result.status === 0) {
|
|
95
|
+
console.log(`\n Scaffold complete!\n\n Open your project:\n\n code ${targetDir}\n`);
|
|
96
|
+
}
|
|
73
97
|
process.exit(result.status ?? 0);
|
|
74
98
|
}
|
|
75
99
|
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENSRUFURV9JTUFHRV9SRVBPU0lUT1JZLCBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IEJVSUxERVJfSU1BR0UgPSBgJHtDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWX06JHtDUkVBVEVfVkVSU0lPTn1gO1xuXG4vKipcbiAqIFJ1biB0aGUgc2NhZmZvbGQgaW5zaWRlIGEgcHJlLWJ1aWx0IERvY2tlciBidWlsZGVyIGltYWdlLlxuICpcbiAqIENhbGxlZCB3aGVuIGBERUNPSEVSRV9CVUlMREVSYCBpcyBub3Qgc2V0IOKAlCBpLmUuIHRoZSBDTEkgaXMgcnVubmluZyBvbiB0aGVcbiAqIGhvc3QsIG91dHNpZGUgdGhlIGNvbnRhaW5lci4gTW91bnRzIHRoZSB0YXJnZXQgZGlyZWN0b3J5IGFzIGAvd29ya3NwYWNlYCBzb1xuICogdGhlIHNjYWZmb2xkZWQgZmlsZXMgYXJlIHdyaXR0ZW4gYmFjayB0byB0aGUgaG9zdCBmaWxlc3lzdGVtLlxuICpcbiAqIElmIGB+Ly5jb25maWcvYXV0aDBgIGV4aXN0cyBvbiB0aGUgaG9zdCB0aGUgZGlyZWN0b3J5IGlzIGFsc28gbW91bnRlZCBzb1xuICogdGhlIGF1dGgwIENMSSBpbnNpZGUgdGhlIGNvbnRhaW5lciBjYW4gcmV1c2UgZXhpc3RpbmcgY3JlZGVudGlhbHMgc2lsZW50bHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5JbkJ1aWxkZXIob3B0czogQXBpT3B0aW9ucyk6IG5ldmVyIHtcblx0Y29uc3QgdGFyZ2V0RGlyID0gcmVzb2x2ZShvcHRzLmQgPz8gXCIuXCIpO1xuXHRta2RpclN5bmModGFyZ2V0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHQvLyBFbnN1cmUgRG9ja2VyIGlzIGF2YWlsYWJsZS5cblx0dHJ5IHtcblx0XHRleGVjRmlsZVN5bmMoXCJkb2NrZXJcIiwgW1wiaW5mb1wiXSwgeyBzdGRpbzogXCJwaXBlXCIgfSk7XG5cdH0gY2F0Y2gge1xuXHRcdGNvbnNvbGUuZXJyb3IoXG5cdFx0XHRcIlxcbiAgRG9ja2VyIGlzIHJlcXVpcmVkIHRvIHNjYWZmb2xkIGEgRGVjb2hlcmUgcHJvamVjdC5cXG5cIiArXG5cdFx0XHRcdFwiICBJbnN0YWxsIERvY2tlciBEZXNrdG9wOiBodHRwczovL3d3dy5kb2NrZXIuY29tL3Byb2R1Y3RzL2RvY2tlci1kZXNrdG9wXFxuXCIsXG5cdFx0KTtcblx0XHRwcm9jZXNzLmV4aXQoMSk7XG5cdH1cblxuXHRjb25zdCB2b2x1bWVzOiBzdHJpbmdbXSA9IFtcIi12XCIsIGAke3RhcmdldERpcn06L3dvcmtzcGFjZWAsIFwiLXZcIiwgXCIvbnBtLWNhY2hlXCJdO1xuXG5cdC8vIE1vdW50IGhvc3QgLm5wbXJjIGZvciBwcml2YXRlIHJlZ2lzdHJ5IGNyZWRlbnRpYWxzLCBpZiBwcmVzZW50LlxuXHRjb25zdCBucG1yY1BhdGggPSByZXNvbHZlKGhvbWVkaXIoKSwgXCIubnBtcmNcIik7XG5cdGlmIChleGlzdHNTeW5jKG5wbXJjUGF0aCkpIHtcblx0XHR2b2x1bWVzLnB1c2goXCItdlwiLCBgJHtucG1yY1BhdGh9Oi9yb290Ly5ucG1yYzpyb2ApO1xuXHR9XG5cblx0Y29uc3QgY29tbWFuZEFyZ3M6IHN0cmluZ1tdID0gW1wid2ViYXBpXCIsIFwiLWRcIiwgXCIuXCJdO1xuXHRpZiAob3B0cy5kYXRhYmFzZVByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1kYXRhYmFzZVwiLCBvcHRzLmRhdGFiYXNlUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLmF1dGhQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tYXV0aFwiLCBvcHRzLmF1dGhQcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1wb3N0bWFuXCIsIG9wdHMucG9zdG1hblByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5pbnN0YWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1pbnN0YWxsXCIsIG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIiAgUnVubmluZyBzY2FmZm9sZGluZyBpbiBhIHNhbmRib3hlZCBjb250YWluZXIuLi5cXG5cIik7XG5cblx0Ly8gT25seSBhbGxvY2F0ZSBhIFRUWSB3aGVuIHN0ZGluIGlzIGl0c2VsZiBhIFRUWSDigJQgYXZvaWRzIGEgaHVuZyBwcm9jZXNzXG5cdC8vIGluIG5vbi1pbnRlcmFjdGl2ZSBlbnZpcm9ubWVudHMgKHBpcGVzLCBDSSwgc2NyaXB0cykuXG5cdGNvbnN0IHR0eUZsYWdzID0gcHJvY2Vzcy5zdGRpbi5pc1RUWSA/IFtcIi1pdFwiXSA6IFtcIi1pXCJdO1xuXG5cdC8vIFBhc3MgaG9zdCB1aWQvZ2lkIHNvIHRoZSBlbnRyeXBvaW50IGNhbiBjaG93biBzY2FmZm9sZGVkIGZpbGVzIOKAlCB0aGVcblx0Ly8gYnVpbGRlciBydW5zIGFzIHJvb3QgYW5kIHdvdWxkIG90aGVyd2lzZSBsZWF2ZSB0aGUgdHJlZSB1bndyaXRhYmxlLlxuXHRjb25zdCBob3N0VWlkID0gcHJvY2Vzcy5nZXR1aWQ/LigpO1xuXHRjb25zdCBob3N0R2lkID0gcHJvY2Vzcy5nZXRnaWQ/LigpO1xuXHRjb25zdCBvd25lcnNoaXBFbnY6IHN0cmluZ1tdID0gW107XG5cdGlmIChob3N0VWlkICE9IG51bGwpIG93bmVyc2hpcEVudi5wdXNoKFwiLWVcIiwgYEhPU1RfVUlEPSR7aG9zdFVpZH1gKTtcblx0aWYgKGhvc3RHaWQgIT0gbnVsbCkgb3duZXJzaGlwRW52LnB1c2goXCItZVwiLCBgSE9TVF9HSUQ9JHtob3N0R2lkfWApO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcblx0XHRcImRvY2tlclwiLFxuXHRcdFtcblx0XHRcdFwicnVuXCIsXG5cdFx0XHRcIi0tcm1cIixcblx0XHRcdC4uLnR0eUZsYWdzLFxuXHRcdFx0Li4udm9sdW1lcyxcblx0XHRcdFwiLWVcIixcblx0XHRcdFwiREVDT0hFUkVfQlVJTERFUj0xXCIsXG5cdFx0XHRcIi1lXCIsXG5cdFx0XHRcIk5QTV9DT05GSUdfQ0FDSEU9L25wbS1jYWNoZVwiLFxuXHRcdFx0XCItZVwiLFxuXHRcdFx0XCJOUE1fQ09ORklHX1BSRUZFUl9PRkZMSU5FPXRydWVcIixcblx0XHRcdC4uLm93bmVyc2hpcEVudixcblx0XHRcdFwiLXdcIixcblx0XHRcdFwiL3dvcmtzcGFjZVwiLFxuXHRcdFx0QlVJTERFUl9JTUFHRSxcblx0XHRcdC4uLmNvbW1hbmRBcmdzLFxuXHRcdF0sXG5cdFx0eyBzdGRpbzogXCJpbmhlcml0XCIgfSxcblx0KTtcblxuXHRpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xuXHRcdGNvbnNvbGUubG9nKGBcXG4gIFNjYWZmb2xkIGNvbXBsZXRlIVxcblxcbiAgT3BlbiB5b3VyIHByb2plY3Q6XFxuXFxuICAgIGNvZGUgJHt0YXJnZXREaXJ9XFxuYCk7XG5cdH1cblxuXHRwcm9jZXNzLmV4aXQocmVzdWx0LnN0YXR1cyA/PyAwKTtcbn1cbiJdLCJuYW1lcyI6WyJleGVjRmlsZVN5bmMiLCJzcGF3blN5bmMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwiaG9tZWRpciIsInJlc29sdmUiLCJDUkVBVEVfSU1BR0VfUkVQT1NJVE9SWSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicmVjdXJzaXZlIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInZvbHVtZXMiLCJucG1yY1BhdGgiLCJwdXNoIiwiY29tbWFuZEFyZ3MiLCJkYXRhYmFzZVByb3ZpZGVyIiwiYXV0aFByb3ZpZGVyIiwicG9zdG1hblByb3ZpZGVyIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsImxvZyIsInR0eUZsYWdzIiwic3RkaW4iLCJpc1RUWSIsImhvc3RVaWQiLCJnZXR1aWQiLCJob3N0R2lkIiwiZ2V0Z2lkIiwib3duZXJzaGlwRW52IiwicmVzdWx0Iiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxZQUFZLEVBQUVDLFNBQVMsUUFBUSxxQkFBcUI7QUFDN0QsU0FBU0MsVUFBVSxFQUFFQyxTQUFTLFFBQVEsVUFBVTtBQUNoRCxTQUFTQyxPQUFPLFFBQVEsVUFBVTtBQUNsQyxTQUFTQyxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyx1QkFBdUIsRUFBRUMsY0FBYyxRQUFRLGVBQWU7QUFHdkUsTUFBTUMsZ0JBQWdCLEdBQUdGLHdCQUF3QixDQUFDLEVBQUVDLGdCQUFnQjtBQUVwRTs7Ozs7Ozs7O0NBU0MsR0FDRCxPQUFPLFNBQVNFLGFBQWFDLElBQWdCO0lBQzVDLE1BQU1DLFlBQVlOLFFBQVFLLEtBQUtFLENBQUMsSUFBSTtJQUNwQ1QsVUFBVVEsV0FBVztRQUFFRSxXQUFXO0lBQUs7SUFFdkMsOEJBQThCO0lBQzlCLElBQUk7UUFDSGIsYUFBYSxVQUFVO1lBQUM7U0FBTyxFQUFFO1lBQUVjLE9BQU87UUFBTztJQUNsRCxFQUFFLE9BQU07UUFDUEMsUUFBUUMsS0FBSyxDQUNaLDZEQUNDO1FBRUZDLFFBQVFDLElBQUksQ0FBQztJQUNkO0lBRUEsTUFBTUMsVUFBb0I7UUFBQztRQUFNLEdBQUdSLFVBQVUsV0FBVyxDQUFDO1FBQUU7UUFBTTtLQUFhO0lBRS9FLGtFQUFrRTtJQUNsRSxNQUFNUyxZQUFZZixRQUFRRCxXQUFXO0lBQ3JDLElBQUlGLFdBQVdrQixZQUFZO1FBQzFCRCxRQUFRRSxJQUFJLENBQUMsTUFBTSxHQUFHRCxVQUFVLGdCQUFnQixDQUFDO0lBQ2xEO0lBRUEsTUFBTUUsY0FBd0I7UUFBQztRQUFVO1FBQU07S0FBSTtJQUNuRCxJQUFJWixLQUFLYSxnQkFBZ0IsSUFBSSxNQUFNO1FBQ2xDRCxZQUFZRCxJQUFJLENBQUMsY0FBY1gsS0FBS2EsZ0JBQWdCO0lBQ3JEO0lBQ0EsSUFBSWIsS0FBS2MsWUFBWSxJQUFJLE1BQU07UUFDOUJGLFlBQVlELElBQUksQ0FBQyxVQUFVWCxLQUFLYyxZQUFZO0lBQzdDO0lBQ0EsSUFBSWQsS0FBS2UsZUFBZSxJQUFJLE1BQU07UUFDakNILFlBQVlELElBQUksQ0FBQyxhQUFhWCxLQUFLZSxlQUFlO0lBQ25EO0lBQ0EsSUFBSWYsS0FBS2dCLG1CQUFtQixJQUFJLE1BQU07UUFDckNKLFlBQVlELElBQUksQ0FBQyxhQUFhWCxLQUFLZ0IsbUJBQW1CO0lBQ3ZEO0lBRUFYLFFBQVFZLEdBQUcsQ0FBQztJQUVaLHlFQUF5RTtJQUN6RSx3REFBd0Q7SUFDeEQsTUFBTUMsV0FBV1gsUUFBUVksS0FBSyxDQUFDQyxLQUFLLEdBQUc7UUFBQztLQUFNLEdBQUc7UUFBQztLQUFLO0lBRXZELHVFQUF1RTtJQUN2RSxzRUFBc0U7SUFDdEUsTUFBTUMsVUFBVWQsUUFBUWUsTUFBTTtJQUM5QixNQUFNQyxVQUFVaEIsUUFBUWlCLE1BQU07SUFDOUIsTUFBTUMsZUFBeUIsRUFBRTtJQUNqQyxJQUFJSixXQUFXLE1BQU1JLGFBQWFkLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFVSxTQUFTO0lBQ2xFLElBQUlFLFdBQVcsTUFBTUUsYUFBYWQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUVZLFNBQVM7SUFFbEUsTUFBTUcsU0FBU25DLFVBQ2QsVUFDQTtRQUNDO1FBQ0E7V0FDRzJCO1dBQ0FUO1FBQ0g7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1dBQ0dnQjtRQUNIO1FBQ0E7UUFDQTNCO1dBQ0djO0tBQ0gsRUFDRDtRQUFFUixPQUFPO0lBQVU7SUFHcEIsSUFBSXNCLE9BQU9DLE1BQU0sS0FBSyxHQUFHO1FBQ3hCdEIsUUFBUVksR0FBRyxDQUFDLENBQUMsMkRBQTJELEVBQUVoQixVQUFVLEVBQUUsQ0FBQztJQUN4RjtJQUVBTSxRQUFRQyxJQUFJLENBQUNrQixPQUFPQyxNQUFNLElBQUk7QUFDL0IifQ==
|
|
@@ -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,57 @@ 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
|
+
"# Do not scaffold npm-auth/ from the builder (that runs as root).",
|
|
153
|
+
"set -euo pipefail",
|
|
154
|
+
"",
|
|
155
|
+
'root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"',
|
|
156
|
+
'npm_dir="$root/.devcontainer/npm-auth"',
|
|
157
|
+
'mkdir -p "$npm_dir"',
|
|
158
|
+
"{",
|
|
159
|
+
'\techo "*"',
|
|
160
|
+
'\techo "!.gitignore"',
|
|
161
|
+
'} >"$npm_dir/.gitignore"',
|
|
162
|
+
"",
|
|
163
|
+
'if [[ ! -f "$npm_dir/.npmrc" ]]; then',
|
|
164
|
+
'\tif [[ -f "${HOME}/.npmrc" ]]; then',
|
|
165
|
+
'\t\tcp -a "${HOME}/.npmrc" "$npm_dir/.npmrc"',
|
|
166
|
+
"\tfi",
|
|
167
|
+
"fi",
|
|
168
|
+
""
|
|
169
|
+
].join("\n")
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
filePath: ".devcontainer/post-start.sh",
|
|
173
|
+
content: [
|
|
174
|
+
"#!/usr/bin/env bash",
|
|
175
|
+
"# Runs on every container start (devcontainer postStartCommand).",
|
|
176
|
+
"set -euo pipefail",
|
|
177
|
+
"",
|
|
178
|
+
'AUTH_REGISTRY="https://registry.npmjs.org"',
|
|
179
|
+
"",
|
|
180
|
+
'if npm whoami --registry "$AUTH_REGISTRY" >/dev/null 2>&1; then',
|
|
181
|
+
'\techo "npm: logged in as $(npm whoami --registry "$AUTH_REGISTRY")"',
|
|
182
|
+
"\texit 0",
|
|
183
|
+
"fi",
|
|
184
|
+
"",
|
|
185
|
+
"if [[ -t 0 && -t 1 ]]; then",
|
|
186
|
+
'\techo "npm: not authenticated — starting login..."',
|
|
187
|
+
'\tnpm login --registry "$AUTH_REGISTRY"',
|
|
188
|
+
"\texit 0",
|
|
189
|
+
"fi",
|
|
190
|
+
"",
|
|
191
|
+
'echo "npm: not authenticated. Open a terminal and run: npm login" >&2',
|
|
192
|
+
'echo " (creds persist in .devcontainer/npm-auth/)" >&2',
|
|
193
|
+
"exit 1",
|
|
194
|
+
""
|
|
195
|
+
].join("\n")
|
|
135
196
|
}
|
|
136
197
|
]
|
|
137
198
|
});
|
|
@@ -148,4 +209,4 @@ function createWorkspace(targetDir) {
|
|
|
148
209
|
return monoRepo;
|
|
149
210
|
}
|
|
150
211
|
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuYWRkU2VydmljZShcImRldmNvbnRhaW5lclwiLCB7XG5cdFx0XHRidWlsZDogXCIuXCIsXG5cdFx0XHR2b2x1bWVzOiBbXG5cdFx0XHRcdGBcXCR7SE9NRX0vLm5wbS8ke25hbWV9Oi9ob21lL25vZGUvLm5wbS1jb25maWdgLFxuXHRcdFx0XHRcIndlYmFwaS1ub2RlLW1vZHVsZXM6L3dvcmtzcGFjZS9ub2RlX21vZHVsZXNcIixcblx0XHRcdF0sXG5cdFx0XHRlbnZpcm9ubWVudDogeyBOUE1fQ09ORklHX1VTRVJDT05GSUc6IFwiL2hvbWUvbm9kZS8ubnBtLWNvbmZpZy8ubnBtcmNcIiB9LFxuXHRcdFx0Y29tbWFuZDogXCJzbGVlcCBpbmZpbml0eVwiLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuc2V0UG9zdFN0YXJ0Q29tbWFuZChcIm5wbSB3aG9hbWkgMj4vZGV2L251bGwgfHwgbnBtIGxvZ2luXCIpXG5cdFx0LnVzZUNvbXBvc2UoKTtcblxuXHQvLyBXb3Jrc3BhY2UtbGV2ZWwgbW9kZWxzIChyZXBvIHJvb3QpXG5cdG1vbm9SZXBvLmFkZE1vZGVsKGNvbXBvc2UpO1xuXHRtb25vUmVwby5hZGRNb2RlbChkZXZDb250YWluZXIpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpRGV2Q29udGFpbmVyKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVlNDb2RlU2V0dGluZ3MobmFtZSkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgTGF1bmNoSnNvbigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFRzQ29uZmlnKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgUGFja2FnZUpzb24oYCR7bmFtZX0uYXBpYCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MLCBcImNvbmZpZy9jb25maWcueWFtbFwiLCBcIlwiKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBHaXRpZ25vcmUoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBFbnZGaWxlKCkpO1xuXG5cdC8vIEJpb21lIGZvcm1hdHRlci9saW50ZXIgY29uZmlnXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcImJpb21lLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0JHNjaGVtYTogXCJodHRwczovL2Jpb21lanMuZGV2L3NjaGVtYXMvMi4wLjAvc2NoZW1hLmpzb25cIixcblx0XHRcdFx0XHRcdGZpbGVzOiB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLnRzXCIsIFwiKiovKi5qc1wiLCBcIioqLyouanNvblwiLCBcIioqLyoueW1sXCIsIFwiKiovKi55YW1sXCJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFzc2lzdDogeyBhY3Rpb25zOiB7IHNvdXJjZTogeyBvcmdhbml6ZUltcG9ydHM6IFwib25cIiB9IH0gfSxcblx0XHRcdFx0XHRcdHZjczogeyBlbmFibGVkOiB0cnVlLCBjbGllbnRLaW5kOiBcImdpdFwiLCB1c2VJZ25vcmVGaWxlOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Zm9ybWF0V2l0aEVycm9yczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5kZW50U3R5bGU6IFwidGFiXCIsXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogOTUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0amF2YXNjcmlwdDogeyBwYXJzZXI6IHsgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ6IHRydWUgfSB9LFxuXHRcdFx0XHRcdFx0bGludGVyOiB7XG5cdFx0XHRcdFx0XHRcdHJ1bGVzOiB7XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldmVsOiBcImVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHsgYWNjZXNzaWJpbGl0eTogXCJleHBsaWNpdFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3ZlcnJpZGVzOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi5qc29uXCJdLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdHRlcjogeyBpbmRlbnRTdHlsZTogXCJzcGFjZVwiLCBpbmRlbnRXaWR0aDogMiB9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gTlBNIHRva2VuIHBsYWNlaG9sZGVyIOKAlCBnaXRpZ25vcmVkLCBzZXQgbWFudWFsbHkgYWZ0ZXIgc2NhZmZvbGRcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmVudi5sb2NhbFwiLFxuXHRcdFx0XHRjb250ZW50OlxuXHRcdFx0XHRcdFwiIyBTZXQgeW91ciBucG0gYWNjZXNzIHRva2VuIGhlcmUgKGNyZWF0ZWQgd2l0aDogbnBtIHRva2VuIGNyZWF0ZSlcXG5OUE1fVE9LRU49XFxuXCIsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIFByb2plY3QtbGV2ZWwgbW9kZWxzIChwYXRocyByZWxhdGl2ZSB0byBwcm9qZWN0cy9hcGkpXG5cdGNvbnN0IGFwaVByb2plY3QgPSBuZXcgUHJvamVjdFNjYWZmb2xkKFdFQkFQSV9QUk9KRUNUX0RJUik7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IEFwaVBhY2thZ2VKc29uKG5hbWUpKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgTWFpblNvdXJjZUZpbGUoYCR7bmFtZX0uYXBpYCkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBDb250cm9sbGVyU291cmNlRmlsZSgpKTtcblxuXHQvLyBTYW1wbGVTZXJ2aWNlICsgU2FtcGxlQ29uZmlnIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIHNjYWZmb2xkIOKAlCBIZWxsb0NvbnRyb2xsZXJcblx0Ly8gaW5qZWN0cyBTYW1wbGVTZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIGNvbmZpZy1kcml2ZW4gYmVoYXZpb3VyIG91dCBvZiB0aGUgYm94LlxuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZUNvbmZpZ01vZGVsKCkpO1xuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZVNlcnZpY2VNb2RlbCgpKTtcblxuXHRtb25vUmVwby5hZGRQcm9qZWN0KGFwaVByb2plY3QpO1xuXG5cdHJldHVybiBtb25vUmVwbztcbn1cbiJdLCJuYW1lcyI6WyJyZXNvbHZlIiwiRG9ja2VyQ29tcG9zZSIsIkNvbmZpZ1lhbWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiRGV2Q29udGFpbmVyIiwiRW52RmlsZSIsIkdpdGlnbm9yZSIsIkxhdW5jaEpzb24iLCJQYWNrYWdlSnNvbiIsIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJUc0NvbmZpZyIsIlZTQ29kZVNldHRpbmdzIiwiU2NhZmZvbGRTZXJ2aWNlIiwiQXV0aEZlYXR1cmUiLCJEYXRhYmFzZUZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJQb3N0bWFuRmVhdHVyZSIsIkFwaVBhY2thZ2VKc29uIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJNYWluU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiV0VCQVBJX1BST0pFQ1RfRElSIiwiZmVhdHVyZXMiLCJzY2FmZm9sZEFwaSIsImNsaU9wdGlvbnMiLCJ0YXJnZXREaXIiLCJkIiwid29ya3NwYWNlIiwiY3JlYXRlV29ya3NwYWNlIiwic2NhZmZvbGQiLCJtb25vUmVwbyIsIm5hbWUiLCJjb21wb3NlIiwiYWRkU2VydmljZSIsImJ1aWxkIiwidm9sdW1lcyIsImVudmlyb25tZW50IiwiTlBNX0NPTkZJR19VU0VSQ09ORklHIiwiY29tbWFuZCIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiYXBpUHJvamVjdCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGFBQWEsUUFBUSw2QkFBNkI7QUFDM0QsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxT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
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuc2V0UHJvamVjdE5hbWUobmFtZSlcblx0XHQuYWRkTmV0d29yayhuYW1lLCB7IG5hbWU6IGBzYW1wbGVzLSR7bmFtZX1gIH0pXG5cdFx0LmFkZFNlcnZpY2UoXCJkZXZjb250YWluZXJcIiwge1xuXHRcdFx0YnVpbGQ6IFwiLlwiLFxuXHRcdFx0dm9sdW1lczogW1xuXHRcdFx0XHQvLyBXb3Jrc3BhY2UtbG9jYWwgKGNyZWF0ZWQgYnkgaW5pdGlhbGl6ZS5zaCBhcyB0aGUgaG9zdCB1c2VyKS5cblx0XHRcdFx0Ly8gRG8gTk9UIGJpbmQgJHtIT01FfS8ubnBtLy4uLiDigJQgRG9ja2VyIGNyZWF0ZXMgbWlzc2luZyBob3N0IHBhdGhzIGFzIHJvb3QuXG5cdFx0XHRcdFwiLi9ucG0tYXV0aDovaG9tZS9ub2RlLy5ucG0tY29uZmlnXCIsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0XHRuZXR3b3JrczogW25hbWVdLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuZm9yd2FyZFBvcnQoMzAwMClcblx0XHQuc2V0UG9ydEF0dHJpYnV0ZXMoMzAwMCwgeyBsYWJlbDogXCJBUElcIiwgcmVxdWlyZUxvY2FsUG9ydDogdHJ1ZSB9KVxuXHRcdC5zZXRJbml0aWFsaXplQ29tbWFuZChcImJhc2ggLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIpXG5cdFx0LnNldFBvc3RTdGFydENvbW1hbmQoXCJiYXNoIC5kZXZjb250YWluZXIvcG9zdC1zdGFydC5zaFwiKVxuXHRcdC51c2VDb21wb3NlKCk7XG5cblx0Ly8gV29ya3NwYWNlLWxldmVsIG1vZGVscyAocmVwbyByb290KVxuXHRtb25vUmVwby5hZGRNb2RlbChjb21wb3NlKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoZGV2Q29udGFpbmVyKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFdlYmFwaURldkNvbnRhaW5lcigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFZTQ29kZVNldHRpbmdzKG5hbWUpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IExhdW5jaEpzb24oKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBUc0NvbmZpZygpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFBhY2thZ2VKc29uKGAke25hbWV9LmFwaWApKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfWUFNTCwgXCJjb25maWcvY29uZmlnLnlhbWxcIiwgXCJcIikpO1xuXHRtb25vUmVwby5hZGRNb2RlbChcblx0XHRuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ERVZfWUFNTCwgXCJjb25maWcvY29uZmlnLmRldi55YW1sXCIsIFwiXCIpLFxuXHQpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgR2l0aWdub3JlKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgRW52RmlsZSgpKTtcblxuXHQvLyBCaW9tZSBmb3JtYXR0ZXIvbGludGVyIGNvbmZpZ1xuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCJiaW9tZS5qc29uXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdCRzY2hlbWE6IFwiaHR0cHM6Ly9iaW9tZWpzLmRldi9zY2hlbWFzLzIuMC4wL3NjaGVtYS5qc29uXCIsXG5cdFx0XHRcdFx0XHRmaWxlczoge1xuXHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi50c1wiLCBcIioqLyouanNcIiwgXCIqKi8qLmpzb25cIiwgXCIqKi8qLnltbFwiLCBcIioqLyoueWFtbFwiXSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRhc3Npc3Q6IHsgYWN0aW9uczogeyBzb3VyY2U6IHsgb3JnYW5pemVJbXBvcnRzOiBcIm9uXCIgfSB9IH0sXG5cdFx0XHRcdFx0XHR2Y3M6IHsgZW5hYmxlZDogdHJ1ZSwgY2xpZW50S2luZDogXCJnaXRcIiwgdXNlSWdub3JlRmlsZTogdHJ1ZSB9LFxuXHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGZvcm1hdFdpdGhFcnJvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluZGVudFN0eWxlOiBcInRhYlwiLFxuXHRcdFx0XHRcdFx0XHRsaW5lV2lkdGg6IDk1LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGphdmFzY3JpcHQ6IHsgcGFyc2VyOiB7IHVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkOiB0cnVlIH0gfSxcblx0XHRcdFx0XHRcdGxpbnRlcjoge1xuXHRcdFx0XHRcdFx0XHRydWxlczoge1xuXHRcdFx0XHRcdFx0XHRcdHN0eWxlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRsZXZlbDogXCJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7IGFjY2Vzc2liaWxpdHk6IFwiZXhwbGljaXRcIiB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG92ZXJyaWRlczogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyouanNvblwiXSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHsgaW5kZW50U3R5bGU6IFwic3BhY2VcIiwgaW5kZW50V2lkdGg6IDIgfSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIE5QTSB0b2tlbiBwbGFjZWhvbGRlciDigJQgZ2l0aWdub3JlZCwgc2V0IG1hbnVhbGx5IGFmdGVyIHNjYWZmb2xkXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIi5lbnYubG9jYWxcIixcblx0XHRcdFx0Y29udGVudDpcblx0XHRcdFx0XHRcIiMgU2V0IHlvdXIgbnBtIGFjY2VzcyB0b2tlbiBoZXJlIChjcmVhdGVkIHdpdGg6IG5wbSB0b2tlbiBjcmVhdGUpXFxuTlBNX1RPS0VOPVxcblwiLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmRldmNvbnRhaW5lci9pbml0aWFsaXplLnNoXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFtcblx0XHRcdFx0XHRcIiMhL3Vzci9iaW4vZW52IGJhc2hcIixcblx0XHRcdFx0XHRcIiMgUnVucyBvbiB0aGUgaG9zdCBiZWZvcmUgdGhlIGNvbnRhaW5lciBpcyBjcmVhdGVkIChkZXZjb250YWluZXIgaW5pdGlhbGl6ZUNvbW1hbmQpLlwiLFxuXHRcdFx0XHRcdFwiIyBDcmVhdGVzIG5wbS1hdXRoIGFzIHRoZSBob3N0IHVzZXIgc28gdGhlIGJpbmQgbW91bnQgaXMgbm90IHJvb3Qtb3duZWQuXCIsXG5cdFx0XHRcdFx0XCIjIERvIG5vdCBzY2FmZm9sZCBucG0tYXV0aC8gZnJvbSB0aGUgYnVpbGRlciAodGhhdCBydW5zIGFzIHJvb3QpLlwiLFxuXHRcdFx0XHRcdFwic2V0IC1ldW8gcGlwZWZhaWxcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdyb290PVwiJChjZCBcIiQoZGlybmFtZSBcIiR7QkFTSF9TT1VSQ0VbMF19XCIpLy4uXCIgJiYgcHdkKVwiJyxcblx0XHRcdFx0XHQnbnBtX2Rpcj1cIiRyb290Ly5kZXZjb250YWluZXIvbnBtLWF1dGhcIicsXG5cdFx0XHRcdFx0J21rZGlyIC1wIFwiJG5wbV9kaXJcIicsXG5cdFx0XHRcdFx0XCJ7XCIsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCIqXCInLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwiIS5naXRpZ25vcmVcIicsXG5cdFx0XHRcdFx0J30gPlwiJG5wbV9kaXIvLmdpdGlnbm9yZVwiJyxcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdpZiBbWyAhIC1mIFwiJG5wbV9kaXIvLm5wbXJjXCIgXV07IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRpZiBbWyAtZiBcIiR7SE9NRX0vLm5wbXJjXCIgXV07IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRcXHRjcCAtYSBcIiR7SE9NRX0vLm5wbXJjXCIgXCIkbnBtX2Rpci8ubnBtcmNcIicsXG5cdFx0XHRcdFx0XCJcXHRmaVwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL3Bvc3Qtc3RhcnQuc2hcIixcblx0XHRcdFx0Y29udGVudDogW1xuXHRcdFx0XHRcdFwiIyEvdXNyL2Jpbi9lbnYgYmFzaFwiLFxuXHRcdFx0XHRcdFwiIyBSdW5zIG9uIGV2ZXJ5IGNvbnRhaW5lciBzdGFydCAoZGV2Y29udGFpbmVyIHBvc3RTdGFydENvbW1hbmQpLlwiLFxuXHRcdFx0XHRcdFwic2V0IC1ldW8gcGlwZWZhaWxcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdBVVRIX1JFR0lTVFJZPVwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmdcIicsXG5cdFx0XHRcdFx0XCJcIixcblx0XHRcdFx0XHQnaWYgbnBtIHdob2FtaSAtLXJlZ2lzdHJ5IFwiJEFVVEhfUkVHSVNUUllcIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4nLFxuXHRcdFx0XHRcdCdcXHRlY2hvIFwibnBtOiBsb2dnZWQgaW4gYXMgJChucG0gd2hvYW1pIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiKVwiJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMFwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdFwiaWYgW1sgLXQgMCAmJiAtdCAxIF1dOyB0aGVuXCIsXG5cdFx0XHRcdFx0J1xcdGVjaG8gXCJucG06IG5vdCBhdXRoZW50aWNhdGVkIOKAlCBzdGFydGluZyBsb2dpbi4uLlwiJyxcblx0XHRcdFx0XHQnXFx0bnBtIGxvZ2luIC0tcmVnaXN0cnkgXCIkQVVUSF9SRUdJU1RSWVwiJyxcblx0XHRcdFx0XHRcIlxcdGV4aXQgMFwiLFxuXHRcdFx0XHRcdFwiZmlcIixcblx0XHRcdFx0XHRcIlwiLFxuXHRcdFx0XHRcdCdlY2hvIFwibnBtOiBub3QgYXV0aGVudGljYXRlZC4gT3BlbiBhIHRlcm1pbmFsIGFuZCBydW46IG5wbSBsb2dpblwiID4mMicsXG5cdFx0XHRcdFx0J2VjaG8gXCIgICAgKGNyZWRzIHBlcnNpc3QgaW4gLmRldmNvbnRhaW5lci9ucG0tYXV0aC8pXCIgPiYyJyxcblx0XHRcdFx0XHRcImV4aXQgMVwiLFxuXHRcdFx0XHRcdFwiXCIsXG5cdFx0XHRcdF0uam9pbihcIlxcblwiKSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gUHJvamVjdC1sZXZlbCBtb2RlbHMgKHBhdGhzIHJlbGF0aXZlIHRvIHByb2plY3RzL2FwaSlcblx0Y29uc3QgYXBpUHJvamVjdCA9IG5ldyBQcm9qZWN0U2NhZmZvbGQoV0VCQVBJX1BST0pFQ1RfRElSKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQXBpUGFja2FnZUpzb24obmFtZSkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBNYWluU291cmNlRmlsZShgJHtuYW1lfS5hcGlgKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IENvbnRyb2xsZXJTb3VyY2VGaWxlKCkpO1xuXG5cdC8vIFNhbXBsZVNlcnZpY2UgKyBTYW1wbGVDb25maWcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgc2NhZmZvbGQg4oCUIEhlbGxvQ29udHJvbGxlclxuXHQvLyBpbmplY3RzIFNhbXBsZVNlcnZpY2UgdG8gZGVtb25zdHJhdGUgY29uZmlnLWRyaXZlbiBiZWhhdmlvdXIgb3V0IG9mIHRoZSBib3guXG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlQ29uZmlnTW9kZWwoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlU2VydmljZU1vZGVsKCkpO1xuXG5cdG1vbm9SZXBvLmFkZFByb2plY3QoYXBpUHJvamVjdCk7XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuIl0sIm5hbWVzIjpbInJlc29sdmUiLCJEb2NrZXJDb21wb3NlIiwiQ29uZmlnWWFtbCIsIldFTExfS05PV05fRklMRVMiLCJEZXZDb250YWluZXIiLCJFbnZGaWxlIiwiR2l0aWdub3JlIiwiTGF1bmNoSnNvbiIsIlBhY2thZ2VKc29uIiwiTW9ub1JlcG9TY2FmZm9sZCIsIlByb2plY3RTY2FmZm9sZCIsIlRzQ29uZmlnIiwiVlNDb2RlU2V0dGluZ3MiLCJTY2FmZm9sZFNlcnZpY2UiLCJBdXRoRmVhdHVyZSIsIkRhdGFiYXNlRmVhdHVyZSIsIkZpbmFsaXplRmVhdHVyZSIsIlBvc3RtYW5GZWF0dXJlIiwiQXBpUGFja2FnZUpzb24iLCJDb250cm9sbGVyU291cmNlRmlsZSIsIk1haW5Tb3VyY2VGaWxlIiwiU2FtcGxlQ29uZmlnTW9kZWwiLCJTYW1wbGVTZXJ2aWNlTW9kZWwiLCJXZWJhcGlEZXZDb250YWluZXIiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJmZWF0dXJlcyIsInNjYWZmb2xkQXBpIiwiY2xpT3B0aW9ucyIsInRhcmdldERpciIsImQiLCJ3b3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJzY2FmZm9sZCIsIm1vbm9SZXBvIiwibmFtZSIsImNvbXBvc2UiLCJzZXRQcm9qZWN0TmFtZSIsImFkZE5ldHdvcmsiLCJhZGRTZXJ2aWNlIiwiYnVpbGQiLCJ2b2x1bWVzIiwiZW52aXJvbm1lbnQiLCJOUE1fQ09ORklHX1VTRVJDT05GSUciLCJjb21tYW5kIiwibmV0d29ya3MiLCJhZGRWb2x1bWUiLCJkZXZDb250YWluZXIiLCJhZGRFeHRlbnNpb24iLCJmb3J3YXJkUG9ydCIsInNldFBvcnRBdHRyaWJ1dGVzIiwibGFiZWwiLCJyZXF1aXJlTG9jYWxQb3J0Iiwic2V0SW5pdGlhbGl6ZUNvbW1hbmQiLCJzZXRQb3N0U3RhcnRDb21tYW5kIiwidXNlQ29tcG9zZSIsImFkZE1vZGVsIiwiQ09ORklHX1lBTUwiLCJDT05GSUdfREVWX1lBTUwiLCJhZGRGaWxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiJHNjaGVtYSIsImluY2x1ZGVzIiwiYXNzaXN0IiwiYWN0aW9ucyIsInNvdXJjZSIsIm9yZ2FuaXplSW1wb3J0cyIsInZjcyIsImVuYWJsZWQiLCJjbGllbnRLaW5kIiwidXNlSWdub3JlRmlsZSIsImZvcm1hdHRlciIsImZvcm1hdFdpdGhFcnJvcnMiLCJpbmRlbnRTdHlsZSIsImxpbmVXaWR0aCIsImphdmFzY3JpcHQiLCJwYXJzZXIiLCJ1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZCIsImxpbnRlciIsInJ1bGVzIiwic3R5bGUiLCJ1c2VDb25zaXN0ZW50TWVtYmVyQWNjZXNzaWJpbGl0eSIsImxldmVsIiwib3B0aW9ucyIsImFjY2Vzc2liaWxpdHkiLCJvdmVycmlkZXMiLCJpbmRlbnRXaWR0aCIsImpvaW4iLCJhcGlQcm9qZWN0IiwiYWRkUHJvamVjdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsYUFBYSxRQUFRLDZCQUE2QjtBQUMzRCxTQUFTQyxVQUFVLFFBQVEsaUNBQWlDO0FBQzVELFNBQVNDLGdCQUFnQixRQUFRLHFCQUFxQjtBQUN0RCxTQUFTQyxZQUFZLFFBQVEsbUNBQW1DO0FBQ2hFLFNBQVNDLE9BQU8sUUFBUSw4QkFBOEI7QUFDdEQsU0FBU0MsU0FBUyxRQUFRLCtCQUErQjtBQUN6RCxTQUFTQyxVQUFVLFFBQVEsaUNBQWlDO0FBQzVELFNBQVNDLFdBQVcsUUFBUSxrQ0FBa0M7QUFDOUQsU0FBU0MsZ0JBQWdCLEVBQUVDLGVBQWUsUUFBUSw2QkFBNkI7QUFDL0UsU0FBU0MsUUFBUSxRQUFRLDhCQUE4QjtBQUN2RCxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLGVBQWUsUUFBUSxrQ0FBa0M7QUFDbEUsU0FBU0MsV0FBVyxRQUFRLDZCQUE2QjtBQUN6RCxTQUFTQyxlQUFlLFFBQVEsaUNBQWlDO0FBQ2pFLFNBQVNDLGVBQWUsUUFBUSxpQ0FBaUM7QUFDakUsU0FBU0MsY0FBYyxRQUFRLGdDQUFnQztBQUMvRCxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLG9CQUFvQixRQUFRLDJDQUEyQztBQUNoRixTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLGlCQUFpQixFQUFFQyxrQkFBa0IsUUFBUSxpQ0FBaUM7QUFDdkYsU0FBU0Msa0JBQWtCLFFBQVEsaUNBQWlDO0FBRXBFLE9BQU8sTUFBTUMscUJBQXFCLGVBQWU7QUFVakQsTUFBTUMsV0FBVztJQUFDVjtJQUFpQkQ7SUFBYUc7SUFBZ0JEO0NBQWdCO0FBRWhGLE9BQU8sZUFBZVUsWUFBWUMsVUFBc0I7SUFDdkQsTUFBTUMsWUFBWTVCLFFBQVEyQixXQUFXRSxDQUFDLElBQUk7SUFDMUMsTUFBTUMsWUFBWUMsZ0JBQWdCSDtJQUNsQyxNQUFNZixnQkFBZ0JtQixRQUFRLENBQUNGLFdBQVdILFlBQVlGO0FBQ3ZEO0FBRUEsU0FBU00sZ0JBQWdCSCxTQUFpQjtJQUN6QyxNQUFNSyxXQUFXLElBQUl4QjtJQUNyQndCLFNBQVNMLFNBQVMsR0FBR0E7SUFDckIsTUFBTU0sT0FBT0QsU0FBU0MsSUFBSTtJQUUxQixNQUFNQyxVQUFVLElBQUlsQyxnQkFDbEJtQyxjQUFjLENBQUNGLE1BQ2ZHLFVBQVUsQ0FBQ0gsTUFBTTtRQUFFQSxNQUFNLENBQUMsUUFBUSxFQUFFQSxNQUFNO0lBQUMsR0FDM0NJLFVBQVUsQ0FBQyxnQkFBZ0I7UUFDM0JDLE9BQU87UUFDUEMsU0FBUztZQUNSLCtEQUErRDtZQUMvRCw0RUFBNEU7WUFDNUU7WUFDQTtTQUNBO1FBQ0RDLGFBQWE7WUFBRUMsdUJBQXVCO1FBQWdDO1FBQ3RFQyxTQUFTO1FBQ1RDLFVBQVU7WUFBQ1Y7U0FBSztJQUNqQixHQUNDVyxTQUFTLENBQUM7SUFFWixNQUFNQyxlQUFlLElBQUkxQyxlQUN2QjJDLFlBQVksQ0FBQyxpQkFBaUIsbUJBQzlCQyxXQUFXLENBQUMsTUFDWkMsaUJBQWlCLENBQUMsTUFBTTtRQUFFQyxPQUFPO1FBQU9DLGtCQUFrQjtJQUFLLEdBQy9EQyxvQkFBb0IsQ0FBQyxvQ0FDckJDLG1CQUFtQixDQUFDLG9DQUNwQkMsVUFBVTtJQUVaLHFDQUFxQztJQUNyQ3JCLFNBQVNzQixRQUFRLENBQUNwQjtJQUNsQkYsU0FBU3NCLFFBQVEsQ0FBQ1Q7SUFDbEJiLFNBQVNzQixRQUFRLENBQUMsSUFBSWhDO0lBQ3RCVSxTQUFTc0IsUUFBUSxDQUFDLElBQUkzQyxlQUFlc0I7SUFDckNELFNBQVNzQixRQUFRLENBQUMsSUFBSWhEO0lBQ3RCMEIsU0FBU3NCLFFBQVEsQ0FBQyxJQUFJNUM7SUFDdEJzQixTQUFTc0IsUUFBUSxDQUFDLElBQUkvQyxZQUFZLEdBQUcwQixLQUFLLElBQUksQ0FBQztJQUMvQ0QsU0FBU3NCLFFBQVEsQ0FBQyxJQUFJckQsV0FBV0MsaUJBQWlCcUQsV0FBVyxFQUFFLHNCQUFzQjtJQUNyRnZCLFNBQVNzQixRQUFRLENBQ2hCLElBQUlyRCxXQUFXQyxpQkFBaUJzRCxlQUFlLEVBQUUsMEJBQTBCO0lBRTVFeEIsU0FBU3NCLFFBQVEsQ0FBQyxJQUFJakQ7SUFDdEIyQixTQUFTc0IsUUFBUSxDQUFDLElBQUlsRDtJQUV0QixnQ0FBZ0M7SUFDaEM0QixTQUFTeUIsT0FBTyxDQUFDO1FBQ2hCQyxPQUFPLElBQU07Z0JBQ1o7b0JBQ0NDLFVBQVU7b0JBQ1ZDLFNBQVNDLEtBQUtDLFNBQVMsQ0FDdEI7d0JBQ0NDLFNBQVM7d0JBQ1RMLE9BQU87NEJBQ05NLFVBQVU7Z0NBQUM7Z0NBQVc7Z0NBQVc7Z0NBQWE7Z0NBQVk7NkJBQVk7d0JBQ3ZFO3dCQUNBQyxRQUFROzRCQUFFQyxTQUFTO2dDQUFFQyxRQUFRO29DQUFFQyxpQkFBaUI7Z0NBQUs7NEJBQUU7d0JBQUU7d0JBQ3pEQyxLQUFLOzRCQUFFQyxTQUFTOzRCQUFNQyxZQUFZOzRCQUFPQyxlQUFlO3dCQUFLO3dCQUM3REMsV0FBVzs0QkFDVkgsU0FBUzs0QkFDVEksa0JBQWtCOzRCQUNsQkMsYUFBYTs0QkFDYkMsV0FBVzt3QkFDWjt3QkFDQUMsWUFBWTs0QkFBRUMsUUFBUTtnQ0FBRUMsa0NBQWtDOzRCQUFLO3dCQUFFO3dCQUNqRUMsUUFBUTs0QkFDUEMsT0FBTztnQ0FDTkMsT0FBTztvQ0FDTkMsa0NBQWtDO3dDQUNqQ0MsT0FBTzt3Q0FDUEMsU0FBUzs0Q0FBRUMsZUFBZTt3Q0FBVztvQ0FDdEM7Z0NBQ0Q7NEJBQ0Q7d0JBQ0Q7d0JBQ0FDLFdBQVc7NEJBQ1Y7Z0NBQ0N2QixVQUFVO29DQUFDO2lDQUFZO2dDQUN2QlMsV0FBVztvQ0FBRUUsYUFBYTtvQ0FBU2EsYUFBYTtnQ0FBRTs0QkFDbkQ7eUJBQ0E7b0JBQ0YsR0FDQSxNQUNBO2dCQUVGO2FBQ0E7SUFDRjtJQUVBLGtFQUFrRTtJQUNsRXhELFNBQVN5QixPQUFPLENBQUM7UUFDaEJDLE9BQU8sSUFBTTtnQkFDWjtvQkFDQ0MsVUFBVTtvQkFDVkMsU0FDQztnQkFDRjtnQkFDQTtvQkFDQ0QsVUFBVTtvQkFDVkMsU0FBUzt3QkFDUjt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTtxQkFDQSxDQUFDNkIsSUFBSSxDQUFDO2dCQUNSO2dCQUNBO29CQUNDOUIsVUFBVTtvQkFDVkMsU0FBUzt3QkFDUjt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTt3QkFDQTtxQkFDQSxDQUFDNkIsSUFBSSxDQUFDO2dCQUNSO2FBQ0E7SUFDRjtJQUVBLHdEQUF3RDtJQUN4RCxNQUFNQyxhQUFhLElBQUlqRixnQkFBZ0JjO0lBQ3ZDbUUsV0FBV3BDLFFBQVEsQ0FBQyxJQUFJckMsZUFBZWdCO0lBQ3ZDeUQsV0FBV3BDLFFBQVEsQ0FBQyxJQUFJbkMsZUFBZSxHQUFHYyxLQUFLLElBQUksQ0FBQztJQUNwRHlELFdBQVdwQyxRQUFRLENBQUMsSUFBSXBDO0lBRXhCLCtFQUErRTtJQUMvRSwrRUFBK0U7SUFDL0V3RSxXQUFXakMsT0FBTyxDQUFDLElBQUlyQztJQUN2QnNFLFdBQVdqQyxPQUFPLENBQUMsSUFBSXBDO0lBRXZCVyxTQUFTMkQsVUFBVSxDQUFDRDtJQUVwQixPQUFPMUQ7QUFDUiJ9
|