projen 0.49.1 → 0.50.2

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 (122) hide show
  1. package/.jsii +5174 -357
  2. package/API.md +1052 -61
  3. package/changelog.md +6 -1
  4. package/docs/gitlab.md +67 -0
  5. package/lib/awscdk/auto-discover.js +1 -1
  6. package/lib/awscdk/awscdk-app-java.js +1 -1
  7. package/lib/awscdk/awscdk-app-ts.js +1 -1
  8. package/lib/awscdk/awscdk-construct.js +2 -2
  9. package/lib/awscdk/awscdk-deps-java.js +1 -1
  10. package/lib/awscdk/awscdk-deps-js.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +1 -1
  13. package/lib/awscdk/cdk-tasks.js +1 -1
  14. package/lib/awscdk/integration-test.js +1 -1
  15. package/lib/awscdk/lambda-function.js +2 -2
  16. package/lib/build/build-workflow.d.ts +69 -2
  17. package/lib/build/build-workflow.js +62 -2
  18. package/lib/cdk/construct-lib.js +1 -1
  19. package/lib/cdk/jsii-docgen.js +1 -1
  20. package/lib/cdk/jsii-project.js +1 -1
  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/component.js +1 -1
  25. package/lib/dependencies.js +1 -1
  26. package/lib/dev-env.js +1 -1
  27. package/lib/docker-compose.js +2 -2
  28. package/lib/file.js +1 -1
  29. package/lib/gitattributes.js +1 -1
  30. package/lib/github/auto-approve.js +1 -1
  31. package/lib/github/auto-merge.js +1 -1
  32. package/lib/github/dependabot.js +1 -1
  33. package/lib/github/github-project.js +1 -1
  34. package/lib/github/github.js +1 -1
  35. package/lib/github/mergify.js +1 -1
  36. package/lib/github/pr-template.js +1 -1
  37. package/lib/github/pull-request-lint.js +1 -1
  38. package/lib/github/stale.js +1 -1
  39. package/lib/github/task-workflow.js +1 -1
  40. package/lib/github/workflows.js +1 -1
  41. package/lib/gitlab/configuration-model.d.ts +1308 -0
  42. package/lib/gitlab/configuration-model.js +122 -0
  43. package/lib/gitlab/configuration.d.ts +260 -0
  44. package/lib/gitlab/configuration.js +296 -0
  45. package/lib/gitlab/gitlab-configuration.d.ts +30 -0
  46. package/lib/gitlab/gitlab-configuration.js +49 -0
  47. package/lib/gitlab/index.d.ts +4 -0
  48. package/lib/gitlab/index.js +17 -0
  49. package/lib/gitlab/nested-configuration.d.ts +26 -0
  50. package/lib/gitlab/nested-configuration.js +38 -0
  51. package/lib/gitpod.js +1 -1
  52. package/lib/ignore-file.js +1 -1
  53. package/lib/index.d.ts +1 -0
  54. package/lib/index.js +2 -1
  55. package/lib/ini.js +1 -1
  56. package/lib/java/java-project.js +1 -1
  57. package/lib/java/junit.js +1 -1
  58. package/lib/java/maven-compile.js +1 -1
  59. package/lib/java/maven-packaging.js +1 -1
  60. package/lib/java/maven-sample.js +1 -1
  61. package/lib/java/pom.js +1 -1
  62. package/lib/java/projenrc.js +1 -1
  63. package/lib/javascript/bundler.js +1 -1
  64. package/lib/javascript/eslint.js +1 -1
  65. package/lib/javascript/jest.d.ts +0 -8
  66. package/lib/javascript/jest.js +2 -25
  67. package/lib/javascript/node-package.js +1 -1
  68. package/lib/javascript/node-project.js +1 -1
  69. package/lib/javascript/npm-config.js +1 -1
  70. package/lib/javascript/prettier.js +1 -1
  71. package/lib/javascript/projenrc.js +1 -1
  72. package/lib/javascript/typescript-config.js +1 -1
  73. package/lib/javascript/upgrade-dependencies.js +2 -2
  74. package/lib/json.js +1 -1
  75. package/lib/license.js +1 -1
  76. package/lib/logger.js +1 -1
  77. package/lib/makefile.js +1 -1
  78. package/lib/object-file.js +1 -1
  79. package/lib/project-build.js +1 -1
  80. package/lib/project.js +1 -1
  81. package/lib/projects.js +1 -1
  82. package/lib/projenrc-json.js +1 -1
  83. package/lib/python/pip.js +1 -1
  84. package/lib/python/poetry.js +2 -2
  85. package/lib/python/projenrc.js +1 -1
  86. package/lib/python/pytest.js +1 -1
  87. package/lib/python/python-project.js +1 -1
  88. package/lib/python/python-sample.js +1 -1
  89. package/lib/python/requirements-file.js +1 -1
  90. package/lib/python/setuppy.js +1 -1
  91. package/lib/python/setuptools.js +1 -1
  92. package/lib/python/venv.js +1 -1
  93. package/lib/readme.js +1 -1
  94. package/lib/release/publisher.js +1 -1
  95. package/lib/release/release-trigger.js +1 -1
  96. package/lib/release/release.js +1 -1
  97. package/lib/sample-file.js +2 -2
  98. package/lib/semver.js +1 -1
  99. package/lib/source-code.js +1 -1
  100. package/lib/task-runtime.js +1 -1
  101. package/lib/task.js +1 -1
  102. package/lib/tasks.js +1 -1
  103. package/lib/testing.js +1 -1
  104. package/lib/textfile.js +1 -1
  105. package/lib/toml.js +1 -1
  106. package/lib/typescript/projenrc.js +1 -1
  107. package/lib/typescript/typescript-typedoc.js +1 -1
  108. package/lib/typescript/typescript.d.ts +6 -0
  109. package/lib/typescript/typescript.js +62 -46
  110. package/lib/version.js +1 -1
  111. package/lib/vscode/devcontainer.js +1 -1
  112. package/lib/vscode/launch-config.js +1 -1
  113. package/lib/vscode/vscode.js +1 -1
  114. package/lib/web/next.js +3 -3
  115. package/lib/web/postcss.js +1 -1
  116. package/lib/web/react.js +4 -4
  117. package/lib/web/tailwind.js +1 -1
  118. package/lib/xmlfile.js +1 -1
  119. package/lib/yaml.js +1 -1
  120. package/package.json +5 -5
  121. package/releasetag.txt +1 -1
  122. package/version.txt +1 -1
@@ -0,0 +1,296 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.CiConfiguration = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const path = require("path");
7
+ const case_1 = require("case");
8
+ const component_1 = require("../component");
9
+ const yaml_1 = require("../yaml");
10
+ /**
11
+ * (experimental) CI for GitLab.
12
+ *
13
+ * A CI is a configurable automated process made up of one or more stages/jobs.
14
+ *
15
+ * @see https://docs.gitlab.com/ee/ci/yaml/
16
+ * @experimental
17
+ */
18
+ class CiConfiguration extends component_1.Component {
19
+ /**
20
+ * @experimental
21
+ */
22
+ constructor(project, name, options) {
23
+ var _b;
24
+ super(project);
25
+ /**
26
+ * (experimental) Defines default scripts that should run *after* all jobs.
27
+ *
28
+ * Can be overriden by the job level `afterScript`.
29
+ *
30
+ * @experimental
31
+ */
32
+ this.defaultAfterScript = [];
33
+ /**
34
+ * (experimental) Defines default scripts that should run *before* all jobs.
35
+ *
36
+ * Can be overriden by the job level `afterScript`.
37
+ *
38
+ * @experimental
39
+ */
40
+ this.defaultBeforeScript = [];
41
+ /**
42
+ * A default list of additional Docker images to run scripts in. The service image is linked to the image specified in the image parameter.
43
+ */
44
+ this.defaultServices = [];
45
+ /**
46
+ * (experimental) Used to select a specific runner from the list of all runners that are available for the project.
47
+ *
48
+ * @experimental
49
+ */
50
+ this.defaultTags = [];
51
+ /**
52
+ * Can be `Include` or `Include[]`. Each `Include` will be a string, or an
53
+ * object with properties for the method if including external YAML file. The external
54
+ * content will be fetched, included and evaluated along the `.gitlab-ci.yml`.
55
+ */
56
+ this.include = [];
57
+ /**
58
+ * (experimental) Groups jobs into stages.
59
+ *
60
+ * All jobs in one stage must complete before next stage is
61
+ * executed. Defaults to ['build', 'test', 'deploy'].
62
+ *
63
+ * @experimental
64
+ */
65
+ this.stages = [];
66
+ /**
67
+ * (experimental) Global variables that are passed to jobs.
68
+ *
69
+ * If the job already has that variable defined, the job-level variable takes precedence.
70
+ *
71
+ * @experimental
72
+ */
73
+ this.variables = {};
74
+ /**
75
+ * (experimental) The jobs in the CI configuration.
76
+ *
77
+ * @experimental
78
+ */
79
+ this.jobs = {};
80
+ this.project = project;
81
+ this.name = path.parse(name).name;
82
+ this.path =
83
+ this.name === "gitlab-ci"
84
+ ? ".gitlab-ci.yml"
85
+ : `.gitlab/ci-templates/${name.toLocaleLowerCase()}.yml`;
86
+ this.file = new yaml_1.YamlFile(this.project, this.path, {
87
+ obj: () => this.renderCI(),
88
+ });
89
+ const defaults = options === null || options === void 0 ? void 0 : options.default;
90
+ if (defaults) {
91
+ this.defaultAfterScript.push(...((_b = defaults.afterScript) !== null && _b !== void 0 ? _b : []));
92
+ this.defaultArtifacts = defaults.artifacts;
93
+ defaults.beforeScript &&
94
+ this.defaultBeforeScript.push(...defaults.beforeScript);
95
+ this.defaultCache = defaults.cache;
96
+ this.defaultImage = defaults.image;
97
+ this.defaultInterruptible = defaults.interruptible;
98
+ this.defaultRetry = defaults.retry;
99
+ defaults.services && this.addServices(...defaults.services);
100
+ defaults.tags && this.defaultTags.push(...defaults.tags);
101
+ this.defaultTimeout = defaults.timeout;
102
+ }
103
+ this.pages = options === null || options === void 0 ? void 0 : options.pages;
104
+ this.workflow = options === null || options === void 0 ? void 0 : options.workflow;
105
+ if (options === null || options === void 0 ? void 0 : options.stages) {
106
+ this.addStages(...options.stages);
107
+ }
108
+ if (options === null || options === void 0 ? void 0 : options.variables) {
109
+ this.addJobs(options.variables);
110
+ }
111
+ if (options === null || options === void 0 ? void 0 : options.jobs) {
112
+ this.addJobs(options.jobs);
113
+ }
114
+ }
115
+ /**
116
+ * (experimental) Add additional yml/yaml files to the CI includes.
117
+ *
118
+ * @param includes The includes to add.
119
+ * @experimental
120
+ */
121
+ addIncludes(...includes) {
122
+ for (const additional of includes) {
123
+ this.assertIsValidInclude(additional);
124
+ for (const existing of this.include) {
125
+ if (this.areEqualIncludes(existing, additional)) {
126
+ throw new Error(`${this.name}: GitLab CI ${existing} already contains one or more templates specified in ${additional}.`);
127
+ }
128
+ }
129
+ this.include.push(additional);
130
+ }
131
+ }
132
+ /**
133
+ * Throw an error if the provided Include is invalid.
134
+ * @see https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/config/external/mapper.rb
135
+ * @param include the Include to validate.
136
+ */
137
+ assertIsValidInclude(include) {
138
+ const combos = [
139
+ include.local,
140
+ include.file && include.project,
141
+ include.remote,
142
+ include.template,
143
+ ];
144
+ const len = combos.filter((x) => Boolean(x)).length;
145
+ if (len !== 1) {
146
+ throw new Error(`${this.name}: GitLab CI include ${include} contains ${len} property combination(s).
147
+ A valid include configuration specifies *one* of the following property combinations.
148
+ * local
149
+ * file, project
150
+ * remote
151
+ * template
152
+ `);
153
+ }
154
+ }
155
+ /**
156
+ * Check if the equality of Includes.
157
+ * @see https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/config/external/mapper.rb
158
+ * @param x First include to compare.
159
+ * @param y Second include to compare.
160
+ * @returns Whether the includes are equal.
161
+ */
162
+ areEqualIncludes(x, y) {
163
+ if (x.local === y.local && x.local !== undefined) {
164
+ return true;
165
+ }
166
+ else if (x.template === y.template && x.template !== undefined) {
167
+ return true;
168
+ }
169
+ else if (x.remote === y.remote && x.remote !== undefined) {
170
+ return true;
171
+ }
172
+ else if (x.project === y.project && x.ref === y.ref) {
173
+ const xFiles = x.file ? x.file : [];
174
+ const yFiles = y.file ? y.file : [];
175
+ const allFiles = xFiles.concat(yFiles);
176
+ return new Set(allFiles).size !== allFiles.length;
177
+ }
178
+ return false;
179
+ }
180
+ /**
181
+ * (experimental) Add additional services.
182
+ *
183
+ * @param services The services to add.
184
+ * @experimental
185
+ */
186
+ addServices(...services) {
187
+ for (const additional of services) {
188
+ for (const existing of this.defaultServices) {
189
+ if (additional.name === existing.name &&
190
+ additional.alias === existing.alias) {
191
+ throw new Error(`${this.name}: GitLab CI already contains service ${additional}.`);
192
+ }
193
+ }
194
+ this.defaultServices.push(additional);
195
+ }
196
+ }
197
+ /**
198
+ * (experimental) Add a globally defined variable to the CI configuration.
199
+ *
200
+ * @param variables The variables to add.
201
+ * @experimental
202
+ */
203
+ addGlobalVariables(variables) {
204
+ for (const [key, value] of Object.entries(variables)) {
205
+ if (this.variables[key] !== undefined) {
206
+ throw new Error(`${this.name}: GitLab CI already contains variable ${key}.`);
207
+ }
208
+ this.variables[key] = value;
209
+ }
210
+ }
211
+ /**
212
+ * (experimental) Add stages to the CI configuration if not already present.
213
+ *
214
+ * @param stages stages to add.
215
+ * @experimental
216
+ */
217
+ addStages(...stages) {
218
+ for (const stage of stages) {
219
+ if (!this.stages.includes(stage)) {
220
+ this.stages.push(stage);
221
+ }
222
+ }
223
+ }
224
+ /**
225
+ * (experimental) Add jobs and their stages to the CI configuration.
226
+ *
227
+ * @param jobs Jobs to add.
228
+ * @experimental
229
+ */
230
+ addJobs(jobs) {
231
+ for (const [key, value] of Object.entries(jobs)) {
232
+ if (this.jobs[key] !== undefined) {
233
+ throw new Error(`${this.name}: GitLab CI already contains job ${key}.`);
234
+ }
235
+ this.jobs[key] = value;
236
+ if (value.stage) {
237
+ this.addStages(value.stage);
238
+ }
239
+ }
240
+ }
241
+ renderCI() {
242
+ return {
243
+ default: this.renderDefault(),
244
+ include: this.include.length > 0 ? snakeCaseKeys(this.include) : undefined,
245
+ pages: snakeCaseKeys(this.pages),
246
+ services: this.defaultServices.length > 0
247
+ ? snakeCaseKeys(this.defaultServices)
248
+ : undefined,
249
+ variables: Object.entries(this.variables).length > 0 ? this.variables : undefined,
250
+ workflow: snakeCaseKeys(this.workflow),
251
+ stages: this.stages.length > 0 ? this.stages : undefined,
252
+ ...snakeCaseKeys(this.jobs),
253
+ };
254
+ }
255
+ renderDefault() {
256
+ const defaults = {
257
+ afterScript: this.defaultAfterScript.length > 0
258
+ ? this.defaultAfterScript
259
+ : undefined,
260
+ artifacts: this.defaultArtifacts,
261
+ beforeScript: this.defaultBeforeScript.length > 0
262
+ ? this.defaultBeforeScript
263
+ : undefined,
264
+ cache: this.defaultCache,
265
+ image: this.defaultImage,
266
+ interruptible: this.defaultInterruptible,
267
+ retry: this.defaultRetry,
268
+ services: this.defaultServices.length > 0 ? this.defaultServices : undefined,
269
+ tags: this.defaultTags.length > 0 ? this.defaultTags : undefined,
270
+ timeout: this.defaultTimeout,
271
+ };
272
+ return Object.values(defaults).filter((x) => x).length
273
+ ? snakeCaseKeys(defaults)
274
+ : undefined;
275
+ }
276
+ }
277
+ exports.CiConfiguration = CiConfiguration;
278
+ _a = JSII_RTTI_SYMBOL_1;
279
+ CiConfiguration[_a] = { fqn: "projen.gitlab.CiConfiguration", version: "0.50.2" };
280
+ function snakeCaseKeys(obj) {
281
+ if (typeof obj !== "object" || obj == null) {
282
+ return obj;
283
+ }
284
+ if (Array.isArray(obj)) {
285
+ return obj.map(snakeCaseKeys);
286
+ }
287
+ const result = {};
288
+ for (let [k, v] of Object.entries(obj)) {
289
+ if (typeof v === "object" && v != null) {
290
+ v = snakeCaseKeys(v);
291
+ }
292
+ result[case_1.snake(k)] = v;
293
+ }
294
+ return result;
295
+ }
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9naXRsYWIvY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QiwrQkFBNkI7QUFDN0IsNENBQXlDO0FBRXpDLGtDQUFtQzs7Ozs7Ozs7O0FBK0JuQyxNQUFhLGVBQWdCLFNBQVEscUJBQVM7Ozs7SUFpRDVDLFlBQ0UsT0FBZ0IsRUFDaEIsSUFBWSxFQUNaLE9BQWdDOztRQUVoQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7Ozs7O1FBNUNELHVCQUFrQixHQUFhLEVBQUUsQ0FBQzs7Ozs7Ozs7UUFJbEMsd0JBQW1CLEdBQWEsRUFBRSxDQUFDO1FBU25EOztXQUVHO1FBQ0ssb0JBQWUsR0FBYyxFQUFFLENBQUM7Ozs7OztRQUUvQixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUdwQzs7OztXQUlHO1FBQ0ssWUFBTyxHQUFjLEVBQUUsQ0FBQzs7Ozs7Ozs7O1FBSWhCLFdBQU0sR0FBYSxFQUFFLENBQUM7Ozs7Ozs7O1FBRXRCLGNBQVMsR0FDdkIsRUFBRSxDQUFDOzs7Ozs7UUFJVyxTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQVE3QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJO1lBQ1AsSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXO2dCQUN2QixDQUFDLENBQUMsZ0JBQWdCO2dCQUNsQixDQUFDLENBQUMsd0JBQXdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFDN0QsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLGVBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDaEQsR0FB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QyxjQUFjO1NBQzdCLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO1lBQ3BELENBQUMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEIsQ0FBQzs7QUF2UEgsMENBd1BDOzs7QUFFRCxTQUFTLGFBQWEsQ0FBYyxHQUFNO0lBQ3hDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUVELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QixPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFRLENBQUM7S0FDdEM7SUFFRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO0lBQzNDLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDdEMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0QjtRQUNELE1BQU0sQ0FBQyxZQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDdEI7SUFDRCxPQUFPLE1BQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc25ha2UgfSBmcm9tIFwiY2FzZVwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBZYW1sRmlsZSB9IGZyb20gXCIuLi95YW1sXCI7XG5pbXBvcnQge1xuICBBcnRpZmFjdHMsXG4gIENhY2hlLFxuICBEZWZhdWx0LFxuICBJbWFnZSxcbiAgSW5jbHVkZSxcbiAgSm9iLFxuICBSZXRyeSxcbiAgU2VydmljZSxcbiAgVmFyaWFibGVDb25maWcsXG4gIFdvcmtmbG93LFxufSBmcm9tIFwiLi9jb25maWd1cmF0aW9uLW1vZGVsXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgaW50ZXJmYWNlIENpQ29uZmlndXJhdGlvbk9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVmYXVsdD86IERlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwYWdlcz86IEpvYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB3b3JrZmxvdz86IFdvcmtmbG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgc3RhZ2VzPzogc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGpvYnM/OiBSZWNvcmQ8c3RyaW5nLCBKb2I+O1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIENpQ29uZmlndXJhdGlvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZWN0OiBQcm9qZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IFlhbWxGaWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0QWZ0ZXJTY3JpcHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgZGVmYXVsdEFydGlmYWN0cz86IEFydGlmYWN0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRCZWZvcmVTY3JpcHQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRDYWNoZT86IENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0SW1hZ2U/OiBJbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBkZWZhdWx0SW50ZXJydXB0aWJsZT86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGRlZmF1bHRSZXRyeT86IFJldHJ5O1xuICAvKipcbiAgICogQSBkZWZhdWx0IGxpc3Qgb2YgYWRkaXRpb25hbCBEb2NrZXIgaW1hZ2VzIHRvIHJ1biBzY3JpcHRzIGluLiBUaGUgc2VydmljZSBpbWFnZSBpcyBsaW5rZWQgdG8gdGhlIGltYWdlIHNwZWNpZmllZCBpbiB0aGUgIGltYWdlIHBhcmFtZXRlci5cbiAgICovXG4gIHByaXZhdGUgZGVmYXVsdFNlcnZpY2VzOiBTZXJ2aWNlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZWZhdWx0VGFnczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBkZWZhdWx0VGltZW91dD86IHN0cmluZztcbiAgLyoqXG4gICAqIENhbiBiZSBgSW5jbHVkZWAgb3IgYEluY2x1ZGVbXWAuIEVhY2ggYEluY2x1ZGVgIHdpbGwgYmUgYSBzdHJpbmcsIG9yIGFuXG4gICAqIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgZm9yIHRoZSBtZXRob2QgaWYgaW5jbHVkaW5nIGV4dGVybmFsIFlBTUwgZmlsZS4gVGhlIGV4dGVybmFsXG4gICAqIGNvbnRlbnQgd2lsbCBiZSBmZXRjaGVkLCBpbmNsdWRlZCBhbmQgZXZhbHVhdGVkIGFsb25nIHRoZSBgLmdpdGxhYi1jaS55bWxgLlxuICAgKi9cbiAgcHJpdmF0ZSBpbmNsdWRlOiBJbmNsdWRlW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBwYWdlcz86IEpvYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IHN0YWdlczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBWYXJpYWJsZUNvbmZpZyB8IHN0cmluZz4gPVxuICAgIHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvdz86IFdvcmtmbG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGpvYnM6IFJlY29yZDxzdHJpbmcsIEpvYj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm9qZWN0OiBQcm9qZWN0LFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQ2lDb25maWd1cmF0aW9uT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcbiAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgIHRoaXMubmFtZSA9IHBhdGgucGFyc2UobmFtZSkubmFtZTtcbiAgICB0aGlzLnBhdGggPVxuICAgICAgdGhpcy5uYW1lID09PSBcImdpdGxhYi1jaVwiXG4gICAgICAgID8gXCIuZ2l0bGFiLWNpLnltbFwiXG4gICAgICAgIDogYC5naXRsYWIvY2ktdGVtcGxhdGVzLyR7bmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpfS55bWxgO1xuICAgIHRoaXMuZmlsZSA9IG5ldyBZYW1sRmlsZSh0aGlzLnByb2plY3QsIHRoaXMucGF0aCwge1xuICAgICAgb2JqOiAoKSA9PiB0aGlzLnJlbmRlckNJKCksXG4gICAgfSk7XG4gICAgY29uc3QgZGVmYXVsdHMgPSBvcHRpb25zPy5kZWZhdWx0O1xuICAgIGlmIChkZWZhdWx0cykge1xuICAgICAgdGhpcy5kZWZhdWx0QWZ0ZXJTY3JpcHQucHVzaCguLi4oZGVmYXVsdHMuYWZ0ZXJTY3JpcHQgPz8gW10pKTtcbiAgICAgIHRoaXMuZGVmYXVsdEFydGlmYWN0cyA9IGRlZmF1bHRzLmFydGlmYWN0cztcbiAgICAgIGRlZmF1bHRzLmJlZm9yZVNjcmlwdCAmJlxuICAgICAgICB0aGlzLmRlZmF1bHRCZWZvcmVTY3JpcHQucHVzaCguLi5kZWZhdWx0cy5iZWZvcmVTY3JpcHQpO1xuICAgICAgdGhpcy5kZWZhdWx0Q2FjaGUgPSBkZWZhdWx0cy5jYWNoZTtcbiAgICAgIHRoaXMuZGVmYXVsdEltYWdlID0gZGVmYXVsdHMuaW1hZ2U7XG4gICAgICB0aGlzLmRlZmF1bHRJbnRlcnJ1cHRpYmxlID0gZGVmYXVsdHMuaW50ZXJydXB0aWJsZTtcbiAgICAgIHRoaXMuZGVmYXVsdFJldHJ5ID0gZGVmYXVsdHMucmV0cnk7XG4gICAgICBkZWZhdWx0cy5zZXJ2aWNlcyAmJiB0aGlzLmFkZFNlcnZpY2VzKC4uLmRlZmF1bHRzLnNlcnZpY2VzKTtcbiAgICAgIGRlZmF1bHRzLnRhZ3MgJiYgdGhpcy5kZWZhdWx0VGFncy5wdXNoKC4uLmRlZmF1bHRzLnRhZ3MpO1xuICAgICAgdGhpcy5kZWZhdWx0VGltZW91dCA9IGRlZmF1bHRzLnRpbWVvdXQ7XG4gICAgfVxuICAgIHRoaXMucGFnZXMgPSBvcHRpb25zPy5wYWdlcztcbiAgICB0aGlzLndvcmtmbG93ID0gb3B0aW9ucz8ud29ya2Zsb3c7XG4gICAgaWYgKG9wdGlvbnM/LnN0YWdlcykge1xuICAgICAgdGhpcy5hZGRTdGFnZXMoLi4ub3B0aW9ucy5zdGFnZXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8udmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmFkZEpvYnMob3B0aW9ucy52YXJpYWJsZXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucz8uam9icykge1xuICAgICAgdGhpcy5hZGRKb2JzKG9wdGlvbnMuam9icyk7XG4gICAgfVxuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRJbmNsdWRlcyguLi5pbmNsdWRlczogSW5jbHVkZVtdKSB7XG4gICAgZm9yIChjb25zdCBhZGRpdGlvbmFsIG9mIGluY2x1ZGVzKSB7XG4gICAgICB0aGlzLmFzc2VydElzVmFsaWRJbmNsdWRlKGFkZGl0aW9uYWwpO1xuICAgICAgZm9yIChjb25zdCBleGlzdGluZyBvZiB0aGlzLmluY2x1ZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxJbmNsdWRlcyhleGlzdGluZywgYWRkaXRpb25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgJHt0aGlzLm5hbWV9OiBHaXRMYWIgQ0kgJHtleGlzdGluZ30gYWxyZWFkeSBjb250YWlucyBvbmUgb3IgbW9yZSB0ZW1wbGF0ZXMgc3BlY2lmaWVkIGluICR7YWRkaXRpb25hbH0uYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuaW5jbHVkZS5wdXNoKGFkZGl0aW9uYWwpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvdyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgSW5jbHVkZSBpcyBpbnZhbGlkLlxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0bGFiLmNvbS9naXRsYWItb3JnL2dpdGxhYi8tL2Jsb2IvbWFzdGVyL2xpYi9naXRsYWIvY2kvY29uZmlnL2V4dGVybmFsL21hcHBlci5yYlxuICAgKiBAcGFyYW0gaW5jbHVkZSB0aGUgSW5jbHVkZSB0byB2YWxpZGF0ZS5cbiAgICovXG4gIHByaXZhdGUgYXNzZXJ0SXNWYWxpZEluY2x1ZGUoaW5jbHVkZTogSW5jbHVkZSkge1xuICAgIGNvbnN0IGNvbWJvcyA9IFtcbiAgICAgIGluY2x1ZGUubG9jYWwsXG4gICAgICBpbmNsdWRlLmZpbGUgJiYgaW5jbHVkZS5wcm9qZWN0LFxuICAgICAgaW5jbHVkZS5yZW1vdGUsXG4gICAgICBpbmNsdWRlLnRlbXBsYXRlLFxuICAgIF07XG4gICAgY29uc3QgbGVuID0gY29tYm9zLmZpbHRlcigoeCkgPT4gQm9vbGVhbih4KSkubGVuZ3RoO1xuICAgIGlmIChsZW4gIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy5uYW1lfTogR2l0TGFiIENJIGluY2x1ZGUgJHtpbmNsdWRlfSBjb250YWlucyAke2xlbn0gcHJvcGVydHkgY29tYmluYXRpb24ocykuXG4gICAgICAgIEEgdmFsaWQgaW5jbHVkZSBjb25maWd1cmF0aW9uIHNwZWNpZmllcyAqb25lKiBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnR5IGNvbWJpbmF0aW9ucy5cbiAgICAgICAgKiBsb2NhbFxuICAgICAgICAqIGZpbGUsIHByb2plY3RcbiAgICAgICAgKiByZW1vdGVcbiAgICAgICAgKiB0ZW1wbGF0ZSAgXG4gICAgICAgIGBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZSBlcXVhbGl0eSBvZiBJbmNsdWRlcy5cbiAgICogQHNlZSBodHRwczovL2dpdGxhYi5jb20vZ2l0bGFiLW9yZy9naXRsYWIvLS9ibG9iL21hc3Rlci9saWIvZ2l0bGFiL2NpL2NvbmZpZy9leHRlcm5hbC9tYXBwZXIucmJcbiAgICogQHBhcmFtIHggRmlyc3QgaW5jbHVkZSB0byBjb21wYXJlLlxuICAgKiBAcGFyYW0geSBTZWNvbmQgaW5jbHVkZSB0byBjb21wYXJlLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBpbmNsdWRlcyBhcmUgZXF1YWwuXG4gICAqL1xuICBwcml2YXRlIGFyZUVxdWFsSW5jbHVkZXMoeDogSW5jbHVkZSwgeTogSW5jbHVkZSk6IGJvb2xlYW4ge1xuICAgIGlmICh4LmxvY2FsID09PSB5LmxvY2FsICYmIHgubG9jYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh4LnRlbXBsYXRlID09PSB5LnRlbXBsYXRlICYmIHgudGVtcGxhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh4LnJlbW90ZSA9PT0geS5yZW1vdGUgJiYgeC5yZW1vdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICh4LnByb2plY3QgPT09IHkucHJvamVjdCAmJiB4LnJlZiA9PT0geS5yZWYpIHtcbiAgICAgIGNvbnN0IHhGaWxlcyA9IHguZmlsZSA/IHguZmlsZSA6IFtdO1xuICAgICAgY29uc3QgeUZpbGVzID0geS5maWxlID8geS5maWxlIDogW107XG4gICAgICBjb25zdCBhbGxGaWxlcyA9IHhGaWxlcy5jb25jYXQoeUZpbGVzKTtcbiAgICAgIHJldHVybiBuZXcgU2V0KGFsbEZpbGVzKS5zaXplICE9PSBhbGxGaWxlcy5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkU2VydmljZXMoLi4uc2VydmljZXM6IFNlcnZpY2VbXSkge1xuICAgIGZvciAoY29uc3QgYWRkaXRpb25hbCBvZiBzZXJ2aWNlcykge1xuICAgICAgZm9yIChjb25zdCBleGlzdGluZyBvZiB0aGlzLmRlZmF1bHRTZXJ2aWNlcykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYWRkaXRpb25hbC5uYW1lID09PSBleGlzdGluZy5uYW1lICYmXG4gICAgICAgICAgYWRkaXRpb25hbC5hbGlhcyA9PT0gZXhpc3RpbmcuYWxpYXNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYCR7dGhpcy5uYW1lfTogR2l0TGFiIENJIGFscmVhZHkgY29udGFpbnMgc2VydmljZSAke2FkZGl0aW9uYWx9LmBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlcy5wdXNoKGFkZGl0aW9uYWwpO1xuICAgIH1cbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZEdsb2JhbFZhcmlhYmxlcyh2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZXMpKSB7XG4gICAgICBpZiAodGhpcy52YXJpYWJsZXNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgJHt0aGlzLm5hbWV9OiBHaXRMYWIgQ0kgYWxyZWFkeSBjb250YWlucyB2YXJpYWJsZSAke2tleX0uYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy52YXJpYWJsZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRTdGFnZXMoLi4uc3RhZ2VzOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICBpZiAoIXRoaXMuc3RhZ2VzLmluY2x1ZGVzKHN0YWdlKSkge1xuICAgICAgICB0aGlzLnN0YWdlcy5wdXNoKHN0YWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkSm9icyhqb2JzOiBSZWNvcmQ8c3RyaW5nLCBKb2I+KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoam9icykpIHtcbiAgICAgIGlmICh0aGlzLmpvYnNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0aGlzLm5hbWV9OiBHaXRMYWIgQ0kgYWxyZWFkeSBjb250YWlucyBqb2IgJHtrZXl9LmApO1xuICAgICAgfVxuICAgICAgdGhpcy5qb2JzW2tleV0gPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZS5zdGFnZSkge1xuICAgICAgICB0aGlzLmFkZFN0YWdlcyh2YWx1ZS5zdGFnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDSSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZGVmYXVsdDogdGhpcy5yZW5kZXJEZWZhdWx0KCksXG4gICAgICBpbmNsdWRlOlxuICAgICAgICB0aGlzLmluY2x1ZGUubGVuZ3RoID4gMCA/IHNuYWtlQ2FzZUtleXModGhpcy5pbmNsdWRlKSA6IHVuZGVmaW5lZCxcbiAgICAgIHBhZ2VzOiBzbmFrZUNhc2VLZXlzKHRoaXMucGFnZXMpLFxuICAgICAgc2VydmljZXM6XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2VzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHNuYWtlQ2FzZUtleXModGhpcy5kZWZhdWx0U2VydmljZXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB2YXJpYWJsZXM6XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMudmFyaWFibGVzKS5sZW5ndGggPiAwID8gdGhpcy52YXJpYWJsZXMgOiB1bmRlZmluZWQsXG4gICAgICB3b3JrZmxvdzogc25ha2VDYXNlS2V5cyh0aGlzLndvcmtmbG93KSxcbiAgICAgIHN0YWdlczogdGhpcy5zdGFnZXMubGVuZ3RoID4gMCA/IHRoaXMuc3RhZ2VzIDogdW5kZWZpbmVkLFxuICAgICAgLi4uc25ha2VDYXNlS2V5cyh0aGlzLmpvYnMpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckRlZmF1bHQoKSB7XG4gICAgY29uc3QgZGVmYXVsdHM6IERlZmF1bHQgPSB7XG4gICAgICBhZnRlclNjcmlwdDpcbiAgICAgICAgdGhpcy5kZWZhdWx0QWZ0ZXJTY3JpcHQubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5kZWZhdWx0QWZ0ZXJTY3JpcHRcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGFydGlmYWN0czogdGhpcy5kZWZhdWx0QXJ0aWZhY3RzLFxuICAgICAgYmVmb3JlU2NyaXB0OlxuICAgICAgICB0aGlzLmRlZmF1bHRCZWZvcmVTY3JpcHQubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy5kZWZhdWx0QmVmb3JlU2NyaXB0XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBjYWNoZTogdGhpcy5kZWZhdWx0Q2FjaGUsXG4gICAgICBpbWFnZTogdGhpcy5kZWZhdWx0SW1hZ2UsXG4gICAgICBpbnRlcnJ1cHRpYmxlOiB0aGlzLmRlZmF1bHRJbnRlcnJ1cHRpYmxlLFxuICAgICAgcmV0cnk6IHRoaXMuZGVmYXVsdFJldHJ5LFxuICAgICAgc2VydmljZXM6XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2VzLmxlbmd0aCA+IDAgPyB0aGlzLmRlZmF1bHRTZXJ2aWNlcyA6IHVuZGVmaW5lZCxcbiAgICAgIHRhZ3M6IHRoaXMuZGVmYXVsdFRhZ3MubGVuZ3RoID4gMCA/IHRoaXMuZGVmYXVsdFRhZ3MgOiB1bmRlZmluZWQsXG4gICAgICB0aW1lb3V0OiB0aGlzLmRlZmF1bHRUaW1lb3V0LFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZGVmYXVsdHMpLmZpbHRlcigoeCkgPT4geCkubGVuZ3RoXG4gICAgICA/IHNuYWtlQ2FzZUtleXMoZGVmYXVsdHMpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBzbmFrZUNhc2VLZXlzPFQgPSB1bmtub3duPihvYmo6IFQpOiBUIHtcbiAgaWYgKHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgb2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHNuYWtlQ2FzZUtleXMpIGFzIGFueTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChsZXQgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICBpZiAodHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsKSB7XG4gICAgICB2ID0gc25ha2VDYXNlS2V5cyh2KTtcbiAgICB9XG4gICAgcmVzdWx0W3NuYWtlKGspXSA9IHY7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyBhbnk7XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { CiConfigurationOptions } from ".";
2
+ import { Project } from "../project";
3
+ import { CiConfiguration } from "./configuration";
4
+ import { NestedConfiguration } from "./nested-configuration";
5
+ /**
6
+ * (experimental) A GitLab CI for the main `.gitlab-ci.yml` file.
7
+ *
8
+ * @experimental
9
+ */
10
+ export declare class GitlabConfiguration extends CiConfiguration {
11
+ /**
12
+ * @experimental
13
+ */
14
+ readonly nestedTemplates: Record<string, NestedConfiguration>;
15
+ /**
16
+ * @experimental
17
+ */
18
+ constructor(project: Project, options?: CiConfigurationOptions);
19
+ /**
20
+ * (experimental) Creates and adds nested templates to the includes of the main CI.
21
+ *
22
+ * Additionally adds their stages to the main CI if they are not already present.
23
+ * You can futher customize nested templates through the `nestedTemplates` property.
24
+ * E.g. gitlabConfig.nestedTemplates['templateName']?.addStages('stageName')
25
+ *
26
+ * @param config a record the names and configuraitons of the templates.
27
+ * @experimental
28
+ */
29
+ createNestedTemplates(config: Record<string, CiConfigurationOptions>): void;
30
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.GitlabConfiguration = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const configuration_1 = require("./configuration");
7
+ const nested_configuration_1 = require("./nested-configuration");
8
+ /**
9
+ * (experimental) A GitLab CI for the main `.gitlab-ci.yml` file.
10
+ *
11
+ * @experimental
12
+ */
13
+ class GitlabConfiguration extends configuration_1.CiConfiguration {
14
+ /**
15
+ * @experimental
16
+ */
17
+ constructor(project, options) {
18
+ super(project, "gitlab-ci", options);
19
+ /**
20
+ * @experimental
21
+ */
22
+ this.nestedTemplates = {};
23
+ }
24
+ /**
25
+ * (experimental) Creates and adds nested templates to the includes of the main CI.
26
+ *
27
+ * Additionally adds their stages to the main CI if they are not already present.
28
+ * You can futher customize nested templates through the `nestedTemplates` property.
29
+ * E.g. gitlabConfig.nestedTemplates['templateName']?.addStages('stageName')
30
+ *
31
+ * @param config a record the names and configuraitons of the templates.
32
+ * @experimental
33
+ */
34
+ createNestedTemplates(config) {
35
+ for (const [name, options] of Object.entries(config)) {
36
+ if (this.nestedTemplates[name] !== undefined) {
37
+ throw new Error(`${this.name}: GitLab CI already contains template "${name}".`);
38
+ }
39
+ const template = new nested_configuration_1.NestedConfiguration(this.project, this, name, options);
40
+ this.nestedTemplates[template.name] = template;
41
+ this.addIncludes({ local: template.path });
42
+ this.addStages(...template.stages);
43
+ }
44
+ }
45
+ }
46
+ exports.GitlabConfiguration = GitlabConfiguration;
47
+ _a = JSII_RTTI_SYMBOL_1;
48
+ GitlabConfiguration[_a] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.50.2" };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0bGFiLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0bGFiL2dpdGxhYi1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsbURBQWtEO0FBQ2xELGlFQUE2RDs7Ozs7O0FBRzdELE1BQWEsbUJBQW9CLFNBQVEsK0JBQWU7Ozs7SUFFdEQsWUFBWSxPQUFnQixFQUFFLE9BQWdDO1FBQzVELEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7O1FBRnZCLG9CQUFlLEdBQXdDLEVBQUUsQ0FBQztJQUcxRSxDQUFDOzs7Ozs7Ozs7OztJQUdNLHFCQUFxQixDQUFDLE1BQThDO1FBQ3pFLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7Z0JBQzVDLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxJQUFJLENBQUMsSUFBSSwwQ0FBMEMsSUFBSSxJQUFJLENBQy9ELENBQUM7YUFDSDtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksMENBQW1CLENBQ3RDLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxFQUNKLElBQUksRUFDSixPQUFPLENBQ1IsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDOztBQXhCSCxrREF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaUNvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgQ2lDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgTmVzdGVkQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL25lc3RlZC1jb25maWd1cmF0aW9uXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBHaXRsYWJDb25maWd1cmF0aW9uIGV4dGVuZHMgQ2lDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IG5lc3RlZFRlbXBsYXRlczogUmVjb3JkPHN0cmluZywgTmVzdGVkQ29uZmlndXJhdGlvbj4gPSB7fTtcbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9ucz86IENpQ29uZmlndXJhdGlvbk9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBcImdpdGxhYi1jaVwiLCBvcHRpb25zKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgY3JlYXRlTmVzdGVkVGVtcGxhdGVzKGNvbmZpZzogUmVjb3JkPHN0cmluZywgQ2lDb25maWd1cmF0aW9uT3B0aW9ucz4pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBvcHRpb25zXSBvZiBPYmplY3QuZW50cmllcyhjb25maWcpKSB7XG4gICAgICBpZiAodGhpcy5uZXN0ZWRUZW1wbGF0ZXNbbmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5uYW1lfTogR2l0TGFiIENJIGFscmVhZHkgY29udGFpbnMgdGVtcGxhdGUgXCIke25hbWV9XCIuYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgTmVzdGVkQ29uZmlndXJhdGlvbihcbiAgICAgICAgdGhpcy5wcm9qZWN0LFxuICAgICAgICB0aGlzLFxuICAgICAgICBuYW1lLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgICAgdGhpcy5uZXN0ZWRUZW1wbGF0ZXNbdGVtcGxhdGUubmFtZV0gPSB0ZW1wbGF0ZTtcbiAgICAgIHRoaXMuYWRkSW5jbHVkZXMoeyBsb2NhbDogdGVtcGxhdGUucGF0aCB9KTtcbiAgICAgIHRoaXMuYWRkU3RhZ2VzKC4uLnRlbXBsYXRlLnN0YWdlcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from "./configuration";
2
+ export * from "./configuration-model";
3
+ export * from "./gitlab-configuration";
4
+ export * from "./nested-configuration";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ __exportStar(require("./configuration"), exports);
14
+ __exportStar(require("./configuration-model"), exports);
15
+ __exportStar(require("./gitlab-configuration"), exports);
16
+ __exportStar(require("./nested-configuration"), exports);
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0bGFiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyx3REFBc0M7QUFDdEMseURBQXVDO0FBQ3ZDLHlEQUF1QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbmZpZ3VyYXRpb24tbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dpdGxhYi1jb25maWd1cmF0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9uZXN0ZWQtY29uZmlndXJhdGlvblwiO1xuIl19
@@ -0,0 +1,26 @@
1
+ import { CiConfigurationOptions } from ".";
2
+ import { Project } from "../project";
3
+ import { CiConfiguration } from "./configuration";
4
+ import { GitlabConfiguration } from "./gitlab-configuration";
5
+ /**
6
+ * (experimental) A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
7
+ *
8
+ * @experimental
9
+ */
10
+ export declare class NestedConfiguration extends CiConfiguration {
11
+ /**
12
+ * @experimental
13
+ */
14
+ readonly parent: GitlabConfiguration;
15
+ /**
16
+ * @experimental
17
+ */
18
+ constructor(project: Project, parent: GitlabConfiguration, name: string, options?: CiConfigurationOptions);
19
+ /**
20
+ * (experimental) Add stages to the Nested configuration and the main CI file if not already present.
21
+ *
22
+ * @param stages stages to add.
23
+ * @experimental
24
+ */
25
+ addStages(...stages: string[]): void;
26
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.NestedConfiguration = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const configuration_1 = require("./configuration");
7
+ /**
8
+ * (experimental) A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
9
+ *
10
+ * @experimental
11
+ */
12
+ class NestedConfiguration extends configuration_1.CiConfiguration {
13
+ /**
14
+ * @experimental
15
+ */
16
+ constructor(project, parent, name, options) {
17
+ super(project, name, options);
18
+ this.parent = parent;
19
+ }
20
+ /**
21
+ * (experimental) Add stages to the Nested configuration and the main CI file if not already present.
22
+ *
23
+ * @param stages stages to add.
24
+ * @experimental
25
+ */
26
+ addStages(...stages) {
27
+ for (const stage of stages) {
28
+ if (!this.stages.includes(stage)) {
29
+ this.stages.push(stage);
30
+ }
31
+ this.parent.addStages(stage);
32
+ }
33
+ }
34
+ }
35
+ exports.NestedConfiguration = NestedConfiguration;
36
+ _a = JSII_RTTI_SYMBOL_1;
37
+ NestedConfiguration[_a] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.50.2" };
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0bGFiL25lc3RlZC1jb25maWd1cmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsbURBQWtEOzs7Ozs7QUFJbEQsTUFBYSxtQkFBb0IsU0FBUSwrQkFBZTs7OztJQUV0RCxZQUNFLE9BQWdCLEVBQ2hCLE1BQTJCLEVBQzNCLElBQVksRUFDWixPQUFnQztRQUVoQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDOzs7Ozs7O0lBRU0sU0FBUyxDQUFDLEdBQUcsTUFBZ0I7UUFDbEMsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQzs7QUFuQkgsa0RBb0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2lDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gXCIuXCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcbmltcG9ydCB7IENpQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB7IEdpdGxhYkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi9naXRsYWItY29uZmlndXJhdGlvblwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBOZXN0ZWRDb25maWd1cmF0aW9uIGV4dGVuZHMgQ2lDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhcmVudDogR2l0bGFiQ29uZmlndXJhdGlvbjtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvamVjdDogUHJvamVjdCxcbiAgICBwYXJlbnQ6IEdpdGxhYkNvbmZpZ3VyYXRpb24sXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDaUNvbmZpZ3VyYXRpb25PcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHByb2plY3QsIG5hbWUsIG9wdGlvbnMpO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkU3RhZ2VzKC4uLnN0YWdlczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgaWYgKCF0aGlzLnN0YWdlcy5pbmNsdWRlcyhzdGFnZSkpIHtcbiAgICAgICAgdGhpcy5zdGFnZXMucHVzaChzdGFnZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcmVudC5hZGRTdGFnZXMoc3RhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
package/lib/gitpod.js CHANGED
@@ -207,5 +207,5 @@ class Gitpod extends component_1.Component {
207
207
  }
208
208
  exports.Gitpod = Gitpod;
209
209
  _a = JSII_RTTI_SYMBOL_1;
210
- Gitpod[_a] = { fqn: "projen.Gitpod", version: "0.49.1" };
210
+ Gitpod[_a] = { fqn: "projen.Gitpod", version: "0.50.2" };
211
211
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0cG9kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2dpdHBvZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJDQUF3QztBQVF4QyxpQ0FBa0M7QUFFbEM7O0dBRUc7QUFDSCxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUM7Ozs7OztBQUtsQyxJQUFZLGNBYVg7QUFiRCxXQUFZLGNBQWM7SUFFeEIseUNBQXVCLENBQUE7SUFFdkIsMkNBQXlCLENBQUE7SUFFekIsNkNBQTJCLENBQUE7SUFFM0IsMkNBQXlCLENBQUE7SUFFekIseUNBQXVCLENBQUE7SUFFdkIsK0NBQTZCLENBQUE7QUFDL0IsQ0FBQyxFQWJXLGNBQWMsR0FBZCxzQkFBYyxLQUFkLHNCQUFjLFFBYXpCOzs7Ozs7QUFHRCxJQUFZLFlBU1g7QUFURCxXQUFZLFlBQVk7SUFFdEIsaUNBQWlCLENBQUE7SUFFakIsNkJBQWEsQ0FBQTtJQUViLCtCQUFlLENBQUE7SUFFZiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQVRXLFlBQVksR0FBWixvQkFBWSxLQUFaLG9CQUFZLFFBU3ZCOzs7Ozs7QUEyQkQsSUFBWSxZQVlYO0FBWkQsV0FBWSxZQUFZO0lBRXRCLDZDQUE2QixDQUFBO0lBRzdCLDZDQUE2QixDQUFBO0lBRzdCLGlDQUFpQixDQUFBO0lBR2pCLGlDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFaVyxZQUFZLEdBQVosb0JBQVksS0FBWixvQkFBWSxRQVl2Qjs7Ozs7O0FBR0QsSUFBWSxvQkFNWDtBQU5ELFdBQVksb0JBQW9CO0lBRTlCLHlDQUFpQixDQUFBO0lBR2pCLDJDQUFtQixDQUFBO0FBQ3JCLENBQUMsRUFOVyxvQkFBb0IsR0FBcEIsNEJBQW9CLEtBQXBCLDRCQUFvQixRQU0vQjs7Ozs7O0FBZ0RELE1BQWEsTUFBTyxTQUFRLHFCQUFTOzs7O0lBVW5DLFlBQVksT0FBZ0IsRUFBRSxVQUF5QixFQUFFO1FBQ3ZELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FB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QUFDLENBQUM7SUFDTCxDQUFDOzs7Ozs7O0lBR00sUUFBUSxDQUFDLEdBQUcsS0FBZTtRQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7Ozs7Ozs7Ozs7OztJQUdNLG1CQUFtQixDQUFDLEdBQUcsVUFBbUM7UUFDL0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxpQkFBaUI7O1FBQ3ZCLFVBQUksSUFBSSxDQUFDLFdBQVcsMENBQUUsS0FBSyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7U0FDL0I7YUFBTSxVQUFJLElBQUksQ0FBQyxXQUFXLDBDQUFFLFVBQVUsRUFBRTtZQUN2QyxPQUFPO2dCQUNMLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVU7YUFDbEMsQ0FBQztTQUNIO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPO2dCQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzthQUMxQixDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sU0FBUyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQzs7QUFuSEgsd0JBb0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICBJRGV2RW52aXJvbm1lbnQsXG4gIERldkVudmlyb25tZW50T3B0aW9ucyxcbiAgRGV2RW52aXJvbm1lbnREb2NrZXJJbWFnZSxcbn0gZnJvbSBcIi4vZGV2LWVudlwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuL3Byb2plY3RcIjtcbmltcG9ydCB7IFRhc2sgfSBmcm9tIFwiLi90YXNrXCI7XG5pbXBvcnQgeyBZYW1sRmlsZSB9IGZyb20gXCIuL3lhbWxcIjtcblxuLyoqXG4gKiBSZWxhdGl2ZSBwYXRoIG9mIEdpdHBvZCBmaWxlIHRvIGdlbmVyYXRlXG4gKi9cbmNvbnN0IEdJVFBPRF9GSUxFID0gXCIuZ2l0cG9kLnltbFwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBlbnVtIEdpdHBvZE9wZW5Nb2RlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgVEFCX0FGVEVSID0gXCJ0YWItYWZ0ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgVEFCX0JFRk9SRSA9IFwidGFiLWJlZm9yZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBTUExJVF9SSUdIVCA9IFwic3BsaXQtcmlnaHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBTUExJVF9MRUZUID0gXCJzcGxpdC1sZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBTUExJVF9UT1AgPSBcInNwbGl0LXRvcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgU1BMSVRfQk9UVE9NID0gXCJzcGxpdC1ib3R0b21cIixcbn1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBlbnVtIEdpdHBvZE9wZW5JbiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIEJPVFRPTSA9IFwiYm90dG9tXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIExFRlQgPSBcImxlZnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIFJJR0hUID0gXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBNQUlOID0gXCJtYWluXCIsXG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBHaXRwb2RUYXNrIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG9wZW5Nb2RlPzogR2l0cG9kT3Blbk1vZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgb3BlbkluPzogR2l0cG9kT3BlbkluO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGJlZm9yZT86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgaW5pdD86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHByZWJ1aWxkPzogc3RyaW5nO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGVudW0gR2l0cG9kT25PcGVuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBPUEVOX0JST1dTRVIgPSBcIm9wZW4tYnJvd3NlclwiLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgT1BFTl9QUkVWSUVXID0gXCJvcGVuLXByZXZpZXdcIixcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBOT1RJRlkgPSBcIm5vdGlmeVwiLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGVudW0gR2l0cG9kUG9ydFZpc2liaWxpdHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBQVUJMSUMgPSBcInB1YmxpY1wiLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgUFJJVkFURSA9IFwicHJpdmF0ZVwiLFxufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgR2l0cG9kUG9ydCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBwb3J0Pzogc3RyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBvbk9wZW4/OiBHaXRwb2RPbk9wZW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSB2aXNpYmlsaXR5PzogR2l0cG9kUG9ydFZpc2liaWxpdHk7XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBHaXRwb2RQcmVidWlsZHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IG1hc3Rlcj86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYnJhbmNoZXM/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0cz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RzRnJvbUZvcmtzPzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhZGRDaGVjaz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGFkZENvbW1lbnQ/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgYWRkQmFkZ2U/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBhZGRMYWJlbD86IGJvb2xlYW47XG59XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgR2l0cG9kT3B0aW9ucyBleHRlbmRzIERldkVudmlyb25tZW50T3B0aW9ucyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgcHJlYnVpbGRzPzogR2l0cG9kUHJlYnVpbGRzO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5leHBvcnQgY2xhc3MgR2l0cG9kIGV4dGVuZHMgQ29tcG9uZW50IGltcGxlbWVudHMgSURldkVudmlyb25tZW50IHtcbiAgcHJpdmF0ZSBkb2NrZXJJbWFnZTogRGV2RW52aXJvbm1lbnREb2NrZXJJbWFnZSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwcmVidWlsZHM6IEdpdHBvZFByZWJ1aWxkcyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSB0YXNrcyA9IG5ldyBBcnJheTxHaXRwb2RUYXNrPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBvcnRzID0gbmV3IEFycmF5PEdpdHBvZFBvcnQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgdnNjb2RlRXh0ZW5zaW9ucyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEdpdHBvZE9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5kb2NrZXJJbWFnZSA9IG9wdGlvbnM/LmRvY2tlckltYWdlO1xuXG4gICAgaWYgKG9wdGlvbnM/LnRhc2tzKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhc2sgb2Ygb3B0aW9ucy50YXNrcykge1xuICAgICAgICB0aGlzLmFkZFRhc2tzKHRhc2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zPy5wcmVidWlsZHMpIHtcbiAgICAgIHRoaXMuYWRkUHJlYnVpbGRzKG9wdGlvbnMucHJlYnVpbGRzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8ucG9ydHMpIHtcbiAgICAgIHRoaXMuYWRkUG9ydHMoLi4ub3B0aW9ucy5wb3J0cyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LnZzY29kZUV4dGVuc2lvbnMpIHtcbiAgICAgIHRoaXMuYWRkVnNjb2RlRXh0ZW5zaW9ucyguLi5vcHRpb25zLnZzY29kZUV4dGVuc2lvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgaW1hZ2U6ICgpID0+IHRoaXMucmVuZGVyRG9ja2VySW1hZ2UoKSxcbiAgICAgIHRhc2tzOiB0aGlzLnRhc2tzLFxuICAgICAgZ2l0aHViOiAoKSA9PiB0aGlzLnJlbmRlclByZWJ1aWxkcygpLFxuICAgICAgcG9ydHM6IHRoaXMucG9ydHMsXG4gICAgICB2c2NvZGU6IHtcbiAgICAgICAgZXh0ZW5zaW9uczogdGhpcy52c2NvZGVFeHRlbnNpb25zLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgbmV3IFlhbWxGaWxlKHRoaXMucHJvamVjdCwgR0lUUE9EX0ZJTEUsIHtcbiAgICAgIG9iajogdGhpcy5jb25maWcsXG4gICAgICBvbWl0RW1wdHk6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkRG9ja2VySW1hZ2UoaW1hZ2U6IERldkVudmlyb25tZW50RG9ja2VySW1hZ2UpIHtcbiAgICBpZiAodGhpcy5kb2NrZXJJbWFnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZG9ja2VySW1hZ2UgY2Fubm90IGJlIHJlZGVmaW5lZC5cIik7XG4gICAgfVxuICAgIHRoaXMuZG9ja2VySW1hZ2UgPSBpbWFnZTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkVGFza3MoLi4udGFza3M6IFRhc2tbXSkge1xuICAgIHRoaXMudGFza3MucHVzaChcbiAgICAgIC4uLnRhc2tzLm1hcCgodGFzaykgPT4gKHtcbiAgICAgICAgbmFtZTogdGFzay5uYW1lLFxuICAgICAgICBjb21tYW5kOiBgbnB4IHByb2plbiAke3Rhc2submFtZX1gLFxuICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZFByZWJ1aWxkcyhjb25maWc6IEdpdHBvZFByZWJ1aWxkcykge1xuICAgIHRoaXMucHJlYnVpbGRzID0gY29uZmlnO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyBhZGRDdXN0b21UYXNrKG9wdGlvbnM6IEdpdHBvZFRhc2spIHtcbiAgICB0aGlzLnRhc2tzLnB1c2goe1xuICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgY29tbWFuZDogb3B0aW9ucy5jb21tYW5kLFxuICAgICAgb3Blbk1vZGU6IG9wdGlvbnMub3Blbk1vZGUsXG4gICAgICBvcGVuSW46IG9wdGlvbnMub3BlbkluLFxuICAgICAgYmVmb3JlOiBvcHRpb25zLmJlZm9yZSxcbiAgICAgIGluaXQ6IG9wdGlvbnMuaW5pdCxcbiAgICAgIHByZWJ1aWxkOiBvcHRpb25zLnByZWJ1aWxkLFxuICAgIH0pO1xuICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZFBvcnRzKC4uLnBvcnRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucG9ydHMucHVzaCguLi5wb3J0cy5tYXAoKHBvcnQpID0+ICh7IHBvcnQ6IHBvcnQgfSkpKTtcbiAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIGFkZFZzY29kZUV4dGVuc2lvbnMoLi4uZXh0ZW5zaW9uczogR2l0cG9kQ29kZUV4dGVuc2lvbklkW10pIHtcbiAgICB0aGlzLnZzY29kZUV4dGVuc2lvbnMucHVzaCguLi5leHRlbnNpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRG9ja2VySW1hZ2UoKSB7XG4gICAgaWYgKHRoaXMuZG9ja2VySW1hZ2U/LmltYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5kb2NrZXJJbWFnZS5pbWFnZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZG9ja2VySW1hZ2U/LmRvY2tlckZpbGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGU6IHRoaXMuZG9ja2VySW1hZ2UuZG9ja2VyRmlsZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJQcmVidWlsZHMoKSB7XG4gICAgaWYgKHRoaXMucHJlYnVpbGRzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVidWlsZHM6IHRoaXMucHJlYnVpbGRzLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWUyBDb2RlIGV4dGVuc2lvbnMgYXMgZGVmaW5lZCBpbiB0aGUgT3BlbiBWU1ggcmVnaXN0cnlcbiAqIEV4YW1wbGU6IGBzY2FsYS1sYW5nLnNjYWxhQDAuMy45Ok81WG1qd1k1R3orMG9EWkFtcW5lSnc9PWBcbiAqL1xudHlwZSBHaXRwb2RDb2RlRXh0ZW5zaW9uSWQgPSBzdHJpbmc7XG4iXX0=
@@ -98,7 +98,7 @@ class IgnoreFile extends file_1.FileBase {
98
98
  }
99
99
  exports.IgnoreFile = IgnoreFile;
100
100
  _a = JSII_RTTI_SYMBOL_1;
101
- IgnoreFile[_a] = { fqn: "projen.IgnoreFile", version: "0.49.1" };
101
+ IgnoreFile[_a] = { fqn: "projen.IgnoreFile", version: "0.50.2" };
102
102
  // O(n) hooray!
103
103
  function remove(arr, value) {
104
104
  const idx = arr.indexOf(value);
package/lib/index.d.ts CHANGED
@@ -33,6 +33,7 @@ export * from "./yaml";
33
33
  export * from "./xmlfile";
34
34
  export * as web from "./web";
35
35
  export * as github from "./github";
36
+ export * as gitlab from "./gitlab";
36
37
  export * as vscode from "./vscode";
37
38
  export * as java from "./java";
38
39
  export * as python from "./python";
package/lib/index.js CHANGED
@@ -46,6 +46,7 @@ __exportStar(require("./xmlfile"), exports);
46
46
  // export submobules
47
47
  exports.web = require("./web");
48
48
  exports.github = require("./github");
49
+ exports.gitlab = require("./gitlab");
49
50
  exports.vscode = require("./vscode");
50
51
  exports.java = require("./java");
51
52
  exports.python = require("./python");
@@ -57,4 +58,4 @@ exports.cdk8s = require("./cdk8s");
57
58
  exports.cdktf = require("./cdktf");
58
59
  exports.cdk = require("./cdk");
59
60
  exports.build = require("./build");
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLDRDQUEwQjtBQUMxQixpREFBK0I7QUFDL0IsbURBQWlDO0FBQ2pDLHlDQUF1QjtBQUN2QixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLGdEQUE4QjtBQUM5Qix3Q0FBc0I7QUFDdEIseUNBQXVCO0FBQ3ZCLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFDMUIsNkNBQTJCO0FBQzNCLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IsNENBQTBCO0FBQzFCLGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0Isa0RBQWdDO0FBQ2hDLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIsMkNBQXlCO0FBQ3pCLGdEQUE4QjtBQUM5Qix5Q0FBdUI7QUFDdkIsMENBQXdCO0FBQ3hCLCtDQUE2QjtBQUM3QixpREFBK0I7QUFDL0IsNENBQTBCO0FBQzFCLDZDQUEyQjtBQUMzQix5Q0FBdUI7QUFDdkIsNENBQTBCO0FBQzFCLHlDQUF1QjtBQUN2Qiw0Q0FBMEI7QUFFMUIsb0JBQW9CO0FBQ3BCLCtCQUE2QjtBQUM3QixxQ0FBbUM7QUFDbkMscUNBQW1DO0FBQ25DLGlDQUErQjtBQUMvQixxQ0FBbUM7QUFDbkMsNkNBQTJDO0FBQzNDLDZDQUEyQztBQUMzQyx1Q0FBcUM7QUFDckMscUNBQW1DO0FBQ25DLG1DQUFpQztBQUNqQyxtQ0FBaUM7QUFDakMsK0JBQTZCO0FBQzdCLG1DQUFpQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGV2LWVudlwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVwZW5kZW5jaWVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kb2NrZXItY29tcG9zZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZmlsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2l0YXR0cmlidXRlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZ2l0cG9kXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9pZ25vcmUtZmlsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaW5pXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9qc29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xpY2Vuc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21ha2VmaWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9vYmplY3QtZmlsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb3B0aW9uLWhpbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm9qZWN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm9qZWN0LWJ1aWxkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9wcm9qZWN0c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvamVucmMtanNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcmVhZG1lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zYW1wbGUtZmlsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2VtdmVyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zb3VyY2UtY29kZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFza1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGFza3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2stbW9kZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2stcnVudGltZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGVzdGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdGV4dGZpbGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RvbWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZlcnNpb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3lhbWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3htbGZpbGVcIjtcblxuLy8gZXhwb3J0IHN1Ym1vYnVsZXNcbmV4cG9ydCAqIGFzIHdlYiBmcm9tIFwiLi93ZWJcIjtcbmV4cG9ydCAqIGFzIGdpdGh1YiBmcm9tIFwiLi9naXRodWJcIjtcbmV4cG9ydCAqIGFzIHZzY29kZSBmcm9tIFwiLi92c2NvZGVcIjtcbmV4cG9ydCAqIGFzIGphdmEgZnJvbSBcIi4vamF2YVwiO1xuZXhwb3J0ICogYXMgcHl0aG9uIGZyb20gXCIuL3B5dGhvblwiO1xuZXhwb3J0ICogYXMgdHlwZXNjcmlwdCBmcm9tIFwiLi90eXBlc2NyaXB0XCI7XG5leHBvcnQgKiBhcyBqYXZhc2NyaXB0IGZyb20gXCIuL2phdmFzY3JpcHRcIjtcbmV4cG9ydCAqIGFzIHJlbGVhc2UgZnJvbSBcIi4vcmVsZWFzZVwiO1xuZXhwb3J0ICogYXMgYXdzY2RrIGZyb20gXCIuL2F3c2Nka1wiO1xuZXhwb3J0ICogYXMgY2RrOHMgZnJvbSBcIi4vY2RrOHNcIjtcbmV4cG9ydCAqIGFzIGNka3RmIGZyb20gXCIuL2Nka3RmXCI7XG5leHBvcnQgKiBhcyBjZGsgZnJvbSBcIi4vY2RrXCI7XG5leHBvcnQgKiBhcyBidWlsZCBmcm9tIFwiLi9idWlsZFwiO1xuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLDRDQUEwQjtBQUMxQixpREFBK0I7QUFDL0IsbURBQWlDO0FBQ2pDLHlDQUF1QjtBQUN2QixrREFBZ0M7QUFDaEMsMkNBQXlCO0FBQ3pCLGdEQUE4QjtBQUM5Qix3Q0FBc0I7QUFDdEIseUNBQXVCO0FBQ3ZCLDJDQUF5QjtBQUN6Qiw0Q0FBMEI7QUFDMUIsNkNBQTJCO0FBQzNCLGdEQUE4QjtBQUM5QixpREFBK0I7QUFDL0IsNENBQTBCO0FBQzFCLGtEQUFnQztBQUNoQyw2Q0FBMkI7QUFDM0Isa0RBQWdDO0FBQ2hDLDJDQUF5QjtBQUN6QixnREFBOEI7QUFDOUIsMkNBQXlCO0FBQ3pCLGdEQUE4QjtBQUM5Qix5Q0FBdUI7QUFDdkIsMENBQXdCO0FBQ3hCLCtDQUE2QjtBQUM3QixpREFBK0I7QUFDL0IsNENBQTBCO0FBQzFCLDZDQUEyQjtBQUMzQix5Q0FBdUI7QUFDdkIsNENBQTBCO0FBQzFCLHlDQUF1QjtBQUN2Qiw0Q0FBMEI7QUFFMUIsb0JBQW9CO0FBQ3BCLCtCQUE2QjtBQUM3QixxQ0FBbUM7QUFDbkMscUNBQW1DO0FBQ25DLHFDQUFtQztBQUNuQyxpQ0FBK0I7QUFDL0IscUNBQW1DO0FBQ25DLDZDQUEyQztBQUMzQyw2Q0FBMkM7QUFDM0MsdUNBQXFDO0FBQ3JDLHFDQUFtQztBQUNuQyxtQ0FBaUM7QUFDakMsbUNBQWlDO0FBQ2pDLCtCQUE2QjtBQUM3QixtQ0FBaUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2Rldi1lbnZcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlcGVuZGVuY2llc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZG9ja2VyLWNvbXBvc2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2ZpbGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dpdGF0dHJpYnV0ZXNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2dpdHBvZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vaWdub3JlLWZpbGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2luaVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vanNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vbG9nZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9saWNlbnNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tYWtlZmlsZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vb2JqZWN0LWZpbGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL29wdGlvbi1oaW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvamVjdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvamVjdC1idWlsZFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vcHJvamVjdHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Byb2plbnJjLWpzb25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL3JlYWRtZVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc2FtcGxlLWZpbGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NlbXZlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vc291cmNlLWNvZGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rhc2tzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YXNrLW1vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90YXNrLXJ1bnRpbWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3Rlc3RpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RleHRmaWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90b21sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi92ZXJzaW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi95YW1sXCI7XG5leHBvcnQgKiBmcm9tIFwiLi94bWxmaWxlXCI7XG5cbi8vIGV4cG9ydCBzdWJtb2J1bGVzXG5leHBvcnQgKiBhcyB3ZWIgZnJvbSBcIi4vd2ViXCI7XG5leHBvcnQgKiBhcyBnaXRodWIgZnJvbSBcIi4vZ2l0aHViXCI7XG5leHBvcnQgKiBhcyBnaXRsYWIgZnJvbSBcIi4vZ2l0bGFiXCI7XG5leHBvcnQgKiBhcyB2c2NvZGUgZnJvbSBcIi4vdnNjb2RlXCI7XG5leHBvcnQgKiBhcyBqYXZhIGZyb20gXCIuL2phdmFcIjtcbmV4cG9ydCAqIGFzIHB5dGhvbiBmcm9tIFwiLi9weXRob25cIjtcbmV4cG9ydCAqIGFzIHR5cGVzY3JpcHQgZnJvbSBcIi4vdHlwZXNjcmlwdFwiO1xuZXhwb3J0ICogYXMgamF2YXNjcmlwdCBmcm9tIFwiLi9qYXZhc2NyaXB0XCI7XG5leHBvcnQgKiBhcyByZWxlYXNlIGZyb20gXCIuL3JlbGVhc2VcIjtcbmV4cG9ydCAqIGFzIGF3c2NkayBmcm9tIFwiLi9hd3NjZGtcIjtcbmV4cG9ydCAqIGFzIGNkazhzIGZyb20gXCIuL2NkazhzXCI7XG5leHBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiLi9jZGt0ZlwiO1xuZXhwb3J0ICogYXMgY2RrIGZyb20gXCIuL2Nka1wiO1xuZXhwb3J0ICogYXMgYnVpbGQgZnJvbSBcIi4vYnVpbGRcIjtcbiJdfQ==
package/lib/ini.js CHANGED
@@ -36,5 +36,5 @@ class IniFile extends object_file_1.ObjectFile {
36
36
  }
37
37
  exports.IniFile = IniFile;
38
38
  _a = JSII_RTTI_SYMBOL_1;
39
- IniFile[_a] = { fqn: "projen.IniFile", version: "0.49.1" };
39
+ IniFile[_a] = { fqn: "projen.IniFile", version: "0.50.2" };
40
40
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2luaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUEyQjtBQUUzQiwrQ0FBOEQ7Ozs7OztBQU85RCxNQUFhLE9BQVEsU0FBUSx3QkFBVTs7OztJQUNyQyxZQUFZLE9BQWdCLEVBQUUsUUFBZ0IsRUFBRSxPQUF1QjtRQUNyRSxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDOzs7Ozs7SUFFUyxpQkFBaUIsQ0FBQyxRQUFtQjtRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsT0FBTztZQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0RCxFQUFFO1lBQ0YsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQzs7QUFoQkgsMEJBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgSU5JIGZyb20gXCJpbmlcIjtcbmltcG9ydCB7IElSZXNvbHZlciB9IGZyb20gXCIuL2ZpbGVcIjtcbmltcG9ydCB7IE9iamVjdEZpbGUsIE9iamVjdEZpbGVPcHRpb25zIH0gZnJvbSBcIi4vb2JqZWN0LWZpbGVcIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGludGVyZmFjZSBJbmlGaWxlT3B0aW9ucyBleHRlbmRzIE9iamVjdEZpbGVPcHRpb25zIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBjbGFzcyBJbmlGaWxlIGV4dGVuZHMgT2JqZWN0RmlsZSB7XG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIGZpbGVQYXRoOiBzdHJpbmcsIG9wdGlvbnM6IEluaUZpbGVPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCwgZmlsZVBhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVDb250ZW50KHJlc29sdmVyOiBJUmVzb2x2ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGpzb24gPSBzdXBlci5zeW50aGVzaXplQ29udGVudChyZXNvbHZlcik7XG4gICAgaWYgKCFqc29uKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICAuLi4odGhpcy5tYXJrZXIgPyBbYCMgJHtJbmlGaWxlLlBST0pFTl9NQVJLRVJ9YF0gOiBbXSksXG4gICAgICBcIlwiLFxuICAgICAgSU5JLnN0cmluZ2lmeShKU09OLnBhcnNlKGpzb24pKSxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbn1cbiJdfQ==