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.
Files changed (220) hide show
  1. package/.jsii +1677 -3664
  2. package/BREAKING_CHANGES.md +855 -0
  3. package/lib/ai-instructions.d.ts +0 -1
  4. package/lib/ai-instructions.js +6 -12
  5. package/lib/awscdk/auto-discover.js +7 -14
  6. package/lib/awscdk/awscdk-app-java.d.ts +0 -7
  7. package/lib/awscdk/awscdk-app-java.js +28 -21
  8. package/lib/awscdk/awscdk-app-py.d.ts +0 -12
  9. package/lib/awscdk/awscdk-app-py.js +27 -24
  10. package/lib/awscdk/awscdk-app-ts.d.ts +0 -5
  11. package/lib/awscdk/awscdk-app-ts.js +57 -31
  12. package/lib/awscdk/awscdk-construct.d.ts +0 -26
  13. package/lib/awscdk/awscdk-construct.js +4 -44
  14. package/lib/awscdk/awscdk-deps-java.js +2 -6
  15. package/lib/awscdk/awscdk-deps-js.js +2 -7
  16. package/lib/awscdk/awscdk-deps-py.js +2 -7
  17. package/lib/awscdk/awscdk-deps.d.ts +1 -90
  18. package/lib/awscdk/awscdk-deps.js +68 -114
  19. package/lib/awscdk/cdk-config.d.ts +0 -21
  20. package/lib/awscdk/cdk-config.js +44 -51
  21. package/lib/awscdk/cdk-tasks.js +26 -4
  22. package/lib/awscdk/integration-test.js +10 -15
  23. package/lib/awscdk/internal.js +5 -2
  24. package/lib/awscdk/lambda-extension.js +4 -16
  25. package/lib/awscdk/lambda-function.d.ts +0 -10
  26. package/lib/awscdk/lambda-function.js +88 -78
  27. package/lib/awscdk/private/feature-flags-v2.const.d.ts +1 -1
  28. package/lib/awscdk/private/feature-flags-v2.const.js +2 -2
  29. package/lib/build/build-workflow.js +51 -6
  30. package/lib/builtin-example.task.d.ts +1 -0
  31. package/lib/builtin-example.task.js +2 -1
  32. package/lib/cdk/auto-discover-base.js +43 -8
  33. package/lib/cdk/construct-lib.js +2 -4
  34. package/lib/cdk/integration-test-base.js +26 -4
  35. package/lib/cdk/jsii-build.d.ts +0 -1
  36. package/lib/cdk/jsii-build.js +4 -4
  37. package/lib/cdk/jsii-docgen.js +2 -4
  38. package/lib/cdk/jsii-project.d.ts +12 -9
  39. package/lib/cdk/jsii-project.js +22 -7
  40. package/lib/cdk8s/auto-discover.js +3 -6
  41. package/lib/cdk8s/cdk8s-app-py.js +7 -4
  42. package/lib/cdk8s/cdk8s-app-ts.js +43 -6
  43. package/lib/cdk8s/cdk8s-construct.js +44 -5
  44. package/lib/cdk8s/cdk8s-deps-py.js +2 -4
  45. package/lib/cdk8s/cdk8s-deps.js +50 -5
  46. package/lib/cdk8s/integration-test.js +2 -4
  47. package/lib/cdktf/cdktf-construct.js +36 -5
  48. package/lib/circleci/circleci.js +66 -44
  49. package/lib/cleanup.js +38 -5
  50. package/lib/cli/cmds/new.js +51 -20
  51. package/lib/cli/cmds/run-task.js +107 -0
  52. package/lib/cli/{synth.d.ts → cmds/synth.d.ts} +0 -5
  53. package/lib/cli/cmds/synth.js +90 -0
  54. package/lib/cli/index.js +47 -22
  55. package/lib/cli/macros.js +35 -2
  56. package/lib/{task-runtime.d.ts → cli/task-runtime.d.ts} +13 -2
  57. package/lib/cli/task-runtime.js +411 -0
  58. package/lib/cli/util.js +37 -4
  59. package/lib/component.js +3 -4
  60. package/lib/dependencies.js +43 -12
  61. package/lib/dev-env.js +10 -4
  62. package/lib/docker-compose/docker-compose-service.js +54 -4
  63. package/lib/docker-compose/docker-compose.js +8 -4
  64. package/lib/file.js +60 -5
  65. package/lib/gitattributes.js +7 -5
  66. package/lib/github/actions-provider.js +3 -7
  67. package/lib/github/auto-approve.js +3 -4
  68. package/lib/github/auto-merge.js +3 -5
  69. package/lib/github/auto-queue.js +36 -5
  70. package/lib/github/dependabot.js +13 -4
  71. package/lib/github/dependency-review.js +2 -4
  72. package/lib/github/github-credentials.js +37 -5
  73. package/lib/github/github-project.d.ts +1 -32
  74. package/lib/github/github-project.js +30 -8
  75. package/lib/github/github.d.ts +0 -9
  76. package/lib/github/github.js +27 -14
  77. package/lib/github/index.js +24 -2
  78. package/lib/github/merge-queue.js +3 -4
  79. package/lib/github/mergify.d.ts +0 -7
  80. package/lib/github/mergify.js +6 -13
  81. package/lib/github/pr-template.js +2 -4
  82. package/lib/github/pull-request-backport.js +4 -4
  83. package/lib/github/pull-request-lint.js +4 -4
  84. package/lib/github/stale.js +2 -4
  85. package/lib/github/task-workflow-job.js +20 -4
  86. package/lib/github/task-workflow.js +4 -4
  87. package/lib/github/workflow-actions.d.ts +0 -8
  88. package/lib/github/workflow-actions.js +2 -14
  89. package/lib/github/workflow-jobs.js +2 -4
  90. package/lib/github/workflow-steps.js +2 -4
  91. package/lib/github/workflows-model.d.ts +0 -8
  92. package/lib/github/workflows-model.js +1 -1
  93. package/lib/github/workflows.js +39 -6
  94. package/lib/gitlab/configuration-model.d.ts +0 -4
  95. package/lib/gitlab/configuration-model.js +1 -1
  96. package/lib/gitlab/configuration.js +125 -41
  97. package/lib/gitlab/gitlab-configuration.js +3 -5
  98. package/lib/gitlab/nested-configuration.js +3 -4
  99. package/lib/gitpod.js +11 -7
  100. package/lib/ignore-file.js +5 -4
  101. package/lib/index.d.ts +1 -2
  102. package/lib/index.js +38 -18
  103. package/lib/ini.js +36 -5
  104. package/lib/inventory.d.ts +32 -23
  105. package/lib/inventory.js +37 -4
  106. package/lib/java/java-project.js +26 -4
  107. package/lib/java/junit.js +2 -4
  108. package/lib/java/maven-compile.js +2 -4
  109. package/lib/java/maven-packaging.js +6 -4
  110. package/lib/java/maven-sample.js +2 -4
  111. package/lib/java/pom.js +45 -12
  112. package/lib/java/projenrc.js +10 -4
  113. package/lib/javascript/biome/biome.js +48 -6
  114. package/lib/javascript/bundler.d.ts +0 -8
  115. package/lib/javascript/bundler.js +48 -11
  116. package/lib/javascript/eslint.d.ts +0 -13
  117. package/lib/javascript/eslint.js +38 -37
  118. package/lib/javascript/index.js +24 -2
  119. package/lib/javascript/jest.d.ts +0 -20
  120. package/lib/javascript/jest.js +71 -15
  121. package/lib/javascript/license-checker.js +3 -4
  122. package/lib/javascript/node-package.d.ts +0 -28
  123. package/lib/javascript/node-package.js +136 -38
  124. package/lib/javascript/node-project.d.ts +5 -76
  125. package/lib/javascript/node-project.js +88 -81
  126. package/lib/javascript/npm-config.js +7 -9
  127. package/lib/javascript/prettier.js +16 -4
  128. package/lib/javascript/projenrc.js +3 -4
  129. package/lib/javascript/render-options.d.ts +2 -2
  130. package/lib/javascript/render-options.js +36 -5
  131. package/lib/javascript/typescript-config.js +45 -8
  132. package/lib/javascript/upgrade-dependencies.js +56 -36
  133. package/lib/javascript/util.js +35 -2
  134. package/lib/javascript/yarnrc.d.ts +1 -28
  135. package/lib/javascript/yarnrc.js +3 -45
  136. package/lib/json-patch.js +3 -4
  137. package/lib/json.js +4 -5
  138. package/lib/license.js +37 -5
  139. package/lib/logger.js +14 -11
  140. package/lib/logging.js +10 -7
  141. package/lib/makefile.js +7 -4
  142. package/lib/object-file.js +19 -4
  143. package/lib/project-build.js +26 -4
  144. package/lib/project-tree.js +3 -4
  145. package/lib/project.d.ts +0 -35
  146. package/lib/project.js +105 -58
  147. package/lib/projects.js +37 -6
  148. package/lib/projenrc-json.d.ts +0 -10
  149. package/lib/projenrc-json.js +4 -13
  150. package/lib/projenrc.js +2 -4
  151. package/lib/python/index.js +24 -2
  152. package/lib/python/pip.js +5 -4
  153. package/lib/python/poetry.js +63 -7
  154. package/lib/python/projenrc.js +10 -4
  155. package/lib/python/pyproject-toml-file.js +2 -4
  156. package/lib/python/pytest-sample.js +2 -4
  157. package/lib/python/pytest.d.ts +0 -12
  158. package/lib/python/pytest.js +3 -5
  159. package/lib/python/python-project.js +33 -10
  160. package/lib/python/python-sample.js +2 -4
  161. package/lib/python/requirements-file.js +4 -5
  162. package/lib/python/setuppy.d.ts +0 -8
  163. package/lib/python/setuppy.js +3 -4
  164. package/lib/python/setuptools.js +8 -4
  165. package/lib/python/uv.js +11 -4
  166. package/lib/python/venv.js +45 -6
  167. package/lib/readme.js +2 -4
  168. package/lib/release/bump-version.js +36 -3
  169. package/lib/release/bump-version.task.js +35 -2
  170. package/lib/release/commit-tag-version.js +39 -3
  171. package/lib/release/publisher.d.ts +0 -49
  172. package/lib/release/publisher.js +24 -22
  173. package/lib/release/release-trigger.js +33 -4
  174. package/lib/release/release.d.ts +0 -24
  175. package/lib/release/release.js +66 -31
  176. package/lib/release/tag-version.js +35 -2
  177. package/lib/release/update-changelog.js +36 -3
  178. package/lib/renovatebot.js +14 -4
  179. package/lib/run-projenrc-json.task.js +35 -2
  180. package/lib/run-task.cjs +12567 -271
  181. package/lib/sample-file.js +43 -9
  182. package/lib/smithy/smithy-build.js +46 -1
  183. package/lib/source-code.js +6 -5
  184. package/lib/task-runner.d.ts +25 -0
  185. package/lib/task-runner.js +92 -0
  186. package/lib/task.d.ts +0 -7
  187. package/lib/task.js +13 -13
  188. package/lib/tasks.d.ts +5 -9
  189. package/lib/tasks.js +64 -23
  190. package/lib/testing.js +2 -4
  191. package/lib/textfile.js +3 -4
  192. package/lib/toml.js +36 -5
  193. package/lib/typescript/projenrc-ts.js +8 -4
  194. package/lib/typescript/projenrc.js +6 -4
  195. package/lib/typescript/typescript-typedoc.js +2 -4
  196. package/lib/typescript/typescript.d.ts +0 -10
  197. package/lib/typescript/typescript.js +75 -29
  198. package/lib/util/synth.js +39 -6
  199. package/lib/util.js +38 -5
  200. package/lib/version.d.ts +0 -4
  201. package/lib/version.js +24 -10
  202. package/lib/vscode/devcontainer.js +11 -4
  203. package/lib/vscode/extensions.js +17 -18
  204. package/lib/vscode/launch-config.js +5 -6
  205. package/lib/vscode/settings.js +4 -4
  206. package/lib/vscode/vscode.js +5 -4
  207. package/lib/web/next.js +38 -8
  208. package/lib/web/postcss.js +5 -4
  209. package/lib/web/react.d.ts +0 -14
  210. package/lib/web/react.js +51 -25
  211. package/lib/web/tailwind.js +4 -4
  212. package/lib/xmlfile.js +2 -4
  213. package/lib/yaml.js +40 -5
  214. package/package.json +8 -9
  215. package/lib/cli/synth.js +0 -105
  216. package/lib/cli/tasks.js +0 -71
  217. package/lib/semver.d.ts +0 -34
  218. package/lib/semver.js +0 -56
  219. package/lib/task-runtime.js +0 -317
  220. /package/lib/cli/{tasks.d.ts → cmds/run-task.d.ts} +0 -0
package/lib/cli/tasks.js DELETED
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.discoverTaskCommands = discoverTaskCommands;
4
- const chalk = require("chalk");
5
- const helpers_1 = require("yargs/helpers");
6
- const logging = require("../logging");
7
- /**
8
- * Reads .projen/tasks.json and adds CLI commands for all tasks.
9
- * @param ya yargs
10
- */
11
- function discoverTaskCommands(runtime, ya) {
12
- const tasks = runtime.manifest.tasks ?? {};
13
- for (const task of Object.values(tasks)) {
14
- ya.command(task.name, task.description ?? "", taskCommandHandler(task));
15
- }
16
- function taskCommandHandler(task) {
17
- return (args) => {
18
- const taskReceivesArgs = task.steps?.reduce((receiveArgs, step) => receiveArgs || (step.receiveArgs ?? false), false);
19
- let taskArgs = [];
20
- if (taskReceivesArgs) {
21
- args.help(false);
22
- args.strict(false);
23
- args.strictCommands(false);
24
- taskArgs = (0, helpers_1.hideBin)(process.argv).slice(1);
25
- }
26
- args.option("inspect", {
27
- alias: "i",
28
- desc: "show all steps in this task",
29
- });
30
- const argv = args.argv;
31
- if (argv.inspect) {
32
- return inspectTask(task.name);
33
- }
34
- else {
35
- try {
36
- runtime.runTask(task.name, [], taskArgs);
37
- }
38
- catch (e) {
39
- logging.error(e.message);
40
- process.exit(1);
41
- }
42
- }
43
- };
44
- }
45
- function inspectTask(name, indent = 0) {
46
- const writeln = (s) => console.log(" ".repeat(indent) + s);
47
- const task = runtime.tryFindTask(name);
48
- if (!task) {
49
- throw new Error(`${name}: unable to resolve subtask with name "${name}"`);
50
- }
51
- if (task.description) {
52
- writeln(`${chalk.underline("description")}: ${task.description}`);
53
- }
54
- for (const [k, v] of Object.entries(task.env ?? {})) {
55
- writeln(`${chalk.underline("env")}: ${k}=${v}`);
56
- }
57
- for (const step of task.steps ?? []) {
58
- if (step.spawn) {
59
- writeln(`- ${chalk.bold(step.spawn)}`);
60
- inspectTask(step.spawn, indent + 2);
61
- }
62
- else if (step.exec) {
63
- writeln(`- exec: ${step.exec}`);
64
- }
65
- else if (step.builtin) {
66
- writeln(`- builtin: ${step.builtin}`);
67
- }
68
- }
69
- }
70
- }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFza3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL3Rhc2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBV0Esb0RBbUVDO0FBOUVELCtCQUErQjtBQUUvQiwyQ0FBd0M7QUFDeEMsc0NBQXNDO0FBSXRDOzs7R0FHRztBQUNILFNBQWdCLG9CQUFvQixDQUFDLE9BQW9CLEVBQUUsRUFBYztJQUN2RSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDM0MsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDeEMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELFNBQVMsa0JBQWtCLENBQUMsSUFBYztRQUN4QyxPQUFPLENBQUMsSUFBZ0IsRUFBRSxFQUFFO1lBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQ3pDLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsRUFDakUsS0FBSyxDQUNOLENBQUM7WUFDRixJQUFJLFFBQVEsR0FBMkIsRUFBRSxDQUFDO1lBQzFDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDM0IsUUFBUSxHQUFHLElBQUEsaUJBQU8sRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtnQkFDckIsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsSUFBSSxFQUFFLDZCQUE2QjthQUNwQyxDQUFDLENBQUM7WUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRXZCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQztvQkFDSCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO2dCQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTLFdBQVcsQ0FBQyxJQUFZLEVBQUUsTUFBTSxHQUFHLENBQUM7UUFDM0MsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVuRSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxJQUFJLDBDQUEwQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3hCLE9BQU8sQ0FBQyxjQUFjLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGFsayBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB0eXBlICogYXMgeWFyZ3MgZnJvbSBcInlhcmdzXCI7XG5pbXBvcnQgeyBoaWRlQmluIH0gZnJvbSBcInlhcmdzL2hlbHBlcnNcIjtcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSBcIi4uL2xvZ2dpbmdcIjtcbmltcG9ydCB0eXBlIHsgVGFza1NwZWMgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBUYXNrUnVudGltZSB9IGZyb20gXCIuLi90YXNrLXJ1bnRpbWVcIjtcblxuLyoqXG4gKiBSZWFkcyAucHJvamVuL3Rhc2tzLmpzb24gYW5kIGFkZHMgQ0xJIGNvbW1hbmRzIGZvciBhbGwgdGFza3MuXG4gKiBAcGFyYW0geWEgeWFyZ3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpc2NvdmVyVGFza0NvbW1hbmRzKHJ1bnRpbWU6IFRhc2tSdW50aW1lLCB5YTogeWFyZ3MuQXJndikge1xuICBjb25zdCB0YXNrcyA9IHJ1bnRpbWUubWFuaWZlc3QudGFza3MgPz8ge307XG4gIGZvciAoY29uc3QgdGFzayBvZiBPYmplY3QudmFsdWVzKHRhc2tzKSkge1xuICAgIHlhLmNvbW1hbmQodGFzay5uYW1lLCB0YXNrLmRlc2NyaXB0aW9uID8/IFwiXCIsIHRhc2tDb21tYW5kSGFuZGxlcih0YXNrKSk7XG4gIH1cblxuICBmdW5jdGlvbiB0YXNrQ29tbWFuZEhhbmRsZXIodGFzazogVGFza1NwZWMpIHtcbiAgICByZXR1cm4gKGFyZ3M6IHlhcmdzLkFyZ3YpID0+IHtcbiAgICAgIGNvbnN0IHRhc2tSZWNlaXZlc0FyZ3MgPSB0YXNrLnN0ZXBzPy5yZWR1Y2UoXG4gICAgICAgIChyZWNlaXZlQXJncywgc3RlcCkgPT4gcmVjZWl2ZUFyZ3MgfHwgKHN0ZXAucmVjZWl2ZUFyZ3MgPz8gZmFsc2UpLFxuICAgICAgICBmYWxzZSxcbiAgICAgICk7XG4gICAgICBsZXQgdGFza0FyZ3M6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXTtcbiAgICAgIGlmICh0YXNrUmVjZWl2ZXNBcmdzKSB7XG4gICAgICAgIGFyZ3MuaGVscChmYWxzZSk7XG4gICAgICAgIGFyZ3Muc3RyaWN0KGZhbHNlKTtcbiAgICAgICAgYXJncy5zdHJpY3RDb21tYW5kcyhmYWxzZSk7XG4gICAgICAgIHRhc2tBcmdzID0gaGlkZUJpbihwcm9jZXNzLmFyZ3YpLnNsaWNlKDEpO1xuICAgICAgfVxuXG4gICAgICBhcmdzLm9wdGlvbihcImluc3BlY3RcIiwge1xuICAgICAgICBhbGlhczogXCJpXCIsXG4gICAgICAgIGRlc2M6IFwic2hvdyBhbGwgc3RlcHMgaW4gdGhpcyB0YXNrXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgYXJndiA9IGFyZ3MuYXJndjtcblxuICAgICAgaWYgKGFyZ3YuaW5zcGVjdCkge1xuICAgICAgICByZXR1cm4gaW5zcGVjdFRhc2sodGFzay5uYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcnVudGltZS5ydW5UYXNrKHRhc2submFtZSwgW10sIHRhc2tBcmdzKTtcbiAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgbG9nZ2luZy5lcnJvcihlLm1lc3NhZ2UpO1xuICAgICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBpbnNwZWN0VGFzayhuYW1lOiBzdHJpbmcsIGluZGVudCA9IDApIHtcbiAgICBjb25zdCB3cml0ZWxuID0gKHM6IHN0cmluZykgPT4gY29uc29sZS5sb2coXCIgXCIucmVwZWF0KGluZGVudCkgKyBzKTtcblxuICAgIGNvbnN0IHRhc2sgPSBydW50aW1lLnRyeUZpbmRUYXNrKG5hbWUpO1xuICAgIGlmICghdGFzaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke25hbWV9OiB1bmFibGUgdG8gcmVzb2x2ZSBzdWJ0YXNrIHdpdGggbmFtZSBcIiR7bmFtZX1cImApO1xuICAgIH1cblxuICAgIGlmICh0YXNrLmRlc2NyaXB0aW9uKSB7XG4gICAgICB3cml0ZWxuKGAke2NoYWxrLnVuZGVybGluZShcImRlc2NyaXB0aW9uXCIpfTogJHt0YXNrLmRlc2NyaXB0aW9ufWApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRhc2suZW52ID8/IHt9KSkge1xuICAgICAgd3JpdGVsbihgJHtjaGFsay51bmRlcmxpbmUoXCJlbnZcIil9OiAke2t9PSR7dn1gKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGFzay5zdGVwcyA/PyBbXSkge1xuICAgICAgaWYgKHN0ZXAuc3Bhd24pIHtcbiAgICAgICAgd3JpdGVsbihgLSAke2NoYWxrLmJvbGQoc3RlcC5zcGF3bil9YCk7XG4gICAgICAgIGluc3BlY3RUYXNrKHN0ZXAuc3Bhd24sIGluZGVudCArIDIpO1xuICAgICAgfSBlbHNlIGlmIChzdGVwLmV4ZWMpIHtcbiAgICAgICAgd3JpdGVsbihgLSBleGVjOiAke3N0ZXAuZXhlY31gKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcC5idWlsdGluKSB7XG4gICAgICAgIHdyaXRlbG4oYC0gYnVpbHRpbjogJHtzdGVwLmJ1aWx0aW59YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
package/lib/semver.d.ts DELETED
@@ -1,34 +0,0 @@
1
- /**
2
- * @deprecated This class will be removed in upcoming releases. if you wish to
3
- * specify semver requirements in `deps`, `devDeps`, etc, specify them like so
4
- * `express@^2.1`.
5
- */
6
- export declare class Semver {
7
- readonly spec: string;
8
- static of(spec: string): Semver;
9
- /**
10
- * Latest version.
11
- */
12
- static latest(): Semver;
13
- /**
14
- * Accept only an exact version
15
- */
16
- static pinned(version: string): Semver;
17
- /**
18
- * Accept any minor version.
19
- *
20
- * >= version
21
- * < next major version
22
- */
23
- static caret(version: string): Semver;
24
- /**
25
- * Accept patches.
26
- *
27
- * >= version
28
- * < next minor version
29
- */
30
- static tilde(version: string): Semver;
31
- readonly mode?: string;
32
- private constructor();
33
- get version(): string | undefined;
34
- }
package/lib/semver.js DELETED
@@ -1,56 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Semver = void 0;
5
- const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const semver = require("semver");
7
- /**
8
- * @deprecated This class will be removed in upcoming releases. if you wish to
9
- * specify semver requirements in `deps`, `devDeps`, etc, specify them like so
10
- * `express@^2.1`.
11
- */
12
- class Semver {
13
- static of(spec) {
14
- return new Semver(spec);
15
- }
16
- /**
17
- * Latest version.
18
- */
19
- static latest() {
20
- return new Semver("*");
21
- }
22
- /**
23
- * Accept only an exact version
24
- */
25
- static pinned(version) {
26
- return new Semver(version);
27
- }
28
- /**
29
- * Accept any minor version.
30
- *
31
- * >= version
32
- * < next major version
33
- */
34
- static caret(version) {
35
- return new Semver(`^${version}`);
36
- }
37
- /**
38
- * Accept patches.
39
- *
40
- * >= version
41
- * < next minor version
42
- */
43
- static tilde(version) {
44
- return new Semver(`~${version}`);
45
- }
46
- constructor(spec) {
47
- this.spec = spec;
48
- }
49
- get version() {
50
- return semver.minVersion(this.spec)?.version;
51
- }
52
- }
53
- exports.Semver = Semver;
54
- _a = JSII_RTTI_SYMBOL_1;
55
- Semver[_a] = { fqn: "projen.Semver", version: "0.99.80" };
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VtdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlbXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlDQUFpQztBQUVqQzs7OztHQUlHO0FBQ0gsTUFBYSxNQUFNO0lBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFZO1FBQzNCLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksTUFBTSxDQUFDLE1BQU07UUFDbEIsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQWU7UUFDbEMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQWU7UUFDakMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFlO1FBQ2pDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFJRCxZQUFvQyxJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtJQUFHLENBQUM7SUFFcEQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQy9DLENBQUM7O0FBN0NILHdCQThDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBjbGFzcyB3aWxsIGJlIHJlbW92ZWQgaW4gdXBjb21pbmcgcmVsZWFzZXMuIGlmIHlvdSB3aXNoIHRvXG4gKiBzcGVjaWZ5IHNlbXZlciByZXF1aXJlbWVudHMgaW4gYGRlcHNgLCBgZGV2RGVwc2AsIGV0Yywgc3BlY2lmeSB0aGVtIGxpa2Ugc29cbiAqIGBleHByZXNzQF4yLjFgLlxuICovXG5leHBvcnQgY2xhc3MgU2VtdmVyIHtcbiAgcHVibGljIHN0YXRpYyBvZihzcGVjOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFNlbXZlcihzcGVjKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXRlc3QgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbGF0ZXN0KCkge1xuICAgIHJldHVybiBuZXcgU2VtdmVyKFwiKlwiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgb25seSBhbiBleGFjdCB2ZXJzaW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBpbm5lZCh2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFNlbXZlcih2ZXJzaW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2NlcHQgYW55IG1pbm9yIHZlcnNpb24uXG4gICAqXG4gICAqID49IHZlcnNpb25cbiAgICogPCBuZXh0IG1ham9yIHZlcnNpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FyZXQodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBTZW12ZXIoYF4ke3ZlcnNpb259YCk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXB0IHBhdGNoZXMuXG4gICAqXG4gICAqID49IHZlcnNpb25cbiAgICogPCBuZXh0IG1pbm9yIHZlcnNpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdGlsZGUodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBTZW12ZXIoYH4ke3ZlcnNpb259YCk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBzcGVjOiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIGdldCB2ZXJzaW9uKCkge1xuICAgIHJldHVybiBzZW12ZXIubWluVmVyc2lvbih0aGlzLnNwZWMpPy52ZXJzaW9uO1xuICB9XG59XG4iXX0=
@@ -1,317 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.TaskRuntime = void 0;
5
- const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const child_process_1 = require("child_process");
7
- const fs_1 = require("fs");
8
- const path_1 = require("path");
9
- const path = require("path");
10
- const util_1 = require("util");
11
- const chalk_1 = require("chalk");
12
- const common_1 = require("./common");
13
- const logging = require("./logging");
14
- // avoids a (false positive) esbuild warning about incorrect imports
15
- // eslint-disable-next-line @typescript-eslint/no-require-imports
16
- const parseConflictJSON = require("parse-conflict-json");
17
- const ENV_TRIM_LEN = 20;
18
- const ARGS_MARKER = "$@";
19
- const QUOTED_ARGS_MARKER = `"${ARGS_MARKER}"`;
20
- /**
21
- * The runtime component of the tasks engine.
22
- */
23
- class TaskRuntime {
24
- constructor(workdir) {
25
- this.workdir = (0, path_1.resolve)(workdir);
26
- const manifestPath = (0, path_1.join)(this.workdir, TaskRuntime.MANIFEST_FILE);
27
- this.manifest = (0, fs_1.existsSync)(manifestPath)
28
- ? parseConflictJSON((0, fs_1.readFileSync)(manifestPath, "utf-8"), undefined, "theirs")
29
- : { tasks: {} };
30
- }
31
- /**
32
- * The tasks in this project.
33
- */
34
- get tasks() {
35
- return Object.values(this.manifest.tasks ?? {});
36
- }
37
- /**
38
- * Find a task by name, or `undefined` if not found.
39
- */
40
- tryFindTask(name) {
41
- if (!this.manifest.tasks) {
42
- return undefined;
43
- }
44
- return this.manifest.tasks[name];
45
- }
46
- /**
47
- * Runs the task.
48
- * @param name The task name.
49
- */
50
- runTask(name, parents = [], args = [], env = {}) {
51
- const task = this.tryFindTask(name);
52
- if (!task) {
53
- throw new Error(`cannot find command ${task}`);
54
- }
55
- new RunTask(this, task, parents, args, env);
56
- }
57
- }
58
- exports.TaskRuntime = TaskRuntime;
59
- _a = JSII_RTTI_SYMBOL_1;
60
- TaskRuntime[_a] = { fqn: "projen.TaskRuntime", version: "0.99.80" };
61
- /**
62
- * The project-relative path of the tasks manifest file.
63
- */
64
- TaskRuntime.MANIFEST_FILE = path.posix.join(common_1.PROJEN_DIR, "tasks.json");
65
- class RunTask {
66
- constructor(runtime, task, parents = [], args = [], envParam = {}) {
67
- this.runtime = runtime;
68
- this.task = task;
69
- this.env = {};
70
- this.workdir = task.cwd ?? this.runtime.workdir;
71
- this.parents = parents;
72
- if (!task.steps || task.steps.length === 0) {
73
- this.logDebug((0, chalk_1.gray)("No actions have been specified for this task."));
74
- return;
75
- }
76
- this.env = this.resolveEnvironment(envParam, parents);
77
- const envlogs = [];
78
- for (const [k, v] of Object.entries(this.env)) {
79
- const vv = v ?? "";
80
- const trimmed = vv.length > ENV_TRIM_LEN ? vv.substr(0, ENV_TRIM_LEN) + "..." : vv;
81
- envlogs.push(`${k}=${trimmed}`);
82
- }
83
- if (envlogs.length) {
84
- this.logDebug((0, chalk_1.gray)(`${(0, chalk_1.underline)("env")}: ${envlogs.join(" ")}`));
85
- }
86
- // evaluate condition
87
- if (!this.evalCondition(task)) {
88
- this.log("condition exited with non-zero - skipping");
89
- return;
90
- }
91
- // verify we required environment variables are defined
92
- const merged = { ...process.env, ...this.env };
93
- const missing = new Array();
94
- for (const name of task.requiredEnv ?? []) {
95
- if (!(name in merged)) {
96
- missing.push(name);
97
- }
98
- }
99
- if (missing.length > 0) {
100
- throw new Error(`missing required environment variables: ${missing.join(",")}`);
101
- }
102
- for (const step of task.steps) {
103
- // evaluate step condition
104
- if (!this.evalCondition(step)) {
105
- this.log("condition exited with non-zero - skipping");
106
- continue;
107
- }
108
- const argsList = [
109
- ...(step.args || []),
110
- ...(step.receiveArgs ? args : []),
111
- ].map((a) => a.toString());
112
- if (step.say) {
113
- logging.info(this.fmtLog(step.say));
114
- }
115
- if (step.spawn) {
116
- this.runtime.runTask(step.spawn, [...this.parents, this.task.name], argsList, step.env);
117
- }
118
- const execs = step.exec ? [step.exec] : [];
119
- // Parse step-specific environment variables
120
- const env = this.evalEnvironment(step.env ?? {});
121
- if (step.builtin) {
122
- execs.push(this.renderBuiltin(step.builtin));
123
- }
124
- for (const exec of execs) {
125
- let hasError = false;
126
- let command = exec;
127
- if (command.includes(QUOTED_ARGS_MARKER)) {
128
- // Poorly imitate bash quoted variable expansion. If "$@" is encountered in bash, elements of the arg array
129
- // that contain whitespace will be single quoted ('arg'). This preserves whitespace in things like filenames.
130
- // Imitate that behavior here by single quoting every element of the arg array when a quoted arg marker ("$@")
131
- // is encountered.
132
- command = command.replace(QUOTED_ARGS_MARKER, argsList.map((arg) => `'${arg}'`).join(" "));
133
- }
134
- else if (command.includes(ARGS_MARKER)) {
135
- command = command.replace(ARGS_MARKER, argsList.join(" "));
136
- }
137
- else {
138
- command = [command, ...argsList].join(" ");
139
- }
140
- const cwd = step.cwd;
141
- try {
142
- const result = this.shell({
143
- command,
144
- cwd,
145
- extraEnv: env,
146
- });
147
- hasError = result.status !== 0;
148
- }
149
- catch (e) {
150
- // This is the error 'shx' will throw
151
- if (e?.message?.startsWith("non-zero exit code:")) {
152
- hasError = true;
153
- }
154
- throw e;
155
- }
156
- if (hasError) {
157
- throw new Error(`Task "${this.fullname}" failed when executing "${command}" (cwd: ${(0, path_1.resolve)(cwd ?? this.workdir)})`);
158
- }
159
- }
160
- }
161
- }
162
- /**
163
- * Determines if a task should be executed based on "condition".
164
- *
165
- * @returns true if the task should be executed or false if the condition
166
- * evaluates to false (exits with non-zero), indicating that the task should
167
- * be skipped.
168
- */
169
- evalCondition(taskOrStep) {
170
- // no condition, carry on
171
- if (!taskOrStep.condition) {
172
- return true;
173
- }
174
- this.log((0, chalk_1.gray)(`${(0, chalk_1.underline)("condition")}: ${taskOrStep.condition}`));
175
- const result = this.shell({
176
- command: taskOrStep.condition,
177
- logprefix: "condition: ",
178
- quiet: true,
179
- });
180
- if (result.status === 0) {
181
- return true;
182
- }
183
- else {
184
- return false;
185
- }
186
- }
187
- /**
188
- * Evaluates environment variables from shell commands (e.g. `$(xx)`)
189
- */
190
- evalEnvironment(env) {
191
- const output = {};
192
- for (const [key, value] of Object.entries(env ?? {})) {
193
- if (String(value).startsWith("$(") && String(value).endsWith(")")) {
194
- const query = value.substring(2, value.length - 1);
195
- const result = this.shellEval({ command: query });
196
- if (result.status !== 0) {
197
- const error = result.error
198
- ? result.error.stack
199
- : result.stderr?.toString().trim() ||
200
- result.stdout?.toString().trim() ||
201
- `command exited with code ${result.status}`;
202
- 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.`));
203
- logging.warn(this.fmtLog(`${(0, chalk_1.underline)(key)}: ${error}`));
204
- }
205
- else {
206
- output[key] = result.stdout.toString("utf-8").trim();
207
- }
208
- }
209
- else {
210
- output[key] = value;
211
- }
212
- }
213
- return output;
214
- }
215
- /**
216
- * Renders the runtime environment for a task. Namely, it supports this syntax
217
- * `$(xx)` for allowing environment to be evaluated by executing a shell
218
- * command and obtaining its result.
219
- */
220
- resolveEnvironment(envParam, parents) {
221
- let env = this.runtime.manifest.env ?? {};
222
- // add env from all parent tasks one by one
223
- for (const parent of parents) {
224
- env = {
225
- ...env,
226
- ...(this.runtime.tryFindTask(parent)?.env ?? {}),
227
- };
228
- }
229
- // apply task environment, then the specific env last
230
- env = {
231
- ...env,
232
- ...(this.task.env ?? {}),
233
- ...envParam,
234
- };
235
- return this.evalEnvironment(env ?? {});
236
- }
237
- /**
238
- * Returns the "full name" of the task which includes all it's parent task names concatenated by chevrons.
239
- */
240
- get fullname() {
241
- return [...this.parents, this.task.name].join(" » ");
242
- }
243
- log(...args) {
244
- logging.verbose(this.fmtLog(...args));
245
- }
246
- logDebug(...args) {
247
- logging.debug(this.fmtLog(...args));
248
- }
249
- fmtLog(...args) {
250
- return (0, util_1.format)(`${(0, chalk_1.underline)(this.fullname)} |`, ...args);
251
- }
252
- shell(options) {
253
- const quiet = options.quiet ?? false;
254
- if (!quiet) {
255
- const log = new Array();
256
- if (options.logprefix) {
257
- log.push(options.logprefix);
258
- }
259
- log.push(options.command);
260
- if (options.cwd) {
261
- log.push(`(cwd: ${options.cwd})`);
262
- }
263
- this.log(log.join(" "));
264
- }
265
- const cwd = options.cwd ?? this.workdir;
266
- if (!(0, fs_1.existsSync)(cwd) || !(0, fs_1.statSync)(cwd).isDirectory()) {
267
- throw new Error(`invalid workdir (cwd): ${cwd} must be an existing directory`);
268
- }
269
- const env = {
270
- ...process.env,
271
- ...this.env,
272
- ...options.extraEnv,
273
- };
274
- // On Windows the default shell (cmd.exe) does not understand the POSIX-style
275
- // commands projen tasks are written in (`cat`, `cp`, `mkdir -p`, `rm -rf`,
276
- // `&&` chains, `$VAR`, ...). Run the command through dax's cross-platform
277
- // shell instead, which ships built-in implementations of the common
278
- // commands. dax executes commands asynchronously, but the task runtime is
279
- // synchronous (tasks run during synthesis), so we drive dax from a
280
- // synchronous child `node` process.
281
- if (process.platform === "win32") {
282
- const dax = require.resolve("dax");
283
- const runner = `const { CommandBuilder } = require(${JSON.stringify(dax)}); new CommandBuilder().command(process.argv[1]).noThrow().spawn().then((r) => process.exit(r.code), (e) => { console.error(e?.stack ?? String(e)); process.exit(1); });`;
284
- return (0, child_process_1.spawnSync)(process.execPath, ["-e", runner, options.command], {
285
- ...options,
286
- cwd,
287
- shell: false,
288
- stdio: "inherit",
289
- env,
290
- ...options.spawnOptions,
291
- });
292
- }
293
- return (0, child_process_1.spawnSync)(options.command, {
294
- ...options,
295
- cwd,
296
- shell: true,
297
- stdio: "inherit",
298
- env,
299
- ...options.spawnOptions,
300
- });
301
- }
302
- shellEval(options) {
303
- return this.shell({
304
- quiet: true,
305
- ...options,
306
- spawnOptions: {
307
- stdio: ["inherit", "pipe", "pipe"],
308
- },
309
- });
310
- }
311
- renderBuiltin(builtin) {
312
- const moduleRoot = (0, path_1.dirname)(require.resolve("../package.json"));
313
- const program = require.resolve((0, path_1.join)(moduleRoot, "lib", `${builtin}.task.js`));
314
- return `"${process.execPath}" "${program}"`;
315
- }
316
- }
317
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rhc2stcnVudGltZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLGlEQUEwQztBQUMxQywyQkFBd0Q7QUFDeEQsK0JBQThDO0FBQzlDLDZCQUE2QjtBQUM3QiwrQkFBOEI7QUFDOUIsaUNBQXdDO0FBQ3hDLHFDQUFzQztBQUN0QyxxQ0FBcUM7QUFHckMsb0VBQW9FO0FBQ3BFLGlFQUFpRTtBQUNqRSxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRXpELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDekIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLFdBQVcsR0FBRyxDQUFDO0FBRTlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBbUJ0QixZQUFZLE9BQWU7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFBLFdBQUksRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUEsZUFBVSxFQUFDLFlBQVksQ0FBQztZQUN0QyxDQUFDLENBQUMsaUJBQWlCLENBQ2YsSUFBQSxpQkFBWSxFQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsRUFDbkMsU0FBUyxFQUNULFFBQVEsQ0FDVDtZQUNILENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLEtBQUs7UUFDZCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztP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Q0FDOUMsQ0FBQztRQUNGLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgeyBncmF5LCB1bmRlcmxpbmUgfSBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIgfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCAqIGFzIGxvZ2dpbmcgZnJvbSBcIi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrc01hbmlmZXN0LCBUYXNrU3BlYywgVGFza1N0ZXAgfSBmcm9tIFwiLi90YXNrLW1vZGVsXCI7XG5cbi8vIGF2b2lkcyBhIChmYWxzZSBwb3NpdGl2ZSkgZXNidWlsZCB3YXJuaW5nIGFib3V0IGluY29ycmVjdCBpbXBvcnRzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgcGFyc2VDb25mbGljdEpTT04gPSByZXF1aXJlKFwicGFyc2UtY29uZmxpY3QtanNvblwiKTtcblxuY29uc3QgRU5WX1RSSU1fTEVOID0gMjA7XG5jb25zdCBBUkdTX01BUktFUiA9IFwiJEBcIjtcbmNvbnN0IFFVT1RFRF9BUkdTX01BUktFUiA9IGBcIiR7QVJHU19NQVJLRVJ9XCJgO1xuXG4vKipcbiAqIFRoZSBydW50aW1lIGNvbXBvbmVudCBvZiB0aGUgdGFza3MgZW5naW5lLlxuICovXG5leHBvcnQgY2xhc3MgVGFza1J1bnRpbWUge1xuICAvKipcbiAgICogVGhlIHByb2plY3QtcmVsYXRpdmUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOSUZFU1RfRklMRSA9IHBhdGgucG9zaXguam9pbihcbiAgICBQUk9KRU5fRElSLFxuICAgIFwidGFza3MuanNvblwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGFza3MuanNvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hbmlmZXN0OiBUYXNrc01hbmlmZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgYW5kIHRoZSBjd2QgZm9yIGV4ZWN1dGluZyB0YXNrcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iod29ya2Rpcjogc3RyaW5nKSB7XG4gICAgdGhpcy53b3JrZGlyID0gcmVzb2x2ZSh3b3JrZGlyKTtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKHRoaXMud29ya2RpciwgVGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRSk7XG4gICAgdGhpcy5tYW5pZmVzdCA9IGV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKVxuICAgICAgPyBwYXJzZUNvbmZsaWN0SlNPTihcbiAgICAgICAgICByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBcInRoZWlyc1wiLFxuICAgICAgICApXG4gICAgICA6IHsgdGFza3M6IHt9IH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhc2tzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFza3MoKTogVGFza1NwZWNbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tYW5pZmVzdC50YXNrcyA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHRhc2sgYnkgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeUZpbmRUYXNrKG5hbWU6IHN0cmluZyk6IFRhc2tTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWFuaWZlc3QudGFza3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRhc2tzW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHRhc2suXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgcnVuVGFzayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApIHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy50cnlGaW5kVGFzayhuYW1lKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgY29tbWFuZCAke3Rhc2t9YCk7XG4gICAgfVxuXG4gICAgbmV3IFJ1blRhc2sodGhpcywgdGFzaywgcGFyZW50cywgYXJncywgZW52KTtcbiAgfVxufVxuXG5jbGFzcyBSdW5UYXNrIHtcbiAgcHJpdmF0ZSByZWFkb25seSBlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50czogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lOiBUYXNrUnVudGltZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2s6IFRhc2tTcGVjLFxuICAgIHBhcmVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgYXJnczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFtdLFxuICAgIGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLndvcmtkaXIgPSB0YXNrLmN3ZCA/PyB0aGlzLnJ1bnRpbWUud29ya2RpcjtcblxuICAgIHRoaXMucGFyZW50cyA9IHBhcmVudHM7XG5cbiAgICBpZiAoIXRhc2suc3RlcHMgfHwgdGFzay5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubG9nRGVidWcoZ3JheShcIk5vIGFjdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZCBmb3IgdGhpcyB0YXNrLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbnYgPSB0aGlzLnJlc29sdmVFbnZpcm9ubWVudChlbnZQYXJhbSwgcGFyZW50cyk7XG5cbiAgICBjb25zdCBlbnZsb2dzID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5lbnYpKSB7XG4gICAgICBjb25zdCB2diA9IHYgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPVxuICAgICAgICB2di5sZW5ndGggPiBFTlZfVFJJTV9MRU4gPyB2di5zdWJzdHIoMCwgRU5WX1RSSU1fTEVOKSArIFwiLi4uXCIgOiB2djtcbiAgICAgIGVudmxvZ3MucHVzaChgJHtrfT0ke3RyaW1tZWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKGVudmxvZ3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoYCR7dW5kZXJsaW5lKFwiZW52XCIpfTogJHtlbnZsb2dzLmpvaW4oXCIgXCIpfWApKTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0ZSBjb25kaXRpb25cbiAgICBpZiAoIXRoaXMuZXZhbENvbmRpdGlvbih0YXNrKSkge1xuICAgICAgdGhpcy5sb2coXCJjb25kaXRpb24gZXhpdGVkIHdpdGggbm9uLXplcm8gLSBza2lwcGluZ1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZnkgd2UgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBkZWZpbmVkXG4gICAgY29uc3QgbWVyZ2VkID0geyAuLi5wcm9jZXNzLmVudiwgLi4udGhpcy5lbnYgfTtcbiAgICBjb25zdCBtaXNzaW5nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGFzay5yZXF1aXJlZEVudiA/PyBbXSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBtZXJnZWQpKSB7XG4gICAgICAgIG1pc3NpbmcucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtaXNzaW5nIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlczogJHttaXNzaW5nLmpvaW4oXCIsXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0YXNrLnN0ZXBzKSB7XG4gICAgICAvLyBldmFsdWF0ZSBzdGVwIGNvbmRpdGlvblxuICAgICAgaWYgKCF0aGlzLmV2YWxDb25kaXRpb24oc3RlcCkpIHtcbiAgICAgICAgdGhpcy5sb2coXCJjb25kaXRpb24gZXhpdGVkIHdpdGggbm9uLXplcm8gLSBza2lwcGluZ1wiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3NMaXN0OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4uKHN0ZXAuYXJncyB8fCBbXSksXG4gICAgICAgIC4uLihzdGVwLnJlY2VpdmVBcmdzID8gYXJncyA6IFtdKSxcbiAgICAgIF0ubWFwKChhKSA9PiBhLnRvU3RyaW5nKCkpO1xuXG4gICAgICBpZiAoc3RlcC5zYXkpIHtcbiAgICAgICAgbG9nZ2luZy5pbmZvKHRoaXMuZm10TG9nKHN0ZXAuc2F5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnNwYXduKSB7XG4gICAgICAgIHRoaXMucnVudGltZS5ydW5UYXNrKFxuICAgICAgICAgIHN0ZXAuc3Bhd24sXG4gICAgICAgICAgWy4uLnRoaXMucGFyZW50cywgdGhpcy50YXNrLm5hbWVdLFxuICAgICAgICAgIGFyZ3NMaXN0LFxuICAgICAgICAgIHN0ZXAuZW52LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleGVjcyA9IHN0ZXAuZXhlYyA/IFtzdGVwLmV4ZWNdIDogW107XG5cbiAgICAgIC8vIFBhcnNlIHN0ZXAtc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICBjb25zdCBlbnYgPSB0aGlzLmV2YWxFbnZpcm9ubWVudChzdGVwLmVudiA/PyB7fSk7XG5cbiAgICAgIGlmIChzdGVwLmJ1aWx0aW4pIHtcbiAgICAgICAgZXhlY3MucHVzaCh0aGlzLnJlbmRlckJ1aWx0aW4oc3RlcC5idWlsdGluKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXhlYyBvZiBleGVjcykge1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29tbWFuZCA9IGV4ZWM7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoUVVPVEVEX0FSR1NfTUFSS0VSKSkge1xuICAgICAgICAgIC8vIFBvb3JseSBpbWl0YXRlIGJhc2ggcXVvdGVkIHZhcmlhYmxlIGV4cGFuc2lvbi4gSWYgXCIkQFwiIGlzIGVuY291bnRlcmVkIGluIGJhc2gsIGVsZW1lbnRzIG9mIHRoZSBhcmcgYXJyYXlcbiAgICAgICAgICAvLyB0aGF0IGNvbnRhaW4gd2hpdGVzcGFjZSB3aWxsIGJlIHNpbmdsZSBxdW90ZWQgKCdhcmcnKS4gVGhpcyBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSBpbiB0aGluZ3MgbGlrZSBmaWxlbmFtZXMuXG4gICAgICAgICAgLy8gSW1pdGF0ZSB0aGF0IGJlaGF2aW9yIGhlcmUgYnkgc2luZ2xlIHF1b3RpbmcgZXZlcnkgZWxlbWVudCBvZiB0aGUgYXJnIGFycmF5IHdoZW4gYSBxdW90ZWQgYXJnIG1hcmtlciAoXCIkQFwiKVxuICAgICAgICAgIC8vIGlzIGVuY291bnRlcmVkLlxuICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoXG4gICAgICAgICAgICBRVU9URURfQVJHU19NQVJLRVIsXG4gICAgICAgICAgICBhcmdzTGlzdC5tYXAoKGFyZykgPT4gYCcke2FyZ30nYCkuam9pbihcIiBcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLmluY2x1ZGVzKEFSR1NfTUFSS0VSKSkge1xuICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoQVJHU19NQVJLRVIsIGFyZ3NMaXN0LmpvaW4oXCIgXCIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kID0gW2NvbW1hbmQsIC4uLmFyZ3NMaXN0XS5qb2luKFwiIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHN0ZXAuY3dkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc2hlbGwoe1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIGV4dHJhRW52OiBlbnYsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaGFzRXJyb3IgPSByZXN1bHQuc3RhdHVzICE9PSAwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZXJyb3IgJ3NoeCcgd2lsbCB0aHJvd1xuICAgICAgICAgIGlmICgoZSBhcyBhbnkpPy5tZXNzYWdlPy5zdGFydHNXaXRoKFwibm9uLXplcm8gZXhpdCBjb2RlOlwiKSkge1xuICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUYXNrIFwiJHtcbiAgICAgICAgICAgICAgdGhpcy5mdWxsbmFtZVxuICAgICAgICAgICAgfVwiIGZhaWxlZCB3aGVuIGV4ZWN1dGluZyBcIiR7Y29tbWFuZH1cIiAoY3dkOiAke3Jlc29sdmUoXG4gICAgICAgICAgICAgIGN3ZCA/PyB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgICApfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhc2VkIG9uIFwiY29uZGl0aW9uXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkIG9yIGZhbHNlIGlmIHRoZSBjb25kaXRpb25cbiAgICogZXZhbHVhdGVzIHRvIGZhbHNlIChleGl0cyB3aXRoIG5vbi16ZXJvKSwgaW5kaWNhdGluZyB0aGF0IHRoZSB0YXNrIHNob3VsZFxuICAgKiBiZSBza2lwcGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBldmFsQ29uZGl0aW9uKHRhc2tPclN0ZXA6IFRhc2tTcGVjIHwgVGFza1N0ZXApIHtcbiAgICAvLyBubyBjb25kaXRpb24sIGNhcnJ5IG9uXG4gICAgaWYgKCF0YXNrT3JTdGVwLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2coZ3JheShgJHt1bmRlcmxpbmUoXCJjb25kaXRpb25cIil9OiAke3Rhc2tPclN0ZXAuY29uZGl0aW9ufWApKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNoZWxsKHtcbiAgICAgIGNvbW1hbmQ6IHRhc2tPclN0ZXAuY29uZGl0aW9uLFxuICAgICAgbG9ncHJlZml4OiBcImNvbmRpdGlvbjogXCIsXG4gICAgICBxdWlldDogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIHNoZWxsIGNvbW1hbmRzIChlLmcuIGAkKHh4KWApXG4gICAqL1xuICBwcml2YXRlIGV2YWxFbnZpcm9ubWVudChlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgY29uc3Qgb3V0cHV0OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52ID8/IHt9KSkge1xuICAgICAgaWYgKFN0cmluZyh2YWx1ZSkuc3RhcnRzV2l0aChcIiQoXCIpICYmIFN0cmluZyh2YWx1ZSkuZW5kc1dpdGgoXCIpXCIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdmFsdWUuc3Vic3RyaW5nKDIsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnNoZWxsRXZhbCh7IGNvbW1hbmQ6IHF1ZXJ5IH0pO1xuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yXG4gICAgICAgICAgICA/IHJlc3VsdC5lcnJvci5zdGFja1xuICAgICAgICAgICAgOiByZXN1bHQuc3RkZXJyPy50b1N0cmluZygpLnRyaW0oKSB8fFxuICAgICAgICAgICAgICByZXN1bHQuc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKSB8fFxuICAgICAgICAgICAgICBgY29tbWFuZCBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gO1xuXG4gICAgICAgICAgbG9nZ2luZy53YXJuKFxuICAgICAgICAgICAgdGhpcy5mbXRMb2coXG4gICAgICAgICAgICAgIGAke3VuZGVybGluZShrZXkpfTogdW5hYmxlIHRvIGV2YWx1YXRlIFwiJHtxdWVyeX1cIi4gRW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBza2lwcGVkLiBDaGVjayB0aGF0IHRoZSBjb21tYW5kIGV4aXN0cyBhbmQgcnVucyBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsb2dnaW5nLndhcm4odGhpcy5mbXRMb2coYCR7dW5kZXJsaW5lKGtleSl9OiAke2Vycm9yfWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXRba2V5XSA9IHJlc3VsdC5zdGRvdXQudG9TdHJpbmcoXCJ1dGYtOFwiKS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3IgYSB0YXNrLiBOYW1lbHksIGl0IHN1cHBvcnRzIHRoaXMgc3ludGF4XG4gICAqIGAkKHh4KWAgZm9yIGFsbG93aW5nIGVudmlyb25tZW50IHRvIGJlIGV2YWx1YXRlZCBieSBleGVjdXRpbmcgYSBzaGVsbFxuICAgKiBjb21tYW5kIGFuZCBvYnRhaW5pbmcgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUVudmlyb25tZW50KFxuICAgIGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgbGV0IGVudiA9IHRoaXMucnVudGltZS5tYW5pZmVzdC5lbnYgPz8ge307XG5cbiAgICAvLyBhZGQgZW52IGZyb20gYWxsIHBhcmVudCB0YXNrcyBvbmUgYnkgb25lXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50cykge1xuICAgICAgZW52ID0ge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIC4uLih0aGlzLnJ1bnRpbWUudHJ5RmluZFRhc2socGFyZW50KT8uZW52ID8/IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdGFzayBlbnZpcm9ubWVudCwgdGhlbiB0aGUgc3BlY2lmaWMgZW52IGxhc3RcbiAgICBlbnYgPSB7XG4gICAgICAuLi5lbnYsXG4gICAgICAuLi4odGhpcy50YXNrLmVudiA/PyB7fSksXG4gICAgICAuLi5lbnZQYXJhbSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXZhbEVudmlyb25tZW50KGVudiA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgXCJmdWxsIG5hbWVcIiBvZiB0aGUgdGFzayB3aGljaCBpbmNsdWRlcyBhbGwgaXQncyBwYXJlbnQgdGFzayBuYW1lcyBjb25jYXRlbmF0ZWQgYnkgY2hldnJvbnMuXG4gICAqL1xuICBwcml2YXRlIGdldCBmdWxsbmFtZSgpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucGFyZW50cywgdGhpcy50YXNrLm5hbWVdLmpvaW4oXCIgwrsgXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dnaW5nLnZlcmJvc2UodGhpcy5mbXRMb2coLi4uYXJncykpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dEZWJ1ZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxvZ2dpbmcuZGVidWcodGhpcy5mbXRMb2coLi4uYXJncykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbXRMb2coLi4uYXJnczogYW55W10pIHtcbiAgICByZXR1cm4gZm9ybWF0KGAke3VuZGVybGluZSh0aGlzLmZ1bGxuYW1lKX0gfGAsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBzaGVsbChvcHRpb25zOiBTaGVsbE9wdGlvbnMpIHtcbiAgICBjb25zdCBxdWlldCA9IG9wdGlvbnMucXVpZXQgPz8gZmFsc2U7XG4gICAgaWYgKCFxdWlldCkge1xuICAgICAgY29uc3QgbG9nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgICAgaWYgKG9wdGlvbnMubG9ncHJlZml4KSB7XG4gICAgICAgIGxvZy5wdXNoKG9wdGlvbnMubG9ncHJlZml4KTtcbiAgICAgIH1cblxuICAgICAgbG9nLnB1c2gob3B0aW9ucy5jb21tYW5kKTtcblxuICAgICAgaWYgKG9wdGlvbnMuY3dkKSB7XG4gICAgICAgIGxvZy5wdXNoKGAoY3dkOiAke29wdGlvbnMuY3dkfSlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cobG9nLmpvaW4oXCIgXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjd2QgPSBvcHRpb25zLmN3ZCA/PyB0aGlzLndvcmtkaXI7XG4gICAgaWYgKCFleGlzdHNTeW5jKGN3ZCkgfHwgIXN0YXRTeW5jKGN3ZCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgaW52YWxpZCB3b3JrZGlyIChjd2QpOiAke2N3ZH0gbXVzdCBiZSBhbiBleGlzdGluZyBkaXJlY3RvcnlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLnRoaXMuZW52LFxuICAgICAgLi4ub3B0aW9ucy5leHRyYUVudixcbiAgICB9O1xuXG4gICAgLy8gT24gV2luZG93cyB0aGUgZGVmYXVsdCBzaGVsbCAoY21kLmV4ZSkgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUE9TSVgtc3R5bGVcbiAgICAvLyBjb21tYW5kcyBwcm9qZW4gdGFza3MgYXJlIHdyaXR0ZW4gaW4gKGBjYXRgLCBgY3BgLCBgbWtkaXIgLXBgLCBgcm0gLXJmYCxcbiAgICAvLyBgJiZgIGNoYWlucywgYCRWQVJgLCAuLi4pLiBSdW4gdGhlIGNvbW1hbmQgdGhyb3VnaCBkYXgncyBjcm9zcy1wbGF0Zm9ybVxuICAgIC8vIHNoZWxsIGluc3RlYWQsIHdoaWNoIHNoaXBzIGJ1aWx0LWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbW9uXG4gICAgLy8gY29tbWFuZHMuIGRheCBleGVjdXRlcyBjb21tYW5kcyBhc3luY2hyb25vdXNseSwgYnV0IHRoZSB0YXNrIHJ1bnRpbWUgaXNcbiAgICAvLyBzeW5jaHJvbm91cyAodGFza3MgcnVuIGR1cmluZyBzeW50aGVzaXMpLCBzbyB3ZSBkcml2ZSBkYXggZnJvbSBhXG4gICAgLy8gc3luY2hyb25vdXMgY2hpbGQgYG5vZGVgIHByb2Nlc3MuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgY29uc3QgZGF4ID0gcmVxdWlyZS5yZXNvbHZlKFwiZGF4XCIpO1xuICAgICAgY29uc3QgcnVubmVyID0gYGNvbnN0IHsgQ29tbWFuZEJ1aWxkZXIgfSA9IHJlcXVpcmUoJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZGF4LFxuICAgICAgKX0pOyBuZXcgQ29tbWFuZEJ1aWxkZXIoKS5jb21tYW5kKHByb2Nlc3MuYXJndlsxXSkubm9UaHJvdygpLnNwYXduKCkudGhlbigocikgPT4gcHJvY2Vzcy5leGl0KHIuY29kZSksIChlKSA9PiB7IGNvbnNvbGUuZXJyb3IoZT8uc3RhY2sgPz8gU3RyaW5nKGUpKTsgcHJvY2Vzcy5leGl0KDEpOyB9KTtgO1xuXG4gICAgICByZXR1cm4gc3Bhd25TeW5jKHByb2Nlc3MuZXhlY1BhdGgsIFtcIi1lXCIsIHJ1bm5lciwgb3B0aW9ucy5jb21tYW5kXSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBjd2QsXG4gICAgICAgIHNoZWxsOiBmYWxzZSxcbiAgICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgICBlbnYsXG4gICAgICAgIC4uLm9wdGlvbnMuc3Bhd25PcHRpb25zLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYXduU3luYyhvcHRpb25zLmNvbW1hbmQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjd2QsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgIGVudixcbiAgICAgIC4uLm9wdGlvbnMuc3Bhd25PcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaGVsbEV2YWwob3B0aW9uczogU2hlbGxPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hlbGwoe1xuICAgICAgcXVpZXQ6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3Bhd25PcHRpb25zOiB7XG4gICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJCdWlsdGluKGJ1aWx0aW46IHN0cmluZykge1xuICAgIGNvbnN0IG1vZHVsZVJvb3QgPSBkaXJuYW1lKHJlcXVpcmUucmVzb2x2ZShcIi4uL3BhY2thZ2UuanNvblwiKSk7XG4gICAgY29uc3QgcHJvZ3JhbSA9IHJlcXVpcmUucmVzb2x2ZShcbiAgICAgIGpvaW4obW9kdWxlUm9vdCwgXCJsaWJcIiwgYCR7YnVpbHRpbn0udGFzay5qc2ApLFxuICAgICk7XG4gICAgcmV0dXJuIGBcIiR7cHJvY2Vzcy5leGVjUGF0aH1cIiBcIiR7cHJvZ3JhbX1cImA7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNoZWxsT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gcHJvamVjdCBkaXJcbiAgICovXG4gIHJlYWRvbmx5IGN3ZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbG9ncHJlZml4Pzogc3RyaW5nO1xuICByZWFkb25seSBzcGF3bk9wdGlvbnM/OiBTcGF3bk9wdGlvbnM7XG4gIC8qKiBAZGVmYXVsdCBmYWxzZSAqL1xuICByZWFkb25seSBxdWlldD86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGV4dHJhRW52PzogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH07XG59XG4iXX0=
File without changes