projen 0.100.7 → 0.101.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 +602 -95
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/task-runtime.js +115 -104
- package/lib/common.d.ts +1 -1
- package/lib/common.js +2 -2
- package/lib/component.js +1 -1
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/bump-version.d.ts +1 -1
- package/lib/release/bump-version.js +6 -2
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +107 -131
- package/lib/sample-file.js +2 -2
- package/lib/source-code.js +1 -1
- package/lib/task-model.d.ts +119 -3
- package/lib/task-model.js +1 -1
- package/lib/task-shell.d.ts +63 -0
- package/lib/task-shell.js +87 -0
- package/lib/task.d.ts +19 -2
- package/lib/task.js +46 -11
- package/lib/tasks.d.ts +13 -0
- package/lib/tasks.js +19 -2
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/util/exec.d.ts +33 -69
- package/lib/util/exec.js +57 -51
- package/lib/version.d.ts +1 -1
- package/lib/version.js +5 -5
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +1 -1
package/lib/run-task.cjs
CHANGED
|
@@ -1733,7 +1733,7 @@ var require_package = __commonJS({
|
|
|
1733
1733
|
publishConfig: {
|
|
1734
1734
|
access: "public"
|
|
1735
1735
|
},
|
|
1736
|
-
version: "0.
|
|
1736
|
+
version: "0.101.0",
|
|
1737
1737
|
jest: {
|
|
1738
1738
|
coverageProvider: "v8",
|
|
1739
1739
|
coverageReporters: [
|
|
@@ -14295,7 +14295,7 @@ function createPath(path62) {
|
|
|
14295
14295
|
|
|
14296
14296
|
// src/common.ts
|
|
14297
14297
|
var PROJEN_DIR = ".projen";
|
|
14298
|
-
var TASKS_MANIFEST_VERSION =
|
|
14298
|
+
var TASKS_MANIFEST_VERSION = 3;
|
|
14299
14299
|
var IS_TEST_RUN = process.env.NODE_ENV === "test";
|
|
14300
14300
|
var packageVersion = require_package().version;
|
|
14301
14301
|
|
|
@@ -14408,71 +14408,23 @@ function shimTool(file) {
|
|
|
14408
14408
|
}
|
|
14409
14409
|
var npm = shimTool("npm");
|
|
14410
14410
|
var npx = shimTool("npx");
|
|
14411
|
-
|
|
14412
|
-
|
|
14413
|
-
|
|
14414
|
-
|
|
14415
|
-
|
|
14416
|
-
|
|
14417
|
-
|
|
14418
|
-
|
|
14419
|
-
|
|
14420
|
-
|
|
14421
|
-
|
|
14422
|
-
|
|
14423
|
-
|
|
14424
|
-
|
|
14425
|
-
|
|
14426
|
-
|
|
14427
|
-
|
|
14428
|
-
});
|
|
14429
|
-
return {
|
|
14430
|
-
status: result.status,
|
|
14431
|
-
stdout: result.stdout ?? null,
|
|
14432
|
-
stderr: result.stderr ?? null,
|
|
14433
|
-
error: result.error
|
|
14434
|
-
};
|
|
14435
|
-
},
|
|
14436
|
-
/**
|
|
14437
|
-
* Runs a user-supplied shell command line and resolves its trimmed STDOUT.
|
|
14438
|
-
* Rejects if the command exits non-zero.
|
|
14439
|
-
*/
|
|
14440
|
-
capture: async (command, options) => {
|
|
14441
|
-
const result = rawShell.exec(command, {
|
|
14442
|
-
cwd: options.cwd,
|
|
14443
|
-
env: { ...process.env, ...options.env },
|
|
14444
|
-
capture: true
|
|
14445
|
-
});
|
|
14446
|
-
if (result.error) {
|
|
14447
|
-
throw result.error;
|
|
14448
|
-
}
|
|
14449
|
-
if (result.status !== 0) {
|
|
14450
|
-
const error = new Error(
|
|
14451
|
-
`Command failed (exit code ${result.status}): ${command}`
|
|
14452
|
-
);
|
|
14453
|
-
error.status = result.status;
|
|
14454
|
-
error.stderr = result.stderr;
|
|
14455
|
-
throw error;
|
|
14456
|
-
}
|
|
14457
|
-
return (result.stdout?.toString("utf-8") ?? "").trim();
|
|
14458
|
-
},
|
|
14459
|
-
/**
|
|
14460
|
-
* Runs a user-supplied shell command line and resolves its trimmed STDOUT,
|
|
14461
|
-
* or `undefined` if the command failed or produced no output.
|
|
14462
|
-
*/
|
|
14463
|
-
tryCapture: async (command, options) => {
|
|
14464
|
-
const result = rawShell.exec(command, {
|
|
14465
|
-
cwd: options.cwd,
|
|
14466
|
-
env: { ...process.env, ...options.env },
|
|
14467
|
-
capture: true
|
|
14468
|
-
});
|
|
14469
|
-
if (result.error || result.status !== 0) {
|
|
14470
|
-
return void 0;
|
|
14471
|
-
}
|
|
14472
|
-
const out = (result.stdout?.toString("utf-8") ?? "").trim();
|
|
14473
|
-
return out || void 0;
|
|
14474
|
-
}
|
|
14475
|
-
};
|
|
14411
|
+
function systemShell(command, options) {
|
|
14412
|
+
debug(`${command} (cwd: ${options.cwd})`);
|
|
14413
|
+
const result = child_process.spawnSync(command, {
|
|
14414
|
+
cwd: options.cwd,
|
|
14415
|
+
shell: true,
|
|
14416
|
+
maxBuffer: MAX_BUFFER,
|
|
14417
|
+
env: options.env,
|
|
14418
|
+
// "pipe" for STDERR (when capturing) means it appears in exceptions.
|
|
14419
|
+
stdio: options.capture ? ["inherit", "pipe", "pipe"] : "inherit"
|
|
14420
|
+
});
|
|
14421
|
+
return {
|
|
14422
|
+
status: result.status,
|
|
14423
|
+
stdout: result.stdout ?? null,
|
|
14424
|
+
stderr: result.stderr ?? null,
|
|
14425
|
+
error: result.error
|
|
14426
|
+
};
|
|
14427
|
+
}
|
|
14476
14428
|
|
|
14477
14429
|
// src/cli/task-runtime.ts
|
|
14478
14430
|
var parseConflictJSONModule = require_lib2();
|
|
@@ -14480,6 +14432,9 @@ var parseConflictJSON = parseConflictJSONModule?.default ?? parseConflictJSONMod
|
|
|
14480
14432
|
var ENV_TRIM_LEN = 20;
|
|
14481
14433
|
var ARGS_MARKER = "$@";
|
|
14482
14434
|
var QUOTED_ARGS_MARKER = `"${ARGS_MARKER}"`;
|
|
14435
|
+
function quoteArg(arg) {
|
|
14436
|
+
return '"' + arg.replace(/(["$`\\])/g, "\\$1") + '"';
|
|
14437
|
+
}
|
|
14483
14438
|
var TaskRuntime = class _TaskRuntime {
|
|
14484
14439
|
/**
|
|
14485
14440
|
* The project-relative path of the tasks manifest file.
|
|
@@ -14636,7 +14591,11 @@ var RunTask = class {
|
|
|
14636
14591
|
this.logDebug((0, import_chalk2.gray)("No actions have been specified for this task."));
|
|
14637
14592
|
return;
|
|
14638
14593
|
}
|
|
14639
|
-
this.env = await this.resolveEnvironment(
|
|
14594
|
+
this.env = await this.resolveEnvironment(
|
|
14595
|
+
this.envParam,
|
|
14596
|
+
parents,
|
|
14597
|
+
this.resolveShell()
|
|
14598
|
+
);
|
|
14640
14599
|
const envlogs = [];
|
|
14641
14600
|
for (const [k, v] of Object.entries(this.env)) {
|
|
14642
14601
|
const vv = v ?? "";
|
|
@@ -14646,7 +14605,7 @@ var RunTask = class {
|
|
|
14646
14605
|
if (envlogs.length) {
|
|
14647
14606
|
this.logDebug((0, import_chalk2.gray)(`${(0, import_chalk2.underline)("env")}: ${envlogs.join(" ")}`));
|
|
14648
14607
|
}
|
|
14649
|
-
if (!await this.evalCondition(task)) {
|
|
14608
|
+
if (!await this.evalCondition(task, this.resolveShell())) {
|
|
14650
14609
|
this.log("condition exited with non-zero - skipping");
|
|
14651
14610
|
return;
|
|
14652
14611
|
}
|
|
@@ -14663,7 +14622,8 @@ var RunTask = class {
|
|
|
14663
14622
|
);
|
|
14664
14623
|
}
|
|
14665
14624
|
for (const step of task.steps) {
|
|
14666
|
-
|
|
14625
|
+
const stepShell = this.resolveShell(step);
|
|
14626
|
+
if (!await this.evalCondition(step, stepShell)) {
|
|
14667
14627
|
this.log("condition exited with non-zero - skipping");
|
|
14668
14628
|
continue;
|
|
14669
14629
|
}
|
|
@@ -14683,7 +14643,7 @@ var RunTask = class {
|
|
|
14683
14643
|
);
|
|
14684
14644
|
}
|
|
14685
14645
|
const execs = step.exec ? [step.exec] : [];
|
|
14686
|
-
const env = await this.evalEnvironment(step.env ?? {});
|
|
14646
|
+
const env = await this.evalEnvironment(step.env ?? {}, stepShell);
|
|
14687
14647
|
if (step.builtin) {
|
|
14688
14648
|
execs.push(this.renderBuiltin(step.builtin));
|
|
14689
14649
|
}
|
|
@@ -14704,13 +14664,12 @@ var RunTask = class {
|
|
|
14704
14664
|
execs.push(argv);
|
|
14705
14665
|
}
|
|
14706
14666
|
for (const exec of execs) {
|
|
14707
|
-
let hasError = false;
|
|
14708
14667
|
let command = exec;
|
|
14709
14668
|
if (typeof command === "string") {
|
|
14710
14669
|
if (command.includes(QUOTED_ARGS_MARKER)) {
|
|
14711
14670
|
command = command.replace(
|
|
14712
14671
|
QUOTED_ARGS_MARKER,
|
|
14713
|
-
argsList.map(
|
|
14672
|
+
argsList.map(quoteArg).join(" ")
|
|
14714
14673
|
);
|
|
14715
14674
|
} else if (command.includes(ARGS_MARKER)) {
|
|
14716
14675
|
command = command.replace(ARGS_MARKER, argsList.join(" "));
|
|
@@ -14719,20 +14678,13 @@ var RunTask = class {
|
|
|
14719
14678
|
}
|
|
14720
14679
|
}
|
|
14721
14680
|
const cwd2 = step.cwd;
|
|
14722
|
-
|
|
14723
|
-
|
|
14724
|
-
|
|
14725
|
-
|
|
14726
|
-
|
|
14727
|
-
|
|
14728
|
-
|
|
14729
|
-
} catch (e) {
|
|
14730
|
-
if (e?.message?.startsWith("non-zero exit code:")) {
|
|
14731
|
-
hasError = true;
|
|
14732
|
-
}
|
|
14733
|
-
throw e;
|
|
14734
|
-
}
|
|
14735
|
-
if (hasError) {
|
|
14681
|
+
const result = await this.shell({
|
|
14682
|
+
command,
|
|
14683
|
+
cwd: cwd2,
|
|
14684
|
+
extraEnv: env,
|
|
14685
|
+
shell: stepShell
|
|
14686
|
+
});
|
|
14687
|
+
if (result.status !== 0) {
|
|
14736
14688
|
throw new Error(
|
|
14737
14689
|
`Task "${this.fullname}" failed when executing "${Array.isArray(command) ? command.join(" ") : command}" (cwd: ${(0, import_path.resolve)(cwd2 ?? this.workdir)})`
|
|
14738
14690
|
);
|
|
@@ -14747,15 +14699,15 @@ var RunTask = class {
|
|
|
14747
14699
|
* evaluates to false (exits with non-zero), indicating that the task should
|
|
14748
14700
|
* be skipped.
|
|
14749
14701
|
*/
|
|
14750
|
-
async evalCondition(taskOrStep) {
|
|
14702
|
+
async evalCondition(taskOrStep, shell) {
|
|
14751
14703
|
if (!taskOrStep.condition) {
|
|
14752
14704
|
return true;
|
|
14753
14705
|
}
|
|
14754
14706
|
this.log((0, import_chalk2.gray)(`${(0, import_chalk2.underline)("condition")}: ${taskOrStep.condition}`));
|
|
14755
14707
|
const result = await this.shell({
|
|
14756
14708
|
command: taskOrStep.condition,
|
|
14757
|
-
|
|
14758
|
-
|
|
14709
|
+
quiet: true,
|
|
14710
|
+
shell
|
|
14759
14711
|
});
|
|
14760
14712
|
if (result.status === 0) {
|
|
14761
14713
|
return true;
|
|
@@ -14766,12 +14718,17 @@ var RunTask = class {
|
|
|
14766
14718
|
/**
|
|
14767
14719
|
* Evaluates environment variables from shell commands (e.g. `$(xx)`)
|
|
14768
14720
|
*/
|
|
14769
|
-
async evalEnvironment(env) {
|
|
14721
|
+
async evalEnvironment(env, shell) {
|
|
14770
14722
|
const output = {};
|
|
14771
14723
|
for (const [key, value] of Object.entries(env ?? {})) {
|
|
14772
14724
|
if (String(value).startsWith("$(") && String(value).endsWith(")")) {
|
|
14773
14725
|
const query = value.substring(2, value.length - 1);
|
|
14774
|
-
const result = await this.
|
|
14726
|
+
const result = await this.shell({
|
|
14727
|
+
command: query,
|
|
14728
|
+
quiet: true,
|
|
14729
|
+
captureOutput: true,
|
|
14730
|
+
shell
|
|
14731
|
+
});
|
|
14775
14732
|
if (result.status !== 0) {
|
|
14776
14733
|
const error = result.error ? result.error.stack : result.stderr?.toString().trim() || result.stdout?.toString().trim() || `command exited with code ${result.status}`;
|
|
14777
14734
|
warn(
|
|
@@ -14794,7 +14751,7 @@ var RunTask = class {
|
|
|
14794
14751
|
* `$(xx)` for allowing environment to be evaluated by executing a shell
|
|
14795
14752
|
* command and obtaining its result.
|
|
14796
14753
|
*/
|
|
14797
|
-
async resolveEnvironment(envParam, parents) {
|
|
14754
|
+
async resolveEnvironment(envParam, parents, shell) {
|
|
14798
14755
|
let env = this.runtime.manifest.env ?? {};
|
|
14799
14756
|
for (const parent of parents) {
|
|
14800
14757
|
env = {
|
|
@@ -14807,7 +14764,14 @@ var RunTask = class {
|
|
|
14807
14764
|
...this.task.env ?? {},
|
|
14808
14765
|
...envParam
|
|
14809
14766
|
};
|
|
14810
|
-
return this.evalEnvironment(env
|
|
14767
|
+
return this.evalEnvironment(env, shell);
|
|
14768
|
+
}
|
|
14769
|
+
/**
|
|
14770
|
+
* Resolves the shell for a step's command (or the task's, when no step is
|
|
14771
|
+
* given): step, then task, then project default, then "projen".
|
|
14772
|
+
*/
|
|
14773
|
+
resolveShell(step) {
|
|
14774
|
+
return step?.shell ?? this.task.shell ?? this.runtime.manifest.shell ?? "projen";
|
|
14811
14775
|
}
|
|
14812
14776
|
/**
|
|
14813
14777
|
* Returns the "full name" of the task which includes all it's parent task names concatenated by chevrons.
|
|
@@ -14828,9 +14792,6 @@ var RunTask = class {
|
|
|
14828
14792
|
const quiet = options.quiet ?? false;
|
|
14829
14793
|
if (!quiet) {
|
|
14830
14794
|
const log2 = new Array();
|
|
14831
|
-
if (options.logprefix) {
|
|
14832
|
-
log2.push(options.logprefix);
|
|
14833
|
-
}
|
|
14834
14795
|
log2.push(
|
|
14835
14796
|
Array.isArray(options.command) ? options.command.join(" ") : options.command
|
|
14836
14797
|
);
|
|
@@ -14845,48 +14806,63 @@ var RunTask = class {
|
|
|
14845
14806
|
`invalid workdir (cwd): ${cwd2} must be an existing directory`
|
|
14846
14807
|
);
|
|
14847
14808
|
}
|
|
14809
|
+
const shell = options.shell ?? "projen";
|
|
14810
|
+
if (typeof shell === "string" && shell !== "projen" && shell !== "system") {
|
|
14811
|
+
throw new Error(
|
|
14812
|
+
`unknown built-in shell ${JSON.stringify(
|
|
14813
|
+
shell
|
|
14814
|
+
)}; use the built-in "projen" or "system" shells, or a TaskShell.command([...]) invocation`
|
|
14815
|
+
);
|
|
14816
|
+
}
|
|
14817
|
+
const capture2 = options.captureOutput ?? false;
|
|
14818
|
+
const command = options.command;
|
|
14848
14819
|
const env = {
|
|
14849
14820
|
...process.env,
|
|
14850
14821
|
...this.env,
|
|
14851
14822
|
...options.extraEnv
|
|
14852
14823
|
};
|
|
14853
|
-
|
|
14854
|
-
|
|
14855
|
-
|
|
14856
|
-
|
|
14857
|
-
|
|
14858
|
-
|
|
14859
|
-
|
|
14860
|
-
|
|
14861
|
-
|
|
14862
|
-
|
|
14863
|
-
|
|
14864
|
-
|
|
14865
|
-
return rawShell.exec(command, { cwd: cwd2, env, capture: capture2 });
|
|
14866
|
-
}
|
|
14867
|
-
const [file, ...args] = command;
|
|
14868
|
-
try {
|
|
14869
|
-
tool(file).run(args, {
|
|
14870
|
-
cwd: cwd2,
|
|
14871
|
-
env,
|
|
14872
|
-
inheritStdio: true
|
|
14873
|
-
});
|
|
14874
|
-
return { status: 0 };
|
|
14875
|
-
} catch (e) {
|
|
14876
|
-
if (typeof e?.status === "number") {
|
|
14877
|
-
return { status: e.status };
|
|
14824
|
+
if (shell === "system") {
|
|
14825
|
+
if (Array.isArray(command)) {
|
|
14826
|
+
const [program, ...args] = command;
|
|
14827
|
+
try {
|
|
14828
|
+
tool(program).run(args, { cwd: cwd2, env, inheritStdio: true });
|
|
14829
|
+
return { status: 0 };
|
|
14830
|
+
} catch (e) {
|
|
14831
|
+
if (typeof e?.status === "number") {
|
|
14832
|
+
return { status: e.status };
|
|
14833
|
+
}
|
|
14834
|
+
throw e;
|
|
14835
|
+
}
|
|
14878
14836
|
}
|
|
14879
|
-
|
|
14837
|
+
return systemShell(command, { cwd: cwd2, env, capture: capture2 });
|
|
14880
14838
|
}
|
|
14839
|
+
const builder = this.buildDaxCommand(command, shell);
|
|
14840
|
+
const result = await builder.cwd(cwd2).env(env).stdout(capture2 ? "piped" : "inherit").stderr(capture2 ? "piped" : "inherit").noThrow();
|
|
14841
|
+
return {
|
|
14842
|
+
status: result.code,
|
|
14843
|
+
stdout: capture2 ? Buffer.from(result.stdoutBytes) : null,
|
|
14844
|
+
stderr: capture2 ? Buffer.from(result.stderrBytes) : null
|
|
14845
|
+
};
|
|
14881
14846
|
}
|
|
14882
|
-
|
|
14883
|
-
|
|
14884
|
-
|
|
14885
|
-
|
|
14886
|
-
|
|
14887
|
-
|
|
14888
|
-
|
|
14889
|
-
|
|
14847
|
+
/**
|
|
14848
|
+
* Builds the dax command for the "projen" shell or an explicit invocation.
|
|
14849
|
+
* (The "system" shell is handled host-side, not here.) `command` is a shell
|
|
14850
|
+
* line (string) or an `execArgs` argv (string[]); `shell` is `"projen"` or an
|
|
14851
|
+
* invocation argv such as `["bash", "-c"]`.
|
|
14852
|
+
*/
|
|
14853
|
+
buildDaxCommand(command, shell) {
|
|
14854
|
+
if (Array.isArray(shell)) {
|
|
14855
|
+
const [program, ...flags] = shell;
|
|
14856
|
+
const commandLine = Array.isArray(command) ? command.map(quoteArg).join(" ") : command;
|
|
14857
|
+
return $2`${program} ${[...flags, commandLine]}`;
|
|
14858
|
+
}
|
|
14859
|
+
return Array.isArray(command) ? (
|
|
14860
|
+
// execArgs: shell-free argv (each element escaped; `.cmd` shims resolved).
|
|
14861
|
+
$2`${command[0]} ${command.slice(1)}`
|
|
14862
|
+
) : (
|
|
14863
|
+
// string command, parsed in-process by dax's cross-platform shell.
|
|
14864
|
+
$2.raw`${command}`
|
|
14865
|
+
);
|
|
14890
14866
|
}
|
|
14891
14867
|
renderBuiltin(builtin) {
|
|
14892
14868
|
let moduleRoot = __dirname;
|
package/lib/sample-file.js
CHANGED
|
@@ -45,7 +45,7 @@ const util_1 = require("./util");
|
|
|
45
45
|
* Use this for creating example code files or other resources.
|
|
46
46
|
*/
|
|
47
47
|
class SampleFile extends component_1.Component {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleFile", version: "0.101.0" };
|
|
49
49
|
filePath;
|
|
50
50
|
options;
|
|
51
51
|
/**
|
|
@@ -96,7 +96,7 @@ exports.SampleFile = SampleFile;
|
|
|
96
96
|
* Renders the given files into the directory if the directory does not exist. Use this to create sample code files
|
|
97
97
|
*/
|
|
98
98
|
class SampleDir extends component_1.Component {
|
|
99
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.
|
|
99
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleDir", version: "0.101.0" };
|
|
100
100
|
dir;
|
|
101
101
|
options;
|
|
102
102
|
/**
|
package/lib/source-code.js
CHANGED
|
@@ -9,7 +9,7 @@ const textfile_1 = require("./textfile");
|
|
|
9
9
|
*/
|
|
10
10
|
class SourceCode extends component_1.Component {
|
|
11
11
|
filePath;
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SourceCode", version: "0.101.0" };
|
|
13
13
|
file;
|
|
14
14
|
indentLevel = 0;
|
|
15
15
|
indent;
|
package/lib/task-model.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TaskShell } from "./task-shell";
|
|
1
2
|
/**
|
|
2
3
|
* Schema for `tasks.json`.
|
|
3
4
|
*/
|
|
@@ -24,6 +25,12 @@ export interface TasksManifest {
|
|
|
24
25
|
readonly env?: {
|
|
25
26
|
[name: string]: string;
|
|
26
27
|
};
|
|
28
|
+
/**
|
|
29
|
+
* The default task shell, in `tasks.json` form: a keyword (`"projen"` or
|
|
30
|
+
* `"system"`) or an invocation argument list. See
|
|
31
|
+
* {@link TaskCommonOptions.shell}.
|
|
32
|
+
*/
|
|
33
|
+
readonly shell?: string | string[];
|
|
27
34
|
}
|
|
28
35
|
export interface TaskCommonOptions {
|
|
29
36
|
/**
|
|
@@ -57,15 +64,65 @@ export interface TaskCommonOptions {
|
|
|
57
64
|
* @default - process.cwd()
|
|
58
65
|
*/
|
|
59
66
|
readonly cwd?: string;
|
|
67
|
+
/**
|
|
68
|
+
* The shell used to run this task's commands, including its `condition` and
|
|
69
|
+
* `$(...)` environment evaluation. Use {@link TaskShell} to pick a built-in
|
|
70
|
+
* or an explicit invocation. Set at project, task or step level; the nearest
|
|
71
|
+
* declared level wins.
|
|
72
|
+
*
|
|
73
|
+
* @default - inherited from the task/project, otherwise the built-in projen shell
|
|
74
|
+
*/
|
|
75
|
+
readonly shell?: TaskShell;
|
|
60
76
|
}
|
|
61
77
|
/**
|
|
62
78
|
* Specification of a single task.
|
|
79
|
+
*
|
|
80
|
+
* The `tasks.json` (manifest) form of a task. {@link TaskCommonOptions} is the
|
|
81
|
+
* form used to define one; they differ only in the rendered `shell` field.
|
|
63
82
|
*/
|
|
64
|
-
export interface TaskSpec
|
|
83
|
+
export interface TaskSpec {
|
|
65
84
|
/**
|
|
66
85
|
* Task name.
|
|
67
86
|
*/
|
|
68
87
|
readonly name: string;
|
|
88
|
+
/**
|
|
89
|
+
* The description of this build command.
|
|
90
|
+
* @default - the task name
|
|
91
|
+
*/
|
|
92
|
+
readonly description?: string;
|
|
93
|
+
/**
|
|
94
|
+
* Defines environment variables for the execution of this task.
|
|
95
|
+
* Values in this map will be evaluated in a shell, so you can do stuff like `$(echo "foo")`.
|
|
96
|
+
* @default {}
|
|
97
|
+
*/
|
|
98
|
+
readonly env?: {
|
|
99
|
+
[name: string]: string;
|
|
100
|
+
};
|
|
101
|
+
/**
|
|
102
|
+
* A set of environment variables that must be defined in order to execute
|
|
103
|
+
* this task. Task execution will fail if one of these is not defined.
|
|
104
|
+
*/
|
|
105
|
+
readonly requiredEnv?: string[];
|
|
106
|
+
/**
|
|
107
|
+
* A shell command which determines if the this task should be executed. If
|
|
108
|
+
* the program exits with a zero exit code, steps will be executed. A non-zero
|
|
109
|
+
* code means that task will be skipped.
|
|
110
|
+
*/
|
|
111
|
+
readonly condition?: string;
|
|
112
|
+
/**
|
|
113
|
+
* The working directory for all steps in this task (unless overridden by the
|
|
114
|
+
* step).
|
|
115
|
+
*
|
|
116
|
+
* @default - process.cwd()
|
|
117
|
+
*/
|
|
118
|
+
readonly cwd?: string;
|
|
119
|
+
/**
|
|
120
|
+
* The task shell in `tasks.json` form: a keyword (`"projen"` or `"system"`)
|
|
121
|
+
* or an invocation argument list.
|
|
122
|
+
*
|
|
123
|
+
* @default - the built-in projen shell
|
|
124
|
+
*/
|
|
125
|
+
readonly shell?: string | string[];
|
|
69
126
|
/**
|
|
70
127
|
* Task steps.
|
|
71
128
|
*/
|
|
@@ -99,7 +156,7 @@ export interface TaskStepOptions {
|
|
|
99
156
|
* If `true`, args are passed through at the end of the `exec` shell command.\
|
|
100
157
|
* The position of the args can be changed by including the marker `$@` inside the command string.
|
|
101
158
|
*
|
|
102
|
-
* If the marker is explicitly double-quoted ("$@") arguments will be wrapped in
|
|
159
|
+
* If the marker is explicitly double-quoted ("$@") arguments will be wrapped in double quotes, approximating
|
|
103
160
|
* the whitespace preserving behavior of bash variable expansion.
|
|
104
161
|
*
|
|
105
162
|
* If the step spawns a subtask, args are passed to the subtask.
|
|
@@ -142,12 +199,71 @@ export interface TaskStepOptions {
|
|
|
142
199
|
readonly env?: {
|
|
143
200
|
[name: string]: string;
|
|
144
201
|
};
|
|
202
|
+
/**
|
|
203
|
+
* The shell used to run this step, overriding the task/project shell.
|
|
204
|
+
*
|
|
205
|
+
* @see {@link TaskCommonOptions.shell}
|
|
206
|
+
* @default - the task's (or project's) shell
|
|
207
|
+
*/
|
|
208
|
+
readonly shell?: TaskShell;
|
|
145
209
|
}
|
|
146
210
|
/**
|
|
147
211
|
* A single step within a task. The step could either be the execution of a
|
|
148
212
|
* shell command or execution of a sub-task, by name.
|
|
213
|
+
*
|
|
214
|
+
* The `tasks.json` (manifest) form of a step. {@link TaskStepOptions} is the
|
|
215
|
+
* form used to define steps (via `task.exec()` etc.); they differ only in the
|
|
216
|
+
* rendered `shell` field.
|
|
149
217
|
*/
|
|
150
|
-
export interface TaskStep
|
|
218
|
+
export interface TaskStep {
|
|
219
|
+
/**
|
|
220
|
+
* Step name
|
|
221
|
+
*
|
|
222
|
+
* @default - no name
|
|
223
|
+
*/
|
|
224
|
+
readonly name?: string;
|
|
225
|
+
/**
|
|
226
|
+
* The working directory for this step.
|
|
227
|
+
*
|
|
228
|
+
* @default - determined by the task
|
|
229
|
+
*/
|
|
230
|
+
readonly cwd?: string;
|
|
231
|
+
/**
|
|
232
|
+
* A shell command which determines if the this step should be executed. If
|
|
233
|
+
* the program exits with a zero exit code, the step will be executed. A non-zero
|
|
234
|
+
* code means the step will be skipped (subsequent task steps will still be evaluated/executed).
|
|
235
|
+
*/
|
|
236
|
+
readonly condition?: string;
|
|
237
|
+
/**
|
|
238
|
+
* Should this step receive args passed to the task.
|
|
239
|
+
*
|
|
240
|
+
* @see {@link TaskStepOptions.receiveArgs}
|
|
241
|
+
* @default false
|
|
242
|
+
*/
|
|
243
|
+
readonly receiveArgs?: boolean;
|
|
244
|
+
/**
|
|
245
|
+
* A list of fixed arguments always passed to the step.
|
|
246
|
+
*
|
|
247
|
+
* @see {@link TaskStepOptions.args}
|
|
248
|
+
* @default - no arguments are passed to the step
|
|
249
|
+
*/
|
|
250
|
+
readonly args?: string[];
|
|
251
|
+
/**
|
|
252
|
+
* Defines environment variables for the execution of this step (`exec` and `builtin` only).
|
|
253
|
+
*
|
|
254
|
+
* @see {@link TaskStepOptions.env}
|
|
255
|
+
* @default - no environment variables defined in step
|
|
256
|
+
*/
|
|
257
|
+
readonly env?: {
|
|
258
|
+
[name: string]: string;
|
|
259
|
+
};
|
|
260
|
+
/**
|
|
261
|
+
* The step shell in `tasks.json` form: a keyword (`"projen"` or `"system"`)
|
|
262
|
+
* or an invocation argument list.
|
|
263
|
+
*
|
|
264
|
+
* @default - the task's (or project's) shell
|
|
265
|
+
*/
|
|
266
|
+
readonly shell?: string | string[];
|
|
151
267
|
/**
|
|
152
268
|
* Shell command to execute.
|
|
153
269
|
*
|
package/lib/task-model.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNjaGVtYSBmb3IgYHRhc2tzLmpzb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tzTWFuaWZlc3Qge1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHRhc2tzIG1hbmlmZXN0IHNjaGVtYS5cbiAgICpcbiAgICogVXNlZCBieSB0aGUgdGFzayBydW50aW1lIHRvIGRldGVjdCBtYW5pZmVzdHMgcHJvZHVjZWQgYnkgYSBuZXdlciB2ZXJzaW9uXG4gICAqIG9mIHByb2plbi4gTWFuaWZlc3RzIGdlbmVyYXRlZCBieSBvbGRlciB2ZXJzaW9ucyBvZiBwcm9qZW4gb21pdCB0aGlzIGZpZWxkXG4gICAqIGFuZCBhcmUgdHJlYXRlZCBhcyBcImxlZ2FjeVwiIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbWFuaWZlc3QgaXMgdHJlYXRlZCBhcyBhIGxlZ2FjeSAodW52ZXJzaW9uZWQpIG1hbmlmZXN0XG4gICAqL1xuICByZWFkb25seSBtYW5pZmVzdFZlcnNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFsbCB0YXNrcyBhdmFpbGFibGUgZm9yIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhc2tzPzogeyBbbmFtZTogc3RyaW5nXTogVGFza1NwZWMgfTtcblxuICAvKipcbiAgICogRW52aXJvbm1lbnQgZm9yIGFsbCB0YXNrcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGlzIGJ1aWxkIGNvbW1hbmQuXG4gICAqIEBkZWZhdWx0IC0gdGhlIHRhc2sgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgdGFzay5cbiAgICogVmFsdWVzIGluIHRoaXMgbWFwIHdpbGwgYmUgZXZhbHVhdGVkIGluIGEgc2hlbGwsIHNvIHlvdSBjYW4gZG8gc3R1ZmYgbGlrZSBgJChlY2hvIFwiZm9vXCIpYC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZXhlY3V0ZVxuICAgKiB0aGlzIHRhc2suIFRhc2sgZXhlY3V0aW9uIHdpbGwgZmFpbCBpZiBvbmUgb2YgdGhlc2UgaXMgbm90IGRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZEVudj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIHNoZWxsIGNvbW1hbmQgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgdGhpcyB0YXNrIHNob3VsZCBiZSBleGVjdXRlZC4gSWZcbiAgICogdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBhIHplcm8gZXhpdCBjb2RlLCBzdGVwcyB3aWxsIGJlIGV4ZWN1dGVkLiBBIG5vbi16ZXJvXG4gICAqIGNvZGUgbWVhbnMgdGhhdCB0YXNrIHdpbGwgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmRpdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciBhbGwgc3RlcHMgaW4gdGhpcyB0YXNrICh1bmxlc3Mgb3ZlcnJpZGRlbiBieSB0aGVcbiAgICogc3RlcCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvY2Vzcy5jd2QoKVxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNwZWNpZmljYXRpb24gb2YgYSBzaW5nbGUgdGFzay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrU3BlYyBleHRlbmRzIFRhc2tDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRhc2sgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGFzayBzdGVwcy5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzPzogVGFza1N0ZXBbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0YXNrIHN0ZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhc2tTdGVwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBTdGVwIG5hbWVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoaXMgc3RlcC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXRlcm1pbmVkIGJ5IHRoZSB0YXNrXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc2hlbGwgY29tbWFuZCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSB0aGlzIHN0ZXAgc2hvdWxkIGJlIGV4ZWN1dGVkLiBJZlxuICAgKiB0aGUgcHJvZ3JhbSBleGl0cyB3aXRoIGEgemVybyBleGl0IGNvZGUsIHRoZSBzdGVwIHdpbGwgYmUgZXhlY3V0ZWQuIEEgbm9uLXplcm9cbiAgICogY29kZSBtZWFucyB0aGUgc3RlcCB3aWxsIGJlIHNraXBwZWQgKHN1YnNlcXVlbnQgdGFzayBzdGVwcyB3aWxsIHN0aWxsIGJlIGV2YWx1YXRlZC9leGVjdXRlZCkuXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGlzIHN0ZXAgcmVjZWl2ZSBhcmdzIHBhc3NlZCB0byB0aGUgdGFzay5cbiAgICpcbiAgICogSWYgYHRydWVgLCBhcmdzIGFyZSBwYXNzZWQgdGhyb3VnaCBhdCB0aGUgZW5kIG9mIHRoZSBgZXhlY2Agc2hlbGwgY29tbWFuZC5cXFxuICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIGFyZ3MgY2FuIGJlIGNoYW5nZWQgYnkgaW5jbHVkaW5nIHRoZSBtYXJrZXIgYCRAYCBpbnNpZGUgdGhlIGNvbW1hbmQgc3RyaW5nLlxuICAgKlxuICAgKiBJZiB0aGUgbWFya2VyIGlzIGV4cGxpY2l0bHkgZG91YmxlLXF1b3RlZCAoXCIkQFwiKSBhcmd1bWVudHMgd2lsbCBiZSB3cmFwcGVkIGluIHNpbmdsZSBxdW90ZXMsIGFwcHJveGltYXRpbmdcbiAgICogdGhlIHdoaXRlc3BhY2UgcHJlc2VydmluZyBiZWhhdmlvciBvZiBiYXNoIHZhcmlhYmxlIGV4cGFuc2lvbi5cbiAgICpcbiAgICogSWYgdGhlIHN0ZXAgc3Bhd25zIGEgc3VidGFzaywgYXJncyBhcmUgcGFzc2VkIHRvIHRoZSBzdWJ0YXNrLlxuICAgKiBUaGUgc3VidGFzayBtdXN0IGRlZmluZSBzdGVwcyByZWNlaXZpbmcgYXJncyBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3QuXG4gICAqXG4gICAqIEBleGFtcGxlIHRhc2suZXhlYyhcImVjaG8gSGVsbG8gJEAgV29ybGQhXCIsIHsgcmVjZWl2ZUFyZ3M6IHRydWUgfSk7XG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWNlaXZlQXJncz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBmaXhlZCBhcmd1bWVudHMgYWx3YXlzIHBhc3NlZCB0byB0aGUgc3RlcC5cbiAgICpcbiAgICogVXNlZnVsIHRvIHJlLXVzZSBleGlzdGluZyB0YXNrcyB3aXRob3V0IGhhdmluZyB0byByZS1kZWZpbmUgdGhlIHdob2xlIHRhc2suXFxcbiAgICogRml4ZWQgYXJncyBhcmUgYWx3YXlzIHBhc3NlZCB0byB0aGUgc3RlcCwgZXZlbiBpZiBgcmVjZWl2ZUFyZ3NgIGlzIGBmYWxzZWBcbiAgICogYW5kIGFyZSBhbHdheXMgcGFzc2VkIGJlZm9yZSBhbnkgYXJncyB0aGUgdGFzayBpcyBjYWxsZWQgd2l0aC5cbiAgICpcbiAgICogSWYgdGhlIHN0ZXAgZXhlY3V0ZXMgYSBzaGVsbCBjb21tYW5kcywgYXJncyBhcmUgcGFzc2VkIHRocm91Z2ggYXQgdGhlIGVuZCBvZiB0aGUgYGV4ZWNgIHNoZWxsIGNvbW1hbmQuXFxcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBhcmdzIGNhbiBiZSBjaGFuZ2VkIGJ5IGluY2x1ZGluZyB0aGUgbWFya2VyIGAkQGAgaW5zaWRlIHRoZSBjb21tYW5kIHN0cmluZy5cbiAgICpcbiAgICogSWYgdGhlIHN0ZXAgc3Bhd25zIGEgc3VidGFzaywgYXJncyBhcmUgcGFzc2VkIHRvIHRoZSBzdWJ0YXNrLlxuICAgKiBUaGUgc3VidGFzayBtdXN0IGRlZmluZSBzdGVwcyByZWNlaXZpbmcgYXJncyBmb3IgdGhpcyB0byBoYXZlIGFueSBlZmZlY3QuXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIGNhbGxzIGEgYnVpbHRpbiBzY3JpcHQsIGFyZ3MgYXJlIHBhc3NlZCB0byB0aGUgc2NyaXB0LlxuICAgKiBJdCBpcyB1cCB0byB0aGUgc2NyaXB0IHRvIHVzZSBvciBkaXNjYXJkIHRoZSBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBleGFtcGxlIHRhc2suc3Bhd24oXCJkZXBsb3lcIiwgeyBhcmdzOiBbXCItLWZvcmNlXCJdIH0pO1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgc3RlcCAoYGV4ZWNgIGFuZCBgYnVpbHRpbmAgb25seSkuXG4gICAqIFZhbHVlcyBpbiB0aGlzIG1hcCBjYW4gYmUgc2ltcGxlLCBsaXRlcmFsIHZhbHVlcyBvciBzaGVsbCBleHByZXNzaW9ucyB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIGF0IHJ1bnRpbWUgZS5nLiBgJChlY2hvIFwiZm9vXCIpYC5cbiAgICpcbiAgICogQGV4YW1wbGUgeyBcImZvb1wiOiBcImJhclwiLCBcImJvb1wiOiBcIiQoZWNobyBiYXopXCIgfVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcyBkZWZpbmVkIGluIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEEgc2luZ2xlIHN0ZXAgd2l0aGluIGEgdGFzay4gVGhlIHN0ZXAgY291bGQgZWl0aGVyIGJlICB0aGUgZXhlY3V0aW9uIG9mIGFcbiAqIHNoZWxsIGNvbW1hbmQgb3IgZXhlY3V0aW9uIG9mIGEgc3ViLXRhc2ssIGJ5IG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1N0ZXAgZXh0ZW5kcyBUYXNrU3RlcE9wdGlvbnMge1xuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlLlxuICAgKlxuICAgKiBUaGUgd2hvbGUgY29tbWFuZCBpcyBhIHNpbmdsZSBzaGVsbCBzdHJpbmcuIFRvIHBhc3MgYXJndW1lbnRzIGFzIGEgbGlzdFxuICAgKiBpbnN0ZWFkIC0gd2l0aG91dCBoYXZpbmcgdG8gcXVvdGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMgeW91cnNlbGYgLVxuICAgKiB1c2UgYGV4ZWNBcmdzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkb24ndCBleGVjdXRlIGEgc2hlbGwgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlYz86IHN0cmluZztcblxuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlLCBwcm92aWRlZCBhcyBhIGxpc3Qgb2YgdGhlIHByb2dyYW0gZm9sbG93ZWQgYnlcbiAgICogaXRzIGFyZ3VtZW50cyAoYW4gXCJhcmd2XCIpLlxuICAgKlxuICAgKiBPZnRlbiBtb3JlIGNvbnZlbmllbnQgdGhhbiBgZXhlY2A6IGVhY2ggZWxlbWVudCBpcyBwYXNzZWQgdG8gdGhlXG4gICAqIHByb2dyYW0gYXMtaXMsIHNvIGFyZ3VtZW50cyB3aXRoIHNwYWNlcyBvciBzcGVjaWFsIGNoYXJhY3RlcnMgZG9uJ3QgbmVlZFxuICAgKiBxdW90aW5nLiBGaXhlZCAoYGFyZ3NgKSBvciByZWNlaXZlZCAoYHJlY2VpdmVBcmdzYCkgYXJndW1lbnRzIGFyZSBpbnNlcnRlZFxuICAgKiB3aGVyZXZlciBhIGAkQGAgZWxlbWVudCBhcHBlYXJzLCBvciBhcHBlbmRlZCBhdCB0aGUgZW5kIGlmIHRoZXJlIGlzIG5vbmUuXG4gICAqXG4gICAqIFRoZSBlbGVtZW50cyBhcmUgbm90IHJ1biB0aHJvdWdoIGEgc2hlbGwsIHNvIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYCRGT09gKVxuICAgKiBhcmUgbm90IGV4cGFuZGVkIGFuZCBvdGhlciBzaGVsbCBmZWF0dXJlcyBhcmUgdW5hdmFpbGFibGUuIFVzZSBgZXhlY2BcbiAgICogaWYgeW91IG5lZWQgdGhlbS5cbiAgICpcbiAgICogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV4ZWNgLlxuICAgKlxuICAgKiBAZXhhbXBsZSB7IGV4ZWNBcmdzOiBbXCJlY2hvXCIsIFwiaGVsbG8gd29ybGRcIl0gfVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvbid0IGV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBleGVjQXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTdWJ0YXNrIHRvIGV4ZWN1dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkb24ndCBzcGF3biBhIHN1YnRhc2tcbiAgICovXG4gIHJlYWRvbmx5IHNwYXduPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmludCBhIG1lc3NhZ2UuXG4gICAqIEBkZWZhdWx0IC0gZG9uJ3Qgc2F5IGFueXRoaW5nXG4gICAqL1xuICByZWFkb25seSBzYXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGEgYnVpbHQtaW4gdGFzayB0byBleGVjdXRlLlxuICAgKlxuICAgKiBCdWlsdC1pbiB0YXNrcyBhcmUgbm9kZS5qcyBwcm9ncmFtcyBiYWtlZCBpbnRvIHRoZSBwcm9qZW4gbW9kdWxlIGFuZCBhc1xuICAgKiBjb21wb25lbnQgcnVudGltZSBoZWxwZXJzLlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2plbiBsaWIvIGRpcmVjdG9yeSAod2l0aG91dCB0aGUgLnRhc2suanMgZXh0ZW5zaW9uKS5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdXIgYnVpbHQgaW4gYnVpbHRpbiB0YXNrIGlzIHVuZGVyIGBzcmMvcmVsZWFzZS9yZXNvbHZlLXZlcnNpb24udGFzay50c2AsXG4gICAqIHRoZW4gdGhpcyB3b3VsZCBiZSBgcmVsZWFzZS9yZXNvbHZlLXZlcnNpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvIG5vdCBleGVjdXRlIGEgYnVpbHRpbiB0YXNrXG4gICAqL1xuICByZWFkb25seSBidWlsdGluPzogc3RyaW5nO1xufVxuIl19
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90YXNrLW1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRhc2tTaGVsbCB9IGZyb20gXCIuL3Rhc2stc2hlbGxcIjtcblxuLyoqXG4gKiBTY2hlbWEgZm9yIGB0YXNrcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrc01hbmlmZXN0IHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSB0YXNrcyBtYW5pZmVzdCBzY2hlbWEuXG4gICAqXG4gICAqIFVzZWQgYnkgdGhlIHRhc2sgcnVudGltZSB0byBkZXRlY3QgbWFuaWZlc3RzIHByb2R1Y2VkIGJ5IGEgbmV3ZXIgdmVyc2lvblxuICAgKiBvZiBwcm9qZW4uIE1hbmlmZXN0cyBnZW5lcmF0ZWQgYnkgb2xkZXIgdmVyc2lvbnMgb2YgcHJvamVuIG9taXQgdGhpcyBmaWVsZFxuICAgKiBhbmQgYXJlIHRyZWF0ZWQgYXMgXCJsZWdhY3lcIiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIG1hbmlmZXN0IGlzIHRyZWF0ZWQgYXMgYSBsZWdhY3kgKHVudmVyc2lvbmVkKSBtYW5pZmVzdFxuICAgKi9cbiAgcmVhZG9ubHkgbWFuaWZlc3RWZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbGwgdGFza3MgYXZhaWxhYmxlIGZvciB0aGlzIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSB0YXNrcz86IHsgW25hbWU6IHN0cmluZ106IFRhc2tTcGVjIH07XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IGZvciBhbGwgdGFza3MuXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdGFzayBzaGVsbCwgaW4gYHRhc2tzLmpzb25gIGZvcm06IGEga2V5d29yZCAoYFwicHJvamVuXCJgIG9yXG4gICAqIGBcInN5c3RlbVwiYCkgb3IgYW4gaW52b2NhdGlvbiBhcmd1bWVudCBsaXN0LiBTZWVcbiAgICoge0BsaW5rIFRhc2tDb21tb25PcHRpb25zLnNoZWxsfS5cbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nIHwgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFza0NvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoaXMgYnVpbGQgY29tbWFuZC5cbiAgICogQGRlZmF1bHQgLSB0aGUgdGFzayBuYW1lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhpcyB0YXNrLlxuICAgKiBWYWx1ZXMgaW4gdGhpcyBtYXAgd2lsbCBiZSBldmFsdWF0ZWQgaW4gYSBzaGVsbCwgc28geW91IGNhbiBkbyBzdHVmZiBsaWtlIGAkKGVjaG8gXCJmb29cIilgLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgZW52PzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byBleGVjdXRlXG4gICAqIHRoaXMgdGFzay4gVGFzayBleGVjdXRpb24gd2lsbCBmYWlsIGlmIG9uZSBvZiB0aGVzZSBpcyBub3QgZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVkRW52Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgc2hlbGwgY29tbWFuZCB3aGljaCBkZXRlcm1pbmVzIGlmIHRoZSB0aGlzIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkLiBJZlxuICAgKiB0aGUgcHJvZ3JhbSBleGl0cyB3aXRoIGEgemVybyBleGl0IGNvZGUsIHN0ZXBzIHdpbGwgYmUgZXhlY3V0ZWQuIEEgbm9uLXplcm9cbiAgICogY29kZSBtZWFucyB0aGF0IHRhc2sgd2lsbCBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIGFsbCBzdGVwcyBpbiB0aGlzIHRhc2sgKHVubGVzcyBvdmVycmlkZGVuIGJ5IHRoZVxuICAgKiBzdGVwKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm9jZXNzLmN3ZCgpXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzaGVsbCB1c2VkIHRvIHJ1biB0aGlzIHRhc2sncyBjb21tYW5kcywgaW5jbHVkaW5nIGl0cyBgY29uZGl0aW9uYCBhbmRcbiAgICogYCQoLi4uKWAgZW52aXJvbm1lbnQgZXZhbHVhdGlvbi4gVXNlIHtAbGluayBUYXNrU2hlbGx9IHRvIHBpY2sgYSBidWlsdC1pblxuICAgKiBvciBhbiBleHBsaWNpdCBpbnZvY2F0aW9uLiBTZXQgYXQgcHJvamVjdCwgdGFzayBvciBzdGVwIGxldmVsOyB0aGUgbmVhcmVzdFxuICAgKiBkZWNsYXJlZCBsZXZlbCB3aW5zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGluaGVyaXRlZCBmcm9tIHRoZSB0YXNrL3Byb2plY3QsIG90aGVyd2lzZSB0aGUgYnVpbHQtaW4gcHJvamVuIHNoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IFRhc2tTaGVsbDtcbn1cblxuLyoqXG4gKiBTcGVjaWZpY2F0aW9uIG9mIGEgc2luZ2xlIHRhc2suXG4gKlxuICogVGhlIGB0YXNrcy5qc29uYCAobWFuaWZlc3QpIGZvcm0gb2YgYSB0YXNrLiB7QGxpbmsgVGFza0NvbW1vbk9wdGlvbnN9IGlzIHRoZVxuICogZm9ybSB1c2VkIHRvIGRlZmluZSBvbmU7IHRoZXkgZGlmZmVyIG9ubHkgaW4gdGhlIHJlbmRlcmVkIGBzaGVsbGAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1NwZWMge1xuICAvKipcbiAgICogVGFzayBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhpcyBidWlsZCBjb21tYW5kLlxuICAgKiBAZGVmYXVsdCAtIHRoZSB0YXNrIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHRhc2suXG4gICAqIFZhbHVlcyBpbiB0aGlzIG1hcCB3aWxsIGJlIGV2YWx1YXRlZCBpbiBhIHNoZWxsLCBzbyB5b3UgY2FuIGRvIHN0dWZmIGxpa2UgYCQoZWNobyBcImZvb1wiKWAuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQSBzZXQgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGV4ZWN1dGVcbiAgICogdGhpcyB0YXNrLiBUYXNrIGV4ZWN1dGlvbiB3aWxsIGZhaWwgaWYgb25lIG9mIHRoZXNlIGlzIG5vdCBkZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRFbnY/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBzaGVsbCBjb21tYW5kIHdoaWNoIGRldGVybWluZXMgaWYgdGhlIHRoaXMgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQuIElmXG4gICAqIHRoZSBwcm9ncmFtIGV4aXRzIHdpdGggYSB6ZXJvIGV4aXQgY29kZSwgc3RlcHMgd2lsbCBiZSBleGVjdXRlZC4gQSBub24temVyb1xuICAgKiBjb2RlIG1lYW5zIHRoYXQgdGFzayB3aWxsIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBjb25kaXRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgYWxsIHN0ZXBzIGluIHRoaXMgdGFzayAodW5sZXNzIG92ZXJyaWRkZW4gYnkgdGhlXG4gICAqIHN0ZXApLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByb2Nlc3MuY3dkKClcbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhc2sgc2hlbGwgaW4gYHRhc2tzLmpzb25gIGZvcm06IGEga2V5d29yZCAoYFwicHJvamVuXCJgIG9yIGBcInN5c3RlbVwiYClcbiAgICogb3IgYW4gaW52b2NhdGlvbiBhcmd1bWVudCBsaXN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBidWlsdC1pbiBwcm9qZW4gc2hlbGxcbiAgICovXG4gIHJlYWRvbmx5IHNoZWxsPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRhc2sgc3RlcHMuXG4gICAqL1xuICByZWFkb25seSBzdGVwcz86IFRhc2tTdGVwW107XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGFzayBzdGVwcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYXNrU3RlcE9wdGlvbnMge1xuICAvKipcbiAgICogU3RlcCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGlzIHN0ZXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBieSB0aGUgdGFza1xuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNoZWxsIGNvbW1hbmQgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgdGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZC4gSWZcbiAgICogdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBhIHplcm8gZXhpdCBjb2RlLCB0aGUgc3RlcCB3aWxsIGJlIGV4ZWN1dGVkLiBBIG5vbi16ZXJvXG4gICAqIGNvZGUgbWVhbnMgdGhlIHN0ZXAgd2lsbCBiZSBza2lwcGVkIChzdWJzZXF1ZW50IHRhc2sgc3RlcHMgd2lsbCBzdGlsbCBiZSBldmFsdWF0ZWQvZXhlY3V0ZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhpcyBzdGVwIHJlY2VpdmUgYXJncyBwYXNzZWQgdG8gdGhlIHRhc2suXG4gICAqXG4gICAqIElmIGB0cnVlYCwgYXJncyBhcmUgcGFzc2VkIHRocm91Z2ggYXQgdGhlIGVuZCBvZiB0aGUgYGV4ZWNgIHNoZWxsIGNvbW1hbmQuXFxcbiAgICogVGhlIHBvc2l0aW9uIG9mIHRoZSBhcmdzIGNhbiBiZSBjaGFuZ2VkIGJ5IGluY2x1ZGluZyB0aGUgbWFya2VyIGAkQGAgaW5zaWRlIHRoZSBjb21tYW5kIHN0cmluZy5cbiAgICpcbiAgICogSWYgdGhlIG1hcmtlciBpcyBleHBsaWNpdGx5IGRvdWJsZS1xdW90ZWQgKFwiJEBcIikgYXJndW1lbnRzIHdpbGwgYmUgd3JhcHBlZCBpbiBkb3VibGUgcXVvdGVzLCBhcHByb3hpbWF0aW5nXG4gICAqIHRoZSB3aGl0ZXNwYWNlIHByZXNlcnZpbmcgYmVoYXZpb3Igb2YgYmFzaCB2YXJpYWJsZSBleHBhbnNpb24uXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIHNwYXducyBhIHN1YnRhc2ssIGFyZ3MgYXJlIHBhc3NlZCB0byB0aGUgc3VidGFzay5cbiAgICogVGhlIHN1YnRhc2sgbXVzdCBkZWZpbmUgc3RlcHMgcmVjZWl2aW5nIGFyZ3MgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZmZWN0LlxuICAgKlxuICAgKiBAZXhhbXBsZSB0YXNrLmV4ZWMoXCJlY2hvIEhlbGxvICRAIFdvcmxkIVwiLCB7IHJlY2VpdmVBcmdzOiB0cnVlIH0pO1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjZWl2ZUFyZ3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZml4ZWQgYXJndW1lbnRzIGFsd2F5cyBwYXNzZWQgdG8gdGhlIHN0ZXAuXG4gICAqXG4gICAqIFVzZWZ1bCB0byByZS11c2UgZXhpc3RpbmcgdGFza3Mgd2l0aG91dCBoYXZpbmcgdG8gcmUtZGVmaW5lIHRoZSB3aG9sZSB0YXNrLlxcXG4gICAqIEZpeGVkIGFyZ3MgYXJlIGFsd2F5cyBwYXNzZWQgdG8gdGhlIHN0ZXAsIGV2ZW4gaWYgYHJlY2VpdmVBcmdzYCBpcyBgZmFsc2VgXG4gICAqIGFuZCBhcmUgYWx3YXlzIHBhc3NlZCBiZWZvcmUgYW55IGFyZ3MgdGhlIHRhc2sgaXMgY2FsbGVkIHdpdGguXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIGV4ZWN1dGVzIGEgc2hlbGwgY29tbWFuZHMsIGFyZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIGF0IHRoZSBlbmQgb2YgdGhlIGBleGVjYCBzaGVsbCBjb21tYW5kLlxcXG4gICAqIFRoZSBwb3NpdGlvbiBvZiB0aGUgYXJncyBjYW4gYmUgY2hhbmdlZCBieSBpbmNsdWRpbmcgdGhlIG1hcmtlciBgJEBgIGluc2lkZSB0aGUgY29tbWFuZCBzdHJpbmcuXG4gICAqXG4gICAqIElmIHRoZSBzdGVwIHNwYXducyBhIHN1YnRhc2ssIGFyZ3MgYXJlIHBhc3NlZCB0byB0aGUgc3VidGFzay5cbiAgICogVGhlIHN1YnRhc2sgbXVzdCBkZWZpbmUgc3RlcHMgcmVjZWl2aW5nIGFyZ3MgZm9yIHRoaXMgdG8gaGF2ZSBhbnkgZWZmZWN0LlxuICAgKlxuICAgKiBJZiB0aGUgc3RlcCBjYWxscyBhIGJ1aWx0aW4gc2NyaXB0LCBhcmdzIGFyZSBwYXNzZWQgdG8gdGhlIHNjcmlwdC5cbiAgICogSXQgaXMgdXAgdG8gdGhlIHNjcmlwdCB0byB1c2Ugb3IgZGlzY2FyZCB0aGUgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAZXhhbXBsZSB0YXNrLnNwYXduKFwiZGVwbG95XCIsIHsgYXJnczogW1wiLS1mb3JjZVwiXSB9KTtcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHN0ZXAgKGBleGVjYCBhbmQgYGJ1aWx0aW5gIG9ubHkpLlxuICAgKiBWYWx1ZXMgaW4gdGhpcyBtYXAgY2FuIGJlIHNpbXBsZSwgbGl0ZXJhbCB2YWx1ZXMgb3Igc2hlbGwgZXhwcmVzc2lvbnMgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCBhdCBydW50aW1lIGUuZy4gYCQoZWNobyBcImZvb1wiKWAuXG4gICAqXG4gICAqIEBleGFtcGxlIHsgXCJmb29cIjogXCJiYXJcIiwgXCJib29cIjogXCIkKGVjaG8gYmF6KVwiIH1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZGVmaW5lZCBpbiBzdGVwXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIHNoZWxsIHVzZWQgdG8gcnVuIHRoaXMgc3RlcCwgb3ZlcnJpZGluZyB0aGUgdGFzay9wcm9qZWN0IHNoZWxsLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUYXNrQ29tbW9uT3B0aW9ucy5zaGVsbH1cbiAgICogQGRlZmF1bHQgLSB0aGUgdGFzaydzIChvciBwcm9qZWN0J3MpIHNoZWxsXG4gICAqL1xuICByZWFkb25seSBzaGVsbD86IFRhc2tTaGVsbDtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSBzdGVwIHdpdGhpbiBhIHRhc2suIFRoZSBzdGVwIGNvdWxkIGVpdGhlciBiZSAgdGhlIGV4ZWN1dGlvbiBvZiBhXG4gKiBzaGVsbCBjb21tYW5kIG9yIGV4ZWN1dGlvbiBvZiBhIHN1Yi10YXNrLCBieSBuYW1lLlxuICpcbiAqIFRoZSBgdGFza3MuanNvbmAgKG1hbmlmZXN0KSBmb3JtIG9mIGEgc3RlcC4ge0BsaW5rIFRhc2tTdGVwT3B0aW9uc30gaXMgdGhlXG4gKiBmb3JtIHVzZWQgdG8gZGVmaW5lIHN0ZXBzICh2aWEgYHRhc2suZXhlYygpYCBldGMuKTsgdGhleSBkaWZmZXIgb25seSBpbiB0aGVcbiAqIHJlbmRlcmVkIGBzaGVsbGAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFza1N0ZXAge1xuICAvKipcbiAgICogU3RlcCBuYW1lXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGlzIHN0ZXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGV0ZXJtaW5lZCBieSB0aGUgdGFza1xuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNoZWxsIGNvbW1hbmQgd2hpY2ggZGV0ZXJtaW5lcyBpZiB0aGUgdGhpcyBzdGVwIHNob3VsZCBiZSBleGVjdXRlZC4gSWZcbiAgICogdGhlIHByb2dyYW0gZXhpdHMgd2l0aCBhIHplcm8gZXhpdCBjb2RlLCB0aGUgc3RlcCB3aWxsIGJlIGV4ZWN1dGVkLiBBIG5vbi16ZXJvXG4gICAqIGNvZGUgbWVhbnMgdGhlIHN0ZXAgd2lsbCBiZSBza2lwcGVkIChzdWJzZXF1ZW50IHRhc2sgc3RlcHMgd2lsbCBzdGlsbCBiZSBldmFsdWF0ZWQvZXhlY3V0ZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZGl0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhpcyBzdGVwIHJlY2VpdmUgYXJncyBwYXNzZWQgdG8gdGhlIHRhc2suXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIFRhc2tTdGVwT3B0aW9ucy5yZWNlaXZlQXJnc31cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlY2VpdmVBcmdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGZpeGVkIGFyZ3VtZW50cyBhbHdheXMgcGFzc2VkIHRvIHRoZSBzdGVwLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUYXNrU3RlcE9wdGlvbnMuYXJnc31cbiAgICogQGRlZmF1bHQgLSBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgYXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHN0ZXAgKGBleGVjYCBhbmQgYGJ1aWx0aW5gIG9ubHkpLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBUYXNrU3RlcE9wdGlvbnMuZW52fVxuICAgKiBAZGVmYXVsdCAtIG5vIGVudmlyb25tZW50IHZhcmlhYmxlcyBkZWZpbmVkIGluIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IGVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgc3RlcCBzaGVsbCBpbiBgdGFza3MuanNvbmAgZm9ybTogYSBrZXl3b3JkIChgXCJwcm9qZW5cImAgb3IgYFwic3lzdGVtXCJgKVxuICAgKiBvciBhbiBpbnZvY2F0aW9uIGFyZ3VtZW50IGxpc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHRhc2sncyAob3IgcHJvamVjdCdzKSBzaGVsbFxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw/OiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlLlxuICAgKlxuICAgKiBUaGUgd2hvbGUgY29tbWFuZCBpcyBhIHNpbmdsZSBzaGVsbCBzdHJpbmcuIFRvIHBhc3MgYXJndW1lbnRzIGFzIGEgbGlzdFxuICAgKiBpbnN0ZWFkIC0gd2l0aG91dCBoYXZpbmcgdG8gcXVvdGUgc3BhY2VzIG9yIG90aGVyIGNoYXJhY3RlcnMgeW91cnNlbGYgLVxuICAgKiB1c2UgYGV4ZWNBcmdzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkb24ndCBleGVjdXRlIGEgc2hlbGwgY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlYz86IHN0cmluZztcblxuICAvKipcbiAgICogU2hlbGwgY29tbWFuZCB0byBleGVjdXRlLCBwcm92aWRlZCBhcyBhIGxpc3Qgb2YgdGhlIHByb2dyYW0gZm9sbG93ZWQgYnlcbiAgICogaXRzIGFyZ3VtZW50cyAoYW4gXCJhcmd2XCIpLlxuICAgKlxuICAgKiBPZnRlbiBtb3JlIGNvbnZlbmllbnQgdGhhbiBgZXhlY2A6IGVhY2ggZWxlbWVudCBpcyBwYXNzZWQgdG8gdGhlXG4gICAqIHByb2dyYW0gYXMtaXMsIHNvIGFyZ3VtZW50cyB3aXRoIHNwYWNlcyBvciBzcGVjaWFsIGNoYXJhY3RlcnMgZG9uJ3QgbmVlZFxuICAgKiBxdW90aW5nLiBGaXhlZCAoYGFyZ3NgKSBvciByZWNlaXZlZCAoYHJlY2VpdmVBcmdzYCkgYXJndW1lbnRzIGFyZSBpbnNlcnRlZFxuICAgKiB3aGVyZXZlciBhIGAkQGAgZWxlbWVudCBhcHBlYXJzLCBvciBhcHBlbmRlZCBhdCB0aGUgZW5kIGlmIHRoZXJlIGlzIG5vbmUuXG4gICAqXG4gICAqIFRoZSBlbGVtZW50cyBhcmUgbm90IHJ1biB0aHJvdWdoIGEgc2hlbGwsIHNvIGVudmlyb25tZW50IHZhcmlhYmxlcyAoYCRGT09gKVxuICAgKiBhcmUgbm90IGV4cGFuZGVkIGFuZCBvdGhlciBzaGVsbCBmZWF0dXJlcyBhcmUgdW5hdmFpbGFibGUuIFVzZSBgZXhlY2BcbiAgICogaWYgeW91IG5lZWQgdGhlbS5cbiAgICpcbiAgICogTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGV4ZWNgLlxuICAgKlxuICAgKiBAZXhhbXBsZSB7IGV4ZWNBcmdzOiBbXCJlY2hvXCIsIFwiaGVsbG8gd29ybGRcIl0gfVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvbid0IGV4ZWN1dGUgYSBzaGVsbCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBleGVjQXJncz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTdWJ0YXNrIHRvIGV4ZWN1dGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkb24ndCBzcGF3biBhIHN1YnRhc2tcbiAgICovXG4gIHJlYWRvbmx5IHNwYXduPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcmludCBhIG1lc3NhZ2UuXG4gICAqIEBkZWZhdWx0IC0gZG9uJ3Qgc2F5IGFueXRoaW5nXG4gICAqL1xuICByZWFkb25seSBzYXk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGEgYnVpbHQtaW4gdGFzayB0byBleGVjdXRlLlxuICAgKlxuICAgKiBCdWlsdC1pbiB0YXNrcyBhcmUgbm9kZS5qcyBwcm9ncmFtcyBiYWtlZCBpbnRvIHRoZSBwcm9qZW4gbW9kdWxlIGFuZCBhc1xuICAgKiBjb21wb25lbnQgcnVudGltZSBoZWxwZXJzLlxuICAgKlxuICAgKiBUaGUgbmFtZSBpcyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlIHByb2plbiBsaWIvIGRpcmVjdG9yeSAod2l0aG91dCB0aGUgLnRhc2suanMgZXh0ZW5zaW9uKS5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdXIgYnVpbHQgaW4gYnVpbHRpbiB0YXNrIGlzIHVuZGVyIGBzcmMvcmVsZWFzZS9yZXNvbHZlLXZlcnNpb24udGFzay50c2AsXG4gICAqIHRoZW4gdGhpcyB3b3VsZCBiZSBgcmVsZWFzZS9yZXNvbHZlLXZlcnNpb25gLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRvIG5vdCBleGVjdXRlIGEgYnVpbHRpbiB0YXNrXG4gICAqL1xuICByZWFkb25seSBidWlsdGluPzogc3RyaW5nO1xufVxuIl19
|