projen 0.101.37 → 0.103.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 (182) hide show
  1. package/.jsii +923 -916
  2. package/README.md +23 -0
  3. package/lib/ai-instructions.js +2 -2
  4. package/lib/awscdk/auto-discover.js +6 -6
  5. package/lib/awscdk/awscdk-app-java.js +1 -1
  6. package/lib/awscdk/awscdk-app-py.js +1 -1
  7. package/lib/awscdk/awscdk-app-ts.js +1 -1
  8. package/lib/awscdk/awscdk-construct.js +1 -1
  9. package/lib/awscdk/awscdk-deps-java.js +1 -1
  10. package/lib/awscdk/awscdk-deps-js.js +1 -1
  11. package/lib/awscdk/awscdk-deps-py.js +1 -1
  12. package/lib/awscdk/awscdk-deps.js +1 -1
  13. package/lib/awscdk/cdk-config.d.ts +4 -0
  14. package/lib/awscdk/cdk-config.js +4 -4
  15. package/lib/awscdk/cdk-tasks.js +1 -1
  16. package/lib/awscdk/integration-test.d.ts +1 -0
  17. package/lib/awscdk/integration-test.js +38 -10
  18. package/lib/awscdk/lambda-extension.js +1 -1
  19. package/lib/awscdk/lambda-function.js +2 -2
  20. package/lib/build/build-workflow.js +4 -3
  21. package/lib/cdk/auto-discover-base.js +2 -2
  22. package/lib/cdk/construct-lib.js +1 -1
  23. package/lib/cdk/integration-test-base.js +17 -3
  24. package/lib/cdk/jsii-build.js +13 -6
  25. package/lib/cdk/jsii-docgen.js +1 -1
  26. package/lib/cdk/jsii-project.js +1 -1
  27. package/lib/cdk8s/auto-discover.js +2 -2
  28. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  29. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  30. package/lib/cdk8s/cdk8s-construct.js +1 -1
  31. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  32. package/lib/cdk8s/cdk8s-deps.js +1 -1
  33. package/lib/cdk8s/integration-test.js +3 -3
  34. package/lib/cdktf/cdktf-construct.js +1 -1
  35. package/lib/cdktn/cdktn-app-ts.js +1 -1
  36. package/lib/cdktn/cdktn-config.js +1 -1
  37. package/lib/cdktn/cdktn-construct.js +1 -1
  38. package/lib/cdktn/cdktn-deps.js +1 -1
  39. package/lib/cdktn/cdktn-tasks.js +1 -1
  40. package/lib/circleci/circleci.js +1 -1
  41. package/lib/cleanup.js +6 -33
  42. package/lib/cli/task-runtime.js +30 -8
  43. package/lib/clobber.js +11 -6
  44. package/lib/component.js +2 -2
  45. package/lib/dependencies.js +1 -1
  46. package/lib/dev-env.js +1 -1
  47. package/lib/docker-compose/docker-compose-service.js +1 -1
  48. package/lib/docker-compose/docker-compose.js +1 -1
  49. package/lib/file.js +1 -1
  50. package/lib/gitattributes.js +1 -1
  51. package/lib/github/actions-provider.js +1 -1
  52. package/lib/github/actions.const.d.ts +44 -0
  53. package/lib/github/actions.const.js +50 -0
  54. package/lib/github/auto-approve.js +1 -1
  55. package/lib/github/auto-merge.js +1 -1
  56. package/lib/github/auto-queue.js +1 -1
  57. package/lib/github/dependabot.js +1 -1
  58. package/lib/github/dependency-review.js +4 -3
  59. package/lib/github/github-credentials.js +4 -3
  60. package/lib/github/github-project.js +1 -1
  61. package/lib/github/github.js +1 -1
  62. package/lib/github/merge-queue.js +1 -1
  63. package/lib/github/mergify.js +1 -1
  64. package/lib/github/pr-template.js +1 -1
  65. package/lib/github/private/util.d.ts +0 -2
  66. package/lib/github/private/util.js +1 -13
  67. package/lib/github/pull-request-backport.js +4 -3
  68. package/lib/github/pull-request-lint.js +5 -4
  69. package/lib/github/stale.js +5 -3
  70. package/lib/github/task-workflow-job.js +4 -4
  71. package/lib/github/task-workflow.js +1 -1
  72. package/lib/github/workflow-actions.js +7 -5
  73. package/lib/github/workflow-jobs.js +1 -1
  74. package/lib/github/workflow-steps.js +6 -5
  75. package/lib/github/workflows.js +8 -7
  76. package/lib/gitlab/configuration.js +1 -1
  77. package/lib/gitlab/gitlab-configuration.js +1 -1
  78. package/lib/gitlab/nested-configuration.js +1 -1
  79. package/lib/gitpod.d.ts +6 -0
  80. package/lib/gitpod.js +2 -2
  81. package/lib/ignore-file.js +1 -1
  82. package/lib/ini.js +1 -1
  83. package/lib/java/java-project.js +1 -1
  84. package/lib/java/junit.js +1 -1
  85. package/lib/java/maven-compile.js +1 -1
  86. package/lib/java/maven-packaging.js +8 -3
  87. package/lib/java/maven-sample.js +1 -1
  88. package/lib/java/pom.js +2 -2
  89. package/lib/java/projenrc.js +13 -4
  90. package/lib/javascript/biome/biome.js +9 -4
  91. package/lib/javascript/bundler.d.ts +8 -0
  92. package/lib/javascript/bundler.js +13 -13
  93. package/lib/javascript/eslint.d.ts +7 -0
  94. package/lib/javascript/eslint.js +14 -11
  95. package/lib/javascript/jest.d.ts +8 -0
  96. package/lib/javascript/jest.js +17 -11
  97. package/lib/javascript/license-checker.js +1 -1
  98. package/lib/javascript/node-package.d.ts +1 -1
  99. package/lib/javascript/node-package.js +32 -15
  100. package/lib/javascript/node-project.d.ts +3 -2
  101. package/lib/javascript/node-project.js +42 -28
  102. package/lib/javascript/npm-config.js +1 -1
  103. package/lib/javascript/pnpm-workspace-config.js +2 -2
  104. package/lib/javascript/pnpm-workspace.js +1 -1
  105. package/lib/javascript/prettier.js +1 -1
  106. package/lib/javascript/projenrc.js +1 -1
  107. package/lib/javascript/typescript-config.js +2 -2
  108. package/lib/javascript/upgrade-dependencies.js +2 -2
  109. package/lib/javascript/yarnrc.js +1 -1
  110. package/lib/json-patch.js +1 -1
  111. package/lib/json.js +1 -1
  112. package/lib/license.js +1 -1
  113. package/lib/logger.js +1 -1
  114. package/lib/makefile.d.ts +2 -0
  115. package/lib/makefile.js +2 -2
  116. package/lib/object-file.js +1 -1
  117. package/lib/project-build.js +1 -1
  118. package/lib/project-tree.js +1 -1
  119. package/lib/project.d.ts +4 -0
  120. package/lib/project.js +2 -2
  121. package/lib/projects.js +1 -1
  122. package/lib/projenrc-json.js +1 -1
  123. package/lib/projenrc.js +1 -1
  124. package/lib/python/pip.js +1 -1
  125. package/lib/python/poetry.js +7 -4
  126. package/lib/python/projenrc.js +1 -1
  127. package/lib/python/pyproject-toml-file.js +1 -1
  128. package/lib/python/pytest-sample.js +1 -1
  129. package/lib/python/pytest.d.ts +5 -2
  130. package/lib/python/pytest.js +9 -8
  131. package/lib/python/python-project.js +1 -1
  132. package/lib/python/python-sample.js +1 -1
  133. package/lib/python/requirements-file.js +1 -1
  134. package/lib/python/setuppy.js +1 -1
  135. package/lib/python/setuptools.js +10 -4
  136. package/lib/python/uv-config.js +1 -1
  137. package/lib/python/uv.js +3 -3
  138. package/lib/python/venv.js +1 -1
  139. package/lib/readme.js +1 -1
  140. package/lib/release/publisher.d.ts +5 -0
  141. package/lib/release/publisher.js +93 -39
  142. package/lib/release/release-trigger.d.ts +10 -0
  143. package/lib/release/release-trigger.js +7 -2
  144. package/lib/release/release.js +6 -4
  145. package/lib/renovatebot.js +1 -1
  146. package/lib/run-task.cjs +17 -6
  147. package/lib/sample-file.js +2 -2
  148. package/lib/script-runner.js +1 -1
  149. package/lib/source-code.js +1 -1
  150. package/lib/task-model.d.ts +3 -3
  151. package/lib/task-model.js +1 -1
  152. package/lib/task-shell.d.ts +3 -0
  153. package/lib/task-shell.js +5 -2
  154. package/lib/task.d.ts +4 -0
  155. package/lib/task.js +2 -2
  156. package/lib/tasks.js +1 -1
  157. package/lib/testing.js +1 -1
  158. package/lib/textfile.js +1 -1
  159. package/lib/toml.js +1 -1
  160. package/lib/typescript/projenrc-ts.js +1 -1
  161. package/lib/typescript/projenrc.js +1 -1
  162. package/lib/typescript/typescript-runner.js +1 -1
  163. package/lib/typescript/typescript-typedoc.js +1 -1
  164. package/lib/typescript/typescript.js +5 -5
  165. package/lib/util/dax.d.ts +12 -1
  166. package/lib/util/dax.js +17 -4
  167. package/lib/util/path.d.ts +39 -0
  168. package/lib/util/path.js +90 -1
  169. package/lib/version.js +2 -2
  170. package/lib/vscode/devcontainer.js +1 -1
  171. package/lib/vscode/extensions.js +1 -1
  172. package/lib/vscode/launch-config.js +1 -1
  173. package/lib/vscode/settings.js +1 -1
  174. package/lib/vscode/vscode.js +1 -1
  175. package/lib/web/next.js +3 -3
  176. package/lib/web/postcss.js +1 -1
  177. package/lib/web/react.js +3 -3
  178. package/lib/web/tailwind.js +1 -1
  179. package/lib/xmlfile.js +1 -1
  180. package/lib/yaml.js +1 -1
  181. package/package.json +5 -3
  182. package/BREAKING_CHANGES.md +0 -855
@@ -47,7 +47,7 @@ const exec_1 = require("../util/exec");
47
47
  * poetry CLI tool.
48
48
  */
49
49
  class Poetry extends component_1.Component {
50
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Poetry", version: "0.101.37" };
50
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Poetry", version: "0.103.0" };
51
51
  /**
52
52
  * Task for updating the lockfile and installing project dependencies.
53
53
  */
@@ -82,7 +82,10 @@ class Poetry extends component_1.Component {
82
82
  });
83
83
  this.installCiTask = project.addTask("install:ci", {
84
84
  description: "Install dependencies with frozen lockfile",
85
- exec: "poetry check --lock && poetry install",
85
+ steps: [
86
+ { execArgs: ["poetry", "check", "--lock"] },
87
+ { execArgs: ["poetry", "install"] },
88
+ ],
86
89
  });
87
90
  this.project.tasks.addEnvironment("VIRTUAL_ENV",
88
91
  // Create .venv on the first run if it doesn't already exist
@@ -250,7 +253,7 @@ exports.Poetry = Poetry;
250
253
  * @see https://python-poetry.org/docs/pyproject/
251
254
  */
252
255
  class PoetryPyproject extends component_1.Component {
253
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PoetryPyproject", version: "0.101.37" };
256
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PoetryPyproject", version: "0.103.0" };
254
257
  file;
255
258
  constructor(scope, options) {
256
259
  super(scope);
@@ -274,4 +277,4 @@ class PoetryPyproject extends component_1.Component {
274
277
  }
275
278
  }
276
279
  exports.PoetryPyproject = PoetryPyproject;
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi9wb2V0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFvQztBQVNwQyw0Q0FBeUM7QUFDekMsa0RBQWlEO0FBR2pELGtDQUFtQztBQUNuQyxrQ0FBb0Q7QUFDcEQsK0RBQTBEO0FBQzFELHVDQUFzQztBQUt0Qzs7O0dBR0c7QUFDSCxNQUFhLE1BQ1gsU0FBUSxxQkFBUzs7SUFHakI7O09BRUc7SUFDYSxXQUFXLENBQU87SUFFbEM7O09BRUc7SUFDYSxhQUFhLENBQU87SUFFcEM7O09BRUc7SUFDYSxXQUFXLENBQU87SUFFbEM7O09BRUc7SUFDYSxlQUFlLENBQU87SUFFdEM7O09BRUc7SUFDYyxVQUFVLENBQVM7SUFFcEM7OztPQUdHO0lBQ2MsU0FBUyxDQUFrQjtJQUU1QyxZQUFZLE9BQWdCLEVBQUUsT0FBc0I7UUFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUVqRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzVDLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ2pELFdBQVcsRUFBRSwyQ0FBMkM7WUFDeEQsSUFBSSxFQUFFLHVDQUF1QztTQUM5QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQy9CLGFBQWE7UUFDYiw0REFBNEQ7UUFDNUQsd0RBQXdELENBQ3pELENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQy9CLE1BQU0sRUFDTix5Q0FBeUMsQ0FDMUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUNyRCxXQUFXLEVBQUUsbURBQW1EO1lBQ2hFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztTQUNsRCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzVDLFdBQVcsRUFBRSw4QkFBOEI7WUFDM0MsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztTQUNoQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUM1QyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUU7WUFDdEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUM7WUFDM0QsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1lBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxHQUFHLE9BQU8sQ0FBQyxhQUFhO1lBQ3hCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDNUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtTQUNuRCxDQUFDLENBQUM7UUFFSCxJQUFJLGVBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFO1lBQ25DLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEdBQUcsRUFBRTtnQkFDSCxZQUFZLEVBQUU7b0JBQ1osUUFBUSxFQUFFO3dCQUNSLEdBQUcsRUFBRSwrQkFBK0I7cUJBQ3JDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sWUFBWSxHQUEyQixFQUFFLENBQUM7UUFDaEQsSUFBSSxhQUFhLEdBQVksS0FBSyxDQUFDO1FBQ25DLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDeEMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxQixhQUFhLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssNkJBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDeEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQix1RUFBdUU7WUFDdkUsWUFBWSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDL0IsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsTUFBTSxZQUFZLEdBQTJCLEVBQUUsQ0FBQztRQUNoRCxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyw2QkFBYyxDQUFDLE1BQU0sRUFBRSw2QkFBYyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDcEUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BMkJHO0lBQ0ssOEJBQThCLENBQUMsWUFFdEM7UUFDQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsZUFBdUIsRUFBRSxFQUFFO1lBQ3ZELElBQUksQ0FBQztnQkFDSCwrREFBK0Q7Z0JBQy9ELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsZUFBZSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUM7WUFDeEUsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCx5RUFBeUU7Z0JBQ3pFLE9BQU8sZUFBZSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtZQUNwRSxPQUFPLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLElBQVk7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSw2QkFBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZ0JBQWdCLENBQUMsSUFBWTtRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLDZCQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOztPQUVHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLGFBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUM5QyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO1NBQ3pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEIsOExBQThMLENBQy9MLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsYUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDckQsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtTQUN6QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLENBQUMsQ0FBQztZQUNoRSxhQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07YUFDekIsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxHQUFHLGFBQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNqRCxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2FBQ3pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEIsZ0RBQWdELE9BQU8sS0FBSyxDQUM3RCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLG1CQUFtQjtRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUN2RCxvRkFBb0Y7UUFDcEYsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDOztBQXZPSCx3QkF3T0M7QUFtSkQ7Ozs7R0FJRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUzs7SUFDNUIsSUFBSSxDQUFvQjtJQUV4QyxZQUFZLEtBQWlCLEVBQUUsT0FBK0I7UUFDNUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLE9BQU8sQ0FBQztRQUVyRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksdUNBQWlCLENBQUMsS0FBSyxFQUFFO1lBQ3ZDLElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUU7b0JBQ04sR0FBRyxJQUFBLGdDQUF5QixFQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztvQkFDOUQsS0FBSyxFQUFFO3dCQUNMLEdBQUcsRUFBRTs0QkFDSCxZQUFZLEVBQUUsZUFBZTt5QkFDOUI7cUJBQ0Y7aUJBQ0Y7YUFDRjtZQUNELFdBQVcsRUFBRTtnQkFDWCxRQUFRLEVBQUUsQ0FBQyxhQUFhLENBQUM7Z0JBQ3pCLFlBQVksRUFBRSx5QkFBeUI7YUFDeEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXhCSCwwQ0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUT01MIGZyb20gXCJAaWFybmEvdG9tbFwiO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvbkRlcHMgfSBmcm9tIFwiLi9weXRob24tZGVwc1wiO1xuaW1wb3J0IHR5cGUgeyBJUHl0aG9uRW52IH0gZnJvbSBcIi4vcHl0aG9uLWVudlwiO1xuaW1wb3J0IHR5cGUge1xuICBJUHl0aG9uUGFja2FnaW5nLFxuICBQeXRob25QYWNrYWdpbmdPcHRpb25zLFxufSBmcm9tIFwiLi9weXRob24tcGFja2FnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFB5dGhvbkV4ZWN1dGFibGVPcHRpb25zIH0gZnJvbSBcIi4vcHl0aG9uLXByb2plY3RcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5pbXBvcnQgeyBUb21sRmlsZSB9IGZyb20gXCIuLi90b21sXCI7XG5pbXBvcnQgeyBkZWNhbWVsaXplS2V5c1JlY3Vyc2l2ZWx5IH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IFB5cHJvamVjdFRvbWxGaWxlIH0gZnJvbSBcIi4vcHlwcm9qZWN0LXRvbWwtZmlsZVwiO1xuaW1wb3J0IHsgcG9ldHJ5IH0gZnJvbSBcIi4uL3V0aWwvZXhlY1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvZXRyeU9wdGlvbnNcbiAgZXh0ZW5kcyBQeXRob25QYWNrYWdpbmdPcHRpb25zLCBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB7fVxuXG4vKipcbiAqIE1hbmFnZSBwcm9qZWN0IGRlcGVuZGVuY2llcywgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBwYWNrYWdpbmcgdGhyb3VnaCB0aGVcbiAqIHBvZXRyeSBDTEkgdG9vbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvZXRyeVxuICBleHRlbmRzIENvbXBvbmVudFxuICBpbXBsZW1lbnRzIElQeXRob25EZXBzLCBJUHl0aG9uRW52LCBJUHl0aG9uUGFja2FnaW5nXG57XG4gIC8qKlxuICAgKiBUYXNrIGZvciB1cGRhdGluZyB0aGUgbG9ja2ZpbGUgYW5kIGluc3RhbGxpbmcgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbFRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIFRhc2sgZm9yIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGFjY29yZGluZyB0byB0aGUgZXhpc3RpbmcgbG9ja2ZpbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbENpVGFzazogVGFzaztcblxuICAvKipcbiAgICogVGFzayBmb3IgcHVibGlzaGluZyB0aGUgcGFja2FnZSB0byBhIHBhY2thZ2UgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoVGFzazogVGFzaztcblxuICAvKipcbiAgICogVGFzayBmb3IgcHVibGlzaGluZyB0aGUgcGFja2FnZSB0byB0aGUgVGVzdCBQeVBJIHJlcG9zaXRvcnkgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaFRlc3RUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSB0byB1c2UuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHB5dGhvbkV4ZWM6IHN0cmluZztcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYHB5cHJvamVjdC50b21sYCBmaWxlIGZvciBhIFBvZXRyeSBwcm9qZWN0LlxuICAgKiBUaGlzIGluY2x1ZGVzIHBhY2thZ2UgbWV0YWRhdGEsIGRlcGVuZGVuY2llcywgYW5kIFBvZXRyeS1zcGVjaWZpYyBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHlQcm9qZWN0OiBQb2V0cnlQeXByb2plY3Q7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUG9ldHJ5T3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMucHl0aG9uRXhlYyA9IG9wdGlvbnMucHl0aG9uRXhlYyA/PyBcInB5dGhvblwiO1xuXG4gICAgdGhpcy5pbnN0YWxsVGFzayA9IHByb2plY3QuYWRkVGFzayhcImluc3RhbGxcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgYW5kIHVwZGF0ZSBsb2NrZmlsZVwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInBvZXRyeVwiLCBcInVwZGF0ZVwiXSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5zdGFsbENpVGFzayA9IHByb2plY3QuYWRkVGFzayhcImluc3RhbGw6Y2lcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgd2l0aCBmcm96ZW4gbG9ja2ZpbGVcIixcbiAgICAgIGV4ZWM6IFwicG9ldHJ5IGNoZWNrIC0tbG9jayAmJiBwb2V0cnkgaW5zdGFsbFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJWSVJUVUFMX0VOVlwiLFxuICAgICAgLy8gQ3JlYXRlIC52ZW52IG9uIHRoZSBmaXJzdCBydW4gaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0XG4gICAgICBcIiQocG9ldHJ5IGVudiBpbmZvIC1wIHx8IHBvZXRyeSBydW4gcG9ldHJ5IGVudiBpbmZvIC1wKVwiLFxuICAgICk7XG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJQQVRIXCIsXG4gICAgICBcIiQoZWNobyAkKHBvZXRyeSBlbnYgaW5mbyAtcCkvYmluOiRQQVRIKVwiLFxuICAgICk7XG5cbiAgICBwcm9qZWN0LnBhY2thZ2VUYXNrLmV4ZWNBcmdzKFtcInBvZXRyeVwiLCBcImJ1aWxkXCJdKTtcblxuICAgIHRoaXMucHVibGlzaFRlc3RUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwicHVibGlzaDp0ZXN0XCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVwbG9hZHMgdGhlIHBhY2thZ2UgYWdhaW5zdCBhIHRlc3QgUHlQSSBlbmRwb2ludC5cIixcbiAgICAgIGV4ZWNBcmdzOiBbXCJwb2V0cnlcIiwgXCJwdWJsaXNoXCIsIFwiLXJcIiwgXCJ0ZXN0cHlwaVwiXSxcbiAgICB9KTtcblxuICAgIHRoaXMucHVibGlzaFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soXCJwdWJsaXNoXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVwbG9hZHMgdGhlIHBhY2thZ2UgdG8gUHlQSS5cIixcbiAgICAgIGV4ZWNBcmdzOiBbXCJwb2V0cnlcIiwgXCJwdWJsaXNoXCJdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5weVByb2plY3QgPSBuZXcgUG9ldHJ5UHlwcm9qZWN0KHByb2plY3QsIHtcbiAgICAgIG5hbWU6IHByb2plY3QubmFtZSxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uID8/IFwiXCIsXG4gICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICBhdXRob3JzOiBbYCR7b3B0aW9ucy5hdXRob3JOYW1lfSA8JHtvcHRpb25zLmF1dGhvckVtYWlsfT5gXSxcbiAgICAgIGhvbWVwYWdlOiBvcHRpb25zLmhvbWVwYWdlLFxuICAgICAgY2xhc3NpZmllcnM6IG9wdGlvbnMuY2xhc3NpZmllcnMsXG4gICAgICAuLi5vcHRpb25zLnBvZXRyeU9wdGlvbnMsXG4gICAgICBkZXBlbmRlbmNpZXM6ICgpID0+IHRoaXMuc3ludGhEZXBlbmRlbmNpZXMoKSxcbiAgICAgIGRldkRlcGVuZGVuY2llczogKCkgPT4gdGhpcy5zeW50aERldkRlcGVuZGVuY2llcygpLFxuICAgIH0pO1xuXG4gICAgbmV3IFRvbWxGaWxlKHByb2plY3QsIFwicG9ldHJ5LnRvbWxcIiwge1xuICAgICAgY29tbWl0dGVkOiBmYWxzZSxcbiAgICAgIG9iajoge1xuICAgICAgICByZXBvc2l0b3JpZXM6IHtcbiAgICAgICAgICB0ZXN0cHlwaToge1xuICAgICAgICAgICAgdXJsOiBcImh0dHBzOi8vdGVzdC5weXBpLm9yZy9sZWdhY3kvXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoRGVwZW5kZW5jaWVzKCkge1xuICAgIGNvbnN0IGRlcGVuZGVuY2llczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGxldCBweXRob25EZWZpbmVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBwa2cgb2YgdGhpcy5wcm9qZWN0LmRlcHMuYWxsKSB7XG4gICAgICBpZiAocGtnLm5hbWUgPT09IFwicHl0aG9uXCIpIHtcbiAgICAgICAgcHl0aG9uRGVmaW5lZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocGtnLnR5cGUgPT09IERlcGVuZGVuY3lUeXBlLlJVTlRJTUUpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzW3BrZy5uYW1lXSA9IHBrZy52ZXJzaW9uID8/IFwiKlwiO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXB5dGhvbkRlZmluZWQpIHtcbiAgICAgIC8vIFB5dGhvbiB2ZXJzaW9uIG11c3QgYmUgZGVmaW5lZCBmb3IgcG9ldHJ5IHByb2plY3RzLiBEZWZhdWx0IHRvIF4zLjguXG4gICAgICBkZXBlbmRlbmNpZXMucHl0aG9uID0gXCJeMy44XCI7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBlcm1pdERlcHNXaXRoVG9tbElubGluZVRhYmxlcyhkZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aERldkRlcGVuZGVuY2llcygpIHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHBrZyBvZiB0aGlzLnByb2plY3QuZGVwcy5hbGwpIHtcbiAgICAgIGlmIChbRGVwZW5kZW5jeVR5cGUuREVWRU5WLCBEZXBlbmRlbmN5VHlwZS5URVNUXS5pbmNsdWRlcyhwa2cudHlwZSkpIHtcbiAgICAgICAgZGVwZW5kZW5jaWVzW3BrZy5uYW1lXSA9IHBrZy52ZXJzaW9uID8/IFwiKlwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wZXJtaXREZXBzV2l0aFRvbWxJbmxpbmVUYWJsZXMoZGVwZW5kZW5jaWVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgZGVwZW5kZW5jeSB2YWx1ZXMgdGhhdCBtYXkgaW5jbHVkZSBUT01MIGlubGluZSB0YWJsZXMsIGNvbnZlcnRpbmcgdGhlbSBpbnRvIEphdmFTY3JpcHQgb2JqZWN0cy5cbiAgICogSWYgYSBkZXBlbmRlbmN5IHZhbHVlIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBUT01MIGlubGluZSB0YWJsZSAoaW5kaWNhdGluZyBpdCBpcyBhIHBsYWluIFNlbVZlciBzdHJpbmcpLFxuICAgKiBpdCBpcyBsZWZ0IHVuY2hhbmdlZC4gVGhpcyBhbGxvd3MgdG8gc3VwcG9ydCB0aGUgZnVsbCByYW5nZSBvZiBQb2V0cnkncyBkZXBlbmRlbmN5IHNwZWNpZmljYXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9weXRob24tcG9ldHJ5Lm9yZy9kb2NzL2RlcGVuZGVuY3ktc3BlY2lmaWNhdGlvbi9cbiAgICogQHNlZSBodHRwczovL3RvbWwuaW8vZW4vdjEuMC4wI2lubGluZS10YWJsZVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBHaXZlbiBhIGBkZXBlbmRlbmNpZXNgIG9iamVjdCBsaWtlIHRoaXM6XG4gICAqIGNvbnN0IGRlcGVuZGVuY2llcyA9IHtcbiAgICogICBcIm15cGFja2FnZVwiOiBcInsgdmVyc2lvbiA9ICcxLjIuMycsIGV4dHJhcyA9IFsnZXh0cmExJywgJ2V4dHJhMiddIH1cIixcbiAgICogICBcImFub3RoZXJwYWNrYWdlXCI6IFwiXjIuMy40XCJcbiAgICogfTtcbiAgICogLy8gQWZ0ZXIgcGFyc2luZywgdGhlIHJlc3VsdGluZyBvYmplY3Qgd291bGQgYmU6XG4gICAqIHtcbiAgICogICBcIm15cGFja2FnZVwiOiB7XG4gICAqICAgICB2ZXJzaW9uOiBcIjEuMi4zXCIsXG4gICAqICAgICBleHRyYXM6IFtcImV4dHJhMVwiLCBcImV4dHJhMlwiXVxuICAgKiAgIH0sXG4gICAqICAgXCJhbm90aGVycGFja2FnZVwiOiBcIl4yLjMuNFwiXG4gICAqIH1cbiAgICogLy8gTm90ZTogVGhlIHZhbHVlIG9mIGBhbm90aGVycGFja2FnZWAgcmVtYWlucyB1bmNoYW5nZWQgYXMgaXQgaXMgYSBwbGFpbiBTZW1WZXIgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwZW5kZW5jaWVzIEFuIG9iamVjdCB3aGVyZSBlYWNoIGtleSBpcyBhIGRlcGVuZGVuY3kgbmFtZSBhbmQgZWFjaCB2YWx1ZSBpcyBhIHN0cmluZyB0aGF0IG1pZ2h0IGJlXG4gICAqIGVpdGhlciBhIFNlbVZlciBzdHJpbmcgb3IgYSBUT01MIGlubGluZSB0YWJsZSBzdHJpbmcuXG4gICAqIEByZXR1cm5zIEEgbmV3IG9iamVjdCB3aGVyZSBlYWNoIGtleSBpcyBhIGRlcGVuZGVuY3kgbmFtZSBhbmQgZWFjaCB2YWx1ZSBpcyBlaXRoZXIgdGhlIG9yaWdpbmFsIFNlbVZlciBzdHJpbmdcbiAgICogb3IgdGhlIHBhcnNlZCBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgVE9NTCBpbmxpbmUgdGFibGUuXG4gICAqL1xuICBwcml2YXRlIHBlcm1pdERlcHNXaXRoVG9tbElubGluZVRhYmxlcyhkZXBlbmRlbmNpZXM6IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH0pIHtcbiAgICBjb25zdCBwYXJzZVRvbWxJbmxpbmVUYWJsZSA9IChkZXBlbmRlbmN5VmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQXR0ZW1wdCBwYXJzaW5nIHRoZSBgZGVwZW5kZW5jeVZhbHVlYCBhcyBhIFRPTUwgaW5saW5lIHRhYmxlXG4gICAgICAgIHJldHVybiBUT01MLnBhcnNlKGBkZXBlbmRlbmN5S2V5ID0gJHtkZXBlbmRlbmN5VmFsdWV9YCkuZGVwZW5kZW5jeUtleTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZiBwYXJzaW5nIGZhaWxzLCB0cmVhdCB0aGUgYGRlcGVuZGVuY3lWYWx1ZWAgYXMgYSBwbGFpbiBTZW1WZXIgc3RyaW5nXG4gICAgICAgIHJldHVybiBkZXBlbmRlbmN5VmFsdWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpLm1hcCgoW2RlcGVuZGVuY3lLZXksIGRlcGVuZGVuY3lWYWx1ZV0pID0+IHtcbiAgICAgICAgcmV0dXJuIFtkZXBlbmRlbmN5S2V5LCBwYXJzZVRvbWxJbmxpbmVUYWJsZShkZXBlbmRlbmN5VmFsdWUpXTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgRm9ybWF0IGA8bW9kdWxlPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koc3BlYywgRGVwZW5kZW5jeVR5cGUuUlVOVElNRSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRldiBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBGb3JtYXQgYDxtb2R1bGU+QDxzZW12ZXI+YFxuICAgKi9cbiAgcHVibGljIGFkZERldkRlcGVuZGVuY3koc3BlYzogc3RyaW5nKSB7XG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShzcGVjLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3QgKGNhbGxlZCBkdXJpbmcgcG9zdC1zeW50aGVzaXMpLlxuICAgKi9cbiAgcHVibGljIHNldHVwRW52aXJvbm1lbnQoKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gcG9ldHJ5LnRyeUNhcHR1cmUoW1wiLS12ZXJzaW9uXCJdLCB7XG4gICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgICAgXCJVbmFibGUgdG8gc2V0dXAgYW4gZW52aXJvbm1lbnQgc2luY2UgcG9ldHJ5IGlzIG5vdCBpbnN0YWxsZWQuIFBsZWFzZSBpbnN0YWxsIHBvZXRyeSAoaHR0cHM6Ly9weXRob24tcG9ldHJ5Lm9yZy9kb2NzLykgb3IgdXNlIGEgZGlmZmVyZW50IGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZW52aXJvbm1lbnRzIHN1Y2ggYXMgJ3ZlbnYnLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgZW52UGF0aCA9IHBvZXRyeS50cnlDYXB0dXJlKFtcImVudlwiLCBcImluZm9cIiwgXCItcFwiXSwge1xuICAgICAgY3dkOiB0aGlzLnByb2plY3Qub3V0ZGlyLFxuICAgIH0pO1xuICAgIGlmICghZW52UGF0aCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFwiU2V0dGluZyB1cCBhIHZpcnR1YWwgZW52aXJvbm1lbnQuLi5cIik7XG4gICAgICBwb2V0cnkucnVuKFtcImVudlwiLCBcInVzZVwiLCB0aGlzLnB5dGhvbkV4ZWNdLCB7XG4gICAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICAgIH0pO1xuICAgICAgZW52UGF0aCA9IHBvZXRyeS50cnlDYXB0dXJlKFtcImVudlwiLCBcImluZm9cIiwgXCItcFwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgICAgYEVudmlyb25tZW50IHN1Y2Nlc3NmdWxseSBjcmVhdGVkIChsb2NhdGVkIGluICR7ZW52UGF0aH19KS5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbHMgZGVwZW5kZW5jaWVzIChjYWxsZWQgZHVyaW5nIHBvc3Qtc3ludGhlc2lzKS5cbiAgICovXG4gIHB1YmxpYyBpbnN0YWxsRGVwZW5kZW5jaWVzKCkge1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcIkluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uXCIpO1xuICAgIC8vIElmIHRoZSBweXByb2plY3QudG9tbCBmaWxlIGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIGxvY2tmaWxlIHByaW9yIHRvIGluc3RhbGxhdGlvblxuICAgIGlmICh0aGlzLnB5UHJvamVjdC5maWxlLmNoYW5nZWQpIHtcbiAgICAgIHRoaXMucHJvamVjdC50YXNrcy5ydW5UYXNrKHRoaXMuaW5zdGFsbFRhc2submFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvamVjdC50YXNrcy5ydW5UYXNrKHRoaXMuaW5zdGFsbENpVGFzay5uYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQb2V0cnktc3BlY2lmaWMgb3B0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9weXRob24tcG9ldHJ5Lm9yZy9kb2NzL3B5cHJvamVjdC9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2V0cnlQeXByb2plY3RPcHRpb25zV2l0aG91dERlcHMge1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgcGFja2FnZSAocmVxdWlyZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUgcGFja2FnZSAocmVxdWlyZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGFja2FnZSAocmVxdWlyZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExpY2Vuc2Ugb2YgdGhpcyBwYWNrYWdlIGFzIGFuIFNQRFggaWRlbnRpZmllci5cbiAgICpcbiAgICogSWYgdGhlIHByb2plY3QgaXMgcHJvcHJpZXRhcnkgYW5kIGRvZXMgbm90IHVzZSBhIHNwZWNpZmljIGxpY2Vuc2UsIHlvdVxuICAgKiBjYW4gc2V0IHRoaXMgdmFsdWUgYXMgXCJQcm9wcmlldGFyeVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGF1dGhvcnMgb2YgdGhlIHBhY2thZ2UuIE11c3QgYmUgaW4gdGhlIGZvcm0gXCJuYW1lIDxlbWFpbD5cIlxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aG9ycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIHBhY2thZ2UuIE11c3QgYmUgaW4gdGhlIGZvcm0gXCJuYW1lIDxlbWFpbD5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbWFpbnRhaW5lcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHJlYWRtZSBmaWxlIG9mIHRoZSBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZG1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIFVSTCB0byB0aGUgd2Vic2l0ZSBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IGhvbWVwYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIFVSTCB0byB0aGUgcmVwb3NpdG9yeSBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9zaXRvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVVJMIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgZG9jdW1lbnRhdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGtleXdvcmRzIChtYXg6IDUpIHRoYXQgdGhlIHBhY2thZ2UgaXMgcmVsYXRlZCB0by5cbiAgICovXG4gIHJlYWRvbmx5IGtleXdvcmRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBQeVBJIHRyb3ZlIGNsYXNzaWZpZXJzIHRoYXQgZGVzY3JpYmUgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9weXBpLm9yZy9jbGFzc2lmaWVycy9cbiAgICovXG4gIHJlYWRvbmx5IGNsYXNzaWZpZXJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYWNrYWdlcyBhbmQgbW9kdWxlcyB0byBpbmNsdWRlIGluIHRoZSBmaW5hbCBkaXN0cmlidXRpb24uXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlcz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGF0dGVybnMgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5jbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGF0dGVybnMgdGhhdCB3aWxsIGJlIGV4Y2x1ZGVkIGluIHRoZSBmaW5hbCBwYWNrYWdlLlxuICAgKlxuICAgKiBJZiBhIFZDUyBpcyBiZWluZyB1c2VkIGZvciBhIHBhY2thZ2UsIHRoZSBleGNsdWRlIGZpZWxkIHdpbGwgYmUgc2VlZGVkIHdpdGhcbiAgICogdGhlIFZDU+KAmSBpZ25vcmUgc2V0dGluZ3MgKC5naXRpZ25vcmUgZm9yIGdpdCBmb3IgZXhhbXBsZSkuXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHRzIG9yIGV4ZWN1dGFibGVzIHRoYXQgd2lsbCBiZSBpbnN0YWxsZWQgd2hlbiBpbnN0YWxsaW5nIHRoZSBwYWNrYWdlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NyaXB0cz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFNvdXJjZSByZWdpc3RyaWVzIGZyb20gd2hpY2ggcGFja2FnZXMgYXJlIHJldHJpZXZlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBQYWNrYWdlIGV4dHJhc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuXG4gIC8qKlxuICAgKiBQbHVnaW5zLiBNdXN0IGJlIHNwZWNpZmllZCBhcyBhIHRhYmxlLlxuICAgKiBAc2VlIGh0dHBzOi8vdG9tbC5pby9lbi92MS4wLjAjdGFibGVcbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbnM/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgY3VzdG9tIFVSTHMsIGluIGFkZGl0aW9uIHRvIGhvbWVwYWdlLCByZXBvc2l0b3J5IGFuZCBkb2N1bWVudGF0aW9uLlxuICAgKiBFLmcuIFwiQnVnIFRyYWNrZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgdXJscz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBQYWNrYWdlIG1vZGUgKG9wdGlvbmFsKS5cbiAgICogQHNlZSBodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvcHlwcm9qZWN0LyNwYWNrYWdlLW1vZGVcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAZXhhbXBsZSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZU1vZGU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBvZXRyeS1zcGVjaWZpYyBvcHRpb25zLlxuICogQHNlZSBodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvcHlwcm9qZWN0L1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZXRyeVB5cHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBQb2V0cnlQeXByb2plY3RPcHRpb25zV2l0aG91dERlcHMge1xuICAvKipcbiAgICogQSBsaXN0IG9mIGRlcGVuZGVuY2llcyBmb3IgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIFRoZSBweXRob24gdmVyc2lvbiBmb3Igd2hpY2ggeW91ciBwYWNrYWdlIGlzIGNvbXBhdGlibGUgaXMgYWxzbyByZXF1aXJlZC5cbiAgICpcbiAgICogQGV4YW1wbGUgeyByZXF1ZXN0czogXCJeMi4xMy4wXCIgfVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGRldmVsb3BtZW50IGRlcGVuZGVuY2llcyBmb3IgdGhlIHByb2plY3QuXG4gICAqXG4gICAqIEBleGFtcGxlIHsgcmVxdWVzdHM6IFwiXjIuMTMuMFwiIH1cbiAgICovXG4gIHJlYWRvbmx5IGRldkRlcGVuZGVuY2llcz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBjb25maWd1cmF0aW9uIG9mIGEgcHlwcm9qZWN0LnRvbWwgZmlsZSBmb3IgYSBQb2V0cnkgcHJvamVjdC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vcHl0aG9uLXBvZXRyeS5vcmcvZG9jcy9weXByb2plY3QvXG4gKi9cbmV4cG9ydCBjbGFzcyBQb2V0cnlQeXByb2plY3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogUHlwcm9qZWN0VG9tbEZpbGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IElDb25zdHJ1Y3QsIG9wdGlvbnM6IFBvZXRyeVB5cHJvamVjdE9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSk7XG5cbiAgICBjb25zdCB7IGRldkRlcGVuZGVuY2llcywgLi4ucG9ldHJ5Q29uZmlnIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5maWxlID0gbmV3IFB5cHJvamVjdFRvbWxGaWxlKHNjb3BlLCB7XG4gICAgICB0b29sOiB7XG4gICAgICAgIHBvZXRyeToge1xuICAgICAgICAgIC4uLmRlY2FtZWxpemVLZXlzUmVjdXJzaXZlbHkocG9ldHJ5Q29uZmlnLCB7IHNlcGFyYXRvcjogXCItXCIgfSksXG4gICAgICAgICAgZ3JvdXA6IHtcbiAgICAgICAgICAgIGRldjoge1xuICAgICAgICAgICAgICBkZXBlbmRlbmNpZXM6IGRldkRlcGVuZGVuY2llcyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBidWlsZFN5c3RlbToge1xuICAgICAgICByZXF1aXJlczogW1wicG9ldHJ5LWNvcmVcIl0sXG4gICAgICAgIGJ1aWxkQmFja2VuZDogXCJwb2V0cnkuY29yZS5tYXNvbnJ5LmFwaVwiLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ldHJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi9wb2V0cnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFvQztBQVNwQyw0Q0FBeUM7QUFDekMsa0RBQWlEO0FBR2pELGtDQUFtQztBQUNuQyxrQ0FBb0Q7QUFDcEQsK0RBQTBEO0FBQzFELHVDQUFzQztBQUt0Qzs7O0dBR0c7QUFDSCxNQUFhLE1BQ1gsU0FBUSxxQkFBUzs7SUFHakI7O09BRUc7SUFDYSxXQUFXLENBQU87SUFFbEM7O09BRUc7SUFDYSxhQUFhLENBQU87SUFFcEM7O09BRUc7SUFDYSxXQUFXLENBQU87SUFFbEM7O09BRUc7SUFDYSxlQUFlLENBQU87SUFFdEM7O09BRUc7SUFDYyxVQUFVLENBQVM7SUFFcEM7OztPQUdHO0lBQ2MsU0FBUyxDQUFrQjtJQUU1QyxZQUFZLE9BQWdCLEVBQUUsT0FBc0I7UUFDbEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUVqRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzVDLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztTQUMvQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ2pELFdBQVcsRUFBRSwyQ0FBMkM7WUFDeEQsS0FBSyxFQUFFO2dCQUNMLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDM0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLEVBQUU7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RUFBRSx5QkFBeUI7YUFDeEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXhCSCwwQ0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUT01MIGZyb20gXCJAaWFybmEvdG9tbFwiO1xuaW1wb3J0IHR5cGUgeyBJQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvbkRlcHMgfSBmcm9tIFwiLi9weXRob24tZGVwc1wiO1xuaW1wb3J0IHR5cGUgeyBJUHl0aG9uRW52IH0gZnJvbSBcIi4vcHl0aG9uLWVudlwiO1xuaW1wb3J0IHR5cGUge1xuICBJUHl0aG9uUGFja2FnaW5nLFxuICBQeXRob25QYWNrYWdpbmdPcHRpb25zLFxufSBmcm9tIFwiLi9weXRob24tcGFja2FnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFB5dGhvbkV4ZWN1dGFibGVPcHRpb25zIH0gZnJvbSBcIi4vcHl0aG9uLXByb2plY3RcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5pbXBvcnQgeyBUb21sRmlsZSB9IGZyb20gXCIuLi90b21sXCI7XG5pbXBvcnQgeyBkZWNhbWVsaXplS2V5c1JlY3Vyc2l2ZWx5IH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IFB5cHJvamVjdFRvbWxGaWxlIH0gZnJvbSBcIi4vcHlwcm9qZWN0LXRvbWwtZmlsZVwiO1xuaW1wb3J0IHsgcG9ldHJ5IH0gZnJvbSBcIi4uL3V0aWwvZXhlY1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvZXRyeU9wdGlvbnNcbiAgZXh0ZW5kcyBQeXRob25QYWNrYWdpbmdPcHRpb25zLCBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB7fVxuXG4vKipcbiAqIE1hbmFnZSBwcm9qZWN0IGRlcGVuZGVuY2llcywgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBwYWNrYWdpbmcgdGhyb3VnaCB0aGVcbiAqIHBvZXRyeSBDTEkgdG9vbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvZXRyeVxuICBleHRlbmRzIENvbXBvbmVudFxuICBpbXBsZW1lbnRzIElQeXRob25EZXBzLCBJUHl0aG9uRW52LCBJUHl0aG9uUGFja2FnaW5nXG57XG4gIC8qKlxuICAgKiBUYXNrIGZvciB1cGRhdGluZyB0aGUgbG9ja2ZpbGUgYW5kIGluc3RhbGxpbmcgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbFRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIFRhc2sgZm9yIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGFjY29yZGluZyB0byB0aGUgZXhpc3RpbmcgbG9ja2ZpbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbENpVGFzazogVGFzaztcblxuICAvKipcbiAgICogVGFzayBmb3IgcHVibGlzaGluZyB0aGUgcGFja2FnZSB0byBhIHBhY2thZ2UgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoVGFzazogVGFzaztcblxuICAvKipcbiAgICogVGFzayBmb3IgcHVibGlzaGluZyB0aGUgcGFja2FnZSB0byB0aGUgVGVzdCBQeVBJIHJlcG9zaXRvcnkgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaFRlc3RUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSB0byB1c2UuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHB5dGhvbkV4ZWM6IHN0cmluZztcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgYHB5cHJvamVjdC50b21sYCBmaWxlIGZvciBhIFBvZXRyeSBwcm9qZWN0LlxuICAgKiBUaGlzIGluY2x1ZGVzIHBhY2thZ2UgbWV0YWRhdGEsIGRlcGVuZGVuY2llcywgYW5kIFBvZXRyeS1zcGVjaWZpYyBzZXR0aW5ncy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHlQcm9qZWN0OiBQb2V0cnlQeXByb2plY3Q7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUG9ldHJ5T3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMucHl0aG9uRXhlYyA9IG9wdGlvbnMucHl0aG9uRXhlYyA/PyBcInB5dGhvblwiO1xuXG4gICAgdGhpcy5pbnN0YWxsVGFzayA9IHByb2plY3QuYWRkVGFzayhcImluc3RhbGxcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgYW5kIHVwZGF0ZSBsb2NrZmlsZVwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInBvZXRyeVwiLCBcInVwZGF0ZVwiXSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5zdGFsbENpVGFzayA9IHByb2plY3QuYWRkVGFzayhcImluc3RhbGw6Y2lcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgd2l0aCBmcm96ZW4gbG9ja2ZpbGVcIixcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHsgZXhlY0FyZ3M6IFtcInBvZXRyeVwiLCBcImNoZWNrXCIsIFwiLS1sb2NrXCJdIH0sXG4gICAgICAgIHsgZXhlY0FyZ3M6IFtcInBvZXRyeVwiLCBcImluc3RhbGxcIl0gfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2plY3QudGFza3MuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlZJUlRVQUxfRU5WXCIsXG4gICAgICAvLyBDcmVhdGUgLnZlbnYgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3RcbiAgICAgIFwiJChwb2V0cnkgZW52IGluZm8gLXAgfHwgcG9ldHJ5IHJ1biBwb2V0cnkgZW52IGluZm8gLXApXCIsXG4gICAgKTtcbiAgICB0aGlzLnByb2plY3QudGFza3MuYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIlBBVEhcIixcbiAgICAgIFwiJChlY2hvICQocG9ldHJ5IGVudiBpbmZvIC1wKS9iaW46JFBBVEgpXCIsXG4gICAgKTtcblxuICAgIHByb2plY3QucGFja2FnZVRhc2suZXhlY0FyZ3MoW1wicG9ldHJ5XCIsIFwiYnVpbGRcIl0pO1xuXG4gICAgdGhpcy5wdWJsaXNoVGVzdFRhc2sgPSBwcm9qZWN0LmFkZFRhc2soXCJwdWJsaXNoOnRlc3RcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiVXBsb2FkcyB0aGUgcGFja2FnZSBhZ2FpbnN0IGEgdGVzdCBQeVBJIGVuZHBvaW50LlwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInBvZXRyeVwiLCBcInB1Ymxpc2hcIiwgXCItclwiLCBcInRlc3RweXBpXCJdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wdWJsaXNoVGFzayA9IHByb2plY3QuYWRkVGFzayhcInB1Ymxpc2hcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiVXBsb2FkcyB0aGUgcGFja2FnZSB0byBQeVBJLlwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInBvZXRyeVwiLCBcInB1Ymxpc2hcIl0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnB5UHJvamVjdCA9IG5ldyBQb2V0cnlQeXByb2plY3QocHJvamVjdCwge1xuICAgICAgbmFtZTogcHJvamVjdC5uYW1lLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgICAgZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24gPz8gXCJcIixcbiAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgIGF1dGhvcnM6IFtgJHtvcHRpb25zLmF1dGhvck5hbWV9IDwke29wdGlvbnMuYXV0aG9yRW1haWx9PmBdLFxuICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICBjbGFzc2lmaWVyczogb3B0aW9ucy5jbGFzc2lmaWVycyxcbiAgICAgIC4uLm9wdGlvbnMucG9ldHJ5T3B0aW9ucyxcbiAgICAgIGRlcGVuZGVuY2llczogKCkgPT4gdGhpcy5zeW50aERlcGVuZGVuY2llcygpLFxuICAgICAgZGV2RGVwZW5kZW5jaWVzOiAoKSA9PiB0aGlzLnN5bnRoRGV2RGVwZW5kZW5jaWVzKCksXG4gICAgfSk7XG5cbiAgICBuZXcgVG9tbEZpbGUocHJvamVjdCwgXCJwb2V0cnkudG9tbFwiLCB7XG4gICAgICBjb21taXR0ZWQ6IGZhbHNlLFxuICAgICAgb2JqOiB7XG4gICAgICAgIHJlcG9zaXRvcmllczoge1xuICAgICAgICAgIHRlc3RweXBpOiB7XG4gICAgICAgICAgICB1cmw6IFwiaHR0cHM6Ly90ZXN0LnB5cGkub3JnL2xlZ2FjeS9cIixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhEZXBlbmRlbmNpZXMoKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgbGV0IHB5dGhvbkRlZmluZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHBrZyBvZiB0aGlzLnByb2plY3QuZGVwcy5hbGwpIHtcbiAgICAgIGlmIChwa2cubmFtZSA9PT0gXCJweXRob25cIikge1xuICAgICAgICBweXRob25EZWZpbmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwa2cudHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuUlVOVElNRSkge1xuICAgICAgICBkZXBlbmRlbmNpZXNbcGtnLm5hbWVdID0gcGtnLnZlcnNpb24gPz8gXCIqXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcHl0aG9uRGVmaW5lZCkge1xuICAgICAgLy8gUHl0aG9uIHZlcnNpb24gbXVzdCBiZSBkZWZpbmVkIGZvciBwb2V0cnkgcHJvamVjdHMuIERlZmF1bHQgdG8gXjMuOC5cbiAgICAgIGRlcGVuZGVuY2llcy5weXRob24gPSBcIl4zLjhcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGVybWl0RGVwc1dpdGhUb21sSW5saW5lVGFibGVzKGRlcGVuZGVuY2llcyk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoRGV2RGVwZW5kZW5jaWVzKCkge1xuICAgIGNvbnN0IGRlcGVuZGVuY2llczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgIGZvciAoY29uc3QgcGtnIG9mIHRoaXMucHJvamVjdC5kZXBzLmFsbCkge1xuICAgICAgaWYgKFtEZXBlbmRlbmN5VHlwZS5ERVZFTlYsIERlcGVuZGVuY3lUeXBlLlRFU1RdLmluY2x1ZGVzKHBrZy50eXBlKSkge1xuICAgICAgICBkZXBlbmRlbmNpZXNbcGtnLm5hbWVdID0gcGtnLnZlcnNpb24gPz8gXCIqXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBlcm1pdERlcHNXaXRoVG9tbElubGluZVRhYmxlcyhkZXBlbmRlbmNpZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBkZXBlbmRlbmN5IHZhbHVlcyB0aGF0IG1heSBpbmNsdWRlIFRPTUwgaW5saW5lIHRhYmxlcywgY29udmVydGluZyB0aGVtIGludG8gSmF2YVNjcmlwdCBvYmplY3RzLlxuICAgKiBJZiBhIGRlcGVuZGVuY3kgdmFsdWUgY2Fubm90IGJlIHBhcnNlZCBhcyBhIFRPTUwgaW5saW5lIHRhYmxlIChpbmRpY2F0aW5nIGl0IGlzIGEgcGxhaW4gU2VtVmVyIHN0cmluZyksXG4gICAqIGl0IGlzIGxlZnQgdW5jaGFuZ2VkLiBUaGlzIGFsbG93cyB0byBzdXBwb3J0IHRoZSBmdWxsIHJhbmdlIG9mIFBvZXRyeSdzIGRlcGVuZGVuY3kgc3BlY2lmaWNhdGlvbi5cbiAgICogQHNlZSBodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvZGVwZW5kZW5jeS1zcGVjaWZpY2F0aW9uL1xuICAgKiBAc2VlIGh0dHBzOi8vdG9tbC5pby9lbi92MS4wLjAjaW5saW5lLXRhYmxlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEdpdmVuIGEgYGRlcGVuZGVuY2llc2Agb2JqZWN0IGxpa2UgdGhpczpcbiAgICogY29uc3QgZGVwZW5kZW5jaWVzID0ge1xuICAgKiAgIFwibXlwYWNrYWdlXCI6IFwieyB2ZXJzaW9uID0gJzEuMi4zJywgZXh0cmFzID0gWydleHRyYTEnLCAnZXh0cmEyJ10gfVwiLFxuICAgKiAgIFwiYW5vdGhlcnBhY2thZ2VcIjogXCJeMi4zLjRcIlxuICAgKiB9O1xuICAgKiAvLyBBZnRlciBwYXJzaW5nLCB0aGUgcmVzdWx0aW5nIG9iamVjdCB3b3VsZCBiZTpcbiAgICoge1xuICAgKiAgIFwibXlwYWNrYWdlXCI6IHtcbiAgICogICAgIHZlcnNpb246IFwiMS4yLjNcIixcbiAgICogICAgIGV4dHJhczogW1wiZXh0cmExXCIsIFwiZXh0cmEyXCJdXG4gICAqICAgfSxcbiAgICogICBcImFub3RoZXJwYWNrYWdlXCI6IFwiXjIuMy40XCJcbiAgICogfVxuICAgKiAvLyBOb3RlOiBUaGUgdmFsdWUgb2YgYGFub3RoZXJwYWNrYWdlYCByZW1haW5zIHVuY2hhbmdlZCBhcyBpdCBpcyBhIHBsYWluIFNlbVZlciBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgQW4gb2JqZWN0IHdoZXJlIGVhY2gga2V5IGlzIGEgZGVwZW5kZW5jeSBuYW1lIGFuZCBlYWNoIHZhbHVlIGlzIGEgc3RyaW5nIHRoYXQgbWlnaHQgYmVcbiAgICogZWl0aGVyIGEgU2VtVmVyIHN0cmluZyBvciBhIFRPTUwgaW5saW5lIHRhYmxlIHN0cmluZy5cbiAgICogQHJldHVybnMgQSBuZXcgb2JqZWN0IHdoZXJlIGVhY2gga2V5IGlzIGEgZGVwZW5kZW5jeSBuYW1lIGFuZCBlYWNoIHZhbHVlIGlzIGVpdGhlciB0aGUgb3JpZ2luYWwgU2VtVmVyIHN0cmluZ1xuICAgKiBvciB0aGUgcGFyc2VkIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBUT01MIGlubGluZSB0YWJsZS5cbiAgICovXG4gIHByaXZhdGUgcGVybWl0RGVwc1dpdGhUb21sSW5saW5lVGFibGVzKGRlcGVuZGVuY2llczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZztcbiAgfSkge1xuICAgIGNvbnN0IHBhcnNlVG9tbElubGluZVRhYmxlID0gKGRlcGVuZGVuY3lWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBBdHRlbXB0IHBhcnNpbmcgdGhlIGBkZXBlbmRlbmN5VmFsdWVgIGFzIGEgVE9NTCBpbmxpbmUgdGFibGVcbiAgICAgICAgcmV0dXJuIFRPTUwucGFyc2UoYGRlcGVuZGVuY3lLZXkgPSAke2RlcGVuZGVuY3lWYWx1ZX1gKS5kZXBlbmRlbmN5S2V5O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElmIHBhcnNpbmcgZmFpbHMsIHRyZWF0IHRoZSBgZGVwZW5kZW5jeVZhbHVlYCBhcyBhIHBsYWluIFNlbVZlciBzdHJpbmdcbiAgICAgICAgcmV0dXJuIGRlcGVuZGVuY3lWYWx1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIE9iamVjdC5lbnRyaWVzKGRlcGVuZGVuY2llcykubWFwKChbZGVwZW5kZW5jeUtleSwgZGVwZW5kZW5jeVZhbHVlXSkgPT4ge1xuICAgICAgICByZXR1cm4gW2RlcGVuZGVuY3lLZXksIHBhcnNlVG9tbElubGluZVRhYmxlKGRlcGVuZGVuY3lWYWx1ZSldO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcnVudGltZSBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBGb3JtYXQgYDxtb2R1bGU+QDxzZW12ZXI+YFxuICAgKi9cbiAgcHVibGljIGFkZERlcGVuZGVuY3koc3BlYzogc3RyaW5nKSB7XG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShzcGVjLCBEZXBlbmRlbmN5VHlwZS5SVU5USU1FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgZGV2IGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIEZvcm1hdCBgPG1vZHVsZT5APHNlbXZlcj5gXG4gICAqL1xuICBwdWJsaWMgYWRkRGV2RGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHNwZWMsIERlcGVuZGVuY3lUeXBlLkRFVkVOVik7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaWYgaXQgZG9lc24ndCBleGlzdCAoY2FsbGVkIGR1cmluZyBwb3N0LXN5bnRoZXNpcykuXG4gICAqL1xuICBwdWJsaWMgc2V0dXBFbnZpcm9ubWVudCgpIHtcbiAgICBjb25zdCByZXN1bHQgPSBwb2V0cnkudHJ5Q2FwdHVyZShbXCItLXZlcnNpb25cIl0sIHtcbiAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFxuICAgICAgICBcIlVuYWJsZSB0byBzZXR1cCBhbiBlbnZpcm9ubWVudCBzaW5jZSBwb2V0cnkgaXMgbm90IGluc3RhbGxlZC4gUGxlYXNlIGluc3RhbGwgcG9ldHJ5IChodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvKSBvciB1c2UgYSBkaWZmZXJlbnQgY29tcG9uZW50IGZvciBtYW5hZ2luZyBlbnZpcm9ubWVudHMgc3VjaCBhcyAndmVudicuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBlbnZQYXRoID0gcG9ldHJ5LnRyeUNhcHR1cmUoW1wiZW52XCIsIFwiaW5mb1wiLCBcIi1wXCJdLCB7XG4gICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgfSk7XG4gICAgaWYgKCFlbnZQYXRoKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLmluZm8oXCJTZXR0aW5nIHVwIGEgdmlydHVhbCBlbnZpcm9ubWVudC4uLlwiKTtcbiAgICAgIHBvZXRyeS5ydW4oW1wiZW52XCIsIFwidXNlXCIsIHRoaXMucHl0aG9uRXhlY10sIHtcbiAgICAgICAgY3dkOiB0aGlzLnByb2plY3Qub3V0ZGlyLFxuICAgICAgfSk7XG4gICAgICBlbnZQYXRoID0gcG9ldHJ5LnRyeUNhcHR1cmUoW1wiZW52XCIsIFwiaW5mb1wiLCBcIi1wXCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFxuICAgICAgICBgRW52aXJvbm1lbnQgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgKGxvY2F0ZWQgaW4gJHtlbnZQYXRofX0pLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyBkZXBlbmRlbmNpZXMgKGNhbGxlZCBkdXJpbmcgcG9zdC1zeW50aGVzaXMpLlxuICAgKi9cbiAgcHVibGljIGluc3RhbGxEZXBlbmRlbmNpZXMoKSB7XG4gICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFwiSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cIik7XG4gICAgLy8gSWYgdGhlIHB5cHJvamVjdC50b21sIGZpbGUgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgbG9ja2ZpbGUgcHJpb3IgdG8gaW5zdGFsbGF0aW9uXG4gICAgaWYgKHRoaXMucHlQcm9qZWN0LmZpbGUuY2hhbmdlZCkge1xuICAgICAgdGhpcy5wcm9qZWN0LnRhc2tzLnJ1blRhc2sodGhpcy5pbnN0YWxsVGFzay5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9qZWN0LnRhc2tzLnJ1blRhc2sodGhpcy5pbnN0YWxsQ2lUYXNrLm5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFBvZXRyeS1zcGVjaWZpYyBvcHRpb25zLlxuICogQHNlZSBodHRwczovL3B5dGhvbi1wb2V0cnkub3JnL2RvY3MvcHlwcm9qZWN0L1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvZXRyeVB5cHJvamVjdE9wdGlvbnNXaXRob3V0RGVwcyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBwYWNrYWdlIChyZXF1aXJlZCkuXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBwYWNrYWdlIChyZXF1aXJlZCkuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwYWNrYWdlIChyZXF1aXJlZCkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTGljZW5zZSBvZiB0aGlzIHBhY2thZ2UgYXMgYW4gU1BEWCBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBJZiB0aGUgcHJvamVjdCBpcyBwcm9wcmlldGFyeSBhbmQgZG9lcyBub3QgdXNlIGEgc3BlY2lmaWMgbGljZW5zZSwgeW91XG4gICAqIGNhbiBzZXQgdGhpcyB2YWx1ZSBhcyBcIlByb3ByaWV0YXJ5XCIuXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYXV0aG9ycyBvZiB0aGUgcGFja2FnZS4gTXVzdCBiZSBpbiB0aGUgZm9ybSBcIm5hbWUgPGVtYWlsPlwiXG4gICAqL1xuICByZWFkb25seSBhdXRob3JzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIHRoZSBtYWludGFpbmVycyBvZiB0aGUgcGFja2FnZS4gTXVzdCBiZSBpbiB0aGUgZm9ybSBcIm5hbWUgPGVtYWlsPlwiXG4gICAqL1xuICByZWFkb25seSBtYWludGFpbmVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcmVhZG1lIGZpbGUgb2YgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSByZWFkbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVVJMIHRvIHRoZSB3ZWJzaXRlIG9mIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgaG9tZXBhZ2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgVVJMIHRvIHRoZSByZXBvc2l0b3J5IG9mIHRoZSBwcm9qZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBVUkwgdG8gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBkb2N1bWVudGF0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2Yga2V5d29yZHMgKG1heDogNSkgdGhhdCB0aGUgcGFja2FnZSBpcyByZWxhdGVkIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5d29yZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIFB5UEkgdHJvdmUgY2xhc3NpZmllcnMgdGhhdCBkZXNjcmliZSB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3B5cGkub3JnL2NsYXNzaWZpZXJzL1xuICAgKi9cbiAgcmVhZG9ubHkgY2xhc3NpZmllcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHRvIGluY2x1ZGUgaW4gdGhlIGZpbmFsIGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2VzPzogYW55W107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGZpbmFsIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBpbmNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBwYXR0ZXJucyB0aGF0IHdpbGwgYmUgZXhjbHVkZWQgaW4gdGhlIGZpbmFsIHBhY2thZ2UuXG4gICAqXG4gICAqIElmIGEgVkNTIGlzIGJlaW5nIHVzZWQgZm9yIGEgcGFja2FnZSwgdGhlIGV4Y2x1ZGUgZmllbGQgd2lsbCBiZSBzZWVkZWQgd2l0aFxuICAgKiB0aGUgVkNT4oCZIGlnbm9yZSBzZXR0aW5ncyAoLmdpdGlnbm9yZSBmb3IgZ2l0IGZvciBleGFtcGxlKS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHNjcmlwdHMgb3IgZXhlY3V0YWJsZXMgdGhhdCB3aWxsIGJlIGluc3RhbGxlZCB3aGVuIGluc3RhbGxpbmcgdGhlIHBhY2thZ2UuXG4gICAqL1xuICByZWFkb25seSBzY3JpcHRzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogU291cmNlIHJlZ2lzdHJpZXMgZnJvbSB3aGljaCBwYWNrYWdlcyBhcmUgcmV0cmlldmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogYW55W107XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgZXh0cmFzXG4gICAqL1xuICByZWFkb25seSBleHRyYXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH07XG5cbiAgLyoqXG4gICAqIFBsdWdpbnMuIE11c3QgYmUgc3BlY2lmaWVkIGFzIGEgdGFibGUuXG4gICAqIEBzZWUgaHR0cHM6Ly90b21sLmlvL2VuL3YxLjAuMCN0YWJsZVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IGFueTtcblxuICAvKipcbiAgICogUHJvamVjdCBjdXN0b20gVVJMcywgaW4gYWRkaXRpb24gdG8gaG9tZXBhZ2UsIHJlcG9zaXRvcnkgYW5kIGRvY3VtZW50YXRpb24uXG4gICAqIEUuZy4gXCJCdWcgVHJhY2tlclwiXG4gICAqL1xuICByZWFkb25seSB1cmxzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbiAgLyoqXG4gICAqIFBhY2thZ2UgbW9kZSAob3B0aW9uYWwpLlxuICAgKiBAc2VlIGh0dHBzOi8vcHl0aG9uLXBvZXRyeS5vcmcvZG9jcy9weXByb2plY3QvI3BhY2thZ2UtbW9kZVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBleGFtcGxlIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlTW9kZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUG9ldHJ5LXNwZWNpZmljIG9wdGlvbnMuXG4gKiBAc2VlIGh0dHBzOi8vcHl0aG9uLXBvZXRyeS5vcmcvZG9jcy9weXByb2plY3QvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9ldHJ5UHlwcm9qZWN0T3B0aW9ucyBleHRlbmRzIFBvZXRyeVB5cHJvamVjdE9wdGlvbnNXaXRob3V0RGVwcyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGZvciB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogVGhlIHB5dGhvbiB2ZXJzaW9uIGZvciB3aGljaCB5b3VyIHBhY2thZ2UgaXMgY29tcGF0aWJsZSBpcyBhbHNvIHJlcXVpcmVkLlxuICAgKlxuICAgKiBAZXhhbXBsZSB7IHJlcXVlc3RzOiBcIl4yLjEzLjBcIiB9XG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzIGZvciB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQGV4YW1wbGUgeyByZXF1ZXN0czogXCJeMi4xMy4wXCIgfVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2RGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGNvbmZpZ3VyYXRpb24gb2YgYSBweXByb2plY3QudG9tbCBmaWxlIGZvciBhIFBvZXRyeSBwcm9qZWN0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9weXRob24tcG9ldHJ5Lm9yZy9kb2NzL3B5cHJvamVjdC9cbiAqL1xuZXhwb3J0IGNsYXNzIFBvZXRyeVB5cHJvamVjdCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBQeXByb2plY3RUb21sRmlsZTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogSUNvbnN0cnVjdCwgb3B0aW9uczogUG9ldHJ5UHlwcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IHsgZGV2RGVwZW5kZW5jaWVzLCAuLi5wb2V0cnlDb25maWcgfSA9IG9wdGlvbnM7XG5cbiAgICB0aGlzLmZpbGUgPSBuZXcgUHlwcm9qZWN0VG9tbEZpbGUoc2NvcGUsIHtcbiAgICAgIHRvb2w6IHtcbiAgICAgICAgcG9ldHJ5OiB7XG4gICAgICAgICAgLi4uZGVjYW1lbGl6ZUtleXNSZWN1cnNpdmVseShwb2V0cnlDb25maWcsIHsgc2VwYXJhdG9yOiBcIi1cIiB9KSxcbiAgICAgICAgICBncm91cDoge1xuICAgICAgICAgICAgZGV2OiB7XG4gICAgICAgICAgICAgIGRlcGVuZGVuY2llczogZGV2RGVwZW5kZW5jaWVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1aWxkU3lzdGVtOiB7XG4gICAgICAgIHJlcXVpcmVzOiBbXCJwb2V0cnktY29yZVwiXSxcbiAgICAgICAgYnVpbGRCYWNrZW5kOiBcInBvZXRyeS5jb3JlLm1hc29ucnkuYXBpXCIsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -17,7 +17,7 @@ const projenrc_1 = require("../projenrc");
17
17
  * `synth` task which will run `.projenrc.py`.
18
18
  */
19
19
  class Projenrc extends projenrc_1.ProjenrcFile {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Projenrc", version: "0.101.37" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Projenrc", version: "0.103.0" };
21
21
  /**
22
22
  * The name of the projenrc file.
23
23
  */
@@ -10,7 +10,7 @@ const pyproject_toml_1 = require("./pyproject-toml");
10
10
  * @see https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
11
11
  */
12
12
  class PyprojectTomlFile extends toml_1.TomlFile {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PyprojectTomlFile", version: "0.101.37" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PyprojectTomlFile", version: "0.103.0" };
14
14
  constructor(scope, config) {
15
15
  super(scope, "pyproject.toml", {
16
16
  omitEmpty: false,
@@ -7,7 +7,7 @@ const __1 = require("..");
7
7
  * Python test code sample.
8
8
  */
9
9
  class PytestSample extends __1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PytestSample", version: "0.101.37" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PytestSample", version: "0.103.0" };
11
11
  constructor(project, options) {
12
12
  super(project);
13
13
  new __1.SampleDir(project, options.testdir, {
@@ -4,7 +4,7 @@ export interface PytestOptions {
4
4
  /**
5
5
  * Pytest version
6
6
  *
7
- * @default "7.4.3"
7
+ * @default "8.3.5"
8
8
  */
9
9
  readonly version?: string;
10
10
  /**
@@ -17,8 +17,11 @@ export interface PytestOptions {
17
17
  * test collection and to avoid picking up undesired tests by accident.
18
18
  *
19
19
  * Leave empty to discover all test_*.py or *_test.py files, per Pytest default.
20
+ * Glob patterns are supported, including `**` for recursive matching.
21
+ *
22
+ * The entries form pytest's `testpaths` setting, which is parsed like a shell
23
+ * word list, so a path containing spaces has to be quoted: `["'my tests'"]`.
20
24
  *
21
- * The array will be concatenated and passed as a single argument to pytest.
22
25
  * @example ["tests/unit", "tests/qa"]
23
26
  * @default []
24
27
  */
@@ -5,21 +5,22 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const component_1 = require("../component");
6
6
  const dependencies_1 = require("../dependencies");
7
7
  class Pytest extends component_1.Component {
8
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pytest", version: "0.101.37" };
8
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Pytest", version: "0.103.0" };
9
9
  testMatch;
10
10
  constructor(project, options = {}) {
11
11
  super(project);
12
- const version = options.version ?? "7.4.3";
12
+ const version = options.version ?? "8.3.5";
13
13
  this.testMatch = options.testMatch ?? [];
14
14
  project.deps.addDependency(`pytest@${version}`, dependencies_1.DependencyType.TEST);
15
- project.testTask.exec([
15
+ project.testTask.execArgs([
16
16
  "pytest",
17
17
  ...(options.maxFailures ? [`--maxfail=${options.maxFailures}`] : []),
18
- ...this.testMatch,
19
- ]
20
- .join(" ")
21
- .trimEnd());
18
+ // `testpaths` is expanded by pytest, so glob patterns are supported
19
+ ...(this.testMatch.length > 0
20
+ ? ["-o", `testpaths=${this.testMatch.join(" ")}`]
21
+ : []),
22
+ ]);
22
23
  }
23
24
  }
24
25
  exports.Pytest = Pytest;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi9weXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDRDQUF5QztBQUN6QyxrREFBaUQ7QUE4QmpELE1BQWEsTUFBTyxTQUFRLHFCQUFTOztJQUMxQixTQUFTLENBQVc7SUFFN0IsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFFM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUV6QyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLDZCQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ25CO1lBQ0UsUUFBUTtZQUNSLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxHQUFHLElBQUksQ0FBQyxTQUFTO1NBQ2xCO2FBQ0UsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNULE9BQU8sRUFBRSxDQUNiLENBQUM7SUFDSixDQUFDOztBQXJCSCx3QkFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0ZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQeXRlc3QgdmVyc2lvblxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjcuNC4zXCJcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0b3AgdGhlIHRlc3RpbmcgcHJvY2VzcyBhZnRlciB0aGUgZmlyc3QgTiBmYWlsdXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4RmFpbHVyZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcGF0aHMgdG8gdGVzdCBmaWxlcyBvciBkaXJlY3Rvcmllcy5cbiAgICogVXNlZnVsIHdoZW4gYWxsIHByb2plY3QgdGVzdHMgYXJlIGluIGEga25vd24gbG9jYXRpb24gdG8gc3BlZWQgdXBcbiAgICogdGVzdCBjb2xsZWN0aW9uIGFuZCB0byBhdm9pZCBwaWNraW5nIHVwIHVuZGVzaXJlZCB0ZXN0cyBieSBhY2NpZGVudC5cbiAgICpcbiAgICogTGVhdmUgZW1wdHkgdG8gZGlzY292ZXIgYWxsIHRlc3RfKi5weSBvciAqX3Rlc3QucHkgZmlsZXMsIHBlciBQeXRlc3QgZGVmYXVsdC5cbiAgICpcbiAgICogVGhlIGFycmF5IHdpbGwgYmUgY29uY2F0ZW5hdGVkIGFuZCBwYXNzZWQgYXMgYSBzaW5nbGUgYXJndW1lbnQgdG8gcHl0ZXN0LlxuICAgKiBAZXhhbXBsZSBbXCJ0ZXN0cy91bml0XCIsIFwidGVzdHMvcWFcIl1cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RNYXRjaD86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgUHl0ZXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGVzdE1hdGNoOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBQeXRlc3RPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnZlcnNpb24gPz8gXCI3LjQuM1wiO1xuXG4gICAgdGhpcy50ZXN0TWF0Y2ggPSBvcHRpb25zLnRlc3RNYXRjaCA/PyBbXTtcblxuICAgIHByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KGBweXRlc3RAJHt2ZXJzaW9ufWAsIERlcGVuZGVuY3lUeXBlLlRFU1QpO1xuXG4gICAgcHJvamVjdC50ZXN0VGFzay5leGVjKFxuICAgICAgW1xuICAgICAgICBcInB5dGVzdFwiLFxuICAgICAgICAuLi4ob3B0aW9ucy5tYXhGYWlsdXJlcyA/IFtgLS1tYXhmYWlsPSR7b3B0aW9ucy5tYXhGYWlsdXJlc31gXSA6IFtdKSxcbiAgICAgICAgLi4udGhpcy50ZXN0TWF0Y2gsXG4gICAgICBdXG4gICAgICAgIC5qb2luKFwiIFwiKVxuICAgICAgICAudHJpbUVuZCgpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHl0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi9weXRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDRDQUF5QztBQUN6QyxrREFBaUQ7QUFpQ2pELE1BQWEsTUFBTyxTQUFRLHFCQUFTOztJQUMxQixTQUFTLENBQVc7SUFFN0IsWUFBWSxPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDdkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFFM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztRQUV6QyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLE9BQU8sRUFBRSxFQUFFLDZCQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDeEIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwRSxvRUFBb0U7WUFDcEUsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQzNCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXBCSCx3QkFxQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0ZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQeXRlc3QgdmVyc2lvblxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjguMy41XCJcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN0b3AgdGhlIHRlc3RpbmcgcHJvY2VzcyBhZnRlciB0aGUgZmlyc3QgTiBmYWlsdXJlc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4RmFpbHVyZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgcGF0aHMgdG8gdGVzdCBmaWxlcyBvciBkaXJlY3Rvcmllcy5cbiAgICogVXNlZnVsIHdoZW4gYWxsIHByb2plY3QgdGVzdHMgYXJlIGluIGEga25vd24gbG9jYXRpb24gdG8gc3BlZWQgdXBcbiAgICogdGVzdCBjb2xsZWN0aW9uIGFuZCB0byBhdm9pZCBwaWNraW5nIHVwIHVuZGVzaXJlZCB0ZXN0cyBieSBhY2NpZGVudC5cbiAgICpcbiAgICogTGVhdmUgZW1wdHkgdG8gZGlzY292ZXIgYWxsIHRlc3RfKi5weSBvciAqX3Rlc3QucHkgZmlsZXMsIHBlciBQeXRlc3QgZGVmYXVsdC5cbiAgICogR2xvYiBwYXR0ZXJucyBhcmUgc3VwcG9ydGVkLCBpbmNsdWRpbmcgYCoqYCBmb3IgcmVjdXJzaXZlIG1hdGNoaW5nLlxuICAgKlxuICAgKiBUaGUgZW50cmllcyBmb3JtIHB5dGVzdCdzIGB0ZXN0cGF0aHNgIHNldHRpbmcsIHdoaWNoIGlzIHBhcnNlZCBsaWtlIGEgc2hlbGxcbiAgICogd29yZCBsaXN0LCBzbyBhIHBhdGggY29udGFpbmluZyBzcGFjZXMgaGFzIHRvIGJlIHF1b3RlZDogYFtcIidteSB0ZXN0cydcIl1gLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbXCJ0ZXN0cy91bml0XCIsIFwidGVzdHMvcWFcIl1cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RNYXRjaD86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgUHl0ZXN0IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgdGVzdE1hdGNoOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBQeXRlc3RPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnZlcnNpb24gPz8gXCI4LjMuNVwiO1xuXG4gICAgdGhpcy50ZXN0TWF0Y2ggPSBvcHRpb25zLnRlc3RNYXRjaCA/PyBbXTtcblxuICAgIHByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KGBweXRlc3RAJHt2ZXJzaW9ufWAsIERlcGVuZGVuY3lUeXBlLlRFU1QpO1xuXG4gICAgcHJvamVjdC50ZXN0VGFzay5leGVjQXJncyhbXG4gICAgICBcInB5dGVzdFwiLFxuICAgICAgLi4uKG9wdGlvbnMubWF4RmFpbHVyZXMgPyBbYC0tbWF4ZmFpbD0ke29wdGlvbnMubWF4RmFpbHVyZXN9YF0gOiBbXSksXG4gICAgICAvLyBgdGVzdHBhdGhzYCBpcyBleHBhbmRlZCBieSBweXRlc3QsIHNvIGdsb2IgcGF0dGVybnMgYXJlIHN1cHBvcnRlZFxuICAgICAgLi4uKHRoaXMudGVzdE1hdGNoLmxlbmd0aCA+IDBcbiAgICAgICAgPyBbXCItb1wiLCBgdGVzdHBhdGhzPSR7dGhpcy50ZXN0TWF0Y2guam9pbihcIiBcIil9YF1cbiAgICAgICAgOiBbXSksXG4gICAgXSk7XG4gIH1cbn1cbiJdfQ==
@@ -23,7 +23,7 @@ const PYTHON_PROJECT_NAME_REGEX = /^[A-Za-z0-9-_\.]+$/;
23
23
  * @pjid python
24
24
  */
25
25
  class PythonProject extends github_1.GitHubProject {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonProject", version: "0.101.37" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonProject", version: "0.103.0" };
27
27
  /**
28
28
  * Python module name (the project name, with any hyphens or periods replaced
29
29
  * with underscores).
@@ -8,7 +8,7 @@ const sample_file_1 = require("../sample-file");
8
8
  * Python code sample.
9
9
  */
10
10
  class PythonSample extends component_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonSample", version: "0.101.37" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.PythonSample", version: "0.103.0" };
12
12
  constructor(project, options) {
13
13
  super(project);
14
14
  new sample_file_1.SampleDir(project, options.dir, {
@@ -11,7 +11,7 @@ const semver_1 = require("../util/semver");
11
11
  * @see https://pip.pypa.io/en/stable/reference/pip_install/#requirements-file-format
12
12
  */
13
13
  class RequirementsFile extends file_1.FileBase {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.RequirementsFile", version: "0.101.37" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.RequirementsFile", version: "0.103.0" };
15
15
  packages = new Array();
16
16
  packageProvider;
17
17
  constructor(project, filePath, options) {
@@ -7,7 +7,7 @@ const file_1 = require("../file");
7
7
  * Python packaging script where package metadata can be placed.
8
8
  */
9
9
  class SetupPy extends file_1.FileBase {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.SetupPy", version: "0.101.37" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.SetupPy", version: "0.103.0" };
11
11
  setupConfig;
12
12
  constructor(project, options) {
13
13
  super(project, "setup.py");
@@ -9,7 +9,7 @@ const dependencies_1 = require("../dependencies");
9
9
  * Manages packaging through setuptools with a setup.py script.
10
10
  */
11
11
  class Setuptools extends component_1.Component {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Setuptools", version: "0.101.37" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Setuptools", version: "0.103.0" };
13
13
  publishTask;
14
14
  /**
15
15
  * A task that uploads the package to the Test PyPI repository.
@@ -29,11 +29,17 @@ class Setuptools extends component_1.Component {
29
29
  ]);
30
30
  this.publishTestTask = project.addTask("publish:test", {
31
31
  description: "Uploads the package against a test PyPI endpoint.",
32
- exec: "twine upload --repository-url https://test.pypi.org/legacy/ dist/*",
32
+ execArgs: [
33
+ "twine",
34
+ "upload",
35
+ "--repository-url",
36
+ "https://test.pypi.org/legacy/",
37
+ "dist/*",
38
+ ],
33
39
  });
34
40
  this.publishTask = project.addTask("publish", {
35
41
  description: "Uploads the package against a test PyPI endpoint.",
36
- exec: "twine upload dist/*",
42
+ execArgs: ["twine", "upload", "dist/*"],
37
43
  });
38
44
  const packages = options.packageName ? [options.packageName] : undefined;
39
45
  new setuppy_1.SetupPy(project, {
@@ -51,4 +57,4 @@ class Setuptools extends component_1.Component {
51
57
  }
52
58
  }
53
59
  exports.Setuptools = Setuptools;
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXB0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9weXRob24vc2V0dXB0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBS0EsdUNBQW9DO0FBQ3BDLDRDQUF5QztBQUN6QyxrREFBaUQ7QUFPakQ7O0dBRUc7QUFDSCxNQUFhLFVBQVcsU0FBUSxxQkFBUzs7SUFDdkIsV0FBVyxDQUFPO0lBRWxDOztPQUVHO0lBQ2EsZUFBZSxDQUFPO0lBRXJCLFVBQVUsQ0FBUztJQUVwQyxZQUFZLE9BQWdCLEVBQUUsT0FBMEI7UUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUVqRCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsNkJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsNkJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRSxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVTtZQUNmLFVBQVU7WUFDVixPQUFPO1lBQ1AsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDckQsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxJQUFJLEVBQUUsb0VBQW9FO1NBQzNFLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDNUMsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxJQUFJLEVBQUUscUJBQXFCO1NBQzVCLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFekUsSUFBSSxpQkFBTyxDQUFDLE9BQU8sRUFBRTtZQUNuQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO1lBQzlCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7WUFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLEdBQUcsT0FBTyxDQUFDLFdBQVc7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoREgsZ0NBaURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBJUHl0aG9uUGFja2FnaW5nLFxuICBQeXRob25QYWNrYWdpbmdPcHRpb25zLFxufSBmcm9tIFwiLi9weXRob24tcGFja2FnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFB5dGhvbkV4ZWN1dGFibGVPcHRpb25zIH0gZnJvbSBcIi4vcHl0aG9uLXByb2plY3RcIjtcbmltcG9ydCB7IFNldHVwUHkgfSBmcm9tIFwiLi9zZXR1cHB5XCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNldHVwdG9vbHNPcHRpb25zXG4gIGV4dGVuZHMgUHl0aG9uUGFja2FnaW5nT3B0aW9ucywgUHl0aG9uRXhlY3V0YWJsZU9wdGlvbnMge31cblxuLyoqXG4gKiBNYW5hZ2VzIHBhY2thZ2luZyB0aHJvdWdoIHNldHVwdG9vbHMgd2l0aCBhIHNldHVwLnB5IHNjcmlwdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNldHVwdG9vbHMgZXh0ZW5kcyBDb21wb25lbnQgaW1wbGVtZW50cyBJUHl0aG9uUGFja2FnaW5nIHtcbiAgcHVibGljIHJlYWRvbmx5IHB1Ymxpc2hUYXNrOiBUYXNrO1xuXG4gIC8qKlxuICAgKiBBIHRhc2sgdGhhdCB1cGxvYWRzIHRoZSBwYWNrYWdlIHRvIHRoZSBUZXN0IFB5UEkgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoVGVzdFRhc2s6IFRhc2s7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBweXRob25FeGVjOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogU2V0dXB0b29sc09wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLnB5dGhvbkV4ZWMgPSBvcHRpb25zLnB5dGhvbkV4ZWMgPz8gXCJweXRob25cIjtcblxuICAgIHByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFwid2hlZWxAMC4zNi4yXCIsIERlcGVuZGVuY3lUeXBlLkRFVkVOVik7XG4gICAgcHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXCJ0d2luZUAzLjMuMFwiLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuXG4gICAgcHJvamVjdC5wYWNrYWdlVGFzay5leGVjQXJncyhbXG4gICAgICB0aGlzLnB5dGhvbkV4ZWMsXG4gICAgICBcInNldHVwLnB5XCIsXG4gICAgICBcInNkaXN0XCIsXG4gICAgICBcImJkaXN0X3doZWVsXCIsXG4gICAgXSk7XG5cbiAgICB0aGlzLnB1Ymxpc2hUZXN0VGFzayA9IHByb2plY3QuYWRkVGFzayhcInB1Ymxpc2g6dGVzdFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGxvYWRzIHRoZSBwYWNrYWdlIGFnYWluc3QgYSB0ZXN0IFB5UEkgZW5kcG9pbnQuXCIsXG4gICAgICBleGVjOiBcInR3aW5lIHVwbG9hZCAtLXJlcG9zaXRvcnktdXJsIGh0dHBzOi8vdGVzdC5weXBpLm9yZy9sZWdhY3kvIGRpc3QvKlwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wdWJsaXNoVGFzayA9IHByb2plY3QuYWRkVGFzayhcInB1Ymxpc2hcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiVXBsb2FkcyB0aGUgcGFja2FnZSBhZ2FpbnN0IGEgdGVzdCBQeVBJIGVuZHBvaW50LlwiLFxuICAgICAgZXhlYzogXCJ0d2luZSB1cGxvYWQgZGlzdC8qXCIsXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYWNrYWdlcyA9IG9wdGlvbnMucGFja2FnZU5hbWUgPyBbb3B0aW9ucy5wYWNrYWdlTmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICBuZXcgU2V0dXBQeShwcm9qZWN0LCB7XG4gICAgICBuYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBwYWNrYWdlczogcGFja2FnZXMsXG4gICAgICBhdXRob3JOYW1lOiBvcHRpb25zLmF1dGhvck5hbWUsXG4gICAgICBhdXRob3JFbWFpbDogb3B0aW9ucy5hdXRob3JFbWFpbCxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICBjbGFzc2lmaWVyczogb3B0aW9ucy5jbGFzc2lmaWVycyxcbiAgICAgIC4uLm9wdGlvbnMuc2V0dXBDb25maWcsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXB0b29scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9weXRob24vc2V0dXB0b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBS0EsdUNBQW9DO0FBQ3BDLDRDQUF5QztBQUN6QyxrREFBaUQ7QUFPakQ7O0dBRUc7QUFDSCxNQUFhLFVBQVcsU0FBUSxxQkFBUzs7SUFDdkIsV0FBVyxDQUFPO0lBRWxDOztPQUVHO0lBQ2EsZUFBZSxDQUFPO0lBRXJCLFVBQVUsQ0FBUztJQUVwQyxZQUFZLE9BQWdCLEVBQUUsT0FBMEI7UUFDdEQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUVqRCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsNkJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsRSxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsNkJBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRSxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVTtZQUNmLFVBQVU7WUFDVixPQUFPO1lBQ1AsYUFBYTtTQUNkLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDckQsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxRQUFRLEVBQUU7Z0JBQ1IsT0FBTztnQkFDUCxRQUFRO2dCQUNSLGtCQUFrQjtnQkFDbEIsK0JBQStCO2dCQUMvQixRQUFRO2FBQ1Q7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzVDLFdBQVcsRUFBRSxtREFBbUQ7WUFDaEUsUUFBUSxFQUFFLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7U0FDeEMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUV6RSxJQUFJLGlCQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7WUFDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1lBQ2hDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztZQUN4QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDaEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1lBQ3hCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtZQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7WUFDaEMsR0FBRyxPQUFPLENBQUMsV0FBVztTQUN2QixDQUFDLENBQUM7SUFDTCxDQUFDOztBQXRESCxnQ0F1REMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG4gIElQeXRob25QYWNrYWdpbmcsXG4gIFB5dGhvblBhY2thZ2luZ09wdGlvbnMsXG59IGZyb20gXCIuL3B5dGhvbi1wYWNrYWdpbmdcIjtcbmltcG9ydCB0eXBlIHsgUHl0aG9uRXhlY3V0YWJsZU9wdGlvbnMgfSBmcm9tIFwiLi9weXRob24tcHJvamVjdFwiO1xuaW1wb3J0IHsgU2V0dXBQeSB9IGZyb20gXCIuL3NldHVwcHlcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2V0dXB0b29sc09wdGlvbnNcbiAgZXh0ZW5kcyBQeXRob25QYWNrYWdpbmdPcHRpb25zLCBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB7fVxuXG4vKipcbiAqIE1hbmFnZXMgcGFja2FnaW5nIHRocm91Z2ggc2V0dXB0b29scyB3aXRoIGEgc2V0dXAucHkgc2NyaXB0LlxuICovXG5leHBvcnQgY2xhc3MgU2V0dXB0b29scyBleHRlbmRzIENvbXBvbmVudCBpbXBsZW1lbnRzIElQeXRob25QYWNrYWdpbmcge1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaFRhc2s6IFRhc2s7XG5cbiAgLyoqXG4gICAqIEEgdGFzayB0aGF0IHVwbG9hZHMgdGhlIHBhY2thZ2UgdG8gdGhlIFRlc3QgUHlQSSByZXBvc2l0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1Ymxpc2hUZXN0VGFzazogVGFzaztcblxuICBwcml2YXRlIHJlYWRvbmx5IHB5dGhvbkV4ZWM6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBTZXR1cHRvb2xzT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIHRoaXMucHl0aG9uRXhlYyA9IG9wdGlvbnMucHl0aG9uRXhlYyA/PyBcInB5dGhvblwiO1xuXG4gICAgcHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXCJ3aGVlbEAwLjM2LjJcIiwgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgICBwcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShcInR3aW5lQDMuMy4wXCIsIERlcGVuZGVuY3lUeXBlLkRFVkVOVik7XG5cbiAgICBwcm9qZWN0LnBhY2thZ2VUYXNrLmV4ZWNBcmdzKFtcbiAgICAgIHRoaXMucHl0aG9uRXhlYyxcbiAgICAgIFwic2V0dXAucHlcIixcbiAgICAgIFwic2Rpc3RcIixcbiAgICAgIFwiYmRpc3Rfd2hlZWxcIixcbiAgICBdKTtcblxuICAgIHRoaXMucHVibGlzaFRlc3RUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwicHVibGlzaDp0ZXN0XCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlVwbG9hZHMgdGhlIHBhY2thZ2UgYWdhaW5zdCBhIHRlc3QgUHlQSSBlbmRwb2ludC5cIixcbiAgICAgIGV4ZWNBcmdzOiBbXG4gICAgICAgIFwidHdpbmVcIixcbiAgICAgICAgXCJ1cGxvYWRcIixcbiAgICAgICAgXCItLXJlcG9zaXRvcnktdXJsXCIsXG4gICAgICAgIFwiaHR0cHM6Ly90ZXN0LnB5cGkub3JnL2xlZ2FjeS9cIixcbiAgICAgICAgXCJkaXN0LypcIixcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnB1Ymxpc2hUYXNrID0gcHJvamVjdC5hZGRUYXNrKFwicHVibGlzaFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGxvYWRzIHRoZSBwYWNrYWdlIGFnYWluc3QgYSB0ZXN0IFB5UEkgZW5kcG9pbnQuXCIsXG4gICAgICBleGVjQXJnczogW1widHdpbmVcIiwgXCJ1cGxvYWRcIiwgXCJkaXN0LypcIl0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYWNrYWdlcyA9IG9wdGlvbnMucGFja2FnZU5hbWUgPyBbb3B0aW9ucy5wYWNrYWdlTmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICBuZXcgU2V0dXBQeShwcm9qZWN0LCB7XG4gICAgICBuYW1lOiBwcm9qZWN0Lm5hbWUsXG4gICAgICBwYWNrYWdlczogcGFja2FnZXMsXG4gICAgICBhdXRob3JOYW1lOiBvcHRpb25zLmF1dGhvck5hbWUsXG4gICAgICBhdXRob3JFbWFpbDogb3B0aW9ucy5hdXRob3JFbWFpbCxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgaG9tZXBhZ2U6IG9wdGlvbnMuaG9tZXBhZ2UsXG4gICAgICBjbGFzc2lmaWVyczogb3B0aW9ucy5jbGFzc2lmaWVycyxcbiAgICAgIC4uLm9wdGlvbnMuc2V0dXBDb25maWcsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -220,7 +220,7 @@ function toJson_StaticMetadata(obj) {
220
220
  */
221
221
  class ExcludeNewerOverride {
222
222
  value;
223
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.uvConfig.ExcludeNewerOverride", version: "0.101.37" };
223
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.uvConfig.ExcludeNewerOverride", version: "0.103.0" };
224
224
  static fromBoolean(value) {
225
225
  return new ExcludeNewerOverride(value);
226
226
  }
package/lib/python/uv.js CHANGED
@@ -11,7 +11,7 @@ const exec_1 = require("../util/exec");
11
11
  * Manage project dependencies, virtual environments, and packaging through uv.
12
12
  */
13
13
  class Uv extends component_1.Component {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Uv", version: "0.101.37" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Uv", version: "0.103.0" };
15
15
  /**
16
16
  * The `pyproject.toml` file
17
17
  */
@@ -27,7 +27,7 @@ class Uv extends component_1.Component {
27
27
  this.venvPython = options.pythonExec ?? requiresPython;
28
28
  this.installTask = this.project.addTask("install", {
29
29
  description: "Install dependencies and update lockfile",
30
- exec: "uv sync && uv lock",
30
+ steps: [{ execArgs: ["uv", "sync"] }, { execArgs: ["uv", "lock"] }],
31
31
  });
32
32
  this.installCiTask = this.project.addTask("install:ci", {
33
33
  description: "Install dependencies with frozen lockfile",
@@ -140,4 +140,4 @@ class Uv extends component_1.Component {
140
140
  }
141
141
  }
142
142
  exports.Uv = Uv;
143
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3V2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSwrREFBMEQ7QUFJMUQsNENBQXlDO0FBR3pDLDJDQUFxRDtBQUVyRCxrREFBaUQ7QUFFakQsdUNBQWtDO0FBd0JsQzs7R0FFRztBQUNILE1BQWEsRUFDWCxTQUFRLHFCQUFTOztJQUdqQjs7T0FFRztJQUNhLElBQUksQ0FBb0I7SUFDeEIsV0FBVyxDQUFPO0lBQ2xCLGFBQWEsQ0FBTztJQUNwQixXQUFXLENBQU87SUFDbEIsZUFBZSxDQUFPO0lBRXJCLFVBQVUsQ0FBUztJQUVwQyxZQUFZLEtBQWlCLEVBQUUsT0FBa0I7UUFDL0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLElBQUksYUFBYSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUM7UUFFdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDakQsV0FBVyxFQUFFLDBDQUEwQztZQUN2RCxJQUFJLEVBQUUsb0JBQW9CO1NBQzNCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3RELFdBQVcsRUFBRSwyQ0FBMkM7WUFDeEQsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUseUJBQXlC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Q0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RELENBQUM7SUFDSCxDQUFDOztBQW5LSCxnQkFvS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHR5cGUgeyBCdWlsZFN5c3RlbSwgUHlwcm9qZWN0VG9tbFByb2plY3QgfSBmcm9tIFwiLi9weXByb2plY3QtdG9tbFwiO1xuaW1wb3J0IHsgUHlwcm9qZWN0VG9tbEZpbGUgfSBmcm9tIFwiLi9weXByb2plY3QtdG9tbC1maWxlXCI7XG5pbXBvcnQgdHlwZSB7IElQeXRob25EZXBzIH0gZnJvbSBcIi4vcHl0aG9uLWRlcHNcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvbkVudiB9IGZyb20gXCIuL3B5dGhvbi1lbnZcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvblBhY2thZ2luZyB9IGZyb20gXCIuL3B5dGhvbi1wYWNrYWdpbmdcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHl0aG9uRXhlY3V0YWJsZU9wdGlvbnMgfSBmcm9tIFwiLi9weXRob24tcHJvamVjdFwiO1xuaW1wb3J0IHR5cGUgeyBVdkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi91di1jb25maWdcIjtcbmltcG9ydCB7IHRvSnNvbl9VdkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi91di1jb25maWdcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jeSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrIH0gZnJvbSBcIi4uL3Rhc2tcIjtcbmltcG9ydCB7IHV2IH0gZnJvbSBcIi4uL3V0aWwvZXhlY1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFVWIHByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVdk9wdGlvbnMgZXh0ZW5kcyBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcHJvamVjdCdzIGJhc2ljIG1ldGFkYXRhIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0PzogUHlwcm9qZWN0VG9tbFByb2plY3Q7XG5cbiAgLyoqXG4gICAqIERlY2xhcmVzIGFueSBQeXRob24gbGV2ZWwgZGVwZW5kZW5jaWVzIHRoYXQgbXVzdCBiZSBpbnN0YWxsZWQgaW4gb3JkZXIgdG8gcnVuIHRoZSBwcm9qZWN04oCZcyBidWlsZCBzeXN0ZW0gc3VjY2Vzc2Z1bGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGJ1aWxkIHN5c3RlbVxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRTeXN0ZW0/OiBCdWlsZFN5c3RlbTtcblxuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gYW5kIG1ldGFkYXRhIGZvciB1di5cbiAgICovXG4gIHJlYWRvbmx5IHV2PzogVXZDb25maWd1cmF0aW9uO1xufVxuXG4vKipcbiAqIE1hbmFnZSBwcm9qZWN0IGRlcGVuZGVuY2llcywgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBwYWNrYWdpbmcgdGhyb3VnaCB1di5cbiAqL1xuZXhwb3J0IGNsYXNzIFV2XG4gIGV4dGVuZHMgQ29tcG9uZW50XG4gIGltcGxlbWVudHMgSVB5dGhvbkRlcHMsIElQeXRob25FbnYsIElQeXRob25QYWNrYWdpbmdcbntcbiAgLyoqXG4gICAqIFRoZSBgcHlwcm9qZWN0LnRvbWxgIGZpbGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBQeXByb2plY3RUb21sRmlsZTtcbiAgcHVibGljIHJlYWRvbmx5IGluc3RhbGxUYXNrOiBUYXNrO1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbENpVGFzazogVGFzaztcbiAgcHVibGljIHJlYWRvbmx5IHB1Ymxpc2hUYXNrOiBUYXNrO1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaFRlc3RUYXNrOiBUYXNrO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdmVudlB5dGhvbjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBJQ29uc3RydWN0LCBvcHRpb25zOiBVdk9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSk7XG5cbiAgICBjb25zdCByZXF1aXJlc1B5dGhvbiA9IG9wdGlvbnMucHJvamVjdD8ucmVxdWlyZXNQeXRob24gPz8gXCI+PTMuMTIsPDQuMFwiO1xuICAgIHRoaXMudmVudlB5dGhvbiA9IG9wdGlvbnMucHl0aG9uRXhlYyA/PyByZXF1aXJlc1B5dGhvbjtcblxuICAgIHRoaXMuaW5zdGFsbFRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhcImluc3RhbGxcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgYW5kIHVwZGF0ZSBsb2NrZmlsZVwiLFxuICAgICAgZXhlYzogXCJ1diBzeW5jICYmIHV2IGxvY2tcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaW5zdGFsbENpVGFzayA9IHRoaXMucHJvamVjdC5hZGRUYXNrKFwiaW5zdGFsbDpjaVwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnN0YWxsIGRlcGVuZGVuY2llcyB3aXRoIGZyb3plbiBsb2NrZmlsZVwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInV2XCIsIFwic3luY1wiXSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvamVjdC50YXNrcy5hZGRFbnZpcm9ubWVudChcIlZJUlRVQUxfRU5WXCIsIFwiLnZlbnZcIik7XG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLmFkZEVudmlyb25tZW50KFwiUEFUSFwiLCBcIiQoZWNobyAudmVudi9iaW46JFBBVEgpXCIpO1xuXG4gICAgdGhpcy5wcm9qZWN0LnBhY2thZ2VUYXNrLmV4ZWNBcmdzKFtcInV2XCIsIFwiYnVpbGRcIl0pO1xuXG4gICAgdGhpcy5wdWJsaXNoVGVzdFRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhcInB1Ymxpc2g6dGVzdFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGxvYWRzIHRoZSBwYWNrYWdlIGFnYWluc3QgYSB0ZXN0IFB5UEkgZW5kcG9pbnQuXCIsXG4gICAgICBleGVjQXJnczogW1widXZcIiwgXCJwdWJsaXNoXCIsIFwiLS1pbmRleFwiLCBcInRlc3RweXBpXCJdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wdWJsaXNoVGFzayA9IHRoaXMucHJvamVjdC5hZGRUYXNrKFwicHVibGlzaFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJVcGxvYWRzIHRoZSBwYWNrYWdlIHRvIFB5UEkuXCIsXG4gICAgICBleGVjQXJnczogW1widXZcIiwgXCJwdWJsaXNoXCJdLFxuICAgIH0pO1xuXG4gICAgdGhpcy5maWxlID0gbmV3IFB5cHJvamVjdFRvbWxGaWxlKHRoaXMucHJvamVjdCwge1xuICAgICAgcHJvamVjdDoge1xuICAgICAgICBuYW1lOiBvcHRpb25zLnByb2plY3Q/Lm5hbWUgPz8gdGhpcy5wcm9qZWN0Lm5hbWUsXG4gICAgICAgIHJlcXVpcmVzUHl0aG9uLFxuICAgICAgICAuLi5vcHRpb25zLnByb2plY3QsXG4gICAgICAgIGRlcGVuZGVuY2llczogKCgpID0+IFtcbiAgICAgICAgICAuLi4ob3B0aW9ucz8ucHJvamVjdD8uZGVwZW5kZW5jaWVzID8/IFtdKSxcbiAgICAgICAgICAuLi50aGlzLnN5bnRoRGVwZW5kZW5jaWVzKCksXG4gICAgICAgIF0pIGFzIGFueSxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRlbmN5R3JvdXBzOiAoKCkgPT4gdGhpcy5zeW50aERlcGVuZGVuY3lHcm91cHMoKSkgYXMgYW55LFxuICAgICAgYnVpbGRTeXN0ZW06IG9wdGlvbnMuYnVpbGRTeXN0ZW0sXG4gICAgICB0b29sOiB7XG4gICAgICAgIHV2OiB0b0pzb25fVXZDb25maWd1cmF0aW9uKG9wdGlvbnMudXYpLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGb3JtYXRzIGRlcGVuZGVuY2llcyBpbiBVViBzdHlsZS4gKi9cbiAgcHJpdmF0ZSBmb3JtYXREZXBlbmRlbmN5KGRlcDogRGVwZW5kZW5jeSk6IHN0cmluZyB7XG4gICAgY29uc3QgbmFtZSA9IGRlcC5uYW1lO1xuICAgIGNvbnN0IHZlcnNpb24gPSBkZXAudmVyc2lvbjtcblxuICAgIGlmICghdmVyc2lvbiB8fCB2ZXJzaW9uID09PSBcIipcIikge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuXG4gICAgLy8gVHJhbnNsYXRlIGNhcmV0ICheKSB0byBQeXRob24gY29tcGF0aWJsZSBjb25zdHJhaW50c1xuICAgIGlmICh2ZXJzaW9uLnN0YXJ0c1dpdGgoXCJeXCIpKSB7XG4gICAgICBjb25zdCBjbGVhblZlcnNpb24gPSB2ZXJzaW9uLnNsaWNlKDEpO1xuICAgICAgY29uc3QgW21ham9yXSA9IGNsZWFuVmVyc2lvbi5zcGxpdChcIi5cIik7XG4gICAgICBjb25zdCBuZXh0TWFqb3IgPSBOdW1iZXIobWFqb3IpICsgMTtcbiAgICAgIHJldHVybiBgJHtuYW1lfT49JHtjbGVhblZlcnNpb259LDwke25leHRNYWpvcn0uMC4wYDtcbiAgICB9XG5cbiAgICAvLyBUcmFuc2xhdGUgdGlsZGUgKH4pIHRvIGNvbXBhdGlibGUgcmVsZWFzZSBjbGF1c2UgcGVyIFBFUCA0NDBcbiAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKFwiflwiKSkge1xuICAgICAgY29uc3QgY2xlYW5WZXJzaW9uID0gdmVyc2lvbi5zbGljZSgxKTtcblxuICAgICAgLy8gT25seSBrZWVwIG1ham9yLm1pbm9yIGZvciB0aWxkZSBpZiBwb3NzaWJsZVxuICAgICAgY29uc3QgW21ham9yLCBtaW5vciA9IFwiMFwiLCBwYXRjaCA9IFwiMFwiXSA9IGNsZWFuVmVyc2lvbi5zcGxpdChcIi5cIik7XG4gICAgICBjb25zdCBuZXh0TWlub3IgPSBOdW1iZXIobWlub3IpICsgMTtcbiAgICAgIHJldHVybiBgJHtuYW1lfT49JHttYWpvcn0uJHttaW5vcn0uJHtwYXRjaH0sPCR7bWFqb3J9LiR7bmV4dE1pbm9yfS4wYDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UgdHJlYXQgYXMgYW4gZXhhY3QgdmVyc2lvblxuICAgIHJldHVybiBgJHtuYW1lfT09JHt2ZXJzaW9ufWA7XG4gIH1cblxuICBwcml2YXRlIGdldERlcGVuZGVuY2llcyhkZXBlbmRlbmN5VHlwZXM6IERlcGVuZGVuY3lUeXBlW10pOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucHJvamVjdC5kZXBzLmFsbFxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChwa2cpID0+IGRlcGVuZGVuY3lUeXBlcy5pbmNsdWRlcyhwa2cudHlwZSkgJiYgcGtnLm5hbWUgIT09IFwicHl0aG9uXCIsXG4gICAgICAgIClcbiAgICAgICAgLy8gcmVtb3ZlIGR1cGxpY2F0ZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBkZXBlbmRlbmN5XG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGRlcCwgaW5kZXgsIHNlbGYpID0+XG4gICAgICAgICAgICBpbmRleCA9PT0gc2VsZi5maW5kSW5kZXgoKGQpID0+IGQubmFtZSA9PT0gZGVwLm5hbWUpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKHBrZykgPT4gdGhpcy5mb3JtYXREZXBlbmRlbmN5KHBrZykpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhEZXBlbmRlbmNpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldERlcGVuZGVuY2llcyhbRGVwZW5kZW5jeVR5cGUuUlVOVElNRV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aERlcGVuZGVuY3lHcm91cHMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkZXZEZXBzID0gdGhpcy5nZXREZXBlbmRlbmNpZXMoW1xuICAgICAgRGVwZW5kZW5jeVR5cGUuREVWRU5WLFxuICAgICAgRGVwZW5kZW5jeVR5cGUuVEVTVCxcbiAgICBdKTtcblxuICAgIGlmIChkZXZEZXBzKSB7XG4gICAgICByZXR1cm4geyBkZXY6IGRldkRlcHMgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHNwZWMsIERlcGVuZGVuY3lUeXBlLlJVTlRJTUUpO1xuICB9XG5cbiAgcHVibGljIGFkZERldkRlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShzcGVjLCBEZXBlbmRlbmN5VHlwZS5ERVZFTlYpO1xuICB9XG5cbiAgcHVibGljIHNldHVwRW52aXJvbm1lbnQoKTogdm9pZCB7XG4gICAgY29uc3QgcmVzdWx0ID0gdXYudHJ5Q2FwdHVyZShbXCItLXZlcnNpb25cIl0sIHtcbiAgICAgIGN3ZDogdGhpcy5wcm9qZWN0Lm91dGRpcixcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFxuICAgICAgICBcIlVuYWJsZSB0byBzZXR1cCBhbiBlbnZpcm9ubWVudCBzaW5jZSB1diBpcyBub3QgaW5zdGFsbGVkLiBQbGVhc2UgaW5zdGFsbCB1diAoaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC91dikgb3IgdXNlIGEgZGlmZmVyZW50IGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZW52aXJvbm1lbnRzLlwiLFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdmVudiB3aXRoIHRoZSBzcGVjaWZpYyBQeXRob24gdmVyc2lvblxuICAgIC8vIHRoaXMgd2lsbCBpbnN0YWxsIHRoZSByZXF1ZXN0ZWQgcHl0aG9uIHZlcnNpb24gaWYgbmVlZGVkXG4gICAgdXYucnVuKFtcInZlbnZcIiwgXCItLXB5dGhvblwiLCB0aGlzLnZlbnZQeXRob24sIFwiLS1jbGVhclwiLCBcIi52ZW52XCJdLCB7XG4gICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFxuICAgICAgYEVudmlyb25tZW50IHN1Y2Nlc3NmdWxseSBjcmVhdGVkIGluIC52ZW52IGRpcmVjdG9yeSB3aXRoIFB5dGhvbiAke3RoaXMudmVudlB5dGhvbn0uYCxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGluc3RhbGxEZXBlbmRlbmNpZXMoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFwiSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cIik7XG4gICAgaWYgKHRoaXMuZmlsZS5jaGFuZ2VkKSB7XG4gICAgICB0aGlzLnByb2plY3QudGFza3MucnVuVGFzayh0aGlzLmluc3RhbGxUYXNrLm5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2plY3QudGFza3MucnVuVGFzayh0aGlzLmluc3RhbGxDaVRhc2submFtZSk7XG4gICAgfVxuICB9XG59XG4iXX0=
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHl0aG9uL3V2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSwrREFBMEQ7QUFJMUQsNENBQXlDO0FBR3pDLDJDQUFxRDtBQUVyRCxrREFBaUQ7QUFFakQsdUNBQWtDO0FBd0JsQzs7R0FFRztBQUNILE1BQWEsRUFDWCxTQUFRLHFCQUFTOztJQUdqQjs7T0FFRztJQUNhLElBQUksQ0FBb0I7SUFDeEIsV0FBVyxDQUFPO0lBQ2xCLGFBQWEsQ0FBTztJQUNwQixXQUFXLENBQU87SUFDbEIsZUFBZSxDQUFPO0lBRXJCLFVBQVUsQ0FBUztJQUVwQyxZQUFZLEtBQWlCLEVBQUUsT0FBa0I7UUFDL0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxjQUFjLElBQUksYUFBYSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUM7UUFFdkQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDakQsV0FBVyxFQUFFLDBDQUEwQztZQUN2RCxLQUFLLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7U0FDcEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdEQsV0FBVyxFQUFFLDJDQUEyQztZQUN4RCxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFD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SSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNILENBQUM7O0FBbktILGdCQW9LQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkU3lzdGVtLCBQeXByb2plY3RUb21sUHJvamVjdCB9IGZyb20gXCIuL3B5cHJvamVjdC10b21sXCI7XG5pbXBvcnQgeyBQeXByb2plY3RUb21sRmlsZSB9IGZyb20gXCIuL3B5cHJvamVjdC10b21sLWZpbGVcIjtcbmltcG9ydCB0eXBlIHsgSVB5dGhvbkRlcHMgfSBmcm9tIFwiLi9weXRob24tZGVwc1wiO1xuaW1wb3J0IHR5cGUgeyBJUHl0aG9uRW52IH0gZnJvbSBcIi4vcHl0aG9uLWVudlwiO1xuaW1wb3J0IHR5cGUgeyBJUHl0aG9uUGFja2FnaW5nIH0gZnJvbSBcIi4vcHl0aG9uLXBhY2thZ2luZ1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBQeXRob25FeGVjdXRhYmxlT3B0aW9ucyB9IGZyb20gXCIuL3B5dGhvbi1wcm9qZWN0XCI7XG5pbXBvcnQgdHlwZSB7IFV2Q29uZmlndXJhdGlvbiB9IGZyb20gXCIuL3V2LWNvbmZpZ1wiO1xuaW1wb3J0IHsgdG9Kc29uX1V2Q29uZmlndXJhdGlvbiB9IGZyb20gXCIuL3V2LWNvbmZpZ1wiO1xuaW1wb3J0IHR5cGUgeyBEZXBlbmRlbmN5IH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwiLi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgdHlwZSB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuaW1wb3J0IHsgdXYgfSBmcm9tIFwiLi4vdXRpbC9leGVjXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgVVYgcHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFV2T3B0aW9ucyBleHRlbmRzIFB5dGhvbkV4ZWN1dGFibGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0J3MgYmFzaWMgbWV0YWRhdGEgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3Q/OiBQeXByb2plY3RUb21sUHJvamVjdDtcblxuICAvKipcbiAgICogRGVjbGFyZXMgYW55IFB5dGhvbiBsZXZlbCBkZXBlbmRlbmNpZXMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBpbiBvcmRlciB0byBydW4gdGhlIHByb2plY3TigJlzIGJ1aWxkIHN5c3RlbSBzdWNjZXNzZnVsbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gYnVpbGQgc3lzdGVtXG4gICAqL1xuICByZWFkb25seSBidWlsZFN5c3RlbT86IEJ1aWxkU3lzdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBhbmQgbWV0YWRhdGEgZm9yIHV2LlxuICAgKi9cbiAgcmVhZG9ubHkgdXY/OiBVdkNvbmZpZ3VyYXRpb247XG59XG5cbi8qKlxuICogTWFuYWdlIHByb2plY3QgZGVwZW5kZW5jaWVzLCB2aXJ0dWFsIGVudmlyb25tZW50cywgYW5kIHBhY2thZ2luZyB0aHJvdWdoIHV2LlxuICovXG5leHBvcnQgY2xhc3MgVXZcbiAgZXh0ZW5kcyBDb21wb25lbnRcbiAgaW1wbGVtZW50cyBJUHl0aG9uRGVwcywgSVB5dGhvbkVudiwgSVB5dGhvblBhY2thZ2luZ1xue1xuICAvKipcbiAgICogVGhlIGBweXByb2plY3QudG9tbGAgZmlsZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IFB5cHJvamVjdFRvbWxGaWxlO1xuICBwdWJsaWMgcmVhZG9ubHkgaW5zdGFsbFRhc2s6IFRhc2s7XG4gIHB1YmxpYyByZWFkb25seSBpbnN0YWxsQ2lUYXNrOiBUYXNrO1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGlzaFRhc2s6IFRhc2s7XG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoVGVzdFRhc2s6IFRhc2s7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB2ZW52UHl0aG9uOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IElDb25zdHJ1Y3QsIG9wdGlvbnM6IFV2T3B0aW9ucykge1xuICAgIHN1cGVyKHNjb3BlKTtcblxuICAgIGNvbnN0IHJlcXVpcmVzUHl0aG9uID0gb3B0aW9ucy5wcm9qZWN0Py5yZXF1aXJlc1B5dGhvbiA/PyBcIj49My4xMiw8NC4wXCI7XG4gICAgdGhpcy52ZW52UHl0aG9uID0gb3B0aW9ucy5weXRob25FeGVjID8/IHJlcXVpcmVzUHl0aG9uO1xuXG4gICAgdGhpcy5pbnN0YWxsVGFzayA9IHRoaXMucHJvamVjdC5hZGRUYXNrKFwiaW5zdGFsbFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJJbnN0YWxsIGRlcGVuZGVuY2llcyBhbmQgdXBkYXRlIGxvY2tmaWxlXCIsXG4gICAgICBzdGVwczogW3sgZXhlY0FyZ3M6IFtcInV2XCIsIFwic3luY1wiXSB9LCB7IGV4ZWNBcmdzOiBbXCJ1dlwiLCBcImxvY2tcIl0gfV0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmluc3RhbGxDaVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhcImluc3RhbGw6Y2lcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXMgd2l0aCBmcm96ZW4gbG9ja2ZpbGVcIixcbiAgICAgIGV4ZWNBcmdzOiBbXCJ1dlwiLCBcInN5bmNcIl0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnByb2plY3QudGFza3MuYWRkRW52aXJvbm1lbnQoXCJWSVJUVUFMX0VOVlwiLCBcIi52ZW52XCIpO1xuICAgIHRoaXMucHJvamVjdC50YXNrcy5hZGRFbnZpcm9ubWVudChcIlBBVEhcIiwgXCIkKGVjaG8gLnZlbnYvYmluOiRQQVRIKVwiKTtcblxuICAgIHRoaXMucHJvamVjdC5wYWNrYWdlVGFzay5leGVjQXJncyhbXCJ1dlwiLCBcImJ1aWxkXCJdKTtcblxuICAgIHRoaXMucHVibGlzaFRlc3RUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soXCJwdWJsaXNoOnRlc3RcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiVXBsb2FkcyB0aGUgcGFja2FnZSBhZ2FpbnN0IGEgdGVzdCBQeVBJIGVuZHBvaW50LlwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInV2XCIsIFwicHVibGlzaFwiLCBcIi0taW5kZXhcIiwgXCJ0ZXN0cHlwaVwiXSxcbiAgICB9KTtcblxuICAgIHRoaXMucHVibGlzaFRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayhcInB1Ymxpc2hcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiVXBsb2FkcyB0aGUgcGFja2FnZSB0byBQeVBJLlwiLFxuICAgICAgZXhlY0FyZ3M6IFtcInV2XCIsIFwicHVibGlzaFwiXSxcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsZSA9IG5ldyBQeXByb2plY3RUb21sRmlsZSh0aGlzLnByb2plY3QsIHtcbiAgICAgIHByb2plY3Q6IHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5wcm9qZWN0Py5uYW1lID8/IHRoaXMucHJvamVjdC5uYW1lLFxuICAgICAgICByZXF1aXJlc1B5dGhvbixcbiAgICAgICAgLi4ub3B0aW9ucy5wcm9qZWN0LFxuICAgICAgICBkZXBlbmRlbmNpZXM6ICgoKSA9PiBbXG4gICAgICAgICAgLi4uKG9wdGlvbnM/LnByb2plY3Q/LmRlcGVuZGVuY2llcyA/PyBbXSksXG4gICAgICAgICAgLi4udGhpcy5zeW50aERlcGVuZGVuY2llcygpLFxuICAgICAgICBdKSBhcyBhbnksXG4gICAgICB9LFxuICAgICAgZGVwZW5kZW5jeUdyb3VwczogKCgpID0+IHRoaXMuc3ludGhEZXBlbmRlbmN5R3JvdXBzKCkpIGFzIGFueSxcbiAgICAgIGJ1aWxkU3lzdGVtOiBvcHRpb25zLmJ1aWxkU3lzdGVtLFxuICAgICAgdG9vbDoge1xuICAgICAgICB1djogdG9Kc29uX1V2Q29uZmlndXJhdGlvbihvcHRpb25zLnV2KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBkZXBlbmRlbmNpZXMgaW4gVVYgc3R5bGUuICovXG4gIHByaXZhdGUgZm9ybWF0RGVwZW5kZW5jeShkZXA6IERlcGVuZGVuY3kpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSBkZXAubmFtZTtcbiAgICBjb25zdCB2ZXJzaW9uID0gZGVwLnZlcnNpb247XG5cbiAgICBpZiAoIXZlcnNpb24gfHwgdmVyc2lvbiA9PT0gXCIqXCIpIHtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cblxuICAgIC8vIFRyYW5zbGF0ZSBjYXJldCAoXikgdG8gUHl0aG9uIGNvbXBhdGlibGUgY29uc3RyYWludHNcbiAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKFwiXlwiKSkge1xuICAgICAgY29uc3QgY2xlYW5WZXJzaW9uID0gdmVyc2lvbi5zbGljZSgxKTtcbiAgICAgIGNvbnN0IFttYWpvcl0gPSBjbGVhblZlcnNpb24uc3BsaXQoXCIuXCIpO1xuICAgICAgY29uc3QgbmV4dE1ham9yID0gTnVtYmVyKG1ham9yKSArIDE7XG4gICAgICByZXR1cm4gYCR7bmFtZX0+PSR7Y2xlYW5WZXJzaW9ufSw8JHtuZXh0TWFqb3J9LjAuMGA7XG4gICAgfVxuXG4gICAgLy8gVHJhbnNsYXRlIHRpbGRlICh+KSB0byBjb21wYXRpYmxlIHJlbGVhc2UgY2xhdXNlIHBlciBQRVAgNDQwXG4gICAgaWYgKHZlcnNpb24uc3RhcnRzV2l0aChcIn5cIikpIHtcbiAgICAgIGNvbnN0IGNsZWFuVmVyc2lvbiA9IHZlcnNpb24uc2xpY2UoMSk7XG5cbiAgICAgIC8vIE9ubHkga2VlcCBtYWpvci5taW5vciBmb3IgdGlsZGUgaWYgcG9zc2libGVcbiAgICAgIGNvbnN0IFttYWpvciwgbWlub3IgPSBcIjBcIiwgcGF0Y2ggPSBcIjBcIl0gPSBjbGVhblZlcnNpb24uc3BsaXQoXCIuXCIpO1xuICAgICAgY29uc3QgbmV4dE1pbm9yID0gTnVtYmVyKG1pbm9yKSArIDE7XG4gICAgICByZXR1cm4gYCR7bmFtZX0+PSR7bWFqb3J9LiR7bWlub3J9LiR7cGF0Y2h9LDwke21ham9yfS4ke25leHRNaW5vcn0uMGA7XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIHRyZWF0IGFzIGFuIGV4YWN0IHZlcnNpb25cbiAgICByZXR1cm4gYCR7bmFtZX09PSR7dmVyc2lvbn1gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXBlbmRlbmNpZXMoZGVwZW5kZW5jeVR5cGVzOiBEZXBlbmRlbmN5VHlwZVtdKTogc3RyaW5nW10ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnByb2plY3QuZGVwcy5hbGxcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocGtnKSA9PiBkZXBlbmRlbmN5VHlwZXMuaW5jbHVkZXMocGtnLnR5cGUpICYmIHBrZy5uYW1lICE9PSBcInB5dGhvblwiLFxuICAgICAgICApXG4gICAgICAgIC8vIHJlbW92ZSBkdXBsaWNhdGUgdmVyc2lvbnMgb2YgdGhlIHNhbWUgZGVwZW5kZW5jeVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChkZXAsIGluZGV4LCBzZWxmKSA9PlxuICAgICAgICAgICAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KChkKSA9PiBkLm5hbWUgPT09IGRlcC5uYW1lKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChwa2cpID0+IHRoaXMuZm9ybWF0RGVwZW5kZW5jeShwa2cpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoRGVwZW5kZW5jaWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5nZXREZXBlbmRlbmNpZXMoW0RlcGVuZGVuY3lUeXBlLlJVTlRJTUVdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhEZXBlbmRlbmN5R3JvdXBzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGV2RGVwcyA9IHRoaXMuZ2V0RGVwZW5kZW5jaWVzKFtcbiAgICAgIERlcGVuZGVuY3lUeXBlLkRFVkVOVixcbiAgICAgIERlcGVuZGVuY3lUeXBlLlRFU1QsXG4gICAgXSk7XG5cbiAgICBpZiAoZGV2RGVwcykge1xuICAgICAgcmV0dXJuIHsgZGV2OiBkZXZEZXBzIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkZERlcGVuZGVuY3koc3BlYzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShzcGVjLCBEZXBlbmRlbmN5VHlwZS5SVU5USU1FKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREZXZEZXBlbmRlbmN5KHNwZWM6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koc3BlYywgRGVwZW5kZW5jeVR5cGUuREVWRU5WKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXR1cEVudmlyb25tZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHV2LnRyeUNhcHR1cmUoW1wiLS12ZXJzaW9uXCJdLCB7XG4gICAgICBjd2Q6IHRoaXMucHJvamVjdC5vdXRkaXIsXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgICAgXCJVbmFibGUgdG8gc2V0dXAgYW4gZW52aXJvbm1lbnQgc2luY2UgdXYgaXMgbm90IGluc3RhbGxlZC4gUGxlYXNlIGluc3RhbGwgdXYgKGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvdXYpIG9yIHVzZSBhIGRpZmZlcmVudCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGVudmlyb25tZW50cy5cIixcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIHZlbnYgd2l0aCB0aGUgc3BlY2lmaWMgUHl0aG9uIHZlcnNpb25cbiAgICAvLyB0aGlzIHdpbGwgaW5zdGFsbCB0aGUgcmVxdWVzdGVkIHB5dGhvbiB2ZXJzaW9uIGlmIG5lZWRlZFxuICAgIHV2LnJ1bihbXCJ2ZW52XCIsIFwiLS1weXRob25cIiwgdGhpcy52ZW52UHl0aG9uLCBcIi0tY2xlYXJcIiwgXCIudmVudlwiXSwge1xuICAgICAgY3dkOiB0aGlzLnByb2plY3Qub3V0ZGlyLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcbiAgICAgIGBFbnZpcm9ubWVudCBzdWNjZXNzZnVsbHkgY3JlYXRlZCBpbiAudmVudiBkaXJlY3Rvcnkgd2l0aCBQeXRob24gJHt0aGlzLnZlbnZQeXRob259LmAsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBpbnN0YWxsRGVwZW5kZW5jaWVzKCk6IHZvaWQge1xuICAgIHRoaXMucHJvamVjdC5sb2dnZXIuaW5mbyhcIkluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uXCIpO1xuICAgIGlmICh0aGlzLmZpbGUuY2hhbmdlZCkge1xuICAgICAgdGhpcy5wcm9qZWN0LnRhc2tzLnJ1blRhc2sodGhpcy5pbnN0YWxsVGFzay5uYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9qZWN0LnRhc2tzLnJ1blRhc2sodGhpcy5pbnN0YWxsQ2lUYXNrLm5hbWUpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -43,7 +43,7 @@ const exec_1 = require("../util/exec");
43
43
  * Manages a virtual environment through the Python venv module.
44
44
  */
45
45
  class Venv extends component_1.Component {
46
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Venv", version: "0.101.37" };
46
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.Venv", version: "0.103.0" };
47
47
  /**
48
48
  * Name of directory to store the environment in
49
49
  */
package/lib/readme.js CHANGED
@@ -10,7 +10,7 @@ const sample_file_1 = require("./sample-file");
10
10
  * @param text - The initial contents of the README.md file. Defaults to '# replace this'
11
11
  */
12
12
  class SampleReadme extends sample_file_1.SampleFile {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleReadme", version: "0.101.37" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.SampleReadme", version: "0.103.0" };
14
14
  constructor(project, props) {
15
15
  super(project, props?.filename ?? "README.md", {
16
16
  contents: props?.contents ?? "# replace this",
@@ -587,6 +587,11 @@ export interface GitPublishOptions extends VersionArtifactOptions {
587
587
  /**
588
588
  * Override git-push command.
589
589
  *
590
+ * Runs as a shell command in the `publish:git` task - where release
591
+ * credentials are in scope - replacing the default
592
+ * `git push --follow-tags origin <branch>`. Shell syntax is interpreted, so
593
+ * keep it a literal command.
594
+ *
590
595
  * Set to an empty string to disable pushing.
591
596
  */
592
597
  readonly gitPushCommand?: string;