projen 0.99.80 → 0.100.0
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/.jsii +1677 -3664
- package/BREAKING_CHANGES.md +855 -0
- package/lib/ai-instructions.d.ts +0 -1
- package/lib/ai-instructions.js +6 -12
- package/lib/awscdk/auto-discover.js +7 -14
- package/lib/awscdk/awscdk-app-java.d.ts +0 -7
- package/lib/awscdk/awscdk-app-java.js +28 -21
- package/lib/awscdk/awscdk-app-py.d.ts +0 -12
- package/lib/awscdk/awscdk-app-py.js +27 -24
- package/lib/awscdk/awscdk-app-ts.d.ts +0 -5
- package/lib/awscdk/awscdk-app-ts.js +57 -31
- package/lib/awscdk/awscdk-construct.d.ts +0 -26
- package/lib/awscdk/awscdk-construct.js +4 -44
- package/lib/awscdk/awscdk-deps-java.js +2 -6
- package/lib/awscdk/awscdk-deps-js.js +2 -7
- package/lib/awscdk/awscdk-deps-py.js +2 -7
- package/lib/awscdk/awscdk-deps.d.ts +1 -90
- package/lib/awscdk/awscdk-deps.js +68 -114
- package/lib/awscdk/cdk-config.d.ts +0 -21
- package/lib/awscdk/cdk-config.js +44 -51
- package/lib/awscdk/cdk-tasks.js +26 -4
- package/lib/awscdk/integration-test.js +10 -15
- package/lib/awscdk/internal.js +5 -2
- package/lib/awscdk/lambda-extension.js +4 -16
- package/lib/awscdk/lambda-function.d.ts +0 -10
- package/lib/awscdk/lambda-function.js +88 -78
- package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
- package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
- package/lib/build/build-workflow.js +51 -6
- package/lib/builtin-example.task.d.ts +1 -0
- package/lib/builtin-example.task.js +2 -1
- package/lib/cdk/auto-discover-base.js +43 -8
- package/lib/cdk/construct-lib.js +2 -4
- package/lib/cdk/integration-test-base.js +26 -4
- package/lib/cdk/jsii-build.d.ts +0 -1
- package/lib/cdk/jsii-build.js +4 -4
- package/lib/cdk/jsii-docgen.js +2 -4
- package/lib/cdk/jsii-project.d.ts +12 -9
- package/lib/cdk/jsii-project.js +22 -7
- package/lib/cdk8s/auto-discover.js +3 -6
- package/lib/cdk8s/cdk8s-app-py.js +7 -4
- package/lib/cdk8s/cdk8s-app-ts.js +43 -6
- package/lib/cdk8s/cdk8s-construct.js +44 -5
- package/lib/cdk8s/cdk8s-deps-py.js +2 -4
- package/lib/cdk8s/cdk8s-deps.js +50 -5
- package/lib/cdk8s/integration-test.js +2 -4
- package/lib/cdktf/cdktf-construct.js +36 -5
- package/lib/circleci/circleci.js +66 -44
- package/lib/cleanup.js +38 -5
- package/lib/cli/cmds/new.js +51 -20
- package/lib/cli/cmds/run-task.js +107 -0
- package/lib/cli/{synth.d.ts → cmds/synth.d.ts} +0 -5
- package/lib/cli/cmds/synth.js +90 -0
- package/lib/cli/index.js +47 -22
- package/lib/cli/macros.js +35 -2
- package/lib/{task-runtime.d.ts → cli/task-runtime.d.ts} +13 -2
- package/lib/cli/task-runtime.js +411 -0
- package/lib/cli/util.js +37 -4
- package/lib/component.js +3 -4
- package/lib/dependencies.js +43 -12
- package/lib/dev-env.js +10 -4
- package/lib/docker-compose/docker-compose-service.js +54 -4
- package/lib/docker-compose/docker-compose.js +8 -4
- package/lib/file.js +60 -5
- package/lib/gitattributes.js +7 -5
- package/lib/github/actions-provider.js +3 -7
- package/lib/github/auto-approve.js +3 -4
- package/lib/github/auto-merge.js +3 -5
- package/lib/github/auto-queue.js +36 -5
- package/lib/github/dependabot.js +13 -4
- package/lib/github/dependency-review.js +2 -4
- package/lib/github/github-credentials.js +37 -5
- package/lib/github/github-project.d.ts +1 -32
- package/lib/github/github-project.js +30 -8
- package/lib/github/github.d.ts +0 -9
- package/lib/github/github.js +27 -14
- package/lib/github/index.js +24 -2
- package/lib/github/merge-queue.js +3 -4
- package/lib/github/mergify.d.ts +0 -7
- package/lib/github/mergify.js +6 -13
- package/lib/github/pr-template.js +2 -4
- package/lib/github/pull-request-backport.js +4 -4
- package/lib/github/pull-request-lint.js +4 -4
- package/lib/github/stale.js +2 -4
- package/lib/github/task-workflow-job.js +20 -4
- package/lib/github/task-workflow.js +4 -4
- package/lib/github/workflow-actions.d.ts +0 -8
- package/lib/github/workflow-actions.js +2 -14
- package/lib/github/workflow-jobs.js +2 -4
- package/lib/github/workflow-steps.js +2 -4
- package/lib/github/workflows-model.d.ts +0 -8
- package/lib/github/workflows-model.js +1 -1
- package/lib/github/workflows.js +39 -6
- package/lib/gitlab/configuration-model.d.ts +0 -4
- package/lib/gitlab/configuration-model.js +1 -1
- package/lib/gitlab/configuration.js +125 -41
- package/lib/gitlab/gitlab-configuration.js +3 -5
- package/lib/gitlab/nested-configuration.js +3 -4
- package/lib/gitpod.js +11 -7
- package/lib/ignore-file.js +5 -4
- package/lib/index.d.ts +1 -2
- package/lib/index.js +38 -18
- package/lib/ini.js +36 -5
- package/lib/inventory.d.ts +32 -23
- package/lib/inventory.js +37 -4
- package/lib/java/java-project.js +26 -4
- package/lib/java/junit.js +2 -4
- package/lib/java/maven-compile.js +2 -4
- package/lib/java/maven-packaging.js +6 -4
- package/lib/java/maven-sample.js +2 -4
- package/lib/java/pom.js +45 -12
- package/lib/java/projenrc.js +10 -4
- package/lib/javascript/biome/biome.js +48 -6
- package/lib/javascript/bundler.d.ts +0 -8
- package/lib/javascript/bundler.js +48 -11
- package/lib/javascript/eslint.d.ts +0 -13
- package/lib/javascript/eslint.js +38 -37
- package/lib/javascript/index.js +24 -2
- package/lib/javascript/jest.d.ts +0 -20
- package/lib/javascript/jest.js +71 -15
- package/lib/javascript/license-checker.js +3 -4
- package/lib/javascript/node-package.d.ts +0 -28
- package/lib/javascript/node-package.js +136 -38
- package/lib/javascript/node-project.d.ts +5 -76
- package/lib/javascript/node-project.js +88 -81
- package/lib/javascript/npm-config.js +7 -9
- package/lib/javascript/prettier.js +16 -4
- package/lib/javascript/projenrc.js +3 -4
- package/lib/javascript/render-options.d.ts +2 -2
- package/lib/javascript/render-options.js +36 -5
- package/lib/javascript/typescript-config.js +45 -8
- package/lib/javascript/upgrade-dependencies.js +56 -36
- package/lib/javascript/util.js +35 -2
- package/lib/javascript/yarnrc.d.ts +1 -28
- package/lib/javascript/yarnrc.js +3 -45
- package/lib/json-patch.js +3 -4
- package/lib/json.js +4 -5
- package/lib/license.js +37 -5
- package/lib/logger.js +14 -11
- package/lib/logging.js +10 -7
- package/lib/makefile.js +7 -4
- package/lib/object-file.js +19 -4
- package/lib/project-build.js +26 -4
- package/lib/project-tree.js +3 -4
- package/lib/project.d.ts +0 -35
- package/lib/project.js +105 -58
- package/lib/projects.js +37 -6
- package/lib/projenrc-json.d.ts +0 -10
- package/lib/projenrc-json.js +4 -13
- package/lib/projenrc.js +2 -4
- package/lib/python/index.js +24 -2
- package/lib/python/pip.js +5 -4
- package/lib/python/poetry.js +63 -7
- package/lib/python/projenrc.js +10 -4
- package/lib/python/pyproject-toml-file.js +2 -4
- package/lib/python/pytest-sample.js +2 -4
- package/lib/python/pytest.d.ts +0 -12
- package/lib/python/pytest.js +3 -5
- package/lib/python/python-project.js +33 -10
- package/lib/python/python-sample.js +2 -4
- package/lib/python/requirements-file.js +4 -5
- package/lib/python/setuppy.d.ts +0 -8
- package/lib/python/setuppy.js +3 -4
- package/lib/python/setuptools.js +8 -4
- package/lib/python/uv.js +11 -4
- package/lib/python/venv.js +45 -6
- package/lib/readme.js +2 -4
- package/lib/release/bump-version.js +36 -3
- package/lib/release/bump-version.task.js +35 -2
- package/lib/release/commit-tag-version.js +39 -3
- package/lib/release/publisher.d.ts +0 -49
- package/lib/release/publisher.js +24 -22
- package/lib/release/release-trigger.js +33 -4
- package/lib/release/release.d.ts +0 -24
- package/lib/release/release.js +66 -31
- package/lib/release/tag-version.js +35 -2
- package/lib/release/update-changelog.js +36 -3
- package/lib/renovatebot.js +14 -4
- package/lib/run-projenrc-json.task.js +35 -2
- package/lib/run-task.cjs +12567 -271
- package/lib/sample-file.js +43 -9
- package/lib/smithy/smithy-build.js +46 -1
- package/lib/source-code.js +6 -5
- package/lib/task-runner.d.ts +25 -0
- package/lib/task-runner.js +92 -0
- package/lib/task.d.ts +0 -7
- package/lib/task.js +13 -13
- package/lib/tasks.d.ts +5 -9
- package/lib/tasks.js +64 -23
- package/lib/testing.js +2 -4
- package/lib/textfile.js +3 -4
- package/lib/toml.js +36 -5
- package/lib/typescript/projenrc-ts.js +8 -4
- package/lib/typescript/projenrc.js +6 -4
- package/lib/typescript/typescript-typedoc.js +2 -4
- package/lib/typescript/typescript.d.ts +0 -10
- package/lib/typescript/typescript.js +75 -29
- package/lib/util/synth.js +39 -6
- package/lib/util.js +38 -5
- package/lib/version.d.ts +0 -4
- package/lib/version.js +24 -10
- package/lib/vscode/devcontainer.js +11 -4
- package/lib/vscode/extensions.js +17 -18
- package/lib/vscode/launch-config.js +5 -6
- package/lib/vscode/settings.js +4 -4
- package/lib/vscode/vscode.js +5 -4
- package/lib/web/next.js +38 -8
- package/lib/web/postcss.js +5 -4
- package/lib/web/react.d.ts +0 -14
- package/lib/web/react.js +51 -25
- package/lib/web/tailwind.js +4 -4
- package/lib/xmlfile.js +2 -4
- package/lib/yaml.js +40 -5
- package/package.json +8 -9
- package/lib/cli/synth.js +0 -105
- package/lib/cli/tasks.js +0 -71
- package/lib/semver.d.ts +0 -34
- package/lib/semver.js +0 -56
- package/lib/task-runtime.js +0 -317
- /package/lib/cli/{tasks.d.ts → cmds/run-task.d.ts} +0 -0
|
@@ -0,0 +1,411 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.TaskRuntime = void 0;
|
|
37
|
+
const child_process_1 = require("child_process");
|
|
38
|
+
const fs_1 = require("fs");
|
|
39
|
+
const path_1 = require("path");
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const util_1 = require("util");
|
|
42
|
+
const chalk_1 = require("chalk");
|
|
43
|
+
const dax_1 = require("dax");
|
|
44
|
+
const common_1 = require("../common");
|
|
45
|
+
const logging = __importStar(require("../logging"));
|
|
46
|
+
// avoids a (false positive) esbuild warning about incorrect imports.
|
|
47
|
+
// `?.default ?? module` keeps this working both as a plain CommonJS require and
|
|
48
|
+
// when the dependency is interop-wrapped inside the bundled run-task.cjs (where
|
|
49
|
+
// `require(...)` may yield `{ default: fn }` instead of the function). See
|
|
50
|
+
// projen#4407 ("parseConflictJSON is not a function" after eject).
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
52
|
+
const parseConflictJSONModule = require("parse-conflict-json");
|
|
53
|
+
const parseConflictJSON = parseConflictJSONModule?.default ?? parseConflictJSONModule;
|
|
54
|
+
const ENV_TRIM_LEN = 20;
|
|
55
|
+
const ARGS_MARKER = "$@";
|
|
56
|
+
const QUOTED_ARGS_MARKER = `"${ARGS_MARKER}"`;
|
|
57
|
+
/**
|
|
58
|
+
* The runtime component of the tasks engine.
|
|
59
|
+
*/
|
|
60
|
+
class TaskRuntime {
|
|
61
|
+
/**
|
|
62
|
+
* The project-relative path of the tasks manifest file.
|
|
63
|
+
*/
|
|
64
|
+
static MANIFEST_FILE = path.posix.join(common_1.PROJEN_DIR, "tasks.json");
|
|
65
|
+
/**
|
|
66
|
+
* One-shot entrypoint for the standalone task runner.
|
|
67
|
+
*
|
|
68
|
+
* Creates a runtime rooted at the current working directory, runs the named
|
|
69
|
+
* task, and converts any failure into a non-zero process exit code. This is
|
|
70
|
+
* the single line invoked by the bundled `scripts/run-task.cjs` that
|
|
71
|
+
* "projen eject" emits, which keeps the generated bundle footer trivial.
|
|
72
|
+
*
|
|
73
|
+
* @param name The name of the task to run. Defaults to `process.argv[2]`.
|
|
74
|
+
*/
|
|
75
|
+
static async main(name = process.argv[2]) {
|
|
76
|
+
try {
|
|
77
|
+
await new TaskRuntime(".").runTask(name);
|
|
78
|
+
}
|
|
79
|
+
catch (e) {
|
|
80
|
+
console.error(e?.stack ?? String(e));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* The contents of tasks.json
|
|
86
|
+
*/
|
|
87
|
+
manifest;
|
|
88
|
+
/**
|
|
89
|
+
* The root directory of the project and the cwd for executing tasks.
|
|
90
|
+
*/
|
|
91
|
+
workdir;
|
|
92
|
+
constructor(workdir) {
|
|
93
|
+
this.workdir = (0, path_1.resolve)(workdir);
|
|
94
|
+
const manifestPath = (0, path_1.join)(this.workdir, TaskRuntime.MANIFEST_FILE);
|
|
95
|
+
this.manifest = (0, fs_1.existsSync)(manifestPath)
|
|
96
|
+
? parseConflictJSON((0, fs_1.readFileSync)(manifestPath, "utf-8"), undefined, "theirs")
|
|
97
|
+
: { tasks: {} };
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* The tasks in this project.
|
|
101
|
+
*/
|
|
102
|
+
get tasks() {
|
|
103
|
+
return Object.values(this.manifest.tasks ?? {});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Find a task by name, or `undefined` if not found.
|
|
107
|
+
*/
|
|
108
|
+
tryFindTask(name) {
|
|
109
|
+
if (!this.manifest.tasks) {
|
|
110
|
+
return undefined;
|
|
111
|
+
}
|
|
112
|
+
return this.manifest.tasks[name];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Runs the task.
|
|
116
|
+
* @param name The task name.
|
|
117
|
+
*/
|
|
118
|
+
async runTask(name, parents = [], args = [], env = {}) {
|
|
119
|
+
const task = this.tryFindTask(name);
|
|
120
|
+
if (!task) {
|
|
121
|
+
throw new Error(`cannot find command ${name}`);
|
|
122
|
+
}
|
|
123
|
+
await new RunTask(this, task, parents, args, env).run();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
exports.TaskRuntime = TaskRuntime;
|
|
127
|
+
class RunTask {
|
|
128
|
+
runtime;
|
|
129
|
+
task;
|
|
130
|
+
args;
|
|
131
|
+
envParam;
|
|
132
|
+
env = {};
|
|
133
|
+
parents;
|
|
134
|
+
workdir;
|
|
135
|
+
constructor(runtime, task, parents = [], args = [], envParam = {}) {
|
|
136
|
+
this.runtime = runtime;
|
|
137
|
+
this.task = task;
|
|
138
|
+
this.args = args;
|
|
139
|
+
this.envParam = envParam;
|
|
140
|
+
this.workdir = task.cwd ?? this.runtime.workdir;
|
|
141
|
+
this.parents = parents;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Executes the task. This was previously done in the constructor, but is now
|
|
145
|
+
* an async method since shell execution is asynchronous (e.g. dax on
|
|
146
|
+
* Windows).
|
|
147
|
+
*/
|
|
148
|
+
async run() {
|
|
149
|
+
const { task, args, parents } = this;
|
|
150
|
+
if (!task.steps || task.steps.length === 0) {
|
|
151
|
+
this.logDebug((0, chalk_1.gray)("No actions have been specified for this task."));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
this.env = await this.resolveEnvironment(this.envParam, parents);
|
|
155
|
+
const envlogs = [];
|
|
156
|
+
for (const [k, v] of Object.entries(this.env)) {
|
|
157
|
+
const vv = v ?? "";
|
|
158
|
+
const trimmed = vv.length > ENV_TRIM_LEN ? vv.substring(0, ENV_TRIM_LEN) + "..." : vv;
|
|
159
|
+
envlogs.push(`${k}=${trimmed}`);
|
|
160
|
+
}
|
|
161
|
+
if (envlogs.length) {
|
|
162
|
+
this.logDebug((0, chalk_1.gray)(`${(0, chalk_1.underline)("env")}: ${envlogs.join(" ")}`));
|
|
163
|
+
}
|
|
164
|
+
// evaluate condition
|
|
165
|
+
if (!(await this.evalCondition(task))) {
|
|
166
|
+
this.log("condition exited with non-zero - skipping");
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// verify we required environment variables are defined
|
|
170
|
+
const merged = { ...process.env, ...this.env };
|
|
171
|
+
const missing = new Array();
|
|
172
|
+
for (const name of task.requiredEnv ?? []) {
|
|
173
|
+
if (!(name in merged)) {
|
|
174
|
+
missing.push(name);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (missing.length > 0) {
|
|
178
|
+
throw new Error(`missing required environment variables: ${missing.join(",")}`);
|
|
179
|
+
}
|
|
180
|
+
for (const step of task.steps) {
|
|
181
|
+
// evaluate step condition
|
|
182
|
+
if (!(await this.evalCondition(step))) {
|
|
183
|
+
this.log("condition exited with non-zero - skipping");
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const argsList = [
|
|
187
|
+
...(step.args || []),
|
|
188
|
+
...(step.receiveArgs ? args : []),
|
|
189
|
+
].map((a) => a.toString());
|
|
190
|
+
if (step.say) {
|
|
191
|
+
logging.info(this.fmtLog(step.say));
|
|
192
|
+
}
|
|
193
|
+
if (step.spawn) {
|
|
194
|
+
await this.runtime.runTask(step.spawn, [...this.parents, this.task.name], argsList, step.env);
|
|
195
|
+
}
|
|
196
|
+
const execs = step.exec ? [step.exec] : [];
|
|
197
|
+
// Parse step-specific environment variables
|
|
198
|
+
const env = await this.evalEnvironment(step.env ?? {});
|
|
199
|
+
if (step.builtin) {
|
|
200
|
+
execs.push(this.renderBuiltin(step.builtin));
|
|
201
|
+
}
|
|
202
|
+
for (const exec of execs) {
|
|
203
|
+
let hasError = false;
|
|
204
|
+
let command = exec;
|
|
205
|
+
if (command.includes(QUOTED_ARGS_MARKER)) {
|
|
206
|
+
// Poorly imitate bash quoted variable expansion. If "$@" is encountered in bash, elements of the arg array
|
|
207
|
+
// that contain whitespace will be single quoted ('arg'). This preserves whitespace in things like filenames.
|
|
208
|
+
// Imitate that behavior here by single quoting every element of the arg array when a quoted arg marker ("$@")
|
|
209
|
+
// is encountered.
|
|
210
|
+
command = command.replace(QUOTED_ARGS_MARKER, argsList.map((arg) => `'${arg}'`).join(" "));
|
|
211
|
+
}
|
|
212
|
+
else if (command.includes(ARGS_MARKER)) {
|
|
213
|
+
command = command.replace(ARGS_MARKER, argsList.join(" "));
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
command = [command, ...argsList].join(" ");
|
|
217
|
+
}
|
|
218
|
+
const cwd = step.cwd;
|
|
219
|
+
try {
|
|
220
|
+
const result = await this.shell({
|
|
221
|
+
command,
|
|
222
|
+
cwd,
|
|
223
|
+
extraEnv: env,
|
|
224
|
+
});
|
|
225
|
+
hasError = result.status !== 0;
|
|
226
|
+
}
|
|
227
|
+
catch (e) {
|
|
228
|
+
// a non-zero exit code is reported via `result.status` above; this
|
|
229
|
+
// catch handles errors thrown while attempting to spawn the command.
|
|
230
|
+
if (e?.message?.startsWith("non-zero exit code:")) {
|
|
231
|
+
hasError = true;
|
|
232
|
+
}
|
|
233
|
+
throw e;
|
|
234
|
+
}
|
|
235
|
+
if (hasError) {
|
|
236
|
+
throw new Error(`Task "${this.fullname}" failed when executing "${command}" (cwd: ${(0, path_1.resolve)(cwd ?? this.workdir)})`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Determines if a task should be executed based on "condition".
|
|
243
|
+
*
|
|
244
|
+
* @returns true if the task should be executed or false if the condition
|
|
245
|
+
* evaluates to false (exits with non-zero), indicating that the task should
|
|
246
|
+
* be skipped.
|
|
247
|
+
*/
|
|
248
|
+
async evalCondition(taskOrStep) {
|
|
249
|
+
// no condition, carry on
|
|
250
|
+
if (!taskOrStep.condition) {
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
this.log((0, chalk_1.gray)(`${(0, chalk_1.underline)("condition")}: ${taskOrStep.condition}`));
|
|
254
|
+
const result = await this.shell({
|
|
255
|
+
command: taskOrStep.condition,
|
|
256
|
+
logprefix: "condition: ",
|
|
257
|
+
quiet: true,
|
|
258
|
+
});
|
|
259
|
+
if (result.status === 0) {
|
|
260
|
+
return true;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Evaluates environment variables from shell commands (e.g. `$(xx)`)
|
|
268
|
+
*/
|
|
269
|
+
async evalEnvironment(env) {
|
|
270
|
+
const output = {};
|
|
271
|
+
for (const [key, value] of Object.entries(env ?? {})) {
|
|
272
|
+
if (String(value).startsWith("$(") && String(value).endsWith(")")) {
|
|
273
|
+
const query = value.substring(2, value.length - 1);
|
|
274
|
+
const result = await this.shellEval({ command: query });
|
|
275
|
+
if (result.status !== 0) {
|
|
276
|
+
const error = result.error
|
|
277
|
+
? result.error.stack
|
|
278
|
+
: result.stderr?.toString().trim() ||
|
|
279
|
+
result.stdout?.toString().trim() ||
|
|
280
|
+
`command exited with code ${result.status}`;
|
|
281
|
+
logging.warn(this.fmtLog(`${(0, chalk_1.underline)(key)}: unable to evaluate "${query}". Environment variable will be skipped. Check that the command exists and runs successfully.`));
|
|
282
|
+
logging.warn(this.fmtLog(`${(0, chalk_1.underline)(key)}: ${error}`));
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
output[key] = result.stdout?.toString("utf-8").trim() ?? "";
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
output[key] = value;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return output;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Renders the runtime environment for a task. Namely, it supports this syntax
|
|
296
|
+
* `$(xx)` for allowing environment to be evaluated by executing a shell
|
|
297
|
+
* command and obtaining its result.
|
|
298
|
+
*/
|
|
299
|
+
async resolveEnvironment(envParam, parents) {
|
|
300
|
+
let env = this.runtime.manifest.env ?? {};
|
|
301
|
+
// add env from all parent tasks one by one
|
|
302
|
+
for (const parent of parents) {
|
|
303
|
+
env = {
|
|
304
|
+
...env,
|
|
305
|
+
...(this.runtime.tryFindTask(parent)?.env ?? {}),
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
// apply task environment, then the specific env last
|
|
309
|
+
env = {
|
|
310
|
+
...env,
|
|
311
|
+
...(this.task.env ?? {}),
|
|
312
|
+
...envParam,
|
|
313
|
+
};
|
|
314
|
+
return this.evalEnvironment(env ?? {});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Returns the "full name" of the task which includes all it's parent task names concatenated by chevrons.
|
|
318
|
+
*/
|
|
319
|
+
get fullname() {
|
|
320
|
+
return [...this.parents, this.task.name].join(" » ");
|
|
321
|
+
}
|
|
322
|
+
log(...args) {
|
|
323
|
+
logging.verbose(this.fmtLog(...args));
|
|
324
|
+
}
|
|
325
|
+
logDebug(...args) {
|
|
326
|
+
logging.debug(this.fmtLog(...args));
|
|
327
|
+
}
|
|
328
|
+
fmtLog(...args) {
|
|
329
|
+
return (0, util_1.format)(`${(0, chalk_1.underline)(this.fullname)} |`, ...args);
|
|
330
|
+
}
|
|
331
|
+
async shell(options) {
|
|
332
|
+
const quiet = options.quiet ?? false;
|
|
333
|
+
if (!quiet) {
|
|
334
|
+
const log = new Array();
|
|
335
|
+
if (options.logprefix) {
|
|
336
|
+
log.push(options.logprefix);
|
|
337
|
+
}
|
|
338
|
+
log.push(options.command);
|
|
339
|
+
if (options.cwd) {
|
|
340
|
+
log.push(`(cwd: ${options.cwd})`);
|
|
341
|
+
}
|
|
342
|
+
this.log(log.join(" "));
|
|
343
|
+
}
|
|
344
|
+
const cwd = options.cwd ?? this.workdir;
|
|
345
|
+
if (!(0, fs_1.existsSync)(cwd) || !(0, fs_1.statSync)(cwd).isDirectory()) {
|
|
346
|
+
throw new Error(`invalid workdir (cwd): ${cwd} must be an existing directory`);
|
|
347
|
+
}
|
|
348
|
+
const env = {
|
|
349
|
+
...process.env,
|
|
350
|
+
...this.env,
|
|
351
|
+
...options.extraEnv,
|
|
352
|
+
};
|
|
353
|
+
// On Windows the default shell (cmd.exe) does not understand the POSIX-style
|
|
354
|
+
// commands projen tasks are written in (`cat`, `cp`, `mkdir -p`, `rm -rf`,
|
|
355
|
+
// `&&` chains, `$VAR`, ...). Run the command through dax's cross-platform
|
|
356
|
+
// shell instead, which ships built-in implementations of the common
|
|
357
|
+
// commands. Now that the task runtime is asynchronous we can drive dax's
|
|
358
|
+
// `$` API directly instead of spawning a synchronous child node process.
|
|
359
|
+
if (process.platform === "win32") {
|
|
360
|
+
// stdout/stderr are only captured when a caller pipes them (e.g.
|
|
361
|
+
// `shellEval`); otherwise inherit so output is streamed to the terminal.
|
|
362
|
+
const capture = Array.isArray(options.spawnOptions?.stdio);
|
|
363
|
+
const result = await dax_1.$.raw `${options.command}`
|
|
364
|
+
.cwd(cwd)
|
|
365
|
+
.env(env)
|
|
366
|
+
.stdout(capture ? "piped" : "inherit")
|
|
367
|
+
.stderr(capture ? "piped" : "inherit")
|
|
368
|
+
.noThrow();
|
|
369
|
+
return {
|
|
370
|
+
status: result.code,
|
|
371
|
+
stdout: capture ? Buffer.from(result.stdoutBytes) : null,
|
|
372
|
+
stderr: capture ? Buffer.from(result.stderrBytes) : null,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
return (0, child_process_1.spawnSync)(options.command, {
|
|
376
|
+
...options,
|
|
377
|
+
cwd,
|
|
378
|
+
shell: true,
|
|
379
|
+
stdio: "inherit",
|
|
380
|
+
env,
|
|
381
|
+
...options.spawnOptions,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
async shellEval(options) {
|
|
385
|
+
return this.shell({
|
|
386
|
+
quiet: true,
|
|
387
|
+
...options,
|
|
388
|
+
spawnOptions: {
|
|
389
|
+
stdio: ["inherit", "pipe", "pipe"],
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
renderBuiltin(builtin) {
|
|
394
|
+
// Locate projen's package root by walking up from this module's directory
|
|
395
|
+
// until we find a package.json. This works whether the code runs from the
|
|
396
|
+
// compiled file (lib/cli/task-runtime.js) or from the bundled run-task.cjs
|
|
397
|
+
// (lib/run-task.cjs), which live at different depths - so a hard-coded
|
|
398
|
+
// relative path to package.json would be wrong in one of the two cases.
|
|
399
|
+
let moduleRoot = __dirname;
|
|
400
|
+
while (!(0, fs_1.existsSync)((0, path_1.join)(moduleRoot, "package.json"))) {
|
|
401
|
+
const parent = (0, path_1.dirname)(moduleRoot);
|
|
402
|
+
if (parent === moduleRoot) {
|
|
403
|
+
throw new Error("unable to locate the projen package root");
|
|
404
|
+
}
|
|
405
|
+
moduleRoot = parent;
|
|
406
|
+
}
|
|
407
|
+
const program = require.resolve((0, path_1.join)(moduleRoot, "lib", `${builtin}.task.js`));
|
|
408
|
+
return `"${process.execPath}" "${program}"`;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsaURBQTBDO0FBQzFDLDJCQUF3RDtBQUN4RCwrQkFBOEM7QUFDOUMsMkNBQTZCO0FBQzdCLCtCQUE4QjtBQUM5QixpQ0FBd0M7QUFDeEMsNkJBQXdCO0FBQ3hCLHNDQUF1QztBQUN2QyxvREFBc0M7QUFHdEMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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SUFBSTtZQUNYLEdBQUcsT0FBTztZQUNWLFlBQVksRUFBRTtnQkFDWixLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzthQUNuQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZTtRQUNuQywwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUMzQixPQUFPLENBQUMsSUFBQSxlQUFVLEVBQUMsSUFBQSxXQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUM3QixJQUFBLFdBQUksRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgeyBncmF5LCB1bmRlcmxpbmUgfSBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7ICQgfSBmcm9tIFwiZGF4XCI7XG5pbXBvcnQgeyBQUk9KRU5fRElSIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrc01hbmlmZXN0LCBUYXNrU3BlYywgVGFza1N0ZXAgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuXG4vLyBhdm9pZHMgYSAoZmFsc2UgcG9zaXRpdmUpIGVzYnVpbGQgd2FybmluZyBhYm91dCBpbmNvcnJlY3QgaW1wb3J0cy5cbi8vIGA/LmRlZmF1bHQgPz8gbW9kdWxlYCBrZWVwcyB0aGlzIHdvcmtpbmcgYm90aCBhcyBhIHBsYWluIENvbW1vbkpTIHJlcXVpcmUgYW5kXG4vLyB3aGVuIHRoZSBkZXBlbmRlbmN5IGlzIGludGVyb3Atd3JhcHBlZCBpbnNpZGUgdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzICh3aGVyZVxuLy8gYHJlcXVpcmUoLi4uKWAgbWF5IHlpZWxkIGB7IGRlZmF1bHQ6IGZuIH1gIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uKS4gU2VlXG4vLyBwcm9qZW4jNDQwNyAoXCJwYXJzZUNvbmZsaWN0SlNPTiBpcyBub3QgYSBmdW5jdGlvblwiIGFmdGVyIGVqZWN0KS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZSA9IHJlcXVpcmUoXCJwYXJzZS1jb25mbGljdC1qc29uXCIpO1xuY29uc3QgcGFyc2VDb25mbGljdEpTT04gPVxuICBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZT8uZGVmYXVsdCA/PyBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZTtcblxuY29uc3QgRU5WX1RSSU1fTEVOID0gMjA7XG5jb25zdCBBUkdTX01BUktFUiA9IFwiJEBcIjtcbmNvbnN0IFFVT1RFRF9BUkdTX01BUktFUiA9IGBcIiR7QVJHU19NQVJLRVJ9XCJgO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZC5cbiAqXG4gKiBUaGlzIGlzIGEgbm9ybWFsaXplZCBzdWJzZXQgb2Ygbm9kZSdzIGBTcGF3blN5bmNSZXR1cm5zYCBzbyB0aGF0IHRoZVxuICogc3luY2hyb25vdXMgKGBzcGF3blN5bmNgKSBhbmQgYXN5bmNocm9ub3VzIChgZGF4YCkgZXhlY3V0aW9uIHBhdGhzIGNhbiByZXR1cm5cbiAqIGEgY29tcGF0aWJsZSBzaGFwZS5cbiAqL1xuaW50ZXJmYWNlIFNoZWxsUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQsIG9yIGBudWxsYCBpZiB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBieSBhXG4gICAqIHNpZ25hbCBvciBuZXZlciBzcGF3bmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRvdXQuIE9ubHkgcG9wdWxhdGVkIHdoZW4gc3Rkb3V0IGlzIHBpcGVkIChlLmcuIHdoZW4gZXZhbHVhdGluZ1xuICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMpOyBgbnVsbGAvYHVuZGVmaW5lZGAgd2hlbiBzdGRpbyBpcyBpbmhlcml0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRlcnIuIFNlZSBgc3Rkb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycj86IEJ1ZmZlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGVycm9yIHJhaXNlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHNwYXduIHRoZSBjb21tYW5kIChub3QgYSBub24temVybyBleGl0XG4gICAqIGNvZGUsIHdoaWNoIGlzIHJlcG9ydGVkIHZpYSBgc3RhdHVzYCkuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIFRoZSBydW50aW1lIGNvbXBvbmVudCBvZiB0aGUgdGFza3MgZW5naW5lLlxuICovXG5leHBvcnQgY2xhc3MgVGFza1J1bnRpbWUge1xuICAvKipcbiAgICogVGhlIHByb2plY3QtcmVsYXRpdmUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOSUZFU1RfRklMRSA9IHBhdGgucG9zaXguam9pbihcbiAgICBQUk9KRU5fRElSLFxuICAgIFwidGFza3MuanNvblwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBPbmUtc2hvdCBlbnRyeXBvaW50IGZvciB0aGUgc3RhbmRhbG9uZSB0YXNrIHJ1bm5lci5cbiAgICpcbiAgICogQ3JlYXRlcyBhIHJ1bnRpbWUgcm9vdGVkIGF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBydW5zIHRoZSBuYW1lZFxuICAgKiB0YXNrLCBhbmQgY29udmVydHMgYW55IGZhaWx1cmUgaW50byBhIG5vbi16ZXJvIHByb2Nlc3MgZXhpdCBjb2RlLiBUaGlzIGlzXG4gICAqIHRoZSBzaW5nbGUgbGluZSBpbnZva2VkIGJ5IHRoZSBidW5kbGVkIGBzY3JpcHRzL3J1bi10YXNrLmNqc2AgdGhhdFxuICAgKiBcInByb2plbiBlamVjdFwiIGVtaXRzLCB3aGljaCBrZWVwcyB0aGUgZ2VuZXJhdGVkIGJ1bmRsZSBmb290ZXIgdHJpdmlhbC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuLiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5hcmd2WzJdYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbWFpbihuYW1lOiBzdHJpbmcgPSBwcm9jZXNzLmFyZ3ZbMl0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFRhc2tSdW50aW1lKFwiLlwiKS5ydW5UYXNrKG5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlPy5zdGFjayA/PyBTdHJpbmcoZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGFza3MuanNvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hbmlmZXN0OiBUYXNrc01hbmlmZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgYW5kIHRoZSBjd2QgZm9yIGV4ZWN1dGluZyB0YXNrcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iod29ya2Rpcjogc3RyaW5nKSB7XG4gICAgdGhpcy53b3JrZGlyID0gcmVzb2x2ZSh3b3JrZGlyKTtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKHRoaXMud29ya2RpciwgVGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRSk7XG4gICAgdGhpcy5tYW5pZmVzdCA9IGV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKVxuICAgICAgPyBwYXJzZUNvbmZsaWN0SlNPTihcbiAgICAgICAgICByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBcInRoZWlyc1wiLFxuICAgICAgICApXG4gICAgICA6IHsgdGFza3M6IHt9IH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhc2tzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFza3MoKTogVGFza1NwZWNbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tYW5pZmVzdC50YXNrcyA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHRhc2sgYnkgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeUZpbmRUYXNrKG5hbWU6IHN0cmluZyk6IFRhc2tTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWFuaWZlc3QudGFza3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRhc2tzW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHRhc2suXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuVGFzayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy50cnlGaW5kVGFzayhuYW1lKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgY29tbWFuZCAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFJ1blRhc2sodGhpcywgdGFzaywgcGFyZW50cywgYXJncywgZW52KS5ydW4oKTtcbiAgfVxufVxuXG5jbGFzcyBSdW5UYXNrIHtcbiAgcHJpdmF0ZSBlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50czogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lOiBUYXNrUnVudGltZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2s6IFRhc2tTcGVjLFxuICAgIHBhcmVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnZQYXJhbTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy53b3JrZGlyID0gdGFzay5jd2QgPz8gdGhpcy5ydW50aW1lLndvcmtkaXI7XG4gICAgdGhpcy5wYXJlbnRzID0gcGFyZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgdGFzay4gVGhpcyB3YXMgcHJldmlvdXNseSBkb25lIGluIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGlzIG5vd1xuICAgKiBhbiBhc3luYyBtZXRob2Qgc2luY2Ugc2hlbGwgZXhlY3V0aW9uIGlzIGFzeW5jaHJvbm91cyAoZS5nLiBkYXggb25cbiAgICogV2luZG93cykuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdGFzaywgYXJncywgcGFyZW50cyB9ID0gdGhpcztcblxuICAgIGlmICghdGFzay5zdGVwcyB8fCB0YXNrLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5sb2dEZWJ1ZyhncmF5KFwiTm8gYWN0aW9ucyBoYXZlIGJlZW4gc3BlY2lmaWVkIGZvciB0aGlzIHRhc2suXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVudiA9IGF3YWl0IHRoaXMucmVzb2x2ZUVudmlyb25tZW50KHRoaXMuZW52UGFyYW0sIHBhcmVudHMpO1xuXG4gICAgY29uc3QgZW52bG9ncyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZW52KSkge1xuICAgICAgY29uc3QgdnYgPSB2ID8/IFwiXCI7XG4gICAgICBjb25zdCB0cmltbWVkID1cbiAgICAgICAgdnYubGVuZ3RoID4gRU5WX1RSSU1fTEVOID8gdnYuc3Vic3RyaW5nKDAsIEVOVl9UUklNX0xFTikgKyBcIi4uLlwiIDogdnY7XG4gICAgICBlbnZsb2dzLnB1c2goYCR7a309JHt0cmltbWVkfWApO1xuICAgIH1cblxuICAgIGlmIChlbnZsb2dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5sb2dEZWJ1ZyhncmF5KGAke3VuZGVybGluZShcImVudlwiKX06ICR7ZW52bG9ncy5qb2luKFwiIFwiKX1gKSk7XG4gICAgfVxuXG4gICAgLy8gZXZhbHVhdGUgY29uZGl0aW9uXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5ldmFsQ29uZGl0aW9uKHRhc2spKSkge1xuICAgICAgdGhpcy5sb2coXCJjb25kaXRpb24gZXhpdGVkIHdpdGggbm9uLXplcm8gLSBza2lwcGluZ1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZnkgd2UgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBkZWZpbmVkXG4gICAgY29uc3QgbWVyZ2VkID0geyAuLi5wcm9jZXNzLmVudiwgLi4udGhpcy5lbnYgfTtcbiAgICBjb25zdCBtaXNzaW5nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGFzay5yZXF1aXJlZEVudiA/PyBbXSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBtZXJnZWQpKSB7XG4gICAgICAgIG1pc3NpbmcucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtaXNzaW5nIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlczogJHttaXNzaW5nLmpvaW4oXCIsXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0YXNrLnN0ZXBzKSB7XG4gICAgICAvLyBldmFsdWF0ZSBzdGVwIGNvbmRpdGlvblxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5ldmFsQ29uZGl0aW9uKHN0ZXApKSkge1xuICAgICAgICB0aGlzLmxvZyhcImNvbmRpdGlvbiBleGl0ZWQgd2l0aCBub24temVybyAtIHNraXBwaW5nXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJnc0xpc3Q6IHN0cmluZ1tdID0gW1xuICAgICAgICAuLi4oc3RlcC5hcmdzIHx8IFtdKSxcbiAgICAgICAgLi4uKHN0ZXAucmVjZWl2ZUFyZ3MgPyBhcmdzIDogW10pLFxuICAgICAgXS5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSk7XG5cbiAgICAgIGlmIChzdGVwLnNheSkge1xuICAgICAgICBsb2dnaW5nLmluZm8odGhpcy5mbXRMb2coc3RlcC5zYXkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZXAuc3Bhd24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW50aW1lLnJ1blRhc2soXG4gICAgICAgICAgc3RlcC5zcGF3bixcbiAgICAgICAgICBbLi4udGhpcy5wYXJlbnRzLCB0aGlzLnRhc2submFtZV0sXG4gICAgICAgICAgYXJnc0xpc3QsXG4gICAgICAgICAgc3RlcC5lbnYsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4ZWNzID0gc3RlcC5leGVjID8gW3N0ZXAuZXhlY10gOiBbXTtcblxuICAgICAgLy8gUGFyc2Ugc3RlcC1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZXZhbEVudmlyb25tZW50KHN0ZXAuZW52ID8/IHt9KTtcblxuICAgICAgaWYgKHN0ZXAuYnVpbHRpbikge1xuICAgICAgICBleGVjcy5wdXNoKHRoaXMucmVuZGVyQnVpbHRpbihzdGVwLmJ1aWx0aW4pKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBleGVjIG9mIGV4ZWNzKSB7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBjb21tYW5kID0gZXhlYztcblxuICAgICAgICBpZiAoY29tbWFuZC5pbmNsdWRlcyhRVU9URURfQVJHU19NQVJLRVIpKSB7XG4gICAgICAgICAgLy8gUG9vcmx5IGltaXRhdGUgYmFzaCBxdW90ZWQgdmFyaWFibGUgZXhwYW5zaW9uLiBJZiBcIiRAXCIgaXMgZW5jb3VudGVyZWQgaW4gYmFzaCwgZWxlbWVudHMgb2YgdGhlIGFyZyBhcnJheVxuICAgICAgICAgIC8vIHRoYXQgY29udGFpbiB3aGl0ZXNwYWNlIHdpbGwgYmUgc2luZ2xlIHF1b3RlZCAoJ2FyZycpLiBUaGlzIHByZXNlcnZlcyB3aGl0ZXNwYWNlIGluIHRoaW5ncyBsaWtlIGZpbGVuYW1lcy5cbiAgICAgICAgICAvLyBJbWl0YXRlIHRoYXQgYmVoYXZpb3IgaGVyZSBieSBzaW5nbGUgcXVvdGluZyBldmVyeSBlbGVtZW50IG9mIHRoZSBhcmcgYXJyYXkgd2hlbiBhIHF1b3RlZCBhcmcgbWFya2VyIChcIiRAXCIpXG4gICAgICAgICAgLy8gaXMgZW5jb3VudGVyZWQuXG4gICAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShcbiAgICAgICAgICAgIFFVT1RFRF9BUkdTX01BUktFUixcbiAgICAgICAgICAgIGFyZ3NMaXN0Lm1hcCgoYXJnKSA9PiBgJyR7YXJnfSdgKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQuaW5jbHVkZXMoQVJHU19NQVJLRVIpKSB7XG4gICAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShBUkdTX01BUktFUiwgYXJnc0xpc3Quam9pbihcIiBcIikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmQgPSBbY29tbWFuZCwgLi4uYXJnc0xpc3RdLmpvaW4oXCIgXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3dkID0gc3RlcC5jd2Q7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaGVsbCh7XG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgZXh0cmFFbnY6IGVudixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBoYXNFcnJvciA9IHJlc3VsdC5zdGF0dXMgIT09IDA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBhIG5vbi16ZXJvIGV4aXQgY29kZSBpcyByZXBvcnRlZCB2aWEgYHJlc3VsdC5zdGF0dXNgIGFib3ZlOyB0aGlzXG4gICAgICAgICAgLy8gY2F0Y2ggaGFuZGxlcyBlcnJvcnMgdGhyb3duIHdoaWxlIGF0dGVtcHRpbmcgdG8gc3Bhd24gdGhlIGNvbW1hbmQuXG4gICAgICAgICAgaWYgKChlIGFzIGFueSk/Lm1lc3NhZ2U/LnN0YXJ0c1dpdGgoXCJub24temVybyBleGl0IGNvZGU6XCIpKSB7XG4gICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRhc2sgXCIke1xuICAgICAgICAgICAgICB0aGlzLmZ1bGxuYW1lXG4gICAgICAgICAgICB9XCIgZmFpbGVkIHdoZW4gZXhlY3V0aW5nIFwiJHtjb21tYW5kfVwiIChjd2Q6ICR7cmVzb2x2ZShcbiAgICAgICAgICAgICAgY3dkID8/IHRoaXMud29ya2RpcixcbiAgICAgICAgICAgICl9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQgYmFzZWQgb24gXCJjb25kaXRpb25cIi5cbiAgICpcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQgb3IgZmFsc2UgaWYgdGhlIGNvbmRpdGlvblxuICAgKiBldmFsdWF0ZXMgdG8gZmFsc2UgKGV4aXRzIHdpdGggbm9uLXplcm8pLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRhc2sgc2hvdWxkXG4gICAqIGJlIHNraXBwZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWxDb25kaXRpb24odGFza09yU3RlcDogVGFza1NwZWMgfCBUYXNrU3RlcCkge1xuICAgIC8vIG5vIGNvbmRpdGlvbiwgY2Fycnkgb25cbiAgICBpZiAoIXRhc2tPclN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhncmF5KGAke3VuZGVybGluZShcImNvbmRpdGlvblwiKX06ICR7dGFza09yU3RlcC5jb25kaXRpb259YCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGwoe1xuICAgICAgY29tbWFuZDogdGFza09yU3RlcC5jb25kaXRpb24sXG4gICAgICBsb2dwcmVmaXg6IFwiY29uZGl0aW9uOiBcIixcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gc2hlbGwgY29tbWFuZHMgKGUuZy4gYCQoeHgpYClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbEVudmlyb25tZW50KGVudjogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBvdXRwdXQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYgPz8ge30pKSB7XG4gICAgICBpZiAoU3RyaW5nKHZhbHVlKS5zdGFydHNXaXRoKFwiJChcIikgJiYgU3RyaW5nKHZhbHVlKS5lbmRzV2l0aChcIilcIikpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB2YWx1ZS5zdWJzdHJpbmcoMiwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGxFdmFsKHsgY29tbWFuZDogcXVlcnkgfSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3JcbiAgICAgICAgICAgID8gcmVzdWx0LmVycm9yLnN0YWNrXG4gICAgICAgICAgICA6IHJlc3VsdC5zdGRlcnI/LnRvU3RyaW5nKCkudHJpbSgpIHx8XG4gICAgICAgICAgICAgIHJlc3VsdC5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpIHx8XG4gICAgICAgICAgICAgIGBjb21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWA7XG5cbiAgICAgICAgICBsb2dnaW5nLndhcm4oXG4gICAgICAgICAgICB0aGlzLmZtdExvZyhcbiAgICAgICAgICAgICAgYCR7dW5kZXJsaW5lKGtleSl9OiB1bmFibGUgdG8gZXZhbHVhdGUgXCIke3F1ZXJ5fVwiLiBFbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHNraXBwZWQuIENoZWNrIHRoYXQgdGhlIGNvbW1hbmQgZXhpc3RzIGFuZCBydW5zIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGxvZ2dpbmcud2Fybih0aGlzLmZtdExvZyhgJHt1bmRlcmxpbmUoa2V5KX06ICR7ZXJyb3J9YCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dFtrZXldID0gcmVzdWx0LnN0ZG91dD8udG9TdHJpbmcoXCJ1dGYtOFwiKS50cmltKCkgPz8gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBhIHRhc2suIE5hbWVseSwgaXQgc3VwcG9ydHMgdGhpcyBzeW50YXhcbiAgICogYCQoeHgpYCBmb3IgYWxsb3dpbmcgZW52aXJvbm1lbnQgdG8gYmUgZXZhbHVhdGVkIGJ5IGV4ZWN1dGluZyBhIHNoZWxsXG4gICAqIGNvbW1hbmQgYW5kIG9idGFpbmluZyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoXG4gICAgZW52UGFyYW06IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHBhcmVudHM6IHN0cmluZ1tdLFxuICApIHtcbiAgICBsZXQgZW52ID0gdGhpcy5ydW50aW1lLm1hbmlmZXN0LmVudiA/PyB7fTtcblxuICAgIC8vIGFkZCBlbnYgZnJvbSBhbGwgcGFyZW50IHRhc2tzIG9uZSBieSBvbmVcbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBwYXJlbnRzKSB7XG4gICAgICBlbnYgPSB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgLi4uKHRoaXMucnVudGltZS50cnlGaW5kVGFzayhwYXJlbnQpPy5lbnYgPz8ge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0YXNrIGVudmlyb25tZW50LCB0aGVuIHRoZSBzcGVjaWZpYyBlbnYgbGFzdFxuICAgIGVudiA9IHtcbiAgICAgIC4uLmVudixcbiAgICAgIC4uLih0aGlzLnRhc2suZW52ID8/IHt9KSxcbiAgICAgIC4uLmVudlBhcmFtLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5ldmFsRW52aXJvbm1lbnQoZW52ID8/IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBcImZ1bGwgbmFtZVwiIG9mIHRoZSB0YXNrIHdoaWNoIGluY2x1ZGVzIGFsbCBpdCdzIHBhcmVudCB0YXNrIG5hbWVzIGNvbmNhdGVuYXRlZCBieSBjaGV2cm9ucy5cbiAgICovXG4gIHByaXZhdGUgZ2V0IGZ1bGxuYW1lKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5wYXJlbnRzLCB0aGlzLnRhc2submFtZV0uam9pbihcIiDCuyBcIik7XG4gIH1cblxuICBwcml2YXRlIGxvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxvZ2dpbmcudmVyYm9zZSh0aGlzLmZtdExvZyguLi5hcmdzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ0RlYnVnKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbG9nZ2luZy5kZWJ1Zyh0aGlzLmZtdExvZyguLi5hcmdzKSk7XG4gIH1cblxuICBwcml2YXRlIGZtdExvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBmb3JtYXQoYCR7dW5kZXJsaW5lKHRoaXMuZnVsbG5hbWUpfSB8YCwgLi4uYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNoZWxsKG9wdGlvbnM6IFNoZWxsT3B0aW9ucyk6IFByb21pc2U8U2hlbGxSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWlldCA9IG9wdGlvbnMucXVpZXQgPz8gZmFsc2U7XG4gICAgaWYgKCFxdWlldCkge1xuICAgICAgY29uc3QgbG9nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgICAgaWYgKG9wdGlvbnMubG9ncHJlZml4KSB7XG4gICAgICAgIGxvZy5wdXNoKG9wdGlvbnMubG9ncHJlZml4KTtcbiAgICAgIH1cblxuICAgICAgbG9nLnB1c2gob3B0aW9ucy5jb21tYW5kKTtcblxuICAgICAgaWYgKG9wdGlvbnMuY3dkKSB7XG4gICAgICAgIGxvZy5wdXNoKGAoY3dkOiAke29wdGlvbnMuY3dkfSlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cobG9nLmpvaW4oXCIgXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjd2QgPSBvcHRpb25zLmN3ZCA/PyB0aGlzLndvcmtkaXI7XG4gICAgaWYgKCFleGlzdHNTeW5jKGN3ZCkgfHwgIXN0YXRTeW5jKGN3ZCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgaW52YWxpZCB3b3JrZGlyIChjd2QpOiAke2N3ZH0gbXVzdCBiZSBhbiBleGlzdGluZyBkaXJlY3RvcnlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLnRoaXMuZW52LFxuICAgICAgLi4ub3B0aW9ucy5leHRyYUVudixcbiAgICB9O1xuXG4gICAgLy8gT24gV2luZG93cyB0aGUgZGVmYXVsdCBzaGVsbCAoY21kLmV4ZSkgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUE9TSVgtc3R5bGVcbiAgICAvLyBjb21tYW5kcyBwcm9qZW4gdGFza3MgYXJlIHdyaXR0ZW4gaW4gKGBjYXRgLCBgY3BgLCBgbWtkaXIgLXBgLCBgcm0gLXJmYCxcbiAgICAvLyBgJiZgIGNoYWlucywgYCRWQVJgLCAuLi4pLiBSdW4gdGhlIGNvbW1hbmQgdGhyb3VnaCBkYXgncyBjcm9zcy1wbGF0Zm9ybVxuICAgIC8vIHNoZWxsIGluc3RlYWQsIHdoaWNoIHNoaXBzIGJ1aWx0LWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbW9uXG4gICAgLy8gY29tbWFuZHMuIE5vdyB0aGF0IHRoZSB0YXNrIHJ1bnRpbWUgaXMgYXN5bmNocm9ub3VzIHdlIGNhbiBkcml2ZSBkYXgnc1xuICAgIC8vIGAkYCBBUEkgZGlyZWN0bHkgaW5zdGVhZCBvZiBzcGF3bmluZyBhIHN5bmNocm9ub3VzIGNoaWxkIG5vZGUgcHJvY2Vzcy5cbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICAvLyBzdGRvdXQvc3RkZXJyIGFyZSBvbmx5IGNhcHR1cmVkIHdoZW4gYSBjYWxsZXIgcGlwZXMgdGhlbSAoZS5nLlxuICAgICAgLy8gYHNoZWxsRXZhbGApOyBvdGhlcndpc2UgaW5oZXJpdCBzbyBvdXRwdXQgaXMgc3RyZWFtZWQgdG8gdGhlIHRlcm1pbmFsLlxuICAgICAgY29uc3QgY2FwdHVyZSA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zcGF3bk9wdGlvbnM/LnN0ZGlvKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJC5yYXdgJHtvcHRpb25zLmNvbW1hbmR9YFxuICAgICAgICAuY3dkKGN3ZClcbiAgICAgICAgLmVudihlbnYpXG4gICAgICAgIC5zdGRvdXQoY2FwdHVyZSA/IFwicGlwZWRcIiA6IFwiaW5oZXJpdFwiKVxuICAgICAgICAuc3RkZXJyKGNhcHR1cmUgPyBcInBpcGVkXCIgOiBcImluaGVyaXRcIilcbiAgICAgICAgLm5vVGhyb3coKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiByZXN1bHQuY29kZSxcbiAgICAgICAgc3Rkb3V0OiBjYXB0dXJlID8gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZG91dEJ5dGVzKSA6IG51bGwsXG4gICAgICAgIHN0ZGVycjogY2FwdHVyZSA/IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRlcnJCeXRlcykgOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Bhd25TeW5jKG9wdGlvbnMuY29tbWFuZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGN3ZCxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52LFxuICAgICAgLi4ub3B0aW9ucy5zcGF3bk9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNoZWxsRXZhbChvcHRpb25zOiBTaGVsbE9wdGlvbnMpOiBQcm9taXNlPFNoZWxsUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuc2hlbGwoe1xuICAgICAgcXVpZXQ6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3Bhd25PcHRpb25zOiB7XG4gICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJCdWlsdGluKGJ1aWx0aW46IHN0cmluZykge1xuICAgIC8vIExvY2F0ZSBwcm9qZW4ncyBwYWNrYWdlIHJvb3QgYnkgd2Fsa2luZyB1cCBmcm9tIHRoaXMgbW9kdWxlJ3MgZGlyZWN0b3J5XG4gICAgLy8gdW50aWwgd2UgZmluZCBhIHBhY2thZ2UuanNvbi4gVGhpcyB3b3JrcyB3aGV0aGVyIHRoZSBjb2RlIHJ1bnMgZnJvbSB0aGVcbiAgICAvLyBjb21waWxlZCBmaWxlIChsaWIvY2xpL3Rhc2stcnVudGltZS5qcykgb3IgZnJvbSB0aGUgYnVuZGxlZCBydW4tdGFzay5janNcbiAgICAvLyAobGliL3J1bi10YXNrLmNqcyksIHdoaWNoIGxpdmUgYXQgZGlmZmVyZW50IGRlcHRocyAtIHNvIGEgaGFyZC1jb2RlZFxuICAgIC8vIHJlbGF0aXZlIHBhdGggdG8gcGFja2FnZS5qc29uIHdvdWxkIGJlIHdyb25nIGluIG9uZSBvZiB0aGUgdHdvIGNhc2VzLlxuICAgIGxldCBtb2R1bGVSb290ID0gX19kaXJuYW1lO1xuICAgIHdoaWxlICghZXhpc3RzU3luYyhqb2luKG1vZHVsZVJvb3QsIFwicGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShtb2R1bGVSb290KTtcbiAgICAgIGlmIChwYXJlbnQgPT09IG1vZHVsZVJvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGxvY2F0ZSB0aGUgcHJvamVuIHBhY2thZ2Ugcm9vdFwiKTtcbiAgICAgIH1cbiAgICAgIG1vZHVsZVJvb3QgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2dyYW0gPSByZXF1aXJlLnJlc29sdmUoXG4gICAgICBqb2luKG1vZHVsZVJvb3QsIFwibGliXCIsIGAke2J1aWx0aW59LnRhc2suanNgKSxcbiAgICApO1xuICAgIHJldHVybiBgXCIke3Byb2Nlc3MuZXhlY1BhdGh9XCIgXCIke3Byb2dyYW19XCJgO1xuICB9XG59XG5cbmludGVyZmFjZSBTaGVsbE9wdGlvbnMge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIHByb2plY3QgZGlyXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ3ByZWZpeD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3Bhd25PcHRpb25zPzogU3Bhd25PcHRpb25zO1xuICAvKiogQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSBleHRyYUVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xufVxuIl19
|
package/lib/cli/util.js
CHANGED
|
@@ -1,12 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.CliError = void 0;
|
|
4
37
|
exports.installPackage = installPackage;
|
|
5
38
|
exports.renderInstallCommand = renderInstallCommand;
|
|
6
39
|
exports.findJsiiFilePath = findJsiiFilePath;
|
|
7
|
-
const fs = require("fs");
|
|
8
|
-
const path = require("path");
|
|
9
|
-
const logging = require("../logging");
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const logging = __importStar(require("../logging"));
|
|
10
43
|
const util_1 = require("../util");
|
|
11
44
|
/**
|
|
12
45
|
* Installs the npm module (through `npm install`) to node_modules under `projectDir`.
|
|
@@ -79,4 +112,4 @@ class CliError extends Error {
|
|
|
79
112
|
}
|
|
80
113
|
}
|
|
81
114
|
exports.CliError = CliError;
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFVQSx3Q0FpQ0M7QUFjRCxvREFLQztBQUVELDRDQXVCQztBQXZGRCx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBQzdCLG9EQUFzQztBQUN0QyxrQ0FBK0I7QUFFL0I7Ozs7R0FJRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsT0FBZSxFQUNmLElBQVksRUFDWixRQUFRLEdBQUcsS0FBSztJQUVoQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMzRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFMUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDeEIsc0RBQXNEO1FBQ3RELElBQUEsV0FBSSxFQUFDLGdCQUFnQixFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFJLENBQUMscUJBQXFCLElBQUksS0FBSyxDQUFDLENBQUM7SUFDN0MsSUFBQSxXQUFJLEVBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFNUQsc0NBQXNDO0lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN6RSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRLENBQ2pELENBQUM7SUFFRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLDZCQUE2QjtJQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN4QixFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLEdBQVcsRUFBRSxNQUFjO0lBQzlELDZEQUE2RDtJQUM3RCwwQ0FBMEM7SUFDMUMsMEVBQTBFO0lBQzFFLE9BQU8sOEVBQThFLEdBQUcsS0FBSyxNQUFNLEVBQUUsQ0FBQztBQUN4RyxDQUFDO0FBRUQsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BQWUsRUFDZixVQUFrQjtJQUVsQixJQUFJLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQ2pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFVLFFBQVEsRUFBRTtZQUNyQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDakIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN4QixJQUNFLEtBQUssWUFBWSxLQUFLO1lBQ3RCLE1BQU0sSUFBSSxLQUFLO1lBQ2YsS0FBSyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFDakMsQ0FBQztZQUNELDJDQUEyQztZQUMzQyxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO2FBQU0sQ0FBQztZQUNOLDZCQUE2QjtZQUM3QixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQWEsUUFBUyxTQUFRLEtBQUs7SUFDakMsWUFBWSxHQUFHLEtBQWU7UUFDNUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFMRCw0QkFLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHsgZXhlYyB9IGZyb20gXCIuLi91dGlsXCI7XG5cbi8qKlxuICogSW5zdGFsbHMgdGhlIG5wbSBtb2R1bGUgKHRocm91Z2ggYG5wbSBpbnN0YWxsYCkgdG8gbm9kZV9tb2R1bGVzIHVuZGVyIGBwcm9qZWN0RGlyYC5cbiAqIEBwYXJhbSBzcGVjIFRoZSBucG0gcGFja2FnZSBzcGVjIChlLmcuIGBmb29AXjEuMmAgb3IgYGZvb0AvdmFyL2ZvbGRlcnMvOGsvcWN3MGxzNXB2X3BoMDAwMGduL1QvcHJvamVuLVJZdXJDdy9wa2cudGd6YClcbiAqIEByZXR1cm5zIFRoZSBpbnN0YWxsZWQgcGFja2FnZSBuYW1lIChlLmcuIGBAZm9vL2JhcmApXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsUGFja2FnZShcbiAgYmFzZURpcjogc3RyaW5nLFxuICBzcGVjOiBzdHJpbmcsXG4gIGlzUHJvamVuID0gZmFsc2UsXG4pOiBzdHJpbmcge1xuICBjb25zdCBwYWNrYWdlSnNvblBhdGggPSBwYXRoLmpvaW4oYmFzZURpciwgXCJwYWNrYWdlLmpzb25cIik7XG4gIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RlZCA9IGZzLmV4aXN0c1N5bmMocGFja2FnZUpzb25QYXRoKTtcblxuICBpZiAoIXBhY2thZ2VKc29uRXhpc3RlZCkge1xuICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgcGFja2FnZS5qc29uIHRvIHJlYWQgZnJvbSBsYXRlclxuICAgIGV4ZWMoXCJucG0gaW5pdCAtLXllc1wiLCB7IGN3ZDogYmFzZURpciB9KTtcbiAgfVxuXG4gIGxvZ2dpbmcuaW5mbyhgaW5zdGFsbGluZyBtb2R1bGUgJHtzcGVjfS4uLmApO1xuICBleGVjKHJlbmRlckluc3RhbGxDb21tYW5kKGJhc2VEaXIsIHNwZWMpLCB7IGN3ZDogYmFzZURpciB9KTtcblxuICAvLyBHZXQgdGhlIHRydWUgaW5zdGFsbGVkIHBhY2thZ2UgbmFtZVxuICBjb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhY2thZ2VKc29uUGF0aCwgXCJ1dGYtOFwiKSk7XG4gIGNvbnN0IHBhY2thZ2VOYW1lID0gT2JqZWN0LmtleXMocGFja2FnZUpzb24uZGV2RGVwZW5kZW5jaWVzKS5maW5kKChuYW1lKSA9PlxuICAgIGlzUHJvamVuID8gbmFtZSA9PT0gXCJwcm9qZW5cIiA6IG5hbWUgIT09IFwicHJvamVuXCIsXG4gICk7XG5cbiAgaWYgKCFwYWNrYWdlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5hYmxlIHRvIHJlc29sdmUgcGFja2FnZSBuYW1lIGZyb20gc3BlYyAke3NwZWN9YCk7XG4gIH1cblxuICAvLyBpZiBwYWNrYWdlLmpzb24gZGlkIG5vdCBleGlzdCBiZWZvcmUgY2FsbGluZyBgbnBtIGluc3RhbGxgLCB3ZSBzaG91bGQgcmVtb3ZlIGl0XG4gIC8vIHNvIHdlIGNhbiBzdGFydCBvZmYgY2xlYW4uXG4gIGlmICghcGFja2FnZUpzb25FeGlzdGVkKSB7XG4gICAgZnMucm1TeW5jKHBhY2thZ2VKc29uUGF0aCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBhY2thZ2VOYW1lO1xufVxuXG4vKipcbiAqIFJlbmRlciBhIGNvbW1hbmQgdG8gaW5zdGFsbCBhbiBucG0gcGFja2FnZS5cbiAqXG4gKiBFbmdpbmUgY2hlY2tzIGFyZSBpZ25vcmVkIGF0IHRoaXMgcG9pbnQgc28gdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSBpbnN0YWxsZWRcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlIGVudmlyb25tZW50LiBUaGlzIHdhcyBuZWVkZWQgdG8gdW5ibG9jayB0aGUgdXBncmFkZSBvZiB0aGVcbiAqIG1pbmltdW0gbm9kZSB2ZXJzaW9uIG9mIHByb2plbiwgYnV0IGFsc28gb2theSBnZW5lcmFsbHkgYmVjYXVzZSBlbmdpbmUgY2hlY2tzXG4gKiB3aWxsIGJlIHBlcmZvcm1lZCBsYXRlciBhbmQgZm9yIGFsbCBldGVybml0eS5cbiAqXG4gKiBAcGFyYW0gZGlyIEJhc2UgZGlyZWN0b3J5XG4gKiBAcGFyYW0gbW9kdWxlIFRoZSBtb2R1bGUgdG8gaW5zdGFsbCAoZS5nLiBmb29AXjEuMilcbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBpbmNsdWRlcyB0aGUgaW5zdGFsbCBjb21tYW5kIChcIm5wbSBpbnN0YWxsIC4uLlwiKVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySW5zdGFsbENvbW1hbmQoZGlyOiBzdHJpbmcsIG1vZHVsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gLS1zYXZlIGlzIG5lZWRlZCB0byBvdmVycmlkZSBhbnkgZ2xvYmFsIHNhdmU6IGZhbHNlIGNvbmZpZ1xuICAvLyAtLXNhdmUtZGV2IHRvIGluc3RhbGwgYXMgZGV2IGRlcGVuZGVuY3lcbiAgLy8gLS1pbmNsdWRlPWRldiB0byBmb3JjZSBzYXZpbmcgdGhlIGRlcGVuZGVuY2llcyB3aXRoIE5PREVfRU5WPXByb2R1Y3Rpb25cbiAgcmV0dXJuIGBucG0gaW5zdGFsbCAtLXNhdmUgLS1zYXZlLWRldiAtZiAtLW5vLXBhY2thZ2UtbG9jayAtLWluY2x1ZGU9ZGV2IC0tcHJlZml4PVwiJHtkaXJ9XCIgJHttb2R1bGV9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRKc2lpRmlsZVBhdGgoXG4gIGJhc2VEaXI6IHN0cmluZyxcbiAgbW9kdWxlTmFtZTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGF0aC5kaXJuYW1lKFxuICAgICAgcmVxdWlyZS5yZXNvbHZlKGAke21vZHVsZU5hbWV9Ly5qc2lpYCwge1xuICAgICAgICBwYXRoczogW2Jhc2VEaXJdLFxuICAgICAgfSksXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICBcImNvZGVcIiBpbiBlcnJvciAmJlxuICAgICAgZXJyb3IuY29kZSA9PT0gXCJNT0RVTEVfTk9UX0ZPVU5EXCJcbiAgICApIHtcbiAgICAgIC8vIHRoZSBwcm92aWRlZCBtb2R1bGUgaXMgbm90IGEganNpaSBtb2R1bGVcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVuZXhwZWN0ZWQgZXJyb3IsIHRocm93IGl0XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciguLi5saW5lczogc3RyaW5nW10pIHtcbiAgICBzdXBlcihsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgICB0aGlzLm5hbWUgPSBcIkNsaUVycm9yXCI7XG4gIH1cbn1cbiJdfQ==
|
package/lib/component.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.Component = void 0;
|
|
5
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
@@ -17,12 +16,14 @@ const componentId = (scope) => {
|
|
|
17
16
|
* @param id Unique id of the component. If not provided, an unstable AutoId is generated.
|
|
18
17
|
*/
|
|
19
18
|
class Component extends constructs_1.Construct {
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Component", version: "0.100.0" };
|
|
20
20
|
/**
|
|
21
21
|
* Test whether the given construct is a component.
|
|
22
22
|
*/
|
|
23
23
|
static isComponent(x) {
|
|
24
24
|
return (0, constructs_2.isComponent)(x);
|
|
25
25
|
}
|
|
26
|
+
project;
|
|
26
27
|
constructor(scope, id) {
|
|
27
28
|
super(scope, id || `${new.target.name}#${componentId(scope)}`);
|
|
28
29
|
(0, constructs_2.tagAsComponent)(this);
|
|
@@ -44,6 +45,4 @@ class Component extends constructs_1.Construct {
|
|
|
44
45
|
postSynthesize() { }
|
|
45
46
|
}
|
|
46
47
|
exports.Component = Component;
|
|
47
|
-
|
|
48
|
-
Component[_a] = { fqn: "projen.Component", version: "0.99.80" };
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDJDQUF1QztBQUV2QyxrREFJMkI7QUFFM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQXNCLENBQUM7QUFDbEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDeEMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQixPQUFPLFNBQVMsTUFBTSxFQUFFLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQWEsU0FBVSxTQUFRLHNCQUFTO0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFNO1FBQzlCLE9BQU8sSUFBQSx3QkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFJRCxZQUFZLEtBQWlCLEVBQUUsRUFBVztRQUN4QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsSUFBQSwyQkFBYyxFQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsK0JBQWtCLEVBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksYUFBYSxLQUFJLENBQUM7SUFFekI7O09BRUc7SUFDSSxVQUFVLEtBQUksQ0FBQztJQUV0Qjs7T0FFRztJQUNJLGNBQWMsS0FBSSxDQUFDOztBQWhDNUIsOEJBaUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0XCI7XG5pbXBvcnQge1xuICBpc0NvbXBvbmVudCxcbiAgZmluZENsb3Nlc3RQcm9qZWN0LFxuICB0YWdBc0NvbXBvbmVudCxcbn0gZnJvbSBcIi4vdXRpbC9jb25zdHJ1Y3RzXCI7XG5cbmNvbnN0IGF1dG9JZHMgPSBuZXcgV2Vha01hcDxJQ29uc3RydWN0LCBudW1iZXI+KCk7XG5jb25zdCBjb21wb25lbnRJZCA9IChzY29wZTogSUNvbnN0cnVjdCkgPT4ge1xuICBjb25zdCBuZXh0SWQgPSAoYXV0b0lkcy5nZXQoc2NvcGUpID8/IDApICsgMTtcbiAgYXV0b0lkcy5zZXQoc2NvcGUsIG5leHRJZCk7XG4gIHJldHVybiBgQXV0b0lkJHtuZXh0SWR9YDtcbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHByb2plY3QgY29tcG9uZW50LlxuICogQHBhcmFtIHByb2plY3RcbiAqIEBwYXJhbSBpZCBVbmlxdWUgaWQgb2YgdGhlIGNvbXBvbmVudC4gSWYgbm90IHByb3ZpZGVkLCBhbiB1bnN0YWJsZSBBdXRvSWQgaXMgZ2VuZXJhdGVkLlxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gY29uc3RydWN0IGlzIGEgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIGlzQ29tcG9uZW50KHgpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb2plY3Q6IFByb2plY3Q7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IElDb25zdHJ1Y3QsIGlkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkIHx8IGAke25ldy50YXJnZXQubmFtZX0jJHtjb21wb25lbnRJZChzY29wZSl9YCk7XG4gICAgdGFnQXNDb21wb25lbnQodGhpcyk7XG4gICAgdGhpcy5ub2RlLmFkZE1ldGFkYXRhKFwidHlwZVwiLCBcImNvbXBvbmVudFwiKTtcbiAgICB0aGlzLm5vZGUuYWRkTWV0YWRhdGEoXCJjb25zdHJ1Y3RcIiwgbmV3LnRhcmdldC5uYW1lKTtcblxuICAgIHRoaXMucHJvamVjdCA9IGZpbmRDbG9zZXN0UHJvamVjdChzY29wZSwgbmV3LnRhcmdldC5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYmVmb3JlIHN5bnRoZXNpcy5cbiAgICovXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge31cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgZmlsZXMgdG8gdGhlIHByb2plY3Qgb3V0cHV0IGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyBzeW50aGVzaXplKCkge31cblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIHN5bnRoZXNpcy4gT3JkZXIgaXMgKm5vdCogZ3VhcmFudGVlZC5cbiAgICovXG4gIHB1YmxpYyBwb3N0U3ludGhlc2l6ZSgpIHt9XG59XG4iXX0=
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsMkNBQXVDO0FBRXZDLGtEQUkyQjtBQUUzQixNQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztBQUNsRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN4QyxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLE9BQU8sU0FBUyxNQUFNLEVBQUUsQ0FBQztBQUMzQixDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsc0JBQVM7O0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFNO1FBQzlCLE9BQU8sSUFBQSx3QkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFZSxPQUFPLENBQVU7SUFFakMsWUFBWSxLQUFpQixFQUFFLEVBQVc7UUFDeEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELElBQUEsMkJBQWMsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLCtCQUFrQixFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNJLGFBQWEsS0FBSSxDQUFDO0lBRXpCOztPQUVHO0lBQ0ksVUFBVSxLQUFJLENBQUM7SUFFdEI7O09BRUc7SUFDSSxjQUFjLEtBQUksQ0FBQzs7QUFoQzVCLDhCQWlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuaW1wb3J0IHtcbiAgaXNDb21wb25lbnQsXG4gIGZpbmRDbG9zZXN0UHJvamVjdCxcbiAgdGFnQXNDb21wb25lbnQsXG59IGZyb20gXCIuL3V0aWwvY29uc3RydWN0c1wiO1xuXG5jb25zdCBhdXRvSWRzID0gbmV3IFdlYWtNYXA8SUNvbnN0cnVjdCwgbnVtYmVyPigpO1xuY29uc3QgY29tcG9uZW50SWQgPSAoc2NvcGU6IElDb25zdHJ1Y3QpID0+IHtcbiAgY29uc3QgbmV4dElkID0gKGF1dG9JZHMuZ2V0KHNjb3BlKSA/PyAwKSArIDE7XG4gIGF1dG9JZHMuc2V0KHNjb3BlLCBuZXh0SWQpO1xuICByZXR1cm4gYEF1dG9JZCR7bmV4dElkfWA7XG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwcm9qZWN0IGNvbXBvbmVudC5cbiAqIEBwYXJhbSBwcm9qZWN0XG4gKiBAcGFyYW0gaWQgVW5pcXVlIGlkIG9mIHRoZSBjb21wb25lbnQuIElmIG5vdCBwcm92aWRlZCwgYW4gdW5zdGFibGUgQXV0b0lkIGlzIGdlbmVyYXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIGNvbnN0cnVjdCBpcyBhIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNDb21wb25lbnQoeDogYW55KTogeCBpcyBDb21wb25lbnQge1xuICAgIHJldHVybiBpc0NvbXBvbmVudCh4KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBpZD86IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCB8fCBgJHtuZXcudGFyZ2V0Lm5hbWV9IyR7Y29tcG9uZW50SWQoc2NvcGUpfWApO1xuICAgIHRhZ0FzQ29tcG9uZW50KHRoaXMpO1xuICAgIHRoaXMubm9kZS5hZGRNZXRhZGF0YShcInR5cGVcIiwgXCJjb21wb25lbnRcIik7XG4gICAgdGhpcy5ub2RlLmFkZE1ldGFkYXRhKFwiY29uc3RydWN0XCIsIG5ldy50YXJnZXQubmFtZSk7XG5cbiAgICB0aGlzLnByb2plY3QgPSBmaW5kQ2xvc2VzdFByb2plY3Qoc2NvcGUsIG5ldy50YXJnZXQubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJlZm9yZSBzeW50aGVzaXMuXG4gICAqL1xuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHt9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemVzIGZpbGVzIHRvIHRoZSBwcm9qZWN0IG91dHB1dCBkaXJlY3RvcnkuXG4gICAqL1xuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHt9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBhZnRlciBzeW50aGVzaXMuIE9yZGVyIGlzICpub3QqIGd1YXJhbnRlZWQuXG4gICAqL1xuICBwdWJsaWMgcG9zdFN5bnRoZXNpemUoKSB7fVxufVxuIl19
|