projen 0.46.9 → 0.47.3

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 (120) hide show
  1. package/.jsii +384 -373
  2. package/API.md +116 -72
  3. package/changelog.md +2 -2
  4. package/lib/awscdk/auto-discover.js +1 -1
  5. package/lib/awscdk/awscdk-app-ts.js +1 -1
  6. package/lib/awscdk/awscdk-construct.js +2 -2
  7. package/lib/awscdk/awscdk-deps.js +1 -1
  8. package/lib/awscdk/cdk-config.js +1 -1
  9. package/lib/awscdk/cdk-tasks.js +1 -1
  10. package/lib/awscdk/integration-test.js +1 -1
  11. package/lib/awscdk/java-app.js +1 -1
  12. package/lib/awscdk/lambda-function.js +2 -2
  13. package/lib/build/build-workflow.d.ts +18 -16
  14. package/lib/build/build-workflow.js +120 -119
  15. package/lib/cdk/construct-lib.js +1 -1
  16. package/lib/cdk/consts.d.ts +0 -8
  17. package/lib/cdk/consts.js +2 -25
  18. package/lib/cdk/jsii-docgen.js +1 -1
  19. package/lib/cdk/jsii-project.d.ts +0 -5
  20. package/lib/cdk/jsii-project.js +2 -19
  21. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  22. package/lib/cdk8s/cdk8s-construct.js +1 -1
  23. package/lib/cdktf/cdktf-construct.js +1 -1
  24. package/lib/cli/cmds/new.js +2 -3
  25. package/lib/component.js +1 -1
  26. package/lib/dependencies.js +1 -1
  27. package/lib/dev-env.js +1 -1
  28. package/lib/docker-compose.js +2 -2
  29. package/lib/file.js +1 -1
  30. package/lib/gitattributes.js +1 -1
  31. package/lib/github/auto-approve.d.ts +3 -2
  32. package/lib/github/auto-approve.js +7 -6
  33. package/lib/github/auto-merge.d.ts +26 -7
  34. package/lib/github/auto-merge.js +33 -11
  35. package/lib/github/constants.d.ts +0 -5
  36. package/lib/github/constants.js +2 -17
  37. package/lib/github/dependabot.js +1 -1
  38. package/lib/github/github-project.d.ts +10 -0
  39. package/lib/github/github-project.js +3 -2
  40. package/lib/github/github.d.ts +16 -0
  41. package/lib/github/github.js +6 -5
  42. package/lib/github/mergify.js +1 -1
  43. package/lib/github/pr-template.js +1 -1
  44. package/lib/github/pull-request-lint.js +1 -1
  45. package/lib/github/stale.js +1 -1
  46. package/lib/github/task-workflow.js +4 -3
  47. package/lib/github/workflow-actions.d.ts +59 -0
  48. package/lib/github/workflow-actions.js +82 -0
  49. package/lib/github/workflows.d.ts +6 -0
  50. package/lib/github/workflows.js +3 -2
  51. package/lib/gitpod.js +1 -1
  52. package/lib/ignore-file.js +1 -1
  53. package/lib/ini.js +1 -1
  54. package/lib/java/java-project.js +1 -1
  55. package/lib/java/junit.js +1 -1
  56. package/lib/java/maven-compile.js +1 -1
  57. package/lib/java/maven-packaging.js +1 -1
  58. package/lib/java/maven-sample.js +1 -1
  59. package/lib/java/pom.js +1 -1
  60. package/lib/java/projenrc.js +1 -1
  61. package/lib/javascript/bundler.js +1 -1
  62. package/lib/javascript/eslint.js +1 -1
  63. package/lib/javascript/jest.js +7 -7
  64. package/lib/javascript/node-package.js +1 -1
  65. package/lib/javascript/node-project.d.ts +2 -22
  66. package/lib/javascript/node-project.js +28 -31
  67. package/lib/javascript/npm-config.js +1 -1
  68. package/lib/javascript/projenrc.js +1 -1
  69. package/lib/javascript/typescript-config.js +1 -1
  70. package/lib/javascript/upgrade-dependencies.d.ts +0 -14
  71. package/lib/javascript/upgrade-dependencies.js +23 -89
  72. package/lib/json.js +1 -1
  73. package/lib/license.js +1 -1
  74. package/lib/logger.js +1 -1
  75. package/lib/makefile.js +1 -1
  76. package/lib/object-file.js +1 -1
  77. package/lib/project-build.js +1 -1
  78. package/lib/project.js +1 -1
  79. package/lib/projects.js +1 -1
  80. package/lib/projenrc-json.js +1 -1
  81. package/lib/python/pip.js +1 -1
  82. package/lib/python/poetry.js +2 -2
  83. package/lib/python/projenrc.js +1 -1
  84. package/lib/python/pytest.js +1 -1
  85. package/lib/python/python-project.js +1 -1
  86. package/lib/python/python-sample.js +1 -1
  87. package/lib/python/requirements-file.js +1 -1
  88. package/lib/python/setuppy.js +1 -1
  89. package/lib/python/setuptools.js +1 -1
  90. package/lib/python/venv.js +1 -1
  91. package/lib/readme.js +1 -1
  92. package/lib/release/publisher.js +1 -1
  93. package/lib/release/release-trigger.js +1 -1
  94. package/lib/release/release.d.ts +0 -8
  95. package/lib/release/release.js +10 -13
  96. package/lib/sample-file.js +2 -2
  97. package/lib/semver.js +1 -1
  98. package/lib/source-code.js +1 -1
  99. package/lib/task-runtime.js +1 -1
  100. package/lib/task.js +1 -1
  101. package/lib/tasks.js +1 -1
  102. package/lib/testing.js +1 -1
  103. package/lib/textfile.js +1 -1
  104. package/lib/toml.js +1 -1
  105. package/lib/typescript/projenrc.js +1 -1
  106. package/lib/typescript/typescript-typedoc.js +1 -1
  107. package/lib/typescript/typescript.js +3 -3
  108. package/lib/version.js +1 -1
  109. package/lib/vscode/devcontainer.js +1 -1
  110. package/lib/vscode/launch-config.js +1 -1
  111. package/lib/vscode/vscode.js +1 -1
  112. package/lib/web/next.js +3 -3
  113. package/lib/web/postcss.js +1 -1
  114. package/lib/web/react.js +4 -4
  115. package/lib/web/tailwind.js +1 -1
  116. package/lib/xmlfile.js +1 -1
  117. package/lib/yaml.js +1 -1
  118. package/package.json +2 -2
  119. package/releasetag.txt +1 -1
  120. package/version.txt +1 -1
@@ -6,12 +6,15 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const component_1 = require("../component");
7
7
  const github_1 = require("../github");
8
8
  const constants_1 = require("../github/constants");
9
+ const workflow_actions_1 = require("../github/workflow-actions");
9
10
  const workflows_model_1 = require("../github/workflows-model");
10
- const BRANCH_REF = '${{ github.event.pull_request.head.ref }}';
11
- const REPO_REF = '${{ github.event.pull_request.head.repo.full_name }}';
12
- const PRIMARY_JOB_ID = 'build';
11
+ const PULL_REQUEST_REF = '${{ github.event.pull_request.head.ref }}';
12
+ const PULL_REQUEST_REPOSITORY = '${{ github.event.pull_request.head.repo.full_name }}';
13
+ const BUILD_JOBID = 'build';
13
14
  const SELF_MUTATION_STEP = 'self_mutation';
14
- const SELF_MUTATION_COMMIT = 'self_mutation_commit';
15
+ const SELF_MUTATION_HAPPENED_OUTPUT = 'self_mutation_happened';
16
+ const IS_FORK = 'github.event.pull_request.head.repo.full_name != github.repository';
17
+ const NOT_FORK = `!(${IS_FORK})`;
15
18
  /**
16
19
  * @experimental
17
20
  */
@@ -20,8 +23,9 @@ class BuildWorkflow extends component_1.Component {
20
23
  * @experimental
21
24
  */
22
25
  constructor(project, options) {
23
- var _b, _c, _d, _e, _f, _g;
26
+ var _b, _c, _d, _e;
24
27
  super(project);
28
+ this._postBuildJobs = [];
25
29
  const github = github_1.GitHub.of(project);
26
30
  if (!github) {
27
31
  throw new Error('BuildWorkflow is currently only supported for GitHub projects');
@@ -29,24 +33,23 @@ class BuildWorkflow extends component_1.Component {
29
33
  this.github = github;
30
34
  this.preBuildSteps = (_b = options.preBuildSteps) !== null && _b !== void 0 ? _b : [];
31
35
  this.postBuildSteps = (_c = options.postBuildSteps) !== null && _c !== void 0 ? _c : [];
32
- this.mutableBuilds = (_d = options.mutableBuild) !== null && _d !== void 0 ? _d : true;
33
- this.gitIdentity = (_e = options.gitIdentity) !== null && _e !== void 0 ? _e : constants_1.DEFAULT_GITHUB_ACTIONS_USER;
36
+ this.gitIdentity = (_d = options.gitIdentity) !== null && _d !== void 0 ? _d : constants_1.DEFAULT_GITHUB_ACTIONS_USER;
34
37
  this.buildTask = options.buildTask;
35
38
  this.artifactsDirectory = options.artifactsDirectory;
36
- const antitamper = (_f = options.antitamper) !== null && _f !== void 0 ? _f : true;
37
- // disable anti-tamper if build workflow is mutable
38
- this.antitamperSteps = ((_g = !this.mutableBuilds) !== null && _g !== void 0 ? _g : antitamper) ? [{
39
- // anti-tamper check (fails if there were changes to committed files)
40
- // this will identify any non-committed files generated during build (e.g. test snapshots)
41
- name: 'Anti-tamper check',
42
- run: 'git diff --ignore-space-at-eol --exit-code',
43
- }] : [];
39
+ const mutableBuilds = (_e = options.mutableBuild) !== null && _e !== void 0 ? _e : true;
44
40
  this.workflow = new github_1.GithubWorkflow(github, 'build');
45
41
  this.workflow.on({
46
42
  pullRequest: {},
47
43
  workflowDispatch: {},
48
44
  });
49
- this.workflow.addJob(PRIMARY_JOB_ID, {
45
+ this.addBuildJob(options);
46
+ this.addAntiTamperJob({ onlyForks: mutableBuilds });
47
+ if (mutableBuilds) {
48
+ this.addSelfMutationJob();
49
+ }
50
+ }
51
+ addBuildJob(options) {
52
+ this.workflow.addJob(BUILD_JOBID, {
50
53
  runsOn: ['ubuntu-latest'],
51
54
  container: options.containerImage ? { image: options.containerImage } : undefined,
52
55
  env: {
@@ -56,58 +59,13 @@ class BuildWorkflow extends component_1.Component {
56
59
  permissions: {
57
60
  contents: workflows_model_1.JobPermission.WRITE,
58
61
  },
62
+ steps: (() => this.renderBuildSteps()),
59
63
  outputs: {
60
- [SELF_MUTATION_COMMIT]: {
64
+ [SELF_MUTATION_HAPPENED_OUTPUT]: {
61
65
  stepId: SELF_MUTATION_STEP,
62
- outputName: SELF_MUTATION_COMMIT,
66
+ outputName: SELF_MUTATION_HAPPENED_OUTPUT,
63
67
  },
64
68
  },
65
- steps: (() => this.renderSteps()),
66
- });
67
- this.primaryJobId = PRIMARY_JOB_ID;
68
- this._buildJobIds = [PRIMARY_JOB_ID];
69
- this.workflow.addJob('update-status', {
70
- runsOn: ['ubuntu-latest'],
71
- permissions: {
72
- checks: workflows_model_1.JobPermission.WRITE,
73
- actions: workflows_model_1.JobPermission.WRITE,
74
- },
75
- needs: (() => this._buildJobIds),
76
- if: `\${{ needs.${this.primaryJobId}.outputs.${SELF_MUTATION_COMMIT} }}`,
77
- steps: [
78
- // if we pushed changes, we need to manually update the status check so
79
- // that the PR will be green (we won't get here for forks with updates
80
- // because the push would have failed).
81
- {
82
- name: 'Update status check (if changed)',
83
- run: [
84
- 'gh api',
85
- '-X POST',
86
- `/repos/${REPO_REF}/check-runs`,
87
- `-F name="${PRIMARY_JOB_ID}"`,
88
- `-F head_sha="\${{ needs.${this.primaryJobId}.outputs.${SELF_MUTATION_COMMIT} }}"`,
89
- '-F status="completed"',
90
- '-F conclusion="success"',
91
- ].join(' '),
92
- env: {
93
- GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}',
94
- },
95
- },
96
- // if we pushed changes, we need to mark the current commit as failed, so
97
- // that GitHub auto-merge does not risk merging this commit before the
98
- // event for the new commit has registered.
99
- {
100
- name: 'Cancel workflow (if changed)',
101
- run: [
102
- 'gh api',
103
- '-X POST',
104
- `/repos/${REPO_REF}/actions/runs/\${{ github.run_id }}/cancel`,
105
- ].join(' '),
106
- env: {
107
- GITHUB_TOKEN: '${{ secrets.GITHUB_TOKEN }}',
108
- },
109
- },
110
- ],
111
69
  });
112
70
  }
113
71
  /**
@@ -116,7 +74,7 @@ class BuildWorkflow extends component_1.Component {
116
74
  * @experimental
117
75
  */
118
76
  get buildJobIds() {
119
- return [...this._buildJobIds];
77
+ return [BUILD_JOBID, ...this._postBuildJobs];
120
78
  }
121
79
  /**
122
80
  * (experimental) Adds steps that are executed after the build.
@@ -130,6 +88,10 @@ class BuildWorkflow extends component_1.Component {
130
88
  /**
131
89
  * (experimental) Adds another job to the build workflow which is executed after the build job succeeded.
132
90
  *
91
+ * Jobs are executed _only_ if the build did NOT self mutate. If the build
92
+ * self-mutate, the branch will either be updated or the build will fail (in
93
+ * forks), so there is no point in executing the post-build job.
94
+ *
133
95
  * @param id The id of the new job.
134
96
  * @param job The job specification.
135
97
  * @experimental
@@ -137,21 +99,6 @@ class BuildWorkflow extends component_1.Component {
137
99
  addPostBuildJob(id, job) {
138
100
  const steps = [];
139
101
  if (this.artifactsDirectory) {
140
- // add a step at the end of the build workflow which will upload the
141
- // artifact so we can download it in each post-build job (do it once).
142
- if (!this.uploadArtitactSteps) {
143
- this.uploadArtitactSteps = [{
144
- name: 'Upload artifact',
145
- uses: 'actions/upload-artifact@v2.1.1',
146
- // Setting to always will ensure that this step will run even if
147
- // the previous ones have failed (e.g. coverage report, internal logs, etc)
148
- if: 'always()',
149
- with: {
150
- name: constants_1.BUILD_ARTIFACT_NAME,
151
- path: this.artifactsDirectory,
152
- },
153
- }];
154
- }
155
102
  steps.push({
156
103
  name: 'Download build artifacts',
157
104
  uses: 'actions/download-artifact@v2',
@@ -163,54 +110,108 @@ class BuildWorkflow extends component_1.Component {
163
110
  }
164
111
  steps.push(...job.steps);
165
112
  this.workflow.addJob(id, {
166
- needs: [this.primaryJobId],
113
+ needs: [BUILD_JOBID],
114
+ // only run if build did not self-mutate
115
+ if: `\${{ ! needs.${BUILD_JOBID}.outputs.${SELF_MUTATION_HAPPENED_OUTPUT} }}`,
167
116
  ...job,
168
117
  steps: steps,
169
118
  });
170
119
  // add to the list of build job IDs
171
- this._buildJobIds.push(id);
120
+ this._postBuildJobs.push(id);
121
+ }
122
+ addSelfMutationJob() {
123
+ this.workflow.addJob('self-mutation', {
124
+ runsOn: ['ubuntu-latest'],
125
+ permissions: {
126
+ contents: workflows_model_1.JobPermission.WRITE,
127
+ },
128
+ needs: [BUILD_JOBID],
129
+ if: `\${{ needs.${BUILD_JOBID}.outputs.${SELF_MUTATION_HAPPENED_OUTPUT} && ${NOT_FORK} }}`,
130
+ steps: [
131
+ ...workflow_actions_1.WorkflowActions.checkoutWithPatch({
132
+ // we need to use a PAT so that our push will trigger the build workflow
133
+ token: `\${{ secrets.${this.workflow.projenTokenSecret} }}`,
134
+ ref: PULL_REQUEST_REF,
135
+ repository: PULL_REQUEST_REPOSITORY,
136
+ }),
137
+ ...workflow_actions_1.WorkflowActions.setGitIdentity(this.gitIdentity),
138
+ {
139
+ name: 'Push changes',
140
+ run: [
141
+ ' git add .',
142
+ ' git commit -m "chore: self mutation"',
143
+ ` git push origin HEAD:${PULL_REQUEST_REF}`,
144
+ ].join('\n'),
145
+ },
146
+ ],
147
+ });
172
148
  }
173
149
  /**
174
- * Called (lazily) during synth to render the build job steps.
150
+ * Adds a job that fails if there were file changes.
175
151
  */
176
- renderSteps() {
177
- const steps = new Array();
178
- steps.push({
179
- name: 'Checkout',
180
- uses: 'actions/checkout@v2',
181
- with: this.mutableBuilds ? {
182
- ref: BRANCH_REF,
183
- repository: REPO_REF,
184
- } : undefined,
185
- });
186
- steps.push(constants_1.setGitIdentityStep(this.gitIdentity));
187
- steps.push(...this.antitamperSteps);
188
- steps.push(...this.preBuildSteps);
189
- steps.push({
190
- name: this.buildTask.name,
191
- run: this.github.project.runTaskCommand(this.buildTask),
192
- });
193
- steps.push(...this.postBuildSteps);
194
- steps.push(...this.antitamperSteps);
195
- steps.push({
196
- name: 'Self mutation',
197
- id: SELF_MUTATION_STEP,
198
- run: [
199
- 'if ! git diff --exit-code; then',
200
- ' git add .',
201
- ' git commit -m "chore: self mutation"',
202
- ` git push origin HEAD:${BRANCH_REF}`,
203
- ` echo "::set-output name=${SELF_MUTATION_COMMIT}::$(git rev-parse HEAD)"`,
204
- 'fi',
205
- ].join('\n'),
152
+ addAntiTamperJob(options) {
153
+ const antitamperCondition = options.onlyForks
154
+ ? `\${{ needs.${BUILD_JOBID}.outputs.${SELF_MUTATION_HAPPENED_OUTPUT} && ${IS_FORK} }}`
155
+ : `\${{ needs.${BUILD_JOBID}.outputs.${SELF_MUTATION_HAPPENED_OUTPUT} }}`;
156
+ this.workflow.addJob('anti-tamper', {
157
+ runsOn: ['ubuntu-latest'],
158
+ if: antitamperCondition,
159
+ permissions: {},
160
+ needs: [BUILD_JOBID],
161
+ steps: [
162
+ ...workflow_actions_1.WorkflowActions.checkoutWithPatch({
163
+ repository: PULL_REQUEST_REPOSITORY,
164
+ ref: PULL_REQUEST_REF,
165
+ }),
166
+ {
167
+ name: 'Found diff after build (update your branch)',
168
+ run: 'git diff --staged --exit-code',
169
+ },
170
+ ],
206
171
  });
207
- if (this.uploadArtitactSteps) {
208
- steps.push(...this.uploadArtitactSteps);
209
- }
210
- return steps;
172
+ }
173
+ /**
174
+ * Called (lazily) during synth to render the build job steps.
175
+ */
176
+ renderBuildSteps() {
177
+ return [
178
+ {
179
+ name: 'Checkout',
180
+ uses: 'actions/checkout@v2',
181
+ with: {
182
+ ref: PULL_REQUEST_REF,
183
+ repository: PULL_REQUEST_REPOSITORY,
184
+ },
185
+ },
186
+ ...this.preBuildSteps,
187
+ {
188
+ name: this.buildTask.name,
189
+ run: this.github.project.runTaskCommand(this.buildTask),
190
+ },
191
+ ...this.postBuildSteps,
192
+ {
193
+ name: 'Check self-mutation',
194
+ id: SELF_MUTATION_STEP,
195
+ run: `git diff --staged --exit-code || echo "::set-output name=${SELF_MUTATION_HAPPENED_OUTPUT}::true"`,
196
+ },
197
+ ...workflow_actions_1.WorkflowActions.createUploadGitPatch({
198
+ if: `\${{ steps.${SELF_MUTATION_STEP}.outputs.${SELF_MUTATION_HAPPENED_OUTPUT} }}`,
199
+ }),
200
+ // upload the build artifact only if we have post-build jobs and only if
201
+ // there we NO self mutation.
202
+ ...(this._postBuildJobs.length == 0 ? [] : [{
203
+ name: 'Upload artifact',
204
+ uses: 'actions/upload-artifact@v2.1.1',
205
+ if: `\${{ ! steps.${SELF_MUTATION_STEP}.outputs.${SELF_MUTATION_HAPPENED_OUTPUT} }}`,
206
+ with: {
207
+ name: constants_1.BUILD_ARTIFACT_NAME,
208
+ path: this.artifactsDirectory,
209
+ },
210
+ }]),
211
+ ];
211
212
  }
212
213
  }
213
214
  exports.BuildWorkflow = BuildWorkflow;
214
215
  _a = JSII_RTTI_SYMBOL_1;
215
- BuildWorkflow[_a] = { fqn: "projen.build.BuildWorkflow", version: "0.46.9" };
216
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGQvYnVpbGQtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSw0Q0FBeUM7QUFDekMsc0NBQWdFO0FBQ2hFLG1EQUEyRztBQUMzRywrREFBd0U7QUFHeEUsTUFBTSxVQUFVLEdBQUcsMkNBQTJDLENBQUM7QUFDL0QsTUFBTSxRQUFRLEdBQUcsc0RBQXNELENBQUM7QUFDeEUsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQy9CLE1BQU0sa0JBQWtCLEdBQUcsZUFBZSxDQUFDO0FBQzNDLE1BQU0sb0JBQW9CLEdBQUcsc0JBQXNCLENBQUM7Ozs7QUErQnBELE1BQWEsYUFBYyxTQUFRLHFCQUFTOzs7O0lBZTFDLFlBQVksT0FBZ0IsRUFBRSxPQUE2Qjs7UUFDekQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsTUFBTSxNQUFNLEdBQUcsZUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQywrREFBK0QsQ0FBQyxDQUFDO1NBQ2xGO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFFckIsSUFBSSxDQUFDLGFBQWEsU0FBRyxPQUFPLENBQUMsYUFBYSxtQ0FBSSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsU0FBRyxPQUFPLENBQUMsY0FBYyxtQ0FBSSxFQUFFLENBQUM7UUFDbkQsSUFBSSxDQUFDLGFBQWEsU0FBRyxPQUFPLENBQUMsWUFBWSxtQ0FBSSxJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsU0FBRyxPQUFPLENBQUMsV0FBVyxtQ0FBSSx1Q0FBMkIsQ0FBQztRQUN0RSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLGtC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LElBQUksQ0FBQztZQUNULElBQUksRUFBRSxlQUFlO1lBQ3JCLEVBQUUsRUFBRSxrQkFBa0I7WUFDdEIsR0FBRyxFQUFFO2dCQUNILGlDQUFpQztnQkFDakMsYUFBYTtnQkFDYix3Q0FBd0M7Z0JBQ3hDLDBCQUEwQixVQUFVLEVBQUU7Z0JBQ3RDLDZCQUE2QixvQkFBb0IsMEJBQTBCO2dCQUMzRSxJQUFJO2FBQ0wsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDNUIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOztBQXhOSCxzQ0F5TkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IEdpdEh1YiwgR2l0aHViV29ya2Zsb3csIEdpdElkZW50aXR5IH0gZnJvbSAnLi4vZ2l0aHViJztcbmltcG9ydCB7IEJVSUxEX0FSVElGQUNUX05BTUUsIERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUiwgc2V0R2l0SWRlbnRpdHlTdGVwIH0gZnJvbSAnLi4vZ2l0aHViL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBKb2IsIEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tICcuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9wcm9qZWN0JztcblxuY29uc3QgQlJBTkNIX1JFRiA9ICcke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnJlZiB9fSc7XG5jb25zdCBSRVBPX1JFRiA9ICcke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnJlcG8uZnVsbF9uYW1lIH19JztcbmNvbnN0IFBSSU1BUllfSk9CX0lEID0gJ2J1aWxkJztcbmNvbnN0IFNFTEZfTVVUQVRJT05fU1RFUCA9ICdzZWxmX211dGF0aW9uJztcbmNvbnN0IFNFTEZfTVVUQVRJT05fQ09NTUlUID0gJ3NlbGZfbXV0YXRpb25fY29tbWl0JztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFdvcmtmbG93T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGJ1aWxkVGFzazogVGFzaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFydGlmYWN0c0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY29udGFpbmVySW1hZ2U/OiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBtdXRhYmxlQnVpbGQ/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwcmVCdWlsZFN0ZXBzPzogSm9iU3RlcFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcG9zdEJ1aWxkU3RlcHM/OiBKb2JTdGVwW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBnaXRJZGVudGl0eT86IEdpdElkZW50aXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBlbnY/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYW50aXRhbXBlcj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFdvcmtmbG93IGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBwb3N0QnVpbGRTdGVwczogSm9iU3RlcFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHByZUJ1aWxkU3RlcHM6IEpvYlN0ZXBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbnRpdGFtcGVyU3RlcHM6IEpvYlN0ZXBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBtdXRhYmxlQnVpbGRzOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGdpdElkZW50aXR5OiBHaXRJZGVudGl0eTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFRhc2s6IFRhc2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2l0aHViOiBHaXRIdWI7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3c6IEdpdGh1YldvcmtmbG93O1xuICBwcml2YXRlIHJlYWRvbmx5IHByaW1hcnlKb2JJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGFydGlmYWN0c0RpcmVjdG9yeT86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9idWlsZEpvYklkczogc3RyaW5nW107XG4gIHByaXZhdGUgdXBsb2FkQXJ0aXRhY3RTdGVwcz86IEpvYlN0ZXBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBCdWlsZFdvcmtmbG93T3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgY29uc3QgZ2l0aHViID0gR2l0SHViLm9mKHByb2plY3QpO1xuICAgIGlmICghZ2l0aHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0J1aWxkV29ya2Zsb3cgaXMgY3VycmVudGx5IG9ubHkgc3VwcG9ydGVkIGZvciBHaXRIdWIgcHJvamVjdHMnKTtcbiAgICB9XG5cbiAgICB0aGlzLmdpdGh1YiA9IGdpdGh1YjtcblxuICAgIHRoaXMucHJlQnVpbGRTdGVwcyA9IG9wdGlvbnMucHJlQnVpbGRTdGVwcyA/PyBbXTtcbiAgICB0aGlzLnBvc3RCdWlsZFN0ZXBzID0gb3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXTtcbiAgICB0aGlzLm11dGFibGVCdWlsZHMgPSBvcHRpb25zLm11dGFibGVCdWlsZCA/PyB0cnVlO1xuICAgIHRoaXMuZ2l0SWRlbnRpdHkgPSBvcHRpb25zLmdpdElkZW50aXR5ID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUjtcbiAgICB0aGlzLmJ1aWxkVGFzayA9IG9wdGlvbnMuYnVpbGRUYXNrO1xuICAgIHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5ID0gb3B0aW9ucy5hcnRpZmFjdHNEaXJlY3Rvcnk7XG5cbiAgICBjb25zdCBhbnRpdGFtcGVyID0gb3B0aW9ucy5hbnRpdGFtcGVyID8/IHRydWU7XG5cbiAgICAvLyBkaXNhYmxlIGFudGktdGFtcGVyIGlmIGJ1aWxkIHdvcmtmbG93IGlzIG11dGFibGVcbiAgICB0aGlzLmFudGl0YW1wZXJTdGVwcyA9ICghdGhpcy5tdXRhYmxlQnVpbGRzID8/IGFudGl0YW1wZXIpID8gW3tcbiAgICAgIC8vIGFudGktdGFtcGVyIGNoZWNrIChmYWlscyBpZiB0aGVyZSB3ZXJlIGNoYW5nZXMgdG8gY29tbWl0dGVkIGZpbGVzKVxuICAgICAgLy8gdGhpcyB3aWxsIGlkZW50aWZ5IGFueSBub24tY29tbWl0dGVkIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgYnVpbGQgKGUuZy4gdGVzdCBzbmFwc2hvdHMpXG4gICAgICBuYW1lOiAnQW50aS10YW1wZXIgY2hlY2snLFxuICAgICAgcnVuOiAnZ2l0IGRpZmYgLS1pZ25vcmUtc3BhY2UtYXQtZW9sIC0tZXhpdC1jb2RlJyxcbiAgICB9XSA6IFtdO1xuXG4gICAgdGhpcy53b3JrZmxvdyA9IG5ldyBHaXRodWJXb3JrZmxvdyhnaXRodWIsICdidWlsZCcpO1xuXG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICBwdWxsUmVxdWVzdDoge30sXG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7fSwgLy8gYWxsb3cgbWFudWFsIHRyaWdnZXJpbmdcbiAgICB9KTtcblxuICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKFBSSU1BUllfSk9CX0lELCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lckltYWdlID8geyBpbWFnZTogb3B0aW9ucy5jb250YWluZXJJbWFnZSB9IDogdW5kZWZpbmVkLFxuICAgICAgZW52OiB7XG4gICAgICAgIENJOiAndHJ1ZScsXG4gICAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgICAgfSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgW1NFTEZfTVVUQVRJT05fQ09NTUlUXToge1xuICAgICAgICAgIHN0ZXBJZDogU0VMRl9NVVRBVElPTl9TVEVQLFxuICAgICAgICAgIG91dHB1dE5hbWU6IFNFTEZfTVVUQVRJT05fQ09NTUlULFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHN0ZXBzOiAoKCkgPT4gdGhpcy5yZW5kZXJTdGVwcygpKSBhcyBhbnksXG4gICAgfSk7XG5cbiAgICB0aGlzLnByaW1hcnlKb2JJZCA9IFBSSU1BUllfSk9CX0lEO1xuXG4gICAgdGhpcy5fYnVpbGRKb2JJZHMgPSBbUFJJTUFSWV9KT0JfSURdO1xuXG4gICAgdGhpcy53b3JrZmxvdy5hZGRKb2IoJ3VwZGF0ZS1zdGF0dXMnLCB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY2hlY2tzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICBhY3Rpb25zOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiAoKCkgPT4gdGhpcy5fYnVpbGRKb2JJZHMpIGFzIGFueSwgLy8gd2FpdCBmb3IgYWxsIGJ1aWxkIGpvYnMgdG8gZmluaXNoXG4gICAgICBpZjogYFxcJHt7IG5lZWRzLiR7dGhpcy5wcmltYXJ5Sm9iSWR9Lm91dHB1dHMuJHtTRUxGX01VVEFUSU9OX0NPTU1JVH0gfX1gLFxuICAgICAgc3RlcHM6IFtcbiAgICAgIC8vIGlmIHdlIHB1c2hlZCBjaGFuZ2VzLCB3ZSBuZWVkIHRvIG1hbnVhbGx5IHVwZGF0ZSB0aGUgc3RhdHVzIGNoZWNrIHNvXG4gICAgICAvLyB0aGF0IHRoZSBQUiB3aWxsIGJlIGdyZWVuICh3ZSB3b24ndCBnZXQgaGVyZSBmb3IgZm9ya3Mgd2l0aCB1cGRhdGVzXG4gICAgICAvLyBiZWNhdXNlIHRoZSBwdXNoIHdvdWxkIGhhdmUgZmFpbGVkKS5cbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdVcGRhdGUgc3RhdHVzIGNoZWNrIChpZiBjaGFuZ2VkKScsXG4gICAgICAgICAgcnVuOiBbXG4gICAgICAgICAgICAnZ2ggYXBpJyxcbiAgICAgICAgICAgICctWCBQT1NUJyxcbiAgICAgICAgICAgIGAvcmVwb3MvJHtSRVBPX1JFRn0vY2hlY2stcnVuc2AsXG4gICAgICAgICAgICBgLUYgbmFtZT1cIiR7UFJJTUFSWV9KT0JfSUR9XCJgLFxuICAgICAgICAgICAgYC1GIGhlYWRfc2hhPVwiXFwke3sgbmVlZHMuJHt0aGlzLnByaW1hcnlKb2JJZH0ub3V0cHV0cy4ke1NFTEZfTVVUQVRJT05fQ09NTUlUfSB9fVwiYCxcbiAgICAgICAgICAgICctRiBzdGF0dXM9XCJjb21wbGV0ZWRcIicsXG4gICAgICAgICAgICAnLUYgY29uY2x1c2lvbj1cInN1Y2Nlc3NcIicsXG4gICAgICAgICAgXS5qb2luKCcgJyksXG4gICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICBHSVRIVUJfVE9LRU46ICcke3sgc2VjcmV0cy5HSVRIVUJfVE9LRU4gfX0nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gaWYgd2UgcHVzaGVkIGNoYW5nZXMsIHdlIG5lZWQgdG8gbWFyayB0aGUgY3VycmVudCBjb21taXQgYXMgZmFpbGVkLCBzb1xuICAgICAgICAvLyB0aGF0IEdpdEh1YiBhdXRvLW1lcmdlIGRvZXMgbm90IHJpc2sgbWVyZ2luZyB0aGlzIGNvbW1pdCBiZWZvcmUgdGhlXG4gICAgICAgIC8vIGV2ZW50IGZvciB0aGUgbmV3IGNvbW1pdCBoYXMgcmVnaXN0ZXJlZC5cbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdDYW5jZWwgd29ya2Zsb3cgKGlmIGNoYW5nZWQpJyxcbiAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICdnaCBhcGknLFxuICAgICAgICAgICAgJy1YIFBPU1QnLFxuICAgICAgICAgICAgYC9yZXBvcy8ke1JFUE9fUkVGfS9hY3Rpb25zL3J1bnMvXFwke3sgZ2l0aHViLnJ1bl9pZCB9fS9jYW5jZWxgLFxuICAgICAgICAgIF0uam9pbignICcpLFxuICAgICAgICAgIGVudjoge1xuICAgICAgICAgICAgR0lUSFVCX1RPS0VOOiAnJHt7IHNlY3JldHMuR0lUSFVCX1RPS0VOIH19JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBnZXQgYnVpbGRKb2JJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fYnVpbGRKb2JJZHNdO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZFBvc3RCdWlsZFN0ZXBzKC4uLnN0ZXBzOiBKb2JTdGVwW10pOiB2b2lkIHtcbiAgICB0aGlzLnBvc3RCdWlsZFN0ZXBzLnB1c2goLi4uc3RlcHMpO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRQb3N0QnVpbGRKb2IoaWQ6IHN0cmluZywgam9iOiBKb2IpIHtcbiAgICBjb25zdCBzdGVwcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5KSB7XG5cbiAgICAgIC8vIGFkZCBhIHN0ZXAgYXQgdGhlIGVuZCBvZiB0aGUgYnVpbGQgd29ya2Zsb3cgd2hpY2ggd2lsbCB1cGxvYWQgdGhlXG4gICAgICAvLyBhcnRpZmFjdCBzbyB3ZSBjYW4gZG93bmxvYWQgaXQgaW4gZWFjaCBwb3N0LWJ1aWxkIGpvYiAoZG8gaXQgb25jZSkuXG4gICAgICBpZiAoIXRoaXMudXBsb2FkQXJ0aXRhY3RTdGVwcykge1xuICAgICAgICB0aGlzLnVwbG9hZEFydGl0YWN0U3RlcHMgPSBbe1xuICAgICAgICAgIG5hbWU6ICdVcGxvYWQgYXJ0aWZhY3QnLFxuICAgICAgICAgIHVzZXM6ICdhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdEB2Mi4xLjEnLFxuICAgICAgICAgIC8vIFNldHRpbmcgdG8gYWx3YXlzIHdpbGwgZW5zdXJlIHRoYXQgdGhpcyBzdGVwIHdpbGwgcnVuIGV2ZW4gaWZcbiAgICAgICAgICAvLyB0aGUgcHJldmlvdXMgb25lcyBoYXZlIGZhaWxlZCAoZS5nLiBjb3ZlcmFnZSByZXBvcnQsIGludGVybmFsIGxvZ3MsIGV0YylcbiAgICAgICAgICBpZjogJ2Fsd2F5cygpJyxcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBuYW1lOiBCVUlMRF9BUlRJRkFDVF9OQU1FLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgICAgfSxcbiAgICAgICAgfV07XG4gICAgICB9XG5cbiAgICAgIHN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnRG93bmxvYWQgYnVpbGQgYXJ0aWZhY3RzJyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvZG93bmxvYWQtYXJ0aWZhY3RAdjInLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgbmFtZTogQlVJTERfQVJUSUZBQ1RfTkFNRSxcbiAgICAgICAgICBwYXRoOiB0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0ZXBzLnB1c2goLi4uam9iLnN0ZXBzKTtcblxuICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKGlkLCB7XG4gICAgICBuZWVkczogW3RoaXMucHJpbWFyeUpvYklkXSxcbiAgICAgIC4uLmpvYixcbiAgICAgIHN0ZXBzOiBzdGVwcyxcbiAgICB9KTtcblxuICAgIC8vIGFkZCB0byB0aGUgbGlzdCBvZiBidWlsZCBqb2IgSURzXG4gICAgdGhpcy5fYnVpbGRKb2JJZHMucHVzaChpZCk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIChsYXppbHkpIGR1cmluZyBzeW50aCB0byByZW5kZXIgdGhlIGJ1aWxkIGpvYiBzdGVwcy5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyU3RlcHMoKTogSm9iU3RlcFtdIHtcbiAgICBjb25zdCBzdGVwcyA9IG5ldyBBcnJheTxKb2JTdGVwPigpO1xuXG4gICAgc3RlcHMucHVzaCh7XG4gICAgICBuYW1lOiAnQ2hlY2tvdXQnLFxuICAgICAgdXNlczogJ2FjdGlvbnMvY2hlY2tvdXRAdjInLFxuICAgICAgd2l0aDogdGhpcy5tdXRhYmxlQnVpbGRzID8ge1xuICAgICAgICByZWY6IEJSQU5DSF9SRUYsXG4gICAgICAgIHJlcG9zaXRvcnk6IFJFUE9fUkVGLFxuICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIHN0ZXBzLnB1c2goc2V0R2l0SWRlbnRpdHlTdGVwKHRoaXMuZ2l0SWRlbnRpdHkpKTtcblxuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5hbnRpdGFtcGVyU3RlcHMpO1xuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5wcmVCdWlsZFN0ZXBzKTtcbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6IHRoaXMuYnVpbGRUYXNrLm5hbWUsXG4gICAgICBydW46IHRoaXMuZ2l0aHViLnByb2plY3QucnVuVGFza0NvbW1hbmQodGhpcy5idWlsZFRhc2spLFxuICAgIH0pO1xuICAgIHN0ZXBzLnB1c2goLi4udGhpcy5wb3N0QnVpbGRTdGVwcyk7XG4gICAgc3RlcHMucHVzaCguLi50aGlzLmFudGl0YW1wZXJTdGVwcyk7XG5cbiAgICBzdGVwcy5wdXNoKHtcbiAgICAgIG5hbWU6ICdTZWxmIG11dGF0aW9uJyxcbiAgICAgIGlkOiBTRUxGX01VVEFUSU9OX1NURVAsXG4gICAgICBydW46IFtcbiAgICAgICAgJ2lmICEgZ2l0IGRpZmYgLS1leGl0LWNvZGU7IHRoZW4nLFxuICAgICAgICAnICBnaXQgYWRkIC4nLFxuICAgICAgICAnICBnaXQgY29tbWl0IC1tIFwiY2hvcmU6IHNlbGYgbXV0YXRpb25cIicsXG4gICAgICAgIGAgIGdpdCBwdXNoIG9yaWdpbiBIRUFEOiR7QlJBTkNIX1JFRn1gLFxuICAgICAgICBgICBlY2hvIFwiOjpzZXQtb3V0cHV0IG5hbWU9JHtTRUxGX01VVEFUSU9OX0NPTU1JVH06OiQoZ2l0IHJldi1wYXJzZSBIRUFEKVwiYCxcbiAgICAgICAgJ2ZpJyxcbiAgICAgIF0uam9pbignXFxuJyksXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy51cGxvYWRBcnRpdGFjdFN0ZXBzKSB7XG4gICAgICBzdGVwcy5wdXNoKC4uLnRoaXMudXBsb2FkQXJ0aXRhY3RTdGVwcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG59Il19
216
+ BuildWorkflow[_a] = { fqn: "projen.build.BuildWorkflow", version: "0.47.3" };
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtd29ya2Zsb3cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVpbGQvYnVpbGQtd29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSw0Q0FBeUM7QUFDekMsc0NBQWdFO0FBQ2hFLG1EQUF1RjtBQUN2RixpRUFBNkQ7QUFDN0QsK0RBQXdFO0FBR3hFLE1BQU0sZ0JBQWdCLEdBQUcsMkNBQTJDLENBQUM7QUFDckUsTUFBTSx1QkFBdUIsR0FBRyxzREFBc0QsQ0FBQztBQUN2RixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFDNUIsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUM7QUFDM0MsTUFBTSw2QkFBNkIsR0FBRyx3QkFBd0IsQ0FBQztBQUMvRCxNQUFNLE9BQU8sR0FBRyxvRUFBb0UsQ0FBQztBQUNyRixNQUFNLFFBQVEsR0FBRyxLQUFLLE9BQU8sR0FBRyxDQUFDOzs7O0FBNEJqQyxNQUFhLGFBQWMsU0FBUSxxQkFBUzs7OztJQVcxQyxZQUFZLE9BQWdCLEVBQUUsT0FBNkI7O1FBQ3pELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhBLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBSzdDLE1BQU0sTUFBTSxHQUFHLGVBQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztTQUNsRjtRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLFNBQUcsT0FBTyxDQUFDLGFBQWEsbUNBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLFNBQUcsT0FBTyxDQUFDLGNBQWMsbUNBQUksRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLFNBQUcsT0FBTyxDQUFDLFdBQVcsbUNBQUksdUNBQTJCLENBQUM7UUFD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Q0FBZ0M7b0JBQ3RDLEVBQUUsRUFBRSxnQkFBZ0Isa0JBQWtCLFlBQVksNkJBQTZCLEtBQUs7b0JBQ3BGLElBQUksRUFBRTt3QkFDSixJQUFJLEVBQUUsK0JBQW1CO3dCQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtxQkFDOUI7aUJBQ0YsQ0FBQyxDQUFDO1NBQ0osQ0FBQztJQUNKLENBQUM7O0FBeE1ILHNDQXlNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRhc2sgfSBmcm9tICcuLic7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnQnO1xuaW1wb3J0IHsgR2l0SHViLCBHaXRodWJXb3JrZmxvdywgR2l0SWRlbnRpdHkgfSBmcm9tICcuLi9naXRodWInO1xuaW1wb3J0IHsgQlVJTERfQVJUSUZBQ1RfTkFNRSwgREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSIH0gZnJvbSAnLi4vZ2l0aHViL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBXb3JrZmxvd0FjdGlvbnMgfSBmcm9tICcuLi9naXRodWIvd29ya2Zsb3ctYWN0aW9ucyc7XG5pbXBvcnQgeyBKb2IsIEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tICcuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9wcm9qZWN0JztcblxuY29uc3QgUFVMTF9SRVFVRVNUX1JFRiA9ICcke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnJlZiB9fSc7XG5jb25zdCBQVUxMX1JFUVVFU1RfUkVQT1NJVE9SWSA9ICcke3sgZ2l0aHViLmV2ZW50LnB1bGxfcmVxdWVzdC5oZWFkLnJlcG8uZnVsbF9uYW1lIH19JztcbmNvbnN0IEJVSUxEX0pPQklEID0gJ2J1aWxkJztcbmNvbnN0IFNFTEZfTVVUQVRJT05fU1RFUCA9ICdzZWxmX211dGF0aW9uJztcbmNvbnN0IFNFTEZfTVVUQVRJT05fSEFQUEVORURfT1VUUFVUID0gJ3NlbGZfbXV0YXRpb25faGFwcGVuZWQnO1xuY29uc3QgSVNfRk9SSyA9ICdnaXRodWIuZXZlbnQucHVsbF9yZXF1ZXN0LmhlYWQucmVwby5mdWxsX25hbWUgIT0gZ2l0aHViLnJlcG9zaXRvcnknO1xuY29uc3QgTk9UX0ZPUksgPSBgISgke0lTX0ZPUkt9KWA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRXb3JrZmxvd09wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBidWlsZFRhc2s6IFRhc2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhcnRpZmFjdHNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNvbnRhaW5lckltYWdlPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbXV0YWJsZUJ1aWxkPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHJlQnVpbGRTdGVwcz86IEpvYlN0ZXBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHBvc3RCdWlsZFN0ZXBzPzogSm9iU3RlcFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZ2l0SWRlbnRpdHk/OiBHaXRJZGVudGl0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZW52PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkV29ya2Zsb3cgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IHBvc3RCdWlsZFN0ZXBzOiBKb2JTdGVwW107XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlQnVpbGRTdGVwczogSm9iU3RlcFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGdpdElkZW50aXR5OiBHaXRJZGVudGl0eTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWlsZFRhc2s6IFRhc2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2l0aHViOiBHaXRIdWI7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3c6IEdpdGh1YldvcmtmbG93O1xuICBwcml2YXRlIHJlYWRvbmx5IGFydGlmYWN0c0RpcmVjdG9yeT86IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wb3N0QnVpbGRKb2JzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEJ1aWxkV29ya2Zsb3dPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBjb25zdCBnaXRodWIgPSBHaXRIdWIub2YocHJvamVjdCk7XG4gICAgaWYgKCFnaXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQnVpbGRXb3JrZmxvdyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgZm9yIEdpdEh1YiBwcm9qZWN0cycpO1xuICAgIH1cblxuICAgIHRoaXMuZ2l0aHViID0gZ2l0aHViO1xuICAgIHRoaXMucHJlQnVpbGRTdGVwcyA9IG9wdGlvbnMucHJlQnVpbGRTdGVwcyA/PyBbXTtcbiAgICB0aGlzLnBvc3RCdWlsZFN0ZXBzID0gb3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXTtcbiAgICB0aGlzLmdpdElkZW50aXR5ID0gb3B0aW9ucy5naXRJZGVudGl0eSA/PyBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVI7XG4gICAgdGhpcy5idWlsZFRhc2sgPSBvcHRpb25zLmJ1aWxkVGFzaztcbiAgICB0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSA9IG9wdGlvbnMuYXJ0aWZhY3RzRGlyZWN0b3J5O1xuICAgIGNvbnN0IG11dGFibGVCdWlsZHMgPSBvcHRpb25zLm11dGFibGVCdWlsZCA/PyB0cnVlO1xuXG4gICAgdGhpcy53b3JrZmxvdyA9IG5ldyBHaXRodWJXb3JrZmxvdyhnaXRodWIsICdidWlsZCcpO1xuICAgIHRoaXMud29ya2Zsb3cub24oe1xuICAgICAgcHVsbFJlcXVlc3Q6IHt9LFxuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sIC8vIGFsbG93IG1hbnVhbCB0cmlnZ2VyaW5nXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEJ1aWxkSm9iKG9wdGlvbnMpO1xuICAgIHRoaXMuYWRkQW50aVRhbXBlckpvYih7IG9ubHlGb3JrczogbXV0YWJsZUJ1aWxkcyB9KTtcbiAgICBpZiAobXV0YWJsZUJ1aWxkcykge1xuICAgICAgdGhpcy5hZGRTZWxmTXV0YXRpb25Kb2IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEJ1aWxkSm9iKG9wdGlvbnM6IEJ1aWxkV29ya2Zsb3dPcHRpb25zKSB7XG4gICAgdGhpcy53b3JrZmxvdy5hZGRKb2IoQlVJTERfSk9CSUQsIHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBjb250YWluZXI6IG9wdGlvbnMuY29udGFpbmVySW1hZ2UgPyB7IGltYWdlOiBvcHRpb25zLmNvbnRhaW5lckltYWdlIH0gOiB1bmRlZmluZWQsXG4gICAgICBlbnY6IHtcbiAgICAgICAgQ0k6ICd0cnVlJyxcbiAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uV1JJVEUsXG4gICAgICB9LFxuICAgICAgc3RlcHM6ICgoKSA9PiB0aGlzLnJlbmRlckJ1aWxkU3RlcHMoKSkgYXMgYW55LFxuICAgICAgb3V0cHV0czoge1xuICAgICAgICBbU0VMRl9NVVRBVElPTl9IQVBQRU5FRF9PVVRQVVRdOiB7XG4gICAgICAgICAgc3RlcElkOiBTRUxGX01VVEFUSU9OX1NURVAsXG4gICAgICAgICAgb3V0cHV0TmFtZTogU0VMRl9NVVRBVElPTl9IQVBQRU5FRF9PVVRQVVQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGdldCBidWlsZEpvYklkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtCVUlMRF9KT0JJRCwgLi4udGhpcy5fcG9zdEJ1aWxkSm9ic107XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkUG9zdEJ1aWxkU3RlcHMoLi4uc3RlcHM6IEpvYlN0ZXBbXSk6IHZvaWQge1xuICAgIHRoaXMucG9zdEJ1aWxkU3RlcHMucHVzaCguLi5zdGVwcyk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRQb3N0QnVpbGRKb2IoaWQ6IHN0cmluZywgam9iOiBKb2IpIHtcbiAgICBjb25zdCBzdGVwcyA9IFtdO1xuXG4gICAgaWYgKHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5KSB7XG4gICAgICBzdGVwcy5wdXNoKHtcbiAgICAgICAgbmFtZTogJ0Rvd25sb2FkIGJ1aWxkIGFydGlmYWN0cycsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QHYyJyxcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIG5hbWU6IEJVSUxEX0FSVElGQUNUX05BTUUsXG4gICAgICAgICAgcGF0aDogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGVwcy5wdXNoKC4uLmpvYi5zdGVwcyk7XG5cbiAgICB0aGlzLndvcmtmbG93LmFkZEpvYihpZCwge1xuICAgICAgbmVlZHM6IFtCVUlMRF9KT0JJRF0sXG4gICAgICAvLyBvbmx5IHJ1biBpZiBidWlsZCBkaWQgbm90IHNlbGYtbXV0YXRlXG4gICAgICBpZjogYFxcJHt7ICEgbmVlZHMuJHtCVUlMRF9KT0JJRH0ub3V0cHV0cy4ke1NFTEZfTVVUQVRJT05fSEFQUEVORURfT1VUUFVUfSB9fWAsXG4gICAgICAuLi5qb2IsXG4gICAgICBzdGVwczogc3RlcHMsXG4gICAgfSk7XG5cbiAgICAvLyBhZGQgdG8gdGhlIGxpc3Qgb2YgYnVpbGQgam9iIElEc1xuICAgIHRoaXMuX3Bvc3RCdWlsZEpvYnMucHVzaChpZCk7XG4gIH1cblxuXG4gIHByaXZhdGUgYWRkU2VsZk11dGF0aW9uSm9iKCkge1xuICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKCdzZWxmLW11dGF0aW9uJywge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgfSxcbiAgICAgIG5lZWRzOiBbQlVJTERfSk9CSURdLFxuICAgICAgaWY6IGBcXCR7eyBuZWVkcy4ke0JVSUxEX0pPQklEfS5vdXRwdXRzLiR7U0VMRl9NVVRBVElPTl9IQVBQRU5FRF9PVVRQVVR9ICYmICR7Tk9UX0ZPUkt9IH19YCxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIC4uLldvcmtmbG93QWN0aW9ucy5jaGVja291dFdpdGhQYXRjaCh7XG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB1c2UgYSBQQVQgc28gdGhhdCBvdXIgcHVzaCB3aWxsIHRyaWdnZXIgdGhlIGJ1aWxkIHdvcmtmbG93XG4gICAgICAgICAgdG9rZW46IGBcXCR7eyBzZWNyZXRzLiR7dGhpcy53b3JrZmxvdy5wcm9qZW5Ub2tlblNlY3JldH0gfX1gLFxuICAgICAgICAgIHJlZjogUFVMTF9SRVFVRVNUX1JFRixcbiAgICAgICAgICByZXBvc2l0b3J5OiBQVUxMX1JFUVVFU1RfUkVQT1NJVE9SWSxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLldvcmtmbG93QWN0aW9ucy5zZXRHaXRJZGVudGl0eSh0aGlzLmdpdElkZW50aXR5KSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdQdXNoIGNoYW5nZXMnLFxuICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgJyAgZ2l0IGFkZCAuJyxcbiAgICAgICAgICAgICcgIGdpdCBjb21taXQgLW0gXCJjaG9yZTogc2VsZiBtdXRhdGlvblwiJyxcbiAgICAgICAgICAgIGAgIGdpdCBwdXNoIG9yaWdpbiBIRUFEOiR7UFVMTF9SRVFVRVNUX1JFRn1gLFxuICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBqb2IgdGhhdCBmYWlscyBpZiB0aGVyZSB3ZXJlIGZpbGUgY2hhbmdlcy5cbiAgICovXG4gIHByaXZhdGUgYWRkQW50aVRhbXBlckpvYihvcHRpb25zOiB7IG9ubHlGb3JrczogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgYW50aXRhbXBlckNvbmRpdGlvbiA9IG9wdGlvbnMub25seUZvcmtzXG4gICAgICA/IGBcXCR7eyBuZWVkcy4ke0JVSUxEX0pPQklEfS5vdXRwdXRzLiR7U0VMRl9NVVRBVElPTl9IQVBQRU5FRF9PVVRQVVR9ICYmICR7SVNfRk9SS30gfX1gXG4gICAgICA6IGBcXCR7eyBuZWVkcy4ke0JVSUxEX0pPQklEfS5vdXRwdXRzLiR7U0VMRl9NVVRBVElPTl9IQVBQRU5FRF9PVVRQVVR9IH19YDtcblxuICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKCdhbnRpLXRhbXBlcicsIHtcbiAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICBpZjogYW50aXRhbXBlckNvbmRpdGlvbixcbiAgICAgIHBlcm1pc3Npb25zOiB7fSxcbiAgICAgIG5lZWRzOiBbQlVJTERfSk9CSURdLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAgLi4uV29ya2Zsb3dBY3Rpb25zLmNoZWNrb3V0V2l0aFBhdGNoKHtcbiAgICAgICAgICByZXBvc2l0b3J5OiBQVUxMX1JFUVVFU1RfUkVQT1NJVE9SWSxcbiAgICAgICAgICByZWY6IFBVTExfUkVRVUVTVF9SRUYsXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ0ZvdW5kIGRpZmYgYWZ0ZXIgYnVpbGQgKHVwZGF0ZSB5b3VyIGJyYW5jaCknLFxuICAgICAgICAgIHJ1bjogJ2dpdCBkaWZmIC0tc3RhZ2VkIC0tZXhpdC1jb2RlJyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIChsYXppbHkpIGR1cmluZyBzeW50aCB0byByZW5kZXIgdGhlIGJ1aWxkIGpvYiBzdGVwcy5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQnVpbGRTdGVwcygpOiBKb2JTdGVwW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgIHVzZXM6ICdhY3Rpb25zL2NoZWNrb3V0QHYyJyxcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIHJlZjogUFVMTF9SRVFVRVNUX1JFRixcbiAgICAgICAgICByZXBvc2l0b3J5OiBQVUxMX1JFUVVFU1RfUkVQT1NJVE9SWSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIC4uLnRoaXMucHJlQnVpbGRTdGVwcyxcblxuICAgICAge1xuICAgICAgICBuYW1lOiB0aGlzLmJ1aWxkVGFzay5uYW1lLFxuICAgICAgICBydW46IHRoaXMuZ2l0aHViLnByb2plY3QucnVuVGFza0NvbW1hbmQodGhpcy5idWlsZFRhc2spLFxuICAgICAgfSxcblxuICAgICAgLi4udGhpcy5wb3N0QnVpbGRTdGVwcyxcblxuICAgICAge1xuICAgICAgICBuYW1lOiAnQ2hlY2sgc2VsZi1tdXRhdGlvbicsXG4gICAgICAgIGlkOiBTRUxGX01VVEFUSU9OX1NURVAsXG4gICAgICAgIHJ1bjogYGdpdCBkaWZmIC0tc3RhZ2VkIC0tZXhpdC1jb2RlIHx8IGVjaG8gXCI6OnNldC1vdXRwdXQgbmFtZT0ke1NFTEZfTVVUQVRJT05fSEFQUEVORURfT1VUUFVUfTo6dHJ1ZVwiYCxcbiAgICAgIH0sXG5cbiAgICAgIC4uLldvcmtmbG93QWN0aW9ucy5jcmVhdGVVcGxvYWRHaXRQYXRjaCh7XG4gICAgICAgIGlmOiBgXFwke3sgc3RlcHMuJHtTRUxGX01VVEFUSU9OX1NURVB9Lm91dHB1dHMuJHtTRUxGX01VVEFUSU9OX0hBUFBFTkVEX09VVFBVVH0gfX1gLFxuICAgICAgfSksXG5cbiAgICAgIC8vIHVwbG9hZCB0aGUgYnVpbGQgYXJ0aWZhY3Qgb25seSBpZiB3ZSBoYXZlIHBvc3QtYnVpbGQgam9icyBhbmQgb25seSBpZlxuICAgICAgLy8gdGhlcmUgd2UgTk8gc2VsZiBtdXRhdGlvbi5cbiAgICAgIC4uLih0aGlzLl9wb3N0QnVpbGRKb2JzLmxlbmd0aCA9PSAwID8gW10gOiBbe1xuICAgICAgICBuYW1lOiAnVXBsb2FkIGFydGlmYWN0JyxcbiAgICAgICAgdXNlczogJ2FjdGlvbnMvdXBsb2FkLWFydGlmYWN0QHYyLjEuMScsXG4gICAgICAgIGlmOiBgXFwke3sgISBzdGVwcy4ke1NFTEZfTVVUQVRJT05fU1RFUH0ub3V0cHV0cy4ke1NFTEZfTVVUQVRJT05fSEFQUEVORURfT1VUUFVUfSB9fWAsXG4gICAgICAgIHdpdGg6IHtcbiAgICAgICAgICBuYW1lOiBCVUlMRF9BUlRJRkFDVF9OQU1FLFxuICAgICAgICAgIHBhdGg6IHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5LFxuICAgICAgICB9LFxuICAgICAgfV0pLFxuICAgIF07XG4gIH1cbn1cbiJdfQ==
@@ -26,5 +26,5 @@ class ConstructLibrary extends jsii_project_1.JsiiProject {
26
26
  }
27
27
  exports.ConstructLibrary = ConstructLibrary;
28
28
  _a = JSII_RTTI_SYMBOL_1;
29
- ConstructLibrary[_a] = { fqn: "projen.cdk.ConstructLibrary", version: "0.46.9" };
29
+ ConstructLibrary[_a] = { fqn: "projen.cdk.ConstructLibrary", version: "0.47.3" };
30
30
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0LWxpYi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGsvY29uc3RydWN0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlEQUFpRTs7Ozs7O0FBZ0JqRSxNQUFzQixnQkFBaUIsU0FBUSwwQkFBVzs7OztJQUN4RCxZQUFZLE9BQWdDO1FBQzFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7UUFDbEQsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtnQkFDaEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTztnQkFDaEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUTthQUNuQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7O0FBWEgsNENBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKc2lpUHJvamVjdCwgSnNpaVByb2plY3RPcHRpb25zIH0gZnJvbSAnLi9qc2lpLXByb2plY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbnN0cnVjdExpYnJhcnlPcHRpb25zIGV4dGVuZHMgSnNpaVByb2plY3RPcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNhdGFsb2c/OiBDYXRhbG9nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhdGFsb2cge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB0d2l0dGVyPzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhbm5vdW5jZT86IGJvb2xlYW47XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb25zdHJ1Y3RMaWJyYXJ5IGV4dGVuZHMgSnNpaVByb2plY3Qge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5hZGRLZXl3b3JkcygnY2RrJyk7IC8vIHB1Ymxpc2ggdG8gdGhlIGNhdGFsb2dcbiAgICBpZiAob3B0aW9ucy5jYXRhbG9nKSB7XG4gICAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ2F3c2Nka2lvJywge1xuICAgICAgICB0d2l0dGVyOiBvcHRpb25zLmNhdGFsb2cudHdpdHRlcixcbiAgICAgICAgYW5ub3VuY2U6IG9wdGlvbnMuY2F0YWxvZy5hbm5vdW5jZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -4,11 +4,3 @@ export declare type JsiiPacmakTarget = 'js' | 'go' | 'java' | 'python' | 'dotnet
4
4
  * GitHub workflow job steps for setting up the tools required for various JSII targets.
5
5
  */
6
6
  export declare const JSII_TOOLCHAIN: Record<JsiiPacmakTarget, Tools>;
7
- /**
8
- * Determines the jsii/superchain image to use based on the minimum node
9
- * version.
10
- *
11
- * @param minNodeVersion The minimum node version of the project. If not
12
- * specified, v14.17.4 is used.
13
- */
14
- export declare function determineSuperchainImage(minNodeVersion?: string): string;
package/lib/cdk/consts.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.determineSuperchainImage = exports.JSII_TOOLCHAIN = void 0;
4
- const semver = require("semver");
3
+ exports.JSII_TOOLCHAIN = void 0;
5
4
  /**
6
5
  * GitHub workflow job steps for setting up the tools required for various JSII targets.
7
6
  */
@@ -12,26 +11,4 @@ exports.JSII_TOOLCHAIN = {
12
11
  go: { go: { version: '^1.16.0' } },
13
12
  dotnet: { dotnet: { version: '3.x' } },
14
13
  };
15
- const SUPERCHAIN_IMAGE = 'jsii/superchain:1-buster-slim';
16
- const SUPERCHAIN_NODE_VERSIONS = [12, 14, 16]; // supported jsii/superchain image tags: `1-buster-slim-nodeNN`
17
- /**
18
- * Determines the jsii/superchain image to use based on the minimum node
19
- * version.
20
- *
21
- * @param minNodeVersion The minimum node version of the project. If not
22
- * specified, v14.17.4 is used.
23
- */
24
- function determineSuperchainImage(minNodeVersion) {
25
- // the default image (`jsii/superchain:1-buster-slim`) will include the
26
- // minimum supported node version of JSII (as of this writing it is 12.x).
27
- if (!minNodeVersion) {
28
- return SUPERCHAIN_IMAGE;
29
- }
30
- const major = semver.major(minNodeVersion);
31
- if (!SUPERCHAIN_NODE_VERSIONS.includes(major)) {
32
- throw new Error(`No jsii/superchain image available for node ${major}.x. Supported node versions: ${SUPERCHAIN_NODE_VERSIONS.map(m => `${m}.x`).join(',')}`);
33
- }
34
- return `${SUPERCHAIN_IMAGE}-node${major}`;
35
- }
36
- exports.determineSuperchainImage = determineSuperchainImage;
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUNBQWlDO0FBS2pDOztHQUVHO0FBQ1UsUUFBQSxjQUFjLEdBQW9DO0lBQzdELEVBQUUsRUFBRSxFQUFFO0lBQ04sSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO0lBQ25DLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUN0QyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUU7SUFDbEMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO0NBQ3ZDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLCtCQUErQixDQUFDO0FBQ3pELE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsK0RBQStEO0FBRTlHOzs7Ozs7R0FNRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLGNBQXVCO0lBQzlELHVFQUF1RTtJQUN2RSwwRUFBMEU7SUFDMUUsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNuQixPQUFPLGdCQUFnQixDQUFDO0tBQ3pCO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQzdDLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLEtBQUssZ0NBQWdDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQzlKO0lBRUQsT0FBTyxHQUFHLGdCQUFnQixRQUFRLEtBQUssRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFkRCw0REFjQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgVG9vbHMgfSBmcm9tICcuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcblxuZXhwb3J0IHR5cGUgSnNpaVBhY21ha1RhcmdldCA9ICdqcycgfCAnZ28nIHwgJ2phdmEnIHwgJ3B5dGhvbicgfCAnZG90bmV0JztcblxuLyoqXG4gKiBHaXRIdWIgd29ya2Zsb3cgam9iIHN0ZXBzIGZvciBzZXR0aW5nIHVwIHRoZSB0b29scyByZXF1aXJlZCBmb3IgdmFyaW91cyBKU0lJIHRhcmdldHMuXG4gKi9cbmV4cG9ydCBjb25zdCBKU0lJX1RPT0xDSEFJTjogUmVjb3JkPEpzaWlQYWNtYWtUYXJnZXQsIFRvb2xzPiA9IHtcbiAganM6IHt9LFxuICBqYXZhOiB7IGphdmE6IHsgdmVyc2lvbjogJzExLngnIH0gfSxcbiAgcHl0aG9uOiB7IHB5dGhvbjogeyB2ZXJzaW9uOiAnMy54JyB9IH0sXG4gIGdvOiB7IGdvOiB7IHZlcnNpb246ICdeMS4xNi4wJyB9IH0sXG4gIGRvdG5ldDogeyBkb3RuZXQ6IHsgdmVyc2lvbjogJzMueCcgfSB9LFxufTtcblxuY29uc3QgU1VQRVJDSEFJTl9JTUFHRSA9ICdqc2lpL3N1cGVyY2hhaW46MS1idXN0ZXItc2xpbSc7XG5jb25zdCBTVVBFUkNIQUlOX05PREVfVkVSU0lPTlMgPSBbMTIsIDE0LCAxNl07IC8vIHN1cHBvcnRlZCBqc2lpL3N1cGVyY2hhaW4gaW1hZ2UgdGFnczogYDEtYnVzdGVyLXNsaW0tbm9kZU5OYFxuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGpzaWkvc3VwZXJjaGFpbiBpbWFnZSB0byB1c2UgYmFzZWQgb24gdGhlIG1pbmltdW0gbm9kZVxuICogdmVyc2lvbi5cbiAqXG4gKiBAcGFyYW0gbWluTm9kZVZlcnNpb24gVGhlIG1pbmltdW0gbm9kZSB2ZXJzaW9uIG9mIHRoZSBwcm9qZWN0LiBJZiBub3RcbiAqIHNwZWNpZmllZCwgdjE0LjE3LjQgaXMgdXNlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVybWluZVN1cGVyY2hhaW5JbWFnZShtaW5Ob2RlVmVyc2lvbj86IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIHRoZSBkZWZhdWx0IGltYWdlIChganNpaS9zdXBlcmNoYWluOjEtYnVzdGVyLXNsaW1gKSB3aWxsIGluY2x1ZGUgdGhlXG4gIC8vIG1pbmltdW0gc3VwcG9ydGVkIG5vZGUgdmVyc2lvbiBvZiBKU0lJIChhcyBvZiB0aGlzIHdyaXRpbmcgaXQgaXMgMTIueCkuXG4gIGlmICghbWluTm9kZVZlcnNpb24pIHtcbiAgICByZXR1cm4gU1VQRVJDSEFJTl9JTUFHRTtcbiAgfVxuXG4gIGNvbnN0IG1ham9yID0gc2VtdmVyLm1ham9yKG1pbk5vZGVWZXJzaW9uKTtcblxuICBpZiAoIVNVUEVSQ0hBSU5fTk9ERV9WRVJTSU9OUy5pbmNsdWRlcyhtYWpvcikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGpzaWkvc3VwZXJjaGFpbiBpbWFnZSBhdmFpbGFibGUgZm9yIG5vZGUgJHttYWpvcn0ueC4gU3VwcG9ydGVkIG5vZGUgdmVyc2lvbnM6ICR7U1VQRVJDSEFJTl9OT0RFX1ZFUlNJT05TLm1hcChtID0+IGAke219LnhgKS5qb2luKCcsJyl9YCk7XG4gIH1cblxuICByZXR1cm4gYCR7U1VQRVJDSEFJTl9JTUFHRX0tbm9kZSR7bWFqb3J9YDtcbn0iXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Nkay9jb25zdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUE7O0dBRUc7QUFDVSxRQUFBLGNBQWMsR0FBb0M7SUFDN0QsRUFBRSxFQUFFLEVBQUU7SUFDTixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDbkMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3RDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRTtJQUNsQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUU7Q0FDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRvb2xzIH0gZnJvbSAnLi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbmV4cG9ydCB0eXBlIEpzaWlQYWNtYWtUYXJnZXQgPSAnanMnIHwgJ2dvJyB8ICdqYXZhJyB8ICdweXRob24nIHwgJ2RvdG5ldCc7XG5cbi8qKlxuICogR2l0SHViIHdvcmtmbG93IGpvYiBzdGVwcyBmb3Igc2V0dGluZyB1cCB0aGUgdG9vbHMgcmVxdWlyZWQgZm9yIHZhcmlvdXMgSlNJSSB0YXJnZXRzLlxuICovXG5leHBvcnQgY29uc3QgSlNJSV9UT09MQ0hBSU46IFJlY29yZDxKc2lpUGFjbWFrVGFyZ2V0LCBUb29scz4gPSB7XG4gIGpzOiB7fSxcbiAgamF2YTogeyBqYXZhOiB7IHZlcnNpb246ICcxMS54JyB9IH0sXG4gIHB5dGhvbjogeyBweXRob246IHsgdmVyc2lvbjogJzMueCcgfSB9LFxuICBnbzogeyBnbzogeyB2ZXJzaW9uOiAnXjEuMTYuMCcgfSB9LFxuICBkb3RuZXQ6IHsgZG90bmV0OiB7IHZlcnNpb246ICczLngnIH0gfSxcbn07XG4iXX0=
@@ -25,5 +25,5 @@ class JsiiDocgen {
25
25
  }
26
26
  exports.JsiiDocgen = JsiiDocgen;
27
27
  _a = JSII_RTTI_SYMBOL_1;
28
- JsiiDocgen[_a] = { fqn: "projen.cdk.JsiiDocgen", version: "0.46.9" };
28
+ JsiiDocgen[_a] = { fqn: "projen.cdk.JsiiDocgen", version: "0.47.3" };
29
29
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNpaS1kb2NnZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2RrL2pzaWktZG9jZ2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFHQSxNQUFhLFVBQVU7Ozs7SUFDckIsWUFBWSxPQUFvQjtRQUM5QixPQUFPLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRWxDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3ZDLFdBQVcsRUFBRSxxQ0FBcUM7WUFDbEQsSUFBSSxFQUFFLGFBQWE7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsZ0VBQWdFO1FBQ2hFLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7O0FBWkgsZ0NBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBKc2lpUHJvamVjdCB9IGZyb20gJy4vanNpaS1wcm9qZWN0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIEpzaWlEb2NnZW4ge1xuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBKc2lpUHJvamVjdCkge1xuICAgIHByb2plY3QuYWRkRGV2RGVwcygnanNpaS1kb2NnZW4nKTtcblxuICAgIGNvbnN0IGRvY2dlbiA9IHByb2plY3QuYWRkVGFzaygnZG9jZ2VuJywge1xuICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBBUEkubWQgZnJvbSAuanNpaSBtYW5pZmVzdCcsXG4gICAgICBleGVjOiAnanNpaS1kb2NnZW4nLFxuICAgIH0pO1xuXG4gICAgLy8gc3Bhd24gZG9jZ2VuIGFmdGVyIGNvbXBpbGF0aW9uIChyZXF1aXJlcyB0aGUgLmpzaWkgbWFuaWZlc3QpLlxuICAgIHByb2plY3QucG9zdENvbXBpbGVUYXNrLnNwYXduKGRvY2dlbik7XG4gICAgcHJvamVjdC5naXRpZ25vcmUuaW5jbHVkZSgnL0FQSS5tZCcpO1xuICB9XG59Il19
@@ -189,11 +189,6 @@ export declare class JsiiProject extends TypeScriptProject {
189
189
  * @experimental
190
190
  */
191
191
  constructor(options: JsiiProjectOptions);
192
- /**
193
- * Returns the jsii/superchain image that is compatible with the minimum node
194
- * version of this project.
195
- */
196
- private get superchainImage();
197
192
  /**
198
193
  * Adds a target language to the build workflow and creates a package task.
199
194
  * @param language