projen 0.104.22 → 0.104.24

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 (166) hide show
  1. package/.jsii +129 -28
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +6 -6
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +1 -1
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +3 -3
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/lambda-extension.js +1 -1
  16. package/lib/awscdk/lambda-function.js +2 -2
  17. package/lib/build/build-workflow.js +1 -1
  18. package/lib/cdk/auto-discover-base.js +2 -2
  19. package/lib/cdk/construct-lib.js +1 -1
  20. package/lib/cdk/integration-test-base.js +1 -1
  21. package/lib/cdk/jsii-build.js +1 -1
  22. package/lib/cdk/jsii-docgen.js +1 -1
  23. package/lib/cdk/jsii-project.js +1 -1
  24. package/lib/cdk8s/auto-discover.js +2 -2
  25. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  26. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  27. package/lib/cdk8s/cdk8s-construct.js +1 -1
  28. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  29. package/lib/cdk8s/cdk8s-deps.js +1 -1
  30. package/lib/cdk8s/integration-test.js +1 -1
  31. package/lib/cdktf/cdktf-construct.js +1 -1
  32. package/lib/cdktn/cdktn-app-ts.js +1 -1
  33. package/lib/cdktn/cdktn-config.js +1 -1
  34. package/lib/cdktn/cdktn-construct.js +1 -1
  35. package/lib/cdktn/cdktn-deps.js +1 -1
  36. package/lib/cdktn/cdktn-tasks.js +1 -1
  37. package/lib/circleci/circleci.js +1 -1
  38. package/lib/component.js +2 -2
  39. package/lib/dependencies.js +1 -1
  40. package/lib/dev-env.js +1 -1
  41. package/lib/docker-compose/docker-compose-service.js +1 -1
  42. package/lib/docker-compose/docker-compose.js +1 -1
  43. package/lib/file.js +1 -1
  44. package/lib/gitattributes.js +1 -1
  45. package/lib/github/actions-provider.js +1 -1
  46. package/lib/github/actions.const.js +1 -1
  47. package/lib/github/auto-approve.js +1 -1
  48. package/lib/github/auto-merge.js +1 -1
  49. package/lib/github/auto-queue.js +1 -1
  50. package/lib/github/dependabot.js +1 -1
  51. package/lib/github/dependency-review.js +1 -1
  52. package/lib/github/github-credentials.js +1 -1
  53. package/lib/github/github-project.js +1 -1
  54. package/lib/github/github.js +1 -1
  55. package/lib/github/merge-queue.js +1 -1
  56. package/lib/github/mergify.js +1 -1
  57. package/lib/github/pr-template.js +1 -1
  58. package/lib/github/pull-request-backport.js +1 -1
  59. package/lib/github/pull-request-lint.d.ts +42 -1
  60. package/lib/github/pull-request-lint.js +100 -38
  61. package/lib/github/pull-request-source.js +1 -1
  62. package/lib/github/stale.js +1 -1
  63. package/lib/github/task-workflow-job.js +1 -1
  64. package/lib/github/task-workflow.js +1 -1
  65. package/lib/github/workflow-actions.js +1 -1
  66. package/lib/github/workflow-jobs.js +1 -1
  67. package/lib/github/workflow-steps.js +1 -1
  68. package/lib/github/workflows.js +1 -1
  69. package/lib/gitlab/configuration.js +1 -1
  70. package/lib/gitlab/gitlab-configuration.js +1 -1
  71. package/lib/gitlab/nested-configuration.js +1 -1
  72. package/lib/gitpod.js +1 -1
  73. package/lib/ignore-file.js +1 -1
  74. package/lib/ini.js +1 -1
  75. package/lib/java/java-project.js +1 -1
  76. package/lib/java/junit.js +1 -1
  77. package/lib/java/maven-compile.js +1 -1
  78. package/lib/java/maven-packaging.js +1 -1
  79. package/lib/java/maven-sample.js +1 -1
  80. package/lib/java/pom.js +2 -2
  81. package/lib/java/projenrc.js +1 -1
  82. package/lib/javascript/biome/biome.js +1 -1
  83. package/lib/javascript/bundler.js +1 -1
  84. package/lib/javascript/eslint.js +1 -1
  85. package/lib/javascript/jest.js +4 -4
  86. package/lib/javascript/license-checker.js +1 -1
  87. package/lib/javascript/node-config-file.js +1 -1
  88. package/lib/javascript/node-native-test-runner.js +2 -2
  89. package/lib/javascript/node-package.js +1 -1
  90. package/lib/javascript/node-project.js +1 -1
  91. package/lib/javascript/npm-config.js +1 -1
  92. package/lib/javascript/pnpm-workspace-config.js +2 -2
  93. package/lib/javascript/pnpm-workspace.js +1 -1
  94. package/lib/javascript/prettier.js +1 -1
  95. package/lib/javascript/projenrc.js +1 -1
  96. package/lib/javascript/typescript-config.js +2 -2
  97. package/lib/javascript/upgrade-dependencies.js +2 -2
  98. package/lib/javascript/yarnrc.js +1 -1
  99. package/lib/json-patch.js +1 -1
  100. package/lib/json.js +1 -1
  101. package/lib/license.js +1 -1
  102. package/lib/logger.js +1 -1
  103. package/lib/makefile.js +1 -1
  104. package/lib/object-file.js +1 -1
  105. package/lib/polaris/coverity-go.js +1 -1
  106. package/lib/polaris/coverity-java.js +1 -1
  107. package/lib/polaris/coverity-javascript.js +1 -1
  108. package/lib/polaris/coverity.js +1 -1
  109. package/lib/project-build.js +1 -1
  110. package/lib/project-tree.js +1 -1
  111. package/lib/project.js +1 -1
  112. package/lib/projects.js +1 -1
  113. package/lib/projenrc-json.js +1 -1
  114. package/lib/projenrc.js +1 -1
  115. package/lib/properties-file.js +1 -1
  116. package/lib/python/pip.js +1 -1
  117. package/lib/python/poetry.js +2 -2
  118. package/lib/python/projenrc.js +1 -1
  119. package/lib/python/pyproject-toml-file.js +1 -1
  120. package/lib/python/pytest-sample.js +1 -1
  121. package/lib/python/pytest.js +1 -1
  122. package/lib/python/python-project.js +1 -1
  123. package/lib/python/python-sample.js +1 -1
  124. package/lib/python/requirements-file.js +1 -1
  125. package/lib/python/setuppy.js +1 -1
  126. package/lib/python/setuptools.js +1 -1
  127. package/lib/python/uv-config.js +1 -1
  128. package/lib/python/uv.js +1 -1
  129. package/lib/python/venv.js +1 -1
  130. package/lib/readme.js +1 -1
  131. package/lib/release/publisher.js +1 -1
  132. package/lib/release/release-trigger.js +1 -1
  133. package/lib/release/release.js +5 -3
  134. package/lib/renovatebot.js +1 -1
  135. package/lib/run-task.cjs +1 -1
  136. package/lib/sample-file.js +2 -2
  137. package/lib/script-runner.js +1 -1
  138. package/lib/sonarqube/javascript.js +1 -1
  139. package/lib/sonarqube/rust.js +1 -1
  140. package/lib/sonarqube/sonarqube.js +1 -1
  141. package/lib/sonarqube/typescript.js +1 -1
  142. package/lib/source-code.js +1 -1
  143. package/lib/task-shell.js +1 -1
  144. package/lib/task.js +1 -1
  145. package/lib/tasks.js +1 -1
  146. package/lib/testing.js +1 -1
  147. package/lib/textfile.js +1 -1
  148. package/lib/toml.js +1 -1
  149. package/lib/typescript/projenrc-ts.js +1 -1
  150. package/lib/typescript/projenrc.js +1 -1
  151. package/lib/typescript/typescript-runner.js +1 -1
  152. package/lib/typescript/typescript-typedoc.js +1 -1
  153. package/lib/typescript/typescript.js +5 -5
  154. package/lib/version.js +2 -2
  155. package/lib/vscode/devcontainer.js +1 -1
  156. package/lib/vscode/extensions.js +1 -1
  157. package/lib/vscode/launch-config.js +1 -1
  158. package/lib/vscode/settings.js +1 -1
  159. package/lib/vscode/vscode.js +1 -1
  160. package/lib/web/next.js +3 -3
  161. package/lib/web/postcss.js +1 -1
  162. package/lib/web/react.js +3 -3
  163. package/lib/web/tailwind.js +1 -1
  164. package/lib/xmlfile.js +1 -1
  165. package/lib/yaml.js +1 -1
  166. package/package.json +1 -1
@@ -1,54 +1,49 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PullRequestLint = void 0;
3
+ exports.PullRequestLint = exports.PullRequestLintTrigger = void 0;
4
4
  const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const _1 = require(".");
6
6
  const actions_const_1 = require("./actions.const");
7
7
  const workflows_model_1 = require("./workflows-model");
8
8
  const component_1 = require("../component");
9
+ /**
10
+ * The pull request event that triggers the pull request lint workflow.
11
+ */
12
+ var PullRequestLintTrigger;
13
+ (function (PullRequestLintTrigger) {
14
+ /**
15
+ * Run in the context of the base branch, with access to secrets and a read/write token.
16
+ */
17
+ PullRequestLintTrigger["PULL_REQUEST_TARGET"] = "pull_request_target";
18
+ /**
19
+ * Run in the context of the merge commit, with a read-only token for pull requests from forks.
20
+ */
21
+ PullRequestLintTrigger["PULL_REQUEST"] = "pull_request";
22
+ })(PullRequestLintTrigger || (exports.PullRequestLintTrigger = PullRequestLintTrigger = {}));
23
+ const CONSOLIDATED_JOB_ID = "pull-request-lint";
24
+ // Checks can only be evaluated in a pull request context.
25
+ // Skipping them in merge groups lets them be required status checks.
26
+ const PR_CHECK = "(github.event_name == 'pull_request' || github.event_name == 'pull_request_target')";
9
27
  /**
10
28
  * Configure validations to run on GitHub pull requests.
11
- * Only generates a file if at least one linter is configured.
29
+ * Only generates a file if at least one check is configured.
12
30
  */
13
31
  class PullRequestLint extends component_1.Component {
14
32
  github;
15
33
  options;
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.104.22" };
34
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.104.24" };
35
+ workflow;
36
+ checkIds = [];
17
37
  constructor(github, options = {}) {
18
38
  super(github.project);
19
39
  this.github = github;
20
40
  this.options = options;
21
- const checkSemanticTitle = options.semanticTitle ?? true;
22
- const checkContributorStatement = Boolean(options.contributorStatement);
23
- // should only create a workflow if one or more linters are enabled
24
- if (!checkSemanticTitle && !checkContributorStatement) {
25
- return;
26
- }
27
- const workflow = github.addWorkflow("pull-request-lint");
28
- workflow.on({
29
- pullRequestTarget: {
30
- types: [
31
- "labeled",
32
- "opened",
33
- "synchronize",
34
- "reopened",
35
- "ready_for_review",
36
- "edited",
37
- ],
38
- },
39
- // run on merge group, but use a condition later to always succeed
40
- // needed so the workflow can be a required status check
41
- mergeGroup: {},
42
- });
43
- // All checks are run against the PR and can only be evaluated within a PR context
44
- // Needed so jobs can be set as required and will run successfully on merge group checks.
45
- const prCheck = "(github.event_name == 'pull_request' || github.event_name == 'pull_request_target')";
46
- if (checkSemanticTitle) {
41
+ if (options.semanticTitle ?? true) {
47
42
  const opts = options.semanticTitleOptions ?? {};
48
43
  const types = opts.types ?? ["feat", "fix", "chore"];
49
- const validateJob = {
44
+ this.addCheck("validate", {
50
45
  name: "Validate PR title",
51
- if: prCheck,
46
+ if: PR_CHECK,
52
47
  ...github.runsOnConfig(options),
53
48
  permissions: {
54
49
  pullRequests: workflows_model_1.JobPermission.READ,
@@ -67,14 +62,13 @@ class PullRequestLint extends component_1.Component {
67
62
  },
68
63
  },
69
64
  ],
70
- };
71
- workflow.addJobs({ validate: validateJob });
65
+ });
72
66
  }
73
67
  if (options.contributorStatement) {
74
68
  const opts = options.contributorStatementOptions ?? {};
75
69
  const users = opts.exemptUsers ?? [];
76
70
  const labels = opts.exemptLabels ?? [];
77
- const conditions = [prCheck];
71
+ const conditions = [PR_CHECK];
78
72
  const exclusions = [
79
73
  ...labels.map((l) => `contains(github.event.pull_request.labels.*.name, '${l}')`),
80
74
  ...users.map((u) => `github.event.pull_request.user.login == '${u}'`),
@@ -92,7 +86,7 @@ class PullRequestLint extends component_1.Component {
92
86
  "}",
93
87
  ].join("\n");
94
88
  const helpMessage = "Contributor statement missing from PR description. Please include the following text in the PR description";
95
- const contributorStatement = {
89
+ this.addCheck("contributorStatement", {
96
90
  name: "Require Contributor Statement",
97
91
  ...github.runsOnConfig(options),
98
92
  permissions: {
@@ -112,11 +106,30 @@ class PullRequestLint extends component_1.Component {
112
106
  },
113
107
  },
114
108
  ],
115
- };
116
- workflow.addJobs({ contributorStatement });
109
+ });
110
+ }
111
+ }
112
+ /**
113
+ * Adds a job to the pull request lint workflow that is part of the consolidated status check.
114
+ *
115
+ * The job also runs for merge groups. Skip it there with a job condition, a skipped job counts as passing.
116
+ *
117
+ * @param id The job ID, unique within the workflow
118
+ * @param job The job definition
119
+ */
120
+ addCheck(id, job) {
121
+ if (id === CONSOLIDATED_JOB_ID) {
122
+ throw new Error(`The check ID '${CONSOLIDATED_JOB_ID}' is reserved for the consolidated status check. Choose a different ID.`);
117
123
  }
124
+ this.ensureWorkflow().addJobs({ [id]: job });
125
+ this.checkIds.push(id);
118
126
  }
119
127
  preSynthesize() {
128
+ if (this.workflow && (this.options.consolidatedStatusCheck ?? true)) {
129
+ this.workflow.addJobs({
130
+ [CONSOLIDATED_JOB_ID]: this.renderConsolidatedJob(),
131
+ });
132
+ }
120
133
  if (this.options.contributorStatement) {
121
134
  // Append to PR template in preSynthesize so it's always at the end of the file
122
135
  const prTemplate = _1.PullRequestTemplate.of(this.project) ??
@@ -127,6 +140,55 @@ class PullRequestLint extends component_1.Component {
127
140
  prTemplate?.addLine("");
128
141
  }
129
142
  }
143
+ ensureWorkflow() {
144
+ if (this.workflow) {
145
+ return this.workflow;
146
+ }
147
+ const pullRequestTypes = {
148
+ types: [
149
+ "labeled",
150
+ "opened",
151
+ "synchronize",
152
+ "reopened",
153
+ "ready_for_review",
154
+ "edited",
155
+ ],
156
+ };
157
+ const trigger = this.options.trigger ?? PullRequestLintTrigger.PULL_REQUEST_TARGET;
158
+ this.workflow = this.github.addWorkflow("pull-request-lint");
159
+ this.workflow.on({
160
+ ...(trigger === PullRequestLintTrigger.PULL_REQUEST
161
+ ? { pullRequest: pullRequestTypes }
162
+ : { pullRequestTarget: pullRequestTypes }),
163
+ // run on merge group, but use a condition later to always succeed
164
+ // needed so the workflow can be a required status check
165
+ mergeGroup: {},
166
+ });
167
+ return this.workflow;
168
+ }
169
+ renderConsolidatedJob() {
170
+ const ids = this.checkIds;
171
+ return {
172
+ ...this.github.runsOnConfig(this.options),
173
+ permissions: {},
174
+ needs: ids,
175
+ if: "always()",
176
+ steps: [
177
+ ...ids.map((id) => ({
178
+ name: `${id} result`,
179
+ run: `echo \${{ needs.${id}.result }}`,
180
+ })),
181
+ {
182
+ // Checks are skipped in merge groups and for exempt pull requests, which counts as passing.
183
+ if: `\${{ ${ids
184
+ .map((id) => `(needs.${id}.result != 'success' && needs.${id}.result != 'skipped')`)
185
+ .join(" || ")} }}`,
186
+ name: "Set status based on pull request checks",
187
+ run: "exit 1",
188
+ },
189
+ ],
190
+ };
191
+ }
130
192
  }
131
193
  exports.PullRequestLint = PullRequestLint;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsbC1yZXF1ZXN0LWxpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0aHViL3B1bGwtcmVxdWVzdC1saW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSx3QkFBd0M7QUFDeEMsbURBQTZDO0FBRTdDLHVEQUFrRDtBQUNsRCw0Q0FBeUM7QUFpRnpDOzs7R0FHRztBQUNILE1BQWEsZUFBZ0IsU0FBUSxxQkFBUztJQUV6QjtJQUNBOztJQUZuQixZQUNtQixNQUFjLEVBQ2QsVUFBa0MsRUFBRTtRQUVyRCxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBSEwsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFlBQU8sR0FBUCxPQUFPLENBQTZCO1FBSXJELE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFDekQsTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFeEUsbUVBQW1FO1FBQ25FLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDdEQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekQsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNWLGlCQUFpQixFQUFFO2dCQUNqQixLQUFLLEVBQUU7b0JBQ0wsU0FBUztvQkFDVCxRQUFRO29CQUNSLGFBQWE7b0JBQ2IsVUFBVTtvQkFDVixrQkFBa0I7b0JBQ2xCLFFBQVE7aUJBQ1Q7YUFDRjtZQUNELGtFQUFrRTtZQUNsRSx3REFBd0Q7WUFDeEQsVUFBVSxFQUFFLEVBQUU7U0FDZixDQUFDLENBQUM7UUFFSCxrRkFBa0Y7UUFDbEYseUZBQXlGO1FBQ3pGLE1BQU0sT0FBTyxHQUNYLHFGQUFxRixDQUFDO1FBRXhGLElBQUksa0JBQWtCLEVB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QUssRUFBRTtvQkFDTDt3QkFDRSxJQUFJLEVBQUUsMEJBQVUsQ0FBQyxxQkFBcUI7d0JBQ3RDLElBQUksRUFBRTs0QkFDSixNQUFNLEVBQUUsVUFBVTt5QkFDbkI7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBRUYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDdEMsK0VBQStFO1lBQy9FLE1BQU0sVUFBVSxHQUNkLHNCQUFtQixDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDdkMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ3ZELFVBQVUsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7O0FBdElILDBDQXVJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2l0SHViIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IFB1bGxSZXF1ZXN0VGVtcGxhdGUgfSBmcm9tIFwiLlwiO1xuaW1wb3J0IHsgQWN0aW9uUmVmcyB9IGZyb20gXCIuL2FjdGlvbnMuY29uc3RcIjtcbmltcG9ydCB0eXBlIHsgSm9iIH0gZnJvbSBcIi4vd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSBcIi4vd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFJ1bnNPbk9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBQdWxsUmVxdWVzdExpbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdWxsUmVxdWVzdExpbnRPcHRpb25zIGV4dGVuZHMgUnVuc09uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHB1bGwgcmVxdWVzdCB0aXRsZXMgZm9sbG93IENvbnZlbnRpb25hbCBDb21taXRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvXG4gICAqL1xuICByZWFkb25seSBzZW1hbnRpY1RpdGxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgdmFsaWRhdGluZyB0aGUgY29udmVudGlvbmFsIGNvbW1pdCB0aXRsZSBsaW50ZXIuXG4gICAqIEBkZWZhdWx0IC0gdGl0bGUgbXVzdCBzdGFydCB3aXRoIFwiZmVhdFwiLCBcImZpeFwiLCBvciBcImNob3JlXCJcbiAgICovXG4gIHJlYWRvbmx5IHNlbWFudGljVGl0bGVPcHRpb25zPzogU2VtYW50aWNUaXRsZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmUgYSBjb250cmlidXRvciBzdGF0ZW1lbnQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIFBSIGRlc2NyaXB0aW9uLlxuICAgKiBGb3IgZXhhbXBsZSBjb25maXJtaW5nIHRoYXQgdGhlIGNvbnRyaWJ1dGlvbiBoYXMgYmVlbiBtYWRlIGJ5IHRoZSBjb250cmlidXRvciBhbmQgY29tcGxpZXMgd2l0aCB0aGUgcHJvamVjdCdzIGxpY2Vuc2UuXG4gICAqXG4gICAqIEFwcGVuZHMgdGhlIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBQdWxsIFJlcXVlc3QgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gY29udHJpYnV0b3Igc3RhdGVtZW50IGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb250cmlidXRvclN0YXRlbWVudD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgcmVxdWlyaW5nIGEgY29udHJpYnV0b3Igc3RhdGVtZW50IG9uIFB1bGwgUmVxdWVzdHNcbiAgICogQGRlZmF1bHQgLSBub25lXG4gICAqL1xuICByZWFkb25seSBjb250cmlidXRvclN0YXRlbWVudE9wdGlvbnM/OiBDb250cmlidXRvclN0YXRlbWVudE9wdGlvbnM7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgbGludGluZyB0aGF0IFBSIHRpdGxlcyBmb2xsb3cgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNvbnZlbnRpb25hbGNvbW1pdHMub3JnL1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlbWFudGljVGl0bGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBhIGxpc3Qgb2YgY29tbWl0IHR5cGVzIHRoYXQgYXJlIGFsbG93ZWQuXG4gICAqIEBkZWZhdWx0IFtcImZlYXRcIiwgXCJmaXhcIiwgXCJjaG9yZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJlIHRoYXQgYSBzY29wZSBtdXN0IGFsd2F5cyBiZSBwcm92aWRlZC5cbiAgICogZS5nLiBmZWF0KHVpKSwgZml4KGNvcmUpXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlU2NvcGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgd2hpY2ggc2NvcGVzIGFyZSBhbGxvd2VkIChuZXdsaW5lLWRlbGltaXRlZCkuXG4gICAqIFRoZXNlIGFyZSByZWdleCBwYXR0ZXJucyBhdXRvLXdyYXBwZWQgaW4gYF4gJGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYWxsIHNjb3BlcyBhbGxvd2VkXG4gICAqL1xuICByZWFkb25seSBzY29wZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciByZXF1aXJpbmcgYSBjb250cmlidXRvciBzdGF0ZW1lbnQgb24gUHVsbCBSZXF1ZXN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBQdWxsIHJlcXVlc3RzIGZyb20gdGhlc2UgR2l0SHViIHVzZXJzIGFyZSBleGVtcHRlZCBmcm9tIGEgY29udHJpYnV0b3Igc3RhdGVtZW50LlxuICAgKiBAZGVmYXVsdCAtIG5vIHVzZXJzIGFyZSBleGVtcHRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlbXB0VXNlcnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFB1bGwgcmVxdWVzdHMgd2l0aCBvbmUgb2YgdGhlc2UgbGFiZWxzIGFyZSBleGVtcHRlZCBmcm9tIGEgY29udHJpYnV0b3Igc3RhdGVtZW50LlxuICAgKiBAZGVmYXVsdCAtIG5vIGxhYmVscyBhcmUgZXhjbHVkZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4ZW1wdExhYmVscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZSB2YWxpZGF0aW9ucyB0byBydW4gb24gR2l0SHViIHB1bGwgcmVxdWVzdHMuXG4gKiBPbmx5IGdlbmVyYXRlcyBhIGZpbGUgaWYgYXQgbGVhc3Qgb25lIGxpbnRlciBpcyBjb25maWd1cmVkLlxuICovXG5leHBvcnQgY2xhc3MgUHVsbFJlcXVlc3RMaW50IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBnaXRodWI6IEdpdEh1YixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFB1bGxSZXF1ZXN0TGludE9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgc3VwZXIoZ2l0aHViLnByb2plY3QpO1xuXG4gICAgY29uc3QgY2hlY2tTZW1hbnRpY1RpdGxlID0gb3B0aW9ucy5zZW1hbnRpY1RpdGxlID8/IHRydWU7XG4gICAgY29uc3QgY2hlY2tDb250cmlidXRvclN0YXRlbWVudCA9IEJvb2xlYW4ob3B0aW9ucy5jb250cmlidXRvclN0YXRlbWVudCk7XG5cbiAgICAvLyBzaG91bGQgb25seSBjcmVhdGUgYSB3b3JrZmxvdyBpZiBvbmUgb3IgbW9yZSBsaW50ZXJzIGFyZSBlbmFibGVkXG4gICAgaWYgKCFjaGVja1NlbWFudGljVGl0bGUgJiYgIWNoZWNrQ29udHJpYnV0b3JTdGF0ZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5hZGRXb3JrZmxvdyhcInB1bGwtcmVxdWVzdC1saW50XCIpO1xuICAgIHdvcmtmbG93Lm9uKHtcbiAgICAgIHB1bGxSZXF1ZXN0VGFyZ2V0OiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgXCJsYWJlbGVkXCIsXG4gICAgICAgICAgXCJvcGVuZWRcIixcbiAgICAgICAgICBcInN5bmNocm9uaXplXCIsXG4gICAgICAgICAgXCJyZW9wZW5lZFwiLFxuICAgICAgICAgIFwicmVhZHlfZm9yX3Jldmlld1wiLFxuICAgICAgICAgIFwiZWRpdGVkXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLy8gcnVuIG9uIG1lcmdlIGdyb3VwLCBidXQgdXNlIGEgY29uZGl0aW9uIGxhdGVyIHRvIGFsd2F5cyBzdWNjZWVkXG4gICAgICAvLyBuZWVkZWQgc28gdGhlIHdvcmtmbG93IGNhbiBiZSBhIHJlcXVpcmVkIHN0YXR1cyBjaGVja1xuICAgICAgbWVyZ2VHcm91cDoge30sXG4gICAgfSk7XG5cbiAgICAvLyBBbGwgY2hlY2tzIGFyZSBydW4gYWdhaW5zdCB0aGUgUFIgYW5kIGNhbiBvbmx5IGJlIGV2YWx1YXRlZCB3aXRoaW4gYSBQUiBjb250ZXh0XG4gICAgLy8gTmVlZGVkIHNvIGpvYnMgY2FuIGJlIHNldCBhcyByZXF1aXJlZCBhbmQgd2lsbCBydW4gc3VjY2Vzc2Z1bGx5IG9uIG1lcmdlIGdyb3VwIGNoZWNrcy5cbiAgICBjb25zdCBwckNoZWNrID1cbiAgICAgIFwiKGdpdGh1Yi5ldmVudF9uYW1lID09ICdwdWxsX3JlcXVlc3QnIHx8IGdpdGh1Yi5ldmVudF9uYW1lID09ICdwdWxsX3JlcXVlc3RfdGFyZ2V0JylcIjtcblxuICAgIGlmIChjaGVja1NlbWFudGljVGl0bGUpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zLnNlbWFudGljVGl0bGVPcHRpb25zID8/IHt9O1xuICAgICAgY29uc3QgdHlwZXMgPSBvcHRzLnR5cGVzID8/IFtcImZlYXRcIiwgXCJmaXhcIiwgXCJjaG9yZVwiXTtcblxuICAgICAgY29uc3QgdmFsaWRhdGVKb2I6IEpvYiA9IHtcbiAgICAgICAgbmFtZTogXCJWYWxpZGF0ZSBQUiB0aXRsZVwiLFxuICAgICAgICBpZjogcHJDaGVjayxcbiAgICAgICAgLi4uZ2l0aHViLnJ1bnNPbkNvbmZpZyhvcHRpb25zKSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICBwdWxsUmVxdWVzdHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogXCJ2YWxpZGF0ZS1wci10aXRsZVwiLFxuICAgICAgICAgICAgdXNlczogQWN0aW9uUmVmcy5BTUFOTk5fQUNUSU9OX1NFTUFOVElDX1BVTExfUkVRVUVTVCxcbiAgICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgICBHSVRIVUJfVE9LRU46IFwiJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19XCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICB0eXBlczogdHlwZXMuam9pbihcIlxcblwiKSxcbiAgICAgICAgICAgICAgLi4uKG9wdHMuc2NvcGVzID8geyBzY29wZXM6IG9wdHMuc2NvcGVzLmpvaW4oXCJcXG5cIikgfSA6IHt9KSxcbiAgICAgICAgICAgICAgcmVxdWlyZVNjb3BlOiBvcHRzLnJlcXVpcmVTY29wZSA/PyBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIHdvcmtmbG93LmFkZEpvYnMoeyB2YWxpZGF0ZTogdmFsaWRhdGVKb2IgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zLmNvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucyA/PyB7fTtcbiAgICAgIGNvbnN0IHVzZXJzID0gb3B0cy5leGVtcHRVc2VycyA/PyBbXTtcbiAgICAgIGNvbnN0IGxhYmVscyA9IG9wdHMuZXhlbXB0TGFiZWxzID8/IFtdO1xuXG4gICAgICBjb25zdCBjb25kaXRpb25zID0gW3ByQ2hlY2tdO1xuXG4gICAgICBjb25zdCBleGNsdXNpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4ubGFiZWxzLm1hcChcbiAgICAgICAgICAobCkgPT4gYGNvbnRhaW5zKGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubGFiZWxzLioubmFtZSwgJyR7bH0nKWAsXG4gICAgICAgICksXG4gICAgICAgIC4uLnVzZXJzLm1hcCgodSkgPT4gYGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbiA9PSAnJHt1fSdgKSxcbiAgICAgIF07XG5cbiAgICAgIGlmIChleGNsdXNpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2goYCEoJHtleGNsdXNpb25zLmpvaW4oXCIgfHwgXCIpfSlgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0Qm9keSA9IFtcbiAgICAgICAgJ2NvbnN0IGFjdHVhbCA9IHByb2Nlc3MuZW52LlBSX0JPRFkucmVwbGFjZSgvXFxcXHI/XFxcXG4vZywgXCJcXFxcblwiKTsnLFxuICAgICAgICAnY29uc3QgZXhwZWN0ZWQgPSBwcm9jZXNzLmVudi5FWFBFQ1RFRC5yZXBsYWNlKC9cXFxccj9cXFxcbi9nLCBcIlxcXFxuXCIpOycsXG4gICAgICAgIFwiaWYgKCFhY3R1YWwuaW5jbHVkZXMoZXhwZWN0ZWQpKSB7XCIsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBhY3R1YWwpOycsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBleHBlY3RlZCk7JyxcbiAgICAgICAgXCIgICAgY29yZS5zZXRGYWlsZWQoYCR7cHJvY2Vzcy5lbnYuSEVMUH06ICR7ZXhwZWN0ZWR9YCk7XCIsXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBoZWxwTWVzc2FnZSA9XG4gICAgICAgIFwiQ29udHJpYnV0b3Igc3RhdGVtZW50IG1pc3NpbmcgZnJvbSBQUiBkZXNjcmlwdGlvbi4gUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBQUiBkZXNjcmlwdGlvblwiO1xuICAgICAgY29uc3QgY29udHJpYnV0b3JTdGF0ZW1lbnQ6IEpvYiA9IHtcbiAgICAgICAgbmFtZTogXCJSZXF1aXJlIENvbnRyaWJ1dG9yIFN0YXRlbWVudFwiLFxuICAgICAgICAuLi5naXRodWIucnVuc09uQ29uZmlnKG9wdGlvbnMpLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIHB1bGxSZXF1ZXN0czogSm9iUGVybWlzc2lvbi5SRUFELFxuICAgICAgICB9LFxuICAgICAgICBpZjogY29uZGl0aW9ucy5qb2luKFwiICYmIFwiKSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgUFJfQk9EWTogXCIke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5ib2R5IH19XCIsXG4gICAgICAgICAgRVhQRUNURUQ6IG9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQsXG4gICAgICAgICAgSEVMUDogaGVscE1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdXNlczogQWN0aW9uUmVmcy5BQ1RJT05TX0dJVEhVQl9TQ1JJUFQsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHNjcmlwdDogc2NyaXB0Qm9keSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIHdvcmtmbG93LmFkZEpvYnMoeyBjb250cmlidXRvclN0YXRlbWVudCB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRyaWJ1dG9yU3RhdGVtZW50KSB7XG4gICAgICAvLyBBcHBlbmQgdG8gUFIgdGVtcGxhdGUgaW4gcHJlU3ludGhlc2l6ZSBzbyBpdCdzIGFsd2F5cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlXG4gICAgICBjb25zdCBwclRlbXBsYXRlID1cbiAgICAgICAgUHVsbFJlcXVlc3RUZW1wbGF0ZS5vZih0aGlzLnByb2plY3QpID8/XG4gICAgICAgIHRoaXMuZ2l0aHViLmFkZFB1bGxSZXF1ZXN0VGVtcGxhdGUoKTtcbiAgICAgIHByVGVtcGxhdGU/LmFkZExpbmUoXCJcIik7XG4gICAgICBwclRlbXBsYXRlPy5hZGRMaW5lKFwiLS0tXCIpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZSh0aGlzLm9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZShcIlwiKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsbC1yZXF1ZXN0LWxpbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0aHViL3B1bGwtcmVxdWVzdC1saW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSx3QkFBd0M7QUFDeEMsbURBQTZDO0FBTTdDLHVEQUFrRDtBQUNsRCw0Q0FBeUM7QUFHekM7O0dBRUc7QUFDSCxJQUFZLHNCQVVYO0FBVkQsV0FBWSxzQkFBc0I7SUFDaEM7O09BRUc7SUFDSCxxRUFBMkMsQ0FBQTtJQUUzQzs7T0FFRztJQUNILHVEQUE2QixDQUFBO0FBQy9CLENBQUMsRUFWVyxzQkFBc0Isc0NBQXRCLHNCQUFzQixRQVVqQztBQWdHRCxNQUFNLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0FBRWhELDBEQUEwRDtBQUMxRCxxRUFBcUU7QUFDckUsTUFBTSxRQUFRLEdBQ1oscUZBQXFGLENBQUM7QUFFeEY7OztHQUdHO0FBQ0gsTUFBYSxlQUFnQixTQUFRLHFCQUFTO0lBS3pCO0lBQ0E7O0lBTFgsUUFBUSxDQUFrQjtJQUNqQixRQUFRLEdBQWEsRUFBRSxDQUFDO0lBRXpDLFlBQ21CLE1BQWMsRUFDZCxVQUFrQyxFQUFFO1FBRXJELEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFITCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7UUFJckQsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7WUFDaEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFckQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLEVBQUUs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QVEsR0FBRzt5QkFDWixHQUFHLENBQ0YsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNMLFVBQVUsRUFBRSxpQ0FBaUMsRUFBRSx1QkFBdUIsQ0FDekU7eUJBQ0EsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO29CQUNwQixJQUFJLEVBQUUseUNBQXlDO29CQUMvQyxHQUFHLEVBQUUsUUFBUTtpQkFDZDthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O0FBMUxILDBDQTJMQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgR2l0SHViLCBHaXRodWJXb3JrZmxvdyB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdFRlbXBsYXRlIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IEFjdGlvblJlZnMgfSBmcm9tIFwiLi9hY3Rpb25zLmNvbnN0XCI7XG5pbXBvcnQgdHlwZSB7XG4gIEpvYixcbiAgUHVsbFJlcXVlc3RPcHRpb25zLFxuICBQdWxsUmVxdWVzdFRhcmdldE9wdGlvbnMsXG59IGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiB9IGZyb20gXCIuL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBSdW5zT25PcHRpb25zIH0gZnJvbSBcIi4uL3J1bm5lci1vcHRpb25zXCI7XG5cbi8qKlxuICogVGhlIHB1bGwgcmVxdWVzdCBldmVudCB0aGF0IHRyaWdnZXJzIHRoZSBwdWxsIHJlcXVlc3QgbGludCB3b3JrZmxvdy5cbiAqL1xuZXhwb3J0IGVudW0gUHVsbFJlcXVlc3RMaW50VHJpZ2dlciB7XG4gIC8qKlxuICAgKiBSdW4gaW4gdGhlIGNvbnRleHQgb2YgdGhlIGJhc2UgYnJhbmNoLCB3aXRoIGFjY2VzcyB0byBzZWNyZXRzIGFuZCBhIHJlYWQvd3JpdGUgdG9rZW4uXG4gICAqL1xuICBQVUxMX1JFUVVFU1RfVEFSR0VUID0gXCJwdWxsX3JlcXVlc3RfdGFyZ2V0XCIsXG5cbiAgLyoqXG4gICAqIFJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgbWVyZ2UgY29tbWl0LCB3aXRoIGEgcmVhZC1vbmx5IHRva2VuIGZvciBwdWxsIHJlcXVlc3RzIGZyb20gZm9ya3MuXG4gICAqL1xuICBQVUxMX1JFUVVFU1QgPSBcInB1bGxfcmVxdWVzdFwiLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFB1bGxSZXF1ZXN0TGludFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1bGxSZXF1ZXN0TGludE9wdGlvbnMgZXh0ZW5kcyBSdW5zT25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwdWxsIHJlcXVlc3QgZXZlbnQgdGhhdCB0cmlnZ2VycyB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZWZhdWx0IFB1bGxSZXF1ZXN0TGludFRyaWdnZXIuUFVMTF9SRVFVRVNUX1RBUkdFVFxuICAgKi9cbiAgcmVhZG9ubHkgdHJpZ2dlcj86IFB1bGxSZXF1ZXN0TGludFRyaWdnZXI7XG5cbiAgLyoqXG4gICAqIEFkZCBhIGpvYiB0aGF0IGNvbWJpbmVzIHRoZSByZXN1bHRzIG9mIGFsbCBjaGVja3MgaW50byBhIHNpbmdsZSBzdGF0dXMgY2hlY2suXG4gICAqXG4gICAqIFVzZSB0aGlzIGpvYiBhcyB0aGUgcmVxdWlyZWQgc3RhdHVzIGNoZWNrLCBzbyBpdCBkb2VzIG5vdCBuZWVkIHVwZGF0aW5nIHdoZW4gY2hlY2tzIGFyZSBhZGRlZCBvciByZW1vdmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjb25zb2xpZGF0ZWRTdGF0dXNDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgcHVsbCByZXF1ZXN0IHRpdGxlcyBmb2xsb3cgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQHNlZSBodHRwczovL3d3dy5jb252ZW50aW9uYWxjb21taXRzLm9yZy9cbiAgICovXG4gIHJlYWRvbmx5IHNlbWFudGljVGl0bGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB2YWxpZGF0aW5nIHRoZSBjb252ZW50aW9uYWwgY29tbWl0IHRpdGxlIGxpbnRlci5cbiAgICogQGRlZmF1bHQgLSB0aXRsZSBtdXN0IHN0YXJ0IHdpdGggXCJmZWF0XCIsIFwiZml4XCIsIG9yIFwiY2hvcmVcIlxuICAgKi9cbiAgcmVhZG9ubHkgc2VtYW50aWNUaXRsZU9wdGlvbnM/OiBTZW1hbnRpY1RpdGxlT3B0aW9ucztcblxuICAvKipcbiAgICogUmVxdWlyZSBhIGNvbnRyaWJ1dG9yIHN0YXRlbWVudCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgUFIgZGVzY3JpcHRpb24uXG4gICAqIEZvciBleGFtcGxlIGNvbmZpcm1pbmcgdGhhdCB0aGUgY29udHJpYnV0aW9uIGhhcyBiZWVuIG1hZGUgYnkgdGhlIGNvbnRyaWJ1dG9yIGFuZCBjb21wbGllcyB3aXRoIHRoZSBwcm9qZWN0J3MgbGljZW5zZS5cbiAgICpcbiAgICogQXBwZW5kcyB0aGUgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIFB1bGwgUmVxdWVzdCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb250cmlidXRvciBzdGF0ZW1lbnQgaXMgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dG9yU3RhdGVtZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciByZXF1aXJpbmcgYSBjb250cmlidXRvciBzdGF0ZW1lbnQgb24gUHVsbCBSZXF1ZXN0c1xuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucz86IENvbnRyaWJ1dG9yU3RhdGVtZW50T3B0aW9ucztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBsaW50aW5nIHRoYXQgUFIgdGl0bGVzIGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0cy5cbiAqIEBzZWUgaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VtYW50aWNUaXRsZU9wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlndXJlIGEgbGlzdCBvZiBjb21taXQgdHlwZXMgdGhhdCBhcmUgYWxsb3dlZC5cbiAgICogQGRlZmF1bHQgW1wiZmVhdFwiLCBcImZpeFwiLCBcImNob3JlXCJdXG4gICAqL1xuICByZWFkb25seSB0eXBlcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhhdCBhIHNjb3BlIG11c3QgYWx3YXlzIGJlIHByb3ZpZGVkLlxuICAgKiBlLmcuIGZlYXQodWkpLCBmaXgoY29yZSlcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVTY29wZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSB3aGljaCBzY29wZXMgYXJlIGFsbG93ZWQgKG5ld2xpbmUtZGVsaW1pdGVkKS5cbiAgICogVGhlc2UgYXJlIHJlZ2V4IHBhdHRlcm5zIGF1dG8td3JhcHBlZCBpbiBgXiAkYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhbGwgc2NvcGVzIGFsbG93ZWRcbiAgICovXG4gIHJlYWRvbmx5IHNjb3Blcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHJlcXVpcmluZyBhIGNvbnRyaWJ1dG9yIHN0YXRlbWVudCBvbiBQdWxsIFJlcXVlc3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJpYnV0b3JTdGF0ZW1lbnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFB1bGwgcmVxdWVzdHMgZnJvbSB0aGVzZSBHaXRIdWIgdXNlcnMgYXJlIGV4ZW1wdGVkIGZyb20gYSBjb250cmlidXRvciBzdGF0ZW1lbnQuXG4gICAqIEBkZWZhdWx0IC0gbm8gdXNlcnMgYXJlIGV4ZW1wdGVkXG4gICAqL1xuICByZWFkb25seSBleGVtcHRVc2Vycz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogUHVsbCByZXF1ZXN0cyB3aXRoIG9uZSBvZiB0aGVzZSBsYWJlbHMgYXJlIGV4ZW1wdGVkIGZyb20gYSBjb250cmlidXRvciBzdGF0ZW1lbnQuXG4gICAqIEBkZWZhdWx0IC0gbm8gbGFiZWxzIGFyZSBleGNsdWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhlbXB0TGFiZWxzPzogc3RyaW5nW107XG59XG5cbmNvbnN0IENPTlNPTElEQVRFRF9KT0JfSUQgPSBcInB1bGwtcmVxdWVzdC1saW50XCI7XG5cbi8vIENoZWNrcyBjYW4gb25seSBiZSBldmFsdWF0ZWQgaW4gYSBwdWxsIHJlcXVlc3QgY29udGV4dC5cbi8vIFNraXBwaW5nIHRoZW0gaW4gbWVyZ2UgZ3JvdXBzIGxldHMgdGhlbSBiZSByZXF1aXJlZCBzdGF0dXMgY2hlY2tzLlxuY29uc3QgUFJfQ0hFQ0sgPVxuICBcIihnaXRodWIuZXZlbnRfbmFtZSA9PSAncHVsbF9yZXF1ZXN0JyB8fCBnaXRodWIuZXZlbnRfbmFtZSA9PSAncHVsbF9yZXF1ZXN0X3RhcmdldCcpXCI7XG5cbi8qKlxuICogQ29uZmlndXJlIHZhbGlkYXRpb25zIHRvIHJ1biBvbiBHaXRIdWIgcHVsbCByZXF1ZXN0cy5cbiAqIE9ubHkgZ2VuZXJhdGVzIGEgZmlsZSBpZiBhdCBsZWFzdCBvbmUgY2hlY2sgaXMgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFB1bGxSZXF1ZXN0TGludCBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgd29ya2Zsb3c/OiBHaXRodWJXb3JrZmxvdztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGVja0lkczogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdpdGh1YjogR2l0SHViLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUHVsbFJlcXVlc3RMaW50T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihnaXRodWIucHJvamVjdCk7XG5cbiAgICBpZiAob3B0aW9ucy5zZW1hbnRpY1RpdGxlID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zLnNlbWFudGljVGl0bGVPcHRpb25zID8/IHt9O1xuICAgICAgY29uc3QgdHlwZXMgPSBvcHRzLnR5cGVzID8/IFtcImZlYXRcIiwgXCJmaXhcIiwgXCJjaG9yZVwiXTtcblxuICAgICAgdGhpcy5hZGRDaGVjayhcInZhbGlkYXRlXCIsIHtcbiAgICAgICAgbmFtZTogXCJWYWxpZGF0ZSBQUiB0aXRsZVwiLFxuICAgICAgICBpZjogUFJfQ0hFQ0ssXG4gICAgICAgIC4uLmdpdGh1Yi5ydW5zT25Db25maWcob3B0aW9ucyksXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IFwidmFsaWRhdGUtcHItdGl0bGVcIixcbiAgICAgICAgICAgIHVzZXM6IEFjdGlvblJlZnMuQU1BTk5OX0FDVElPTl9TRU1BTlRJQ19QVUxMX1JFUVVFU1QsXG4gICAgICAgICAgICBlbnY6IHtcbiAgICAgICAgICAgICAgR0lUSFVCX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgdHlwZXM6IHR5cGVzLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgICAgIC4uLihvcHRzLnNjb3BlcyA/IHsgc2NvcGVzOiBvcHRzLnNjb3Blcy5qb2luKFwiXFxuXCIpIH0gOiB7fSksXG4gICAgICAgICAgICAgIHJlcXVpcmVTY29wZTogb3B0cy5yZXF1aXJlU2NvcGUgPz8gZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jb250cmlidXRvclN0YXRlbWVudCkge1xuICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnRPcHRpb25zID8/IHt9O1xuICAgICAgY29uc3QgdXNlcnMgPSBvcHRzLmV4ZW1wdFVzZXJzID8/IFtdO1xuICAgICAgY29uc3QgbGFiZWxzID0gb3B0cy5leGVtcHRMYWJlbHMgPz8gW107XG5cbiAgICAgIGNvbnN0IGNvbmRpdGlvbnMgPSBbUFJfQ0hFQ0tdO1xuXG4gICAgICBjb25zdCBleGNsdXNpb25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4ubGFiZWxzLm1hcChcbiAgICAgICAgICAobCkgPT4gYGNvbnRhaW5zKGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QubGFiZWxzLioubmFtZSwgJyR7bH0nKWAsXG4gICAgICAgICksXG4gICAgICAgIC4uLnVzZXJzLm1hcCgodSkgPT4gYGdpdGh1Yi5ldmVudC5wdWxsX3JlcXVlc3QudXNlci5sb2dpbiA9PSAnJHt1fSdgKSxcbiAgICAgIF07XG5cbiAgICAgIGlmIChleGNsdXNpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25kaXRpb25zLnB1c2goYCEoJHtleGNsdXNpb25zLmpvaW4oXCIgfHwgXCIpfSlgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2NyaXB0Qm9keSA9IFtcbiAgICAgICAgJ2NvbnN0IGFjdHVhbCA9IHByb2Nlc3MuZW52LlBSX0JPRFkucmVwbGFjZSgvXFxcXHI/XFxcXG4vZywgXCJcXFxcblwiKTsnLFxuICAgICAgICAnY29uc3QgZXhwZWN0ZWQgPSBwcm9jZXNzLmVudi5FWFBFQ1RFRC5yZXBsYWNlKC9cXFxccj9cXFxcbi9nLCBcIlxcXFxuXCIpOycsXG4gICAgICAgIFwiaWYgKCFhY3R1YWwuaW5jbHVkZXMoZXhwZWN0ZWQpKSB7XCIsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBhY3R1YWwpOycsXG4gICAgICAgICcgICAgY29uc29sZS5sb2coXCIlalwiLCBleHBlY3RlZCk7JyxcbiAgICAgICAgXCIgICAgY29yZS5zZXRGYWlsZWQoYCR7cHJvY2Vzcy5lbnYuSEVMUH06ICR7ZXhwZWN0ZWR9YCk7XCIsXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBoZWxwTWVzc2FnZSA9XG4gICAgICAgIFwiQ29udHJpYnV0b3Igc3RhdGVtZW50IG1pc3NpbmcgZnJvbSBQUiBkZXNjcmlwdGlvbi4gUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyB0ZXh0IGluIHRoZSBQUiBkZXNjcmlwdGlvblwiO1xuXG4gICAgICB0aGlzLmFkZENoZWNrKFwiY29udHJpYnV0b3JTdGF0ZW1lbnRcIiwge1xuICAgICAgICBuYW1lOiBcIlJlcXVpcmUgQ29udHJpYnV0b3IgU3RhdGVtZW50XCIsXG4gICAgICAgIC4uLmdpdGh1Yi5ydW5zT25Db25maWcob3B0aW9ucyksXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgcHVsbFJlcXVlc3RzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIGlmOiBjb25kaXRpb25zLmpvaW4oXCIgJiYgXCIpLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBQUl9CT0RZOiBcIiR7eyBnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmJvZHkgfX1cIixcbiAgICAgICAgICBFWFBFQ1RFRDogb3B0aW9ucy5jb250cmlidXRvclN0YXRlbWVudCxcbiAgICAgICAgICBIRUxQOiBoZWxwTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1c2VzOiBBY3Rpb25SZWZzLkFDVElPTlNfR0lUSFVCX1NDUklQVCxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgc2NyaXB0OiBzY3JpcHRCb2R5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBqb2IgdG8gdGhlIHB1bGwgcmVxdWVzdCBsaW50IHdvcmtmbG93IHRoYXQgaXMgcGFydCBvZiB0aGUgY29uc29saWRhdGVkIHN0YXR1cyBjaGVjay5cbiAgICpcbiAgICogVGhlIGpvYiBhbHNvIHJ1bnMgZm9yIG1lcmdlIGdyb3Vwcy4gU2tpcCBpdCB0aGVyZSB3aXRoIGEgam9iIGNvbmRpdGlvbiwgYSBza2lwcGVkIGpvYiBjb3VudHMgYXMgcGFzc2luZy5cbiAgICpcbiAgICogQHBhcmFtIGlkIFRoZSBqb2IgSUQsIHVuaXF1ZSB3aXRoaW4gdGhlIHdvcmtmbG93XG4gICAqIEBwYXJhbSBqb2IgVGhlIGpvYiBkZWZpbml0aW9uXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hlY2soaWQ6IHN0cmluZywgam9iOiBKb2IpOiB2b2lkIHtcbiAgICBpZiAoaWQgPT09IENPTlNPTElEQVRFRF9KT0JfSUQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFRoZSBjaGVjayBJRCAnJHtDT05TT0xJREFURURfSk9CX0lEfScgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBjb25zb2xpZGF0ZWQgc3RhdHVzIGNoZWNrLiBDaG9vc2UgYSBkaWZmZXJlbnQgSUQuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlV29ya2Zsb3coKS5hZGRKb2JzKHsgW2lkXTogam9iIH0pO1xuICAgIHRoaXMuY2hlY2tJZHMucHVzaChpZCk7XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53b3JrZmxvdyAmJiAodGhpcy5vcHRpb25zLmNvbnNvbGlkYXRlZFN0YXR1c0NoZWNrID8/IHRydWUpKSB7XG4gICAgICB0aGlzLndvcmtmbG93LmFkZEpvYnMoe1xuICAgICAgICBbQ09OU09MSURBVEVEX0pPQl9JRF06IHRoaXMucmVuZGVyQ29uc29saWRhdGVkSm9iKCksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvbnRyaWJ1dG9yU3RhdGVtZW50KSB7XG4gICAgICAvLyBBcHBlbmQgdG8gUFIgdGVtcGxhdGUgaW4gcHJlU3ludGhlc2l6ZSBzbyBpdCdzIGFsd2F5cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlXG4gICAgICBjb25zdCBwclRlbXBsYXRlID1cbiAgICAgICAgUHVsbFJlcXVlc3RUZW1wbGF0ZS5vZih0aGlzLnByb2plY3QpID8/XG4gICAgICAgIHRoaXMuZ2l0aHViLmFkZFB1bGxSZXF1ZXN0VGVtcGxhdGUoKTtcbiAgICAgIHByVGVtcGxhdGU/LmFkZExpbmUoXCJcIik7XG4gICAgICBwclRlbXBsYXRlPy5hZGRMaW5lKFwiLS0tXCIpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZSh0aGlzLm9wdGlvbnMuY29udHJpYnV0b3JTdGF0ZW1lbnQpO1xuICAgICAgcHJUZW1wbGF0ZT8uYWRkTGluZShcIlwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVdvcmtmbG93KCk6IEdpdGh1YldvcmtmbG93IHtcbiAgICBpZiAodGhpcy53b3JrZmxvdykge1xuICAgICAgcmV0dXJuIHRoaXMud29ya2Zsb3c7XG4gICAgfVxuXG4gICAgY29uc3QgcHVsbFJlcXVlc3RUeXBlczogUHVsbFJlcXVlc3RPcHRpb25zICYgUHVsbFJlcXVlc3RUYXJnZXRPcHRpb25zID0ge1xuICAgICAgdHlwZXM6IFtcbiAgICAgICAgXCJsYWJlbGVkXCIsXG4gICAgICAgIFwib3BlbmVkXCIsXG4gICAgICAgIFwic3luY2hyb25pemVcIixcbiAgICAgICAgXCJyZW9wZW5lZFwiLFxuICAgICAgICBcInJlYWR5X2Zvcl9yZXZpZXdcIixcbiAgICAgICAgXCJlZGl0ZWRcIixcbiAgICAgIF0sXG4gICAgfTtcbiAgICBjb25zdCB0cmlnZ2VyID1cbiAgICAgIHRoaXMub3B0aW9ucy50cmlnZ2VyID8/IFB1bGxSZXF1ZXN0TGludFRyaWdnZXIuUFVMTF9SRVFVRVNUX1RBUkdFVDtcblxuICAgIHRoaXMud29ya2Zsb3cgPSB0aGlzLmdpdGh1Yi5hZGRXb3JrZmxvdyhcInB1bGwtcmVxdWVzdC1saW50XCIpO1xuICAgIHRoaXMud29ya2Zsb3cub24oe1xuICAgICAgLi4uKHRyaWdnZXIgPT09IFB1bGxSZXF1ZXN0TGludFRyaWdnZXIuUFVMTF9SRVFVRVNUXG4gICAgICAgID8geyBwdWxsUmVxdWVzdDogcHVsbFJlcXVlc3RUeXBlcyB9XG4gICAgICAgIDogeyBwdWxsUmVxdWVzdFRhcmdldDogcHVsbFJlcXVlc3RUeXBlcyB9KSxcbiAgICAgIC8vIHJ1biBvbiBtZXJnZSBncm91cCwgYnV0IHVzZSBhIGNvbmRpdGlvbiBsYXRlciB0byBhbHdheXMgc3VjY2VlZFxuICAgICAgLy8gbmVlZGVkIHNvIHRoZSB3b3JrZmxvdyBjYW4gYmUgYSByZXF1aXJlZCBzdGF0dXMgY2hlY2tcbiAgICAgIG1lcmdlR3JvdXA6IHt9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3c7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckNvbnNvbGlkYXRlZEpvYigpOiBKb2Ige1xuICAgIGNvbnN0IGlkcyA9IHRoaXMuY2hlY2tJZHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2l0aHViLnJ1bnNPbkNvbmZpZyh0aGlzLm9wdGlvbnMpLFxuICAgICAgcGVybWlzc2lvbnM6IHt9LFxuICAgICAgbmVlZHM6IGlkcyxcbiAgICAgIGlmOiBcImFsd2F5cygpXCIsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5pZHMubWFwKChpZCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtpZH0gcmVzdWx0YCxcbiAgICAgICAgICBydW46IGBlY2hvIFxcJHt7IG5lZWRzLiR7aWR9LnJlc3VsdCB9fWAsXG4gICAgICAgIH0pKSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIENoZWNrcyBhcmUgc2tpcHBlZCBpbiBtZXJnZSBncm91cHMgYW5kIGZvciBleGVtcHQgcHVsbCByZXF1ZXN0cywgd2hpY2ggY291bnRzIGFzIHBhc3NpbmcuXG4gICAgICAgICAgaWY6IGBcXCR7eyAke2lkc1xuICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgKGlkKSA9PlxuICAgICAgICAgICAgICAgIGAobmVlZHMuJHtpZH0ucmVzdWx0ICE9ICdzdWNjZXNzJyAmJiBuZWVkcy4ke2lkfS5yZXN1bHQgIT0gJ3NraXBwZWQnKWAsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbihcIiB8fCBcIil9IH19YCxcbiAgICAgICAgICBuYW1lOiBcIlNldCBzdGF0dXMgYmFzZWQgb24gcHVsbCByZXF1ZXN0IGNoZWNrc1wiLFxuICAgICAgICAgIHJ1bjogXCJleGl0IDFcIixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -9,7 +9,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
9
9
  */
10
10
  class PullRequestSource {
11
11
  condition;
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestSource", version: "0.104.22" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestSource", version: "0.104.24" };
13
13
  /**
14
14
  * Pull requests from a head branch in this repository.
15
15
  *
@@ -18,7 +18,7 @@ const component_1 = require("../component");
18
18
  * @see https://github.com/actions/stale
19
19
  */
20
20
  class Stale extends component_1.Component {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.104.22" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.104.24" };
22
22
  constructor(github, options = {}) {
23
23
  super(github.project);
24
24
  const stale = github.addWorkflow("stale");
@@ -13,7 +13,7 @@ const path_1 = require("../util/path");
13
13
  * @implements {Job}
14
14
  */
15
15
  class TaskWorkflowJob extends component_1.Component {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.104.22" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.104.24" };
17
17
  runsOn;
18
18
  runsOnGroup;
19
19
  steps;
@@ -9,7 +9,7 @@ const DEFAULT_JOB_ID = "build";
9
9
  * A GitHub workflow for common build tasks within a project.
10
10
  */
11
11
  class TaskWorkflow extends workflows_1.GithubWorkflow {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.104.22" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.104.24" };
13
13
  jobId;
14
14
  artifactsDirectory;
15
15
  constructor(github, options) {
@@ -17,7 +17,7 @@ const RUNNER_TEMP = "${{ runner.temp }}";
17
17
  * A set of utility functions for creating GitHub actions in workflows.
18
18
  */
19
19
  class WorkflowActions {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.104.22" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.104.24" };
21
21
  /**
22
22
  * Creates a .patch file from the current git diff and uploads it as an
23
23
  * artifact. Use `checkoutWithPatch` to download and apply in another job.
@@ -10,7 +10,7 @@ const runner_options_1 = require("../runner-options");
10
10
  * A set of utility functions for creating jobs in GitHub Workflows.
11
11
  */
12
12
  class WorkflowJobs {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.104.22" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.104.24" };
14
14
  /**
15
15
  * Creates a pull request with the changes of a patch file.
16
16
  *
@@ -26,7 +26,7 @@ var CheckoutSubmodules;
26
26
  * A collection of very commonly used, individual, GitHub Workflow Job steps.
27
27
  */
28
28
  class WorkflowSteps {
29
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.104.22" };
29
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.104.24" };
30
30
  /**
31
31
  * Checks out a repository.
32
32
  *
@@ -18,7 +18,7 @@ const yaml_1 = require("../yaml");
18
18
  * @see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
19
19
  */
20
20
  class GithubWorkflow extends component_1.Component {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.104.22" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.104.24" };
22
22
  /**
23
23
  * The name of the workflow. GitHub displays the names of your workflows under your repository's
24
24
  * "Actions" tab.
@@ -45,7 +45,7 @@ const yaml_1 = require("../yaml");
45
45
  * @see https://docs.gitlab.com/ee/ci/yaml/
46
46
  */
47
47
  class CiConfiguration extends component_1.Component {
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.CiConfiguration", version: "0.104.22" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.CiConfiguration", version: "0.104.24" };
49
49
  /**
50
50
  * The name of the configuration.
51
51
  */
@@ -8,7 +8,7 @@ const nested_configuration_1 = require("./nested-configuration");
8
8
  * A GitLab CI for the main `.gitlab-ci.yml` file.
9
9
  */
10
10
  class GitlabConfiguration extends configuration_1.CiConfiguration {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.104.22" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.104.24" };
12
12
  nestedTemplates = {};
13
13
  constructor(project, options) {
14
14
  super(project, "gitlab-ci", options);
@@ -7,7 +7,7 @@ const configuration_1 = require("./configuration");
7
7
  * A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
8
8
  */
9
9
  class NestedConfiguration extends configuration_1.CiConfiguration {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.104.22" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.104.24" };
11
11
  parent;
12
12
  constructor(project, parent, name, options) {
13
13
  super(project, name, options);
package/lib/gitpod.js CHANGED
@@ -106,7 +106,7 @@ var GitpodPortVisibility;
106
106
  * The Gitpod component which emits .gitpod.yml
107
107
  */
108
108
  class Gitpod extends component_1.Component {
109
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Gitpod", version: "0.104.22" };
109
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Gitpod", version: "0.104.24" };
110
110
  dockerImage;
111
111
  prebuilds;
112
112
  tasks = new Array();
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const file_1 = require("./file");
6
6
  const util_1 = require("./util");
7
7
  class IgnoreFile extends file_1.FileBase {
8
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.104.22" };
8
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.104.24" };
9
9
  _patterns;
10
10
  filterCommentLines;
11
11
  filterEmptyLines;
package/lib/ini.js CHANGED
@@ -41,7 +41,7 @@ const object_file_1 = require("./object-file");
41
41
  * Represents an INI file.
42
42
  */
43
43
  class IniFile extends object_file_1.ObjectFile {
44
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IniFile", version: "0.104.22" };
44
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IniFile", version: "0.104.24" };
45
45
  constructor(project, filePath, options) {
46
46
  super(project, filePath, options);
47
47
  }
@@ -16,7 +16,7 @@ const util_1 = require("../util");
16
16
  * @pjid java
17
17
  */
18
18
  class JavaProject extends github_1.GitHubProject {
19
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.JavaProject", version: "0.104.22" };
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.JavaProject", version: "0.104.24" };
20
20
  /**
21
21
  * API for managing `pom.xml`.
22
22
  */
package/lib/java/junit.js CHANGED
@@ -10,7 +10,7 @@ const TESTDIR = (0, path_1.join)("src", "test", "java");
10
10
  * Implements JUnit-based testing.
11
11
  */
12
12
  class Junit extends component_1.Component {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Junit", version: "0.104.22" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Junit", version: "0.104.24" };
14
14
  constructor(project, options) {
15
15
  super(project);
16
16
  const pom = options.pom;
@@ -7,7 +7,7 @@ const component_1 = require("../component");
7
7
  * Adds the maven-compiler plugin to a POM file and the `compile` task.
8
8
  */
9
9
  class MavenCompile extends component_1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenCompile", version: "0.104.22" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenCompile", version: "0.104.24" };
11
11
  constructor(project, pom, options = {}) {
12
12
  super(project);
13
13
  project.gitignore.exclude("target");
@@ -7,7 +7,7 @@ const component_1 = require("../component");
7
7
  * Configures a maven project to produce a .jar archive with sources and javadocs.
8
8
  */
9
9
  class MavenPackaging extends component_1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenPackaging", version: "0.104.22" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenPackaging", version: "0.104.24" };
11
11
  /**
12
12
  * The directory containing the package output, relative to the project outdir
13
13
  */
@@ -9,7 +9,7 @@ const sample_file_1 = require("../sample-file");
9
9
  * Java code sample.
10
10
  */
11
11
  class MavenSample extends component_1.Component {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenSample", version: "0.104.22" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenSample", version: "0.104.24" };
13
13
  constructor(project, options) {
14
14
  super(project);
15
15
  const pkg = options.package.split(".");
package/lib/java/pom.js CHANGED
@@ -13,7 +13,7 @@ const POM_XML_ATTRS = {
13
13
  "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
14
14
  };
15
15
  class UpdatePolicy {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.UpdatePolicy", version: "0.104.22" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.UpdatePolicy", version: "0.104.24" };
17
17
  static ALWAYS = "always";
18
18
  static DAILY = "daily";
19
19
  static NEVER = "never";
@@ -37,7 +37,7 @@ var ChecksumPolicy;
37
37
  * details used by Maven to build the project.
38
38
  */
39
39
  class Pom extends component_1.Component {
40
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Pom", version: "0.104.22" };
40
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Pom", version: "0.104.24" };
41
41
  /**
42
42
  * The name of the pom file.
43
43
  */
@@ -19,7 +19,7 @@ const util_1 = require("../util");
19
19
  * `src/main/java/projenrc.java`.
20
20
  */
21
21
  class Projenrc extends projenrc_1.ProjenrcFile {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Projenrc", version: "0.104.22" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Projenrc", version: "0.104.24" };
23
23
  /**
24
24
  * The name of the java class that includes the projen entrypoint.
25
25
  */
@@ -100,7 +100,7 @@ const DEFAULT_ASSIST = {
100
100
  */
101
101
  class Biome extends component_1.Component {
102
102
  options;
103
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Biome", version: "0.104.22" };
103
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Biome", version: "0.104.24" };
104
104
  static of(project) {
105
105
  const isBiome = (c) => c instanceof Biome;
106
106
  return project.components.find(isBiome);
@@ -45,7 +45,7 @@ const dependencies_1 = require("../dependencies");
45
45
  * single file. In the future, this will also supports bundling websites.
46
46
  */
47
47
  class Bundler extends component_1.Component {
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Bundler", version: "0.104.22" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Bundler", version: "0.104.24" };
49
49
  /**
50
50
  * Returns the `Bundler` instance associated with a project or `undefined` if
51
51
  * there is no Bundler.
@@ -10,7 +10,7 @@ const yaml_1 = require("../yaml");
10
10
  * Represents eslint configuration.
11
11
  */
12
12
  class Eslint extends component_1.Component {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Eslint", version: "0.104.22" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Eslint", version: "0.104.24" };
14
14
  /**
15
15
  * Returns the singleton Eslint component of a project or undefined if there is none.
16
16
  */
@@ -45,7 +45,7 @@ const DEFAULT_TEST_REPORTS_DIR = "test-reports";
45
45
  class Transform {
46
46
  name;
47
47
  options;
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.104.22" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.104.24" };
49
49
  constructor(name, options) {
50
50
  this.name = name;
51
51
  this.options = options;
@@ -65,7 +65,7 @@ exports.Transform = Transform;
65
65
  class WatchPlugin {
66
66
  name;
67
67
  options;
68
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.104.22" };
68
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.104.24" };
69
69
  constructor(name, options) {
70
70
  this.name = name;
71
71
  this.options = options;
@@ -96,7 +96,7 @@ var UpdateSnapshot;
96
96
  class JestReporter {
97
97
  name;
98
98
  options;
99
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.104.22" };
99
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.104.24" };
100
100
  constructor(name, options) {
101
101
  this.name = name;
102
102
  this.options = options;
@@ -122,7 +122,7 @@ exports.JestReporter = JestReporter;
122
122
  *
123
123
  */
124
124
  class Jest extends component_1.Component {
125
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.104.22" };
125
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.104.24" };
126
126
  /**
127
127
  * Returns the singleton Jest component of a project or undefined if there is none.
128
128
  */
@@ -8,7 +8,7 @@ const dependencies_1 = require("../dependencies");
8
8
  * Enforces allowed licenses used by dependencies.
9
9
  */
10
10
  class LicenseChecker extends component_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.104.22" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.104.24" };
12
12
  task;
13
13
  constructor(scope, options) {
14
14
  const taskName = options.taskName ?? "check-licenses";
@@ -12,7 +12,7 @@ const node_config_1 = require("./node-config");
12
12
  * @see https://nodejs.org/api/cli.html#configuration-via-nodeconfig
13
13
  */
14
14
  class NodeConfigFile extends component_1.Component {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeConfigFile", version: "0.104.22" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeConfigFile", version: "0.104.24" };
16
16
  /**
17
17
  * Returns the `NodeConfigFile` instance associated with a project or
18
18
  * `undefined` if there is none.
@@ -85,7 +85,7 @@ class TestMatch {
85
85
  */
86
86
  class Destination {
87
87
  value;
88
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Destination", version: "0.104.22" };
88
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Destination", version: "0.104.24" };
89
89
  /**
90
90
  * Write to standard output.
91
91
  */
@@ -177,7 +177,7 @@ class NodeReporters {
177
177
  * and "test:watch" tasks, and the reporters and test match patterns they use.
178
178
  */
179
179
  class NodeNativeTestRunner extends component_1.Component {
180
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeNativeTestRunner", version: "0.104.22" };
180
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeNativeTestRunner", version: "0.104.24" };
181
181
  /**
182
182
  * Returns the singleton NodeNativeTestRunner component of a project or undefined
183
183
  * if there is none.
@@ -77,7 +77,7 @@ var CodeArtifactAuthProvider;
77
77
  * Represents the npm `package.json` file.
78
78
  */
79
79
  class NodePackage extends component_1.Component {
80
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.104.22" };
80
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.104.24" };
81
81
  /**
82
82
  * Returns the `NodePackage` instance associated with a project or `undefined` if
83
83
  * there is no NodePackage.
@@ -81,7 +81,7 @@ var AutoRelease;
81
81
  * @pjid node
82
82
  */
83
83
  class NodeProject extends github_1.GitHubProject {
84
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeProject", version: "0.104.22" };
84
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeProject", version: "0.104.24" };
85
85
  /**
86
86
  * API for managing the node package.
87
87
  */
@@ -8,7 +8,7 @@ const ini_1 = require("../ini");
8
8
  * File representing the local NPM config in .npmrc
9
9
  */
10
10
  class NpmConfig extends component_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NpmConfig", version: "0.104.22" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NpmConfig", version: "0.104.24" };
12
12
  /**
13
13
  * The config object. This object can be mutated until the project is
14
14
  * synthesized.