@codedrifters/configulator 0.0.86 → 0.0.87

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 (57) hide show
  1. package/lib/index.d.mts +1311 -0
  2. package/lib/index.d.ts +1311 -10
  3. package/lib/index.js +1508 -26
  4. package/lib/index.js.map +1 -0
  5. package/lib/index.mjs +1497 -0
  6. package/lib/index.mjs.map +1 -0
  7. package/package.json +5 -4
  8. package/lib/aws/aws-deployment-config.d.ts +0 -78
  9. package/lib/aws/aws-deployment-config.js +0 -134
  10. package/lib/aws/aws-deployment-target.d.ts +0 -183
  11. package/lib/aws/aws-deployment-target.js +0 -163
  12. package/lib/aws/aws-types.d.ts +0 -63
  13. package/lib/aws/aws-types.js +0 -9
  14. package/lib/aws/index.d.ts +0 -2
  15. package/lib/aws/index.js +0 -19
  16. package/lib/git/git-types.d.ts +0 -18
  17. package/lib/git/git-types.js +0 -9
  18. package/lib/git/index.d.ts +0 -1
  19. package/lib/git/index.js +0 -18
  20. package/lib/jsii/index.d.ts +0 -1
  21. package/lib/jsii/index.js +0 -18
  22. package/lib/jsii/jsii-faker.d.ts +0 -47
  23. package/lib/jsii/jsii-faker.js +0 -103
  24. package/lib/pnpm/index.d.ts +0 -1
  25. package/lib/pnpm/index.js +0 -18
  26. package/lib/pnpm/pnpm-workspace.d.ts +0 -244
  27. package/lib/pnpm/pnpm-workspace.js +0 -176
  28. package/lib/projects/index.d.ts +0 -2
  29. package/lib/projects/index.js +0 -19
  30. package/lib/projects/monorepo-project.d.ts +0 -100
  31. package/lib/projects/monorepo-project.js +0 -321
  32. package/lib/projects/typescript-project.d.ts +0 -20
  33. package/lib/projects/typescript-project.js +0 -199
  34. package/lib/tasks/index.d.ts +0 -1
  35. package/lib/tasks/index.js +0 -18
  36. package/lib/tasks/reset-task.d.ts +0 -51
  37. package/lib/tasks/reset-task.js +0 -149
  38. package/lib/turbo/index.d.ts +0 -2
  39. package/lib/turbo/index.js +0 -19
  40. package/lib/turbo/turbo-repo-task.d.ts +0 -36
  41. package/lib/turbo/turbo-repo-task.js +0 -43
  42. package/lib/turbo/turbo-repo.d.ts +0 -375
  43. package/lib/turbo/turbo-repo.js +0 -299
  44. package/lib/typescript/index.d.ts +0 -1
  45. package/lib/typescript/index.js +0 -18
  46. package/lib/typescript/typescript-config.d.ts +0 -13
  47. package/lib/typescript/typescript-config.js +0 -40
  48. package/lib/versions.d.ts +0 -34
  49. package/lib/versions.js +0 -38
  50. package/lib/vscode/index.d.ts +0 -1
  51. package/lib/vscode/index.js +0 -18
  52. package/lib/vscode/vscode.d.ts +0 -10
  53. package/lib/vscode/vscode.js +0 -38
  54. package/lib/workflows/aws-deploy-workflow.d.ts +0 -86
  55. package/lib/workflows/aws-deploy-workflow.js +0 -313
  56. package/lib/workflows/index.d.ts +0 -1
  57. package/lib/workflows/index.js +0 -18
@@ -1,100 +0,0 @@
1
- import { UpgradeDependencies, UpgradeDependenciesOptions } from "projen/lib/javascript";
2
- import { TypeScriptAppProject, TypeScriptProjectOptions } from "projen/lib/typescript";
3
- import { PnpmWorkspaceOptions } from "../pnpm/pnpm-workspace";
4
- import { ResetTaskOptions } from "../tasks/reset-task";
5
- import { TurboRepoOptions } from "../turbo/turbo-repo";
6
- /*******************************************************************************
7
- *
8
- * Monorepo Root Project
9
- *
10
- * This project should be used as the base project for other projects in a
11
- * monorepo. The Monorepo root project generally won't contain any code, but it
12
- * will contain configuration for the monorepo, such as package management,
13
- * linting, testing, and other project-wide settings.
14
- *
15
- ******************************************************************************/
16
- export interface IDependencyResolver {
17
- resolveDepsAndWritePackageJson(): boolean;
18
- }
19
- /**
20
- * Configuration options for the monorepo.
21
- */
22
- export interface MonorepoProjectOptions extends Omit<TypeScriptProjectOptions, "defaultReleaseBranch"> {
23
- /**
24
- * Turn on Turborepo support.
25
- *
26
- * @default true
27
- */
28
- turbo?: boolean;
29
- /**
30
- * Optionsal options for turborepo config
31
- */
32
- turboOptions?: TurboRepoOptions;
33
- /**
34
- * Enable the reset task that deletes all build artifacts.
35
- *
36
- * @default true
37
- */
38
- resetTask?: boolean;
39
- /**
40
- * Options for the reset task.
41
- */
42
- resetTaskOptions?: ResetTaskOptions;
43
- /**
44
- * PNPM options for the monorepo.
45
- */
46
- pnpmOptions?: {
47
- /**
48
- * The version of PNPM to use in the monorepo.
49
- * @default VERSION.PNPM_VERSION
50
- * @see {@link src/versions.ts}
51
- */
52
- version?: string;
53
- /**
54
- * Optional pnpm options for the monorepo workspace file.
55
- */
56
- pnpmWorkspaceOptions?: PnpmWorkspaceOptions;
57
- };
58
- /**
59
- * Turn on the upgrade configurator task that will attempt to upgrade the
60
- * @codedrifters/configulator package version nightly. This keeps the
61
- * project up-to-date with the latest official CodeDrifters configs..
62
- *
63
- * @default true
64
- */
65
- readonly upgradeConfigulatorTask?: boolean;
66
- /**
67
- * Options for the upgrade configurator task.
68
- *
69
- * @default: daily schedule
70
- */
71
- readonly upgradeConfigulatorTaskOptions?: UpgradeDependenciesOptions;
72
- }
73
- export declare class MonorepoProject extends TypeScriptAppProject {
74
- /**
75
- * Version of PNPM which the whole monorepo should use.
76
- */
77
- readonly pnpmVersion: string;
78
- /**
79
- * Optional task that will attempt to upgrade the @codedrifters/configulator
80
- * package version nightly. This keeps the project up-to-date with the latest
81
- * official CodeDrifters configs.
82
- */
83
- readonly upgradeConfigulatorTask?: UpgradeDependencies;
84
- /**
85
- * List of functions to call after dependencies have been installed.
86
- */
87
- private postInstallDependencies;
88
- constructor(userOptions: MonorepoProjectOptions);
89
- /**
90
- * Allows a sub project to request installation of dependency at the Monorepo root
91
- * They must provide a function that is executed after dependencies have been installed
92
- * If this function returns true, the install command is run for a second time after all sub project requests have run.
93
- * This is used to resolve dependency versions from `*` to a concrete version constraint.
94
- */
95
- requestInstallDependencies(resolver: IDependencyResolver): void;
96
- /**
97
- * Hooks into the install dependencies cycle
98
- */
99
- postSynthesize(): void;
100
- }
@@ -1,321 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MonorepoProject = void 0;
4
- const javascript_1 = require("projen/lib/javascript");
5
- const typescript_1 = require("projen/lib/typescript");
6
- const ts_deepmerge_1 = require("ts-deepmerge");
7
- const pnpm_workspace_1 = require("../pnpm/pnpm-workspace");
8
- const reset_task_1 = require("../tasks/reset-task");
9
- const turbo_repo_1 = require("../turbo/turbo-repo");
10
- const versions_1 = require("../versions");
11
- const vscode_1 = require("../vscode/vscode");
12
- class MonorepoProject extends typescript_1.TypeScriptAppProject {
13
- constructor(userOptions) {
14
- /***************************************************************************
15
- *
16
- * BUILD WORKFLOW OPTIONS
17
- *
18
- * discover some turbo options for build workflow, if needed.
19
- *
20
- **************************************************************************/
21
- const buildWorkflowOptions = userOptions
22
- .turboOptions?.remoteCacheOptions
23
- ? turbo_repo_1.TurboRepo.buildWorkflowOptions(userOptions.turboOptions.remoteCacheOptions)
24
- : {};
25
- /***************************************************************************
26
- *
27
- * DEFAULT OPTIONS
28
- *
29
- * These are the default options unless you override with option inputs.
30
- *
31
- **************************************************************************/
32
- const defaultOptions = {
33
- /**
34
- * Use typescript based config file.
35
- */
36
- projenrcTs: true,
37
- /**
38
- * Projen version should be pinned to the local specified version.
39
- */
40
- projenVersion: "catalog:",
41
- /**
42
- * Use Prettier for code formatting.
43
- */
44
- prettier: true,
45
- /**
46
- * Not licensed by default.
47
- */
48
- licensed: false,
49
- /**
50
- * GitHub options for the monorepo.
51
- * Don't enable mergify by default.
52
- */
53
- githubOptions: {
54
- mergify: false,
55
- /**
56
- * Configure pull request linting to validate PR titles follow Conventional Commits.
57
- * By default, all conventional commit types are allowed, providing flexibility
58
- * for different types of changes (features, fixes, documentation, refactoring, etc.).
59
- */
60
- pullRequestLintOptions: {
61
- semanticTitleOptions: {
62
- /**
63
- * Allowed conventional commit types for PR titles.
64
- * This includes all standard types from the Conventional Commits specification:
65
- * - feat: New features
66
- * - fix: Bug fixes
67
- * - docs: Documentation changes
68
- * - style: Code style changes (formatting, etc.)
69
- * - refactor: Code refactoring
70
- * - perf: Performance improvements
71
- * - test: Test additions or changes
72
- * - build: Build system changes
73
- * - ci: CI configuration changes
74
- * - chore: Maintenance tasks
75
- * - revert: Revert commits
76
- */
77
- types: [
78
- "feat",
79
- "fix",
80
- "docs",
81
- "style",
82
- "refactor",
83
- "perf",
84
- "test",
85
- "build",
86
- "ci",
87
- "chore",
88
- "revert",
89
- ],
90
- },
91
- },
92
- },
93
- /**
94
- * Default PNPM version to use in the monorepo.
95
- */
96
- pnpmVersion: versions_1.VERSION.PNPM_VERSION,
97
- /**
98
- * We don't want sample code generated for the root project.
99
- */
100
- sampleCode: false,
101
- /**
102
- * Jest is not required in the root project.
103
- */
104
- jest: false,
105
- /**
106
- * Don't release the root project.
107
- */
108
- release: false,
109
- /**
110
- * Uppgrade dependencies automatically unless otherwise instructed.
111
- */
112
- depsUpgrade: true,
113
- depsUpgradeOptions: {
114
- workflowOptions: {
115
- schedule: javascript_1.UpgradeDependenciesSchedule.WEEKLY,
116
- },
117
- cooldown: 1,
118
- },
119
- /**
120
- * Disable tsconfig.dev.json in the root since we aren't going to be
121
- * developing any code here. It's just a task runner and configuration
122
- * tool for sub-projects.
123
- */
124
- disableTsconfigDev: true,
125
- /**
126
- * Kill the srcdir in the root since we aren't using one.
127
- */
128
- tsconfig: {
129
- compilerOptions: {
130
- rootDir: undefined,
131
- },
132
- exclude: ["node_modules"],
133
- },
134
- /**
135
- * Enable turborepo by default.
136
- */
137
- turbo: true,
138
- /**
139
- * Enable reset task by default.
140
- */
141
- resetTask: true,
142
- /**
143
- * Include self as a devDep
144
- */
145
- devDeps: ["@codedrifters/configulator", "@codedrifters/utils"],
146
- /**
147
- * PNPM options for the monorepo.
148
- */
149
- pnpmOptions: {
150
- pnpmWorkspaceOptions: {
151
- defaultCatalog: {
152
- ["aws-cdk"]: versions_1.VERSION.AWS_CDK_CLI_VERSION,
153
- ["aws-cdk-lib"]: versions_1.VERSION.AWS_CDK_LIB_VERSION,
154
- ["projen"]: versions_1.VERSION.PROJEN_VERSION,
155
- ["constructs"]: versions_1.VERSION.AWS_CONSTRUCTS_VERSION,
156
- ["turbo"]: versions_1.VERSION.TURBO_VERSION,
157
- },
158
- },
159
- },
160
- };
161
- /***************************************************************************
162
- *
163
- * REQUIRED OPTIONS
164
- *
165
- * These options cannot be changed by the user.
166
- *
167
- **************************************************************************/
168
- const requiredOptions = {
169
- /**
170
- * This is required because it's standard practice and also to simplify
171
- * some workflow design.
172
- */
173
- defaultReleaseBranch: "main",
174
- /**
175
- * Use PNPM instead of the default (Yarn). Much of the ecosystem depends
176
- * on PNPM and making monorepos PNPM only simplifies many configurations.
177
- */
178
- packageManager: javascript_1.NodePackageManager.PNPM,
179
- /**
180
- * Some additional pre-build steps if we're using turbo's remote cache.
181
- */
182
- buildWorkflowOptions: {
183
- permissions: {
184
- ...buildWorkflowOptions?.permissions,
185
- ...userOptions.buildWorkflowOptions?.permissions,
186
- },
187
- preBuildSteps: [
188
- ...(buildWorkflowOptions?.preBuildSteps ?? []),
189
- ...(userOptions.buildWorkflowOptions?.preBuildSteps ?? []),
190
- ],
191
- },
192
- };
193
- /***************************************************************************
194
- *
195
- * CONSTRUCTOR
196
- *
197
- * Combines default options with user provided options and required options.
198
- * Store the options in a const so we can use them after super(), farther
199
- * into the constructor for additional configuration.
200
- *
201
- **************************************************************************/
202
- const options = (0, ts_deepmerge_1.merge)(defaultOptions, userOptions, requiredOptions);
203
- super({ ...options });
204
- /**
205
- * List of functions to call after dependencies have been installed.
206
- */
207
- this.postInstallDependencies = new Array();
208
- /***************************************************************************
209
- *
210
- * PUBLIC PROPS
211
- *
212
- * Some props are hidden by Projen and we need to expose them for the
213
- * monorepo to work properly. This is where we store them.
214
- *
215
- **************************************************************************/
216
- this.pnpmVersion = options.pnpmVersion;
217
- /***************************************************************************
218
- *
219
- * CUSTOM CONFIGS
220
- *
221
- * We add some additional configurations to the monorepo root project below
222
- * such as Turborepo, VS Code config, and the PNPM workspace file.
223
- *
224
- **************************************************************************/
225
- /**
226
- * Add VSCode configuration
227
- */
228
- new vscode_1.VSCodeConfig(this);
229
- /**
230
- * Add workspace definition to PNPM root
231
- */
232
- new pnpm_workspace_1.PnpmWorkspace(this, options.pnpmOptions?.pnpmWorkspaceOptions);
233
- /**
234
- * Turn on turborepo support if requested.
235
- */
236
- if (options.turbo) {
237
- new turbo_repo_1.TurboRepo(this, options.turboOptions);
238
- this.buildWorkflow?.addPostBuildSteps({
239
- name: "Build Sub Projects",
240
- run: `npx projen ${turbo_repo_1.ROOT_CI_TASK_NAME}`,
241
- });
242
- }
243
- /**
244
- * Add reset task if enabled.
245
- */
246
- if (options.resetTask !== false) {
247
- const defaultResetTaskOptions = {
248
- pathsToRemove: ["node_modules", ".turbo", "dist", "lib"],
249
- };
250
- const userResetTaskOptions = options.resetTaskOptions ?? {};
251
- const resetTaskOptions = (0, ts_deepmerge_1.merge)(defaultResetTaskOptions, {
252
- ...userResetTaskOptions,
253
- pathsToRemove: [
254
- ...(defaultResetTaskOptions.pathsToRemove ?? []),
255
- ...(userResetTaskOptions.pathsToRemove ?? []),
256
- ],
257
- });
258
- new reset_task_1.ResetTask(this, resetTaskOptions);
259
- }
260
- /**
261
- * Specify package manager
262
- */
263
- // const pnpmVersion = options.pnpmVersion ?? VERSION.PNPM_VERSION;
264
- this.package.file.addOverride("packageManager", `pnpm@${options.pnpmVersion}`);
265
- /**
266
- * Add some silly things to the gitignore.
267
- */
268
- this.gitignore?.addPatterns(".DS_Store");
269
- /**
270
- * Use catalog version for constructs version
271
- */
272
- this.addDevDeps("constructs@catalog:");
273
- /**
274
- * Add a task on the monorepo's root project that will attempt to upgrade
275
- * the @codedrifters/configulator package version nightly. This keeps the
276
- * project up-to-date with the latest official CodeDrifters configs..
277
- */
278
- if (options.upgradeConfigulatorTask !== false) {
279
- this.upgradeConfigulatorTask = new javascript_1.UpgradeDependencies(this, (0, ts_deepmerge_1.merge)({
280
- include: ["@codedrifters/configulator", "@codedrifters/utils"],
281
- taskName: `upgrade-codedrifters-configulator`,
282
- workflowOptions: {
283
- schedule: javascript_1.UpgradeDependenciesSchedule.DAILY,
284
- },
285
- }, options.upgradeConfigulatorTaskOptions ?? {}));
286
- }
287
- /**
288
- * Update all packages after the root of the monorepo's updated.
289
- * Run the default task after the upgrade to ensure all packages are
290
- * updated. In particular make sure the pnpm-workspace file was not
291
- * tampered with during the upgrade.
292
- */
293
- this.tasks.tryFind("post-upgrade")?.exec("pnpm upgrade -r");
294
- this.tasks.tryFind("post-upgrade")?.spawn(this.defaultTask);
295
- }
296
- /**
297
- * Allows a sub project to request installation of dependency at the Monorepo root
298
- * They must provide a function that is executed after dependencies have been installed
299
- * If this function returns true, the install command is run for a second time after all sub project requests have run.
300
- * This is used to resolve dependency versions from `*` to a concrete version constraint.
301
- */
302
- requestInstallDependencies(resolver) {
303
- this.postInstallDependencies.push(resolver.resolveDepsAndWritePackageJson);
304
- }
305
- /**
306
- * Hooks into the install dependencies cycle
307
- */
308
- postSynthesize() {
309
- if (this.postInstallDependencies.length) {
310
- const nodePkg = this.package;
311
- nodePkg.installDependencies();
312
- const completedRequests = this.postInstallDependencies.map((request) => request());
313
- if (completedRequests.some(Boolean)) {
314
- nodePkg.installDependencies();
315
- }
316
- this.postInstallDependencies = [];
317
- }
318
- }
319
- }
320
- exports.MonorepoProject = MonorepoProject;
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8tcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9tb25vcmVwby1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHNEQUsrQjtBQUMvQixzREFHK0I7QUFDL0IsK0NBQXFDO0FBQ3JDLDJEQUE2RTtBQUM3RSxvREFBa0U7QUFDbEUsb0RBSTZCO0FBQzdCLDBDQUFzQztBQUN0Qyw2Q0FBZ0Q7QUFxRmhELE1BQWEsZUFBZ0IsU0FBUSxpQ0FBb0I7SUFrQnZELFlBQVksV0FBbUM7UUFDN0M7Ozs7OztvRkFNNEU7UUFFNUUsTUFBTSxvQkFBb0IsR0FBa0MsV0FBVzthQUNwRSxZQUFZLEVBQUUsa0JBQWtCO1lBQ2pDLENBQUMsQ0FBQyxzQkFBUyxDQUFDLG9CQUFvQixDQUM1QixXQUFXLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUM1QztZQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUDs7Ozs7O29GQU00RTtRQUU1RSxNQUFNLGNBQWMsR0FHaEI7WUFDRjs7ZUFFRztZQUNILFVBQVUsRUFBRSxJQUFJO1lBRWhCOztlQUVHO1lBQ0gsYUFBYSxFQUFFLFVBQVU7WUFFekI7O2VBRUc7WUFDSCxRQUFRLEVBQUUsSUFBSTtZQUVkOztlQUVHO1lBQ0gsUUFBUSxFQUFFLEtBQUs7WUFFZjs7O2VBR0c7WUFDSCxhQUFhLEVBQUU7Z0JBQ2IsT0FBTyxFQUFFLEtBQUs7Z0JBRWQ7Ozs7bUJBSUc7Z0JBQ0gsc0JBQXNCLEVBQUU7b0JBQ3RCLG9CQUFvQixFQUFFO3dCQUNwQjs7Ozs7Ozs7Ozs7Ozs7MkJBY0c7d0JBQ0gsS0FBSyxFQUFFOzRCQUNMLE1BQU07NEJBQ04sS0FBSzs0QkFDTCxNQUFNOzRCQUNOLE9BQU87NEJBQ1AsVUFBVTs0QkFDVixNQUFNOzRCQUNOLE1BQU07NEJBQ04sT0FBTzs0QkFDUCxJQUFJOzRCQUNKLE9BQU87NEJBQ1AsUUFBUTt5QkFDVDtxQkFDRjtpQkFD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MENBa1lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVpbGRXb3JrZmxvd09wdGlvbnMgfSBmcm9tIFwicHJvamVuL2xpYi9idWlsZFwiO1xuaW1wb3J0IHtcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLFxuICBVcGdyYWRlRGVwZW5kZW5jaWVzLFxuICBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucyxcbiAgVXBncmFkZURlcGVuZGVuY2llc1NjaGVkdWxlLFxufSBmcm9tIFwicHJvamVuL2xpYi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQge1xuICBUeXBlU2NyaXB0QXBwUHJvamVjdCxcbiAgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zLFxufSBmcm9tIFwicHJvamVuL2xpYi90eXBlc2NyaXB0XCI7XG5pbXBvcnQgeyBtZXJnZSB9IGZyb20gXCJ0cy1kZWVwbWVyZ2VcIjtcbmltcG9ydCB7IFBucG1Xb3Jrc3BhY2UsIFBucG1Xb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSBcIi4uL3BucG0vcG5wbS13b3Jrc3BhY2VcIjtcbmltcG9ydCB7IFJlc2V0VGFzaywgUmVzZXRUYXNrT3B0aW9ucyB9IGZyb20gXCIuLi90YXNrcy9yZXNldC10YXNrXCI7XG5pbXBvcnQge1xuICBST09UX0NJX1RBU0tfTkFNRSxcbiAgVHVyYm9SZXBvLFxuICBUdXJib1JlcG9PcHRpb25zLFxufSBmcm9tIFwiLi4vdHVyYm8vdHVyYm8tcmVwb1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuLi92ZXJzaW9uc1wiO1xuaW1wb3J0IHsgVlNDb2RlQ29uZmlnIH0gZnJvbSBcIi4uL3ZzY29kZS92c2NvZGVcIjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKiBNb25vcmVwbyBSb290IFByb2plY3RcbiAqXG4gKiBUaGlzIHByb2plY3Qgc2hvdWxkIGJlIHVzZWQgYXMgdGhlIGJhc2UgcHJvamVjdCBmb3Igb3RoZXIgcHJvamVjdHMgaW4gYVxuICogbW9ub3JlcG8uIFRoZSBNb25vcmVwbyByb290IHByb2plY3QgZ2VuZXJhbGx5IHdvbid0IGNvbnRhaW4gYW55IGNvZGUsIGJ1dCBpdFxuICogd2lsbCBjb250YWluIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBtb25vcmVwbywgc3VjaCBhcyBwYWNrYWdlIG1hbmFnZW1lbnQsXG4gKiBsaW50aW5nLCB0ZXN0aW5nLCBhbmQgb3RoZXIgcHJvamVjdC13aWRlIHNldHRpbmdzLlxuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBpbnRlcmZhY2UgSURlcGVuZGVuY3lSZXNvbHZlciB7XG4gIHJlc29sdmVEZXBzQW5kV3JpdGVQYWNrYWdlSnNvbigpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIG1vbm9yZXBvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbm9yZXBvUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBPbWl0PFxuICBUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMsXG4gIFwiZGVmYXVsdFJlbGVhc2VCcmFuY2hcIlxuPiB7XG4gIC8qKlxuICAgKiBUdXJuIG9uIFR1cmJvcmVwbyBzdXBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB0dXJibz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnNhbCBvcHRpb25zIGZvciB0dXJib3JlcG8gY29uZmlnXG4gICAqL1xuICB0dXJib09wdGlvbnM/OiBUdXJib1JlcG9PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIHJlc2V0IHRhc2sgdGhhdCBkZWxldGVzIGFsbCBidWlsZCBhcnRpZmFjdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlc2V0VGFzaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSByZXNldCB0YXNrLlxuICAgKi9cbiAgcmVzZXRUYXNrT3B0aW9ucz86IFJlc2V0VGFza09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFBOUE0gb3B0aW9ucyBmb3IgdGhlIG1vbm9yZXBvLlxuICAgKi9cbiAgcG5wbU9wdGlvbnM/OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHZlcnNpb24gb2YgUE5QTSB0byB1c2UgaW4gdGhlIG1vbm9yZXBvLlxuICAgICAqIEBkZWZhdWx0IFZFUlNJT04uUE5QTV9WRVJTSU9OXG4gICAgICogQHNlZSB7QGxpbmsgc3JjL3ZlcnNpb25zLnRzfVxuICAgICAqL1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25hbCBwbnBtIG9wdGlvbnMgZm9yIHRoZSBtb25vcmVwbyB3b3Jrc3BhY2UgZmlsZS5cbiAgICAgKi9cbiAgICBwbnBtV29ya3NwYWNlT3B0aW9ucz86IFBucG1Xb3Jrc3BhY2VPcHRpb25zO1xuICB9O1xuXG4gIC8qKlxuICAgKiBUdXJuIG9uIHRoZSB1cGdyYWRlIGNvbmZpZ3VyYXRvciB0YXNrIHRoYXQgd2lsbCBhdHRlbXB0IHRvIHVwZ3JhZGUgdGhlXG4gICAqIEBjb2RlZHJpZnRlcnMvY29uZmlndWxhdG9yIHBhY2thZ2UgdmVyc2lvbiBuaWdodGx5LiBUaGlzIGtlZXBzIHRoZVxuICAgKiBwcm9qZWN0IHVwLXRvLWRhdGUgd2l0aCB0aGUgbGF0ZXN0IG9mZmljaWFsIENvZGVEcmlmdGVycyBjb25maWdzLi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZUNvbmZpZ3VsYXRvclRhc2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgdXBncmFkZSBjb25maWd1cmF0b3IgdGFzay5cbiAgICpcbiAgICogQGRlZmF1bHQ6IGRhaWx5IHNjaGVkdWxlXG4gICAqL1xuICByZWFkb25seSB1cGdyYWRlQ29uZmlndWxhdG9yVGFza09wdGlvbnM/OiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucztcbn1cblxuaW50ZXJmYWNlIEFwcGxpZWRPcHRpb25zXG4gIGV4dGVuZHMgVHlwZVNjcmlwdFByb2plY3RPcHRpb25zLCBNb25vcmVwb1Byb2plY3RPcHRpb25zIHt9XG5cbmV4cG9ydCBjbGFzcyBNb25vcmVwb1Byb2plY3QgZXh0ZW5kcyBUeXBlU2NyaXB0QXBwUHJvamVjdCB7XG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIFBOUE0gd2hpY2ggdGhlIHdob2xlIG1vbm9yZXBvIHNob3VsZCB1c2UuXG4gICAqL1xuICByZWFkb25seSBwbnBtVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCB0YXNrIHRoYXQgd2lsbCBhdHRlbXB0IHRvIHVwZ3JhZGUgdGhlIEBjb2RlZHJpZnRlcnMvY29uZmlndWxhdG9yXG4gICAqIHBhY2thZ2UgdmVyc2lvbiBuaWdodGx5LiBUaGlzIGtlZXBzIHRoZSBwcm9qZWN0IHVwLXRvLWRhdGUgd2l0aCB0aGUgbGF0ZXN0XG4gICAqIG9mZmljaWFsIENvZGVEcmlmdGVycyBjb25maWdzLlxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZUNvbmZpZ3VsYXRvclRhc2s/OiBVcGdyYWRlRGVwZW5kZW5jaWVzO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGZ1bmN0aW9ucyB0byBjYWxsIGFmdGVyIGRlcGVuZGVuY2llcyBoYXZlIGJlZW4gaW5zdGFsbGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBwb3N0SW5zdGFsbERlcGVuZGVuY2llcyA9IG5ldyBBcnJheTwoKSA9PiBib29sZWFuPigpO1xuXG4gIGNvbnN0cnVjdG9yKHVzZXJPcHRpb25zOiBNb25vcmVwb1Byb2plY3RPcHRpb25zKSB7XG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogQlVJTEQgV09SS0ZMT1cgT1BUSU9OU1xuICAgICAqXG4gICAgICogZGlzY292ZXIgc29tZSB0dXJibyBvcHRpb25zIGZvciBidWlsZCB3b3JrZmxvdywgaWYgbmVlZGVkLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgYnVpbGRXb3JrZmxvd09wdGlvbnM6IFBhcnRpYWw8QnVpbGRXb3JrZmxvd09wdGlvbnM+ID0gdXNlck9wdGlvbnNcbiAgICAgIC50dXJib09wdGlvbnM/LnJlbW90ZUNhY2hlT3B0aW9uc1xuICAgICAgPyBUdXJib1JlcG8uYnVpbGRXb3JrZmxvd09wdGlvbnMoXG4gICAgICAgICAgdXNlck9wdGlvbnMudHVyYm9PcHRpb25zLnJlbW90ZUNhY2hlT3B0aW9ucyxcbiAgICAgICAgKVxuICAgICAgOiB7fTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIERFRkFVTFQgT1BUSU9OU1xuICAgICAqXG4gICAgICogVGhlc2UgYXJlIHRoZSBkZWZhdWx0IG9wdGlvbnMgdW5sZXNzIHlvdSBvdmVycmlkZSB3aXRoIG9wdGlvbiBpbnB1dHMuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICBjb25zdCBkZWZhdWx0T3B0aW9uczogT21pdDxcbiAgICAgIE1vbm9yZXBvUHJvamVjdE9wdGlvbnMsXG4gICAgICBcIm5hbWVcIiB8IFwiZGVmYXVsdFJlbGVhc2VCcmFuY2hcIlxuICAgID4gPSB7XG4gICAgICAvKipcbiAgICAgICAqIFVzZSB0eXBlc2NyaXB0IGJhc2VkIGNvbmZpZyBmaWxlLlxuICAgICAgICovXG4gICAgICBwcm9qZW5yY1RzOiB0cnVlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFByb2plbiB2ZXJzaW9uIHNob3VsZCBiZSBwaW5uZWQgdG8gdGhlIGxvY2FsIHNwZWNpZmllZCB2ZXJzaW9uLlxuICAgICAgICovXG4gICAgICBwcm9qZW5WZXJzaW9uOiBcImNhdGFsb2c6XCIsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlIFByZXR0aWVyIGZvciBjb2RlIGZvcm1hdHRpbmcuXG4gICAgICAgKi9cbiAgICAgIHByZXR0aWVyOiB0cnVlLFxuXG4gICAgICAvKipcbiAgICAgICAqIE5vdCBsaWNlbnNlZCBieSBkZWZhdWx0LlxuICAgICAgICovXG4gICAgICBsaWNlbnNlZDogZmFsc2UsXG5cbiAgICAgIC8qKlxuICAgICAgICogR2l0SHViIG9wdGlvbnMgZm9yIHRoZSBtb25vcmVwby5cbiAgICAgICAqIERvbid0IGVuYWJsZSBtZXJnaWZ5IGJ5IGRlZmF1bHQuXG4gICAgICAgKi9cbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgbWVyZ2lmeTogZmFsc2UsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbmZpZ3VyZSBwdWxsIHJlcXVlc3QgbGludGluZyB0byB2YWxpZGF0ZSBQUiB0aXRsZXMgZm9sbG93IENvbnZlbnRpb25hbCBDb21taXRzLlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCBhbGwgY29udmVudGlvbmFsIGNvbW1pdCB0eXBlcyBhcmUgYWxsb3dlZCwgcHJvdmlkaW5nIGZsZXhpYmlsaXR5XG4gICAgICAgICAqIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgY2hhbmdlcyAoZmVhdHVyZXMsIGZpeGVzLCBkb2N1bWVudGF0aW9uLCByZWZhY3RvcmluZywgZXRjLikuXG4gICAgICAgICAqL1xuICAgICAgICBwdWxsUmVxdWVzdExpbnRPcHRpb25zOiB7XG4gICAgICAgICAgc2VtYW50aWNUaXRsZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWxsb3dlZCBjb252ZW50aW9uYWwgY29tbWl0IHR5cGVzIGZvciBQUiB0aXRsZXMuXG4gICAgICAgICAgICAgKiBUaGlzIGluY2x1ZGVzIGFsbCBzdGFuZGFyZCB0eXBlcyBmcm9tIHRoZSBDb252ZW50aW9uYWwgQ29tbWl0cyBzcGVjaWZpY2F0aW9uOlxuICAgICAgICAgICAgICogLSBmZWF0OiBOZXcgZmVhdHVyZXNcbiAgICAgICAgICAgICAqIC0gZml4OiBCdWcgZml4ZXNcbiAgICAgICAgICAgICAqIC0gZG9jczogRG9jdW1lbnRhdGlvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgKiAtIHN0eWxlOiBDb2RlIHN0eWxlIGNoYW5nZXMgKGZvcm1hdHRpbmcsIGV0Yy4pXG4gICAgICAgICAgICAgKiAtIHJlZmFjdG9yOiBDb2RlIHJlZmFjdG9yaW5nXG4gICAgICAgICAgICAgKiAtIHBlcmY6IFBlcmZvcm1hbmNlIGltcHJvdmVtZW50c1xuICAgICAgICAgICAgICogLSB0ZXN0OiBUZXN0IGFkZGl0aW9ucyBvciBjaGFuZ2VzXG4gICAgICAgICAgICAgKiAtIGJ1aWxkOiBCdWlsZCBzeXN0ZW0gY2hhbmdlc1xuICAgICAgICAgICAgICogLSBjaTogQ0kgY29uZmlndXJhdGlvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgKiAtIGNob3JlOiBNYWludGVuYW5jZSB0YXNrc1xuICAgICAgICAgICAgICogLSByZXZlcnQ6IFJldmVydCBjb21taXRzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgICAgIFwiZmVhdFwiLFxuICAgICAgICAgICAgICBcImZpeFwiLFxuICAgICAgICAgICAgICBcImRvY3NcIixcbiAgICAgICAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICAgICAgICBcInJlZmFjdG9yXCIsXG4gICAgICAgICAgICAgIFwicGVyZlwiLFxuICAgICAgICAgICAgICBcInRlc3RcIixcbiAgICAgICAgICAgICAgXCJidWlsZFwiLFxuICAgICAgICAgICAgICBcImNpXCIsXG4gICAgICAgICAgICAgIFwiY2hvcmVcIixcbiAgICAgICAgICAgICAgXCJyZXZlcnRcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIC8qKlxuICAgICAgICogRGVmYXVsdCBQTlBNIHZlcnNpb24gdG8gdXNlIGluIHRoZSBtb25vcmVwby5cbiAgICAgICAqL1xuICAgICAgcG5wbVZlcnNpb246IFZFUlNJT04uUE5QTV9WRVJTSU9OLFxuXG4gICAgICAvKipcbiAgICAgICAqIFdlIGRvbid0IHdhbnQgc2FtcGxlIGNvZGUgZ2VuZXJhdGVkIGZvciB0aGUgcm9vdCBwcm9qZWN0LlxuICAgICAgICovXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBKZXN0IGlzIG5vdCByZXF1aXJlZCBpbiB0aGUgcm9vdCBwcm9qZWN0LlxuICAgICAgICovXG4gICAgICBqZXN0OiBmYWxzZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBEb24ndCByZWxlYXNlIHRoZSByb290IHByb2plY3QuXG4gICAgICAgKi9cbiAgICAgIHJlbGVhc2U6IGZhbHNlLFxuXG4gICAgICAvKipcbiAgICAgICAqIFVwcGdyYWRlIGRlcGVuZGVuY2llcyBhdXRvbWF0aWNhbGx5IHVubGVzcyBvdGhlcndpc2UgaW5zdHJ1Y3RlZC5cbiAgICAgICAqL1xuICAgICAgZGVwc1VwZ3JhZGU6IHRydWUsXG4gICAgICBkZXBzVXBncmFkZU9wdGlvbnM6IHtcbiAgICAgICAgd29ya2Zsb3dPcHRpb25zOiB7XG4gICAgICAgICAgc2NoZWR1bGU6IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZS5XRUVLTFksXG4gICAgICAgIH0sXG4gICAgICAgIGNvb2xkb3duOiAxLFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBEaXNhYmxlIHRzY29uZmlnLmRldi5qc29uIGluIHRoZSByb290IHNpbmNlIHdlIGFyZW4ndCBnb2luZyB0byBiZVxuICAgICAgICogZGV2ZWxvcGluZyBhbnkgY29kZSBoZXJlLiBJdCdzIGp1c3QgYSB0YXNrIHJ1bm5lciBhbmQgY29uZmlndXJhdGlvblxuICAgICAgICogdG9vbCBmb3Igc3ViLXByb2plY3RzLlxuICAgICAgICovXG4gICAgICBkaXNhYmxlVHNjb25maWdEZXY6IHRydWUsXG5cbiAgICAgIC8qKlxuICAgICAgICogS2lsbCB0aGUgc3JjZGlyIGluIHRoZSByb290IHNpbmNlIHdlIGFyZW4ndCB1c2luZyBvbmUuXG4gICAgICAgKi9cbiAgICAgIHRzY29uZmlnOiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHJvb3REaXI6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgZXhjbHVkZTogW1wibm9kZV9tb2R1bGVzXCJdLFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBFbmFibGUgdHVyYm9yZXBvIGJ5IGRlZmF1bHQuXG4gICAgICAgKi9cbiAgICAgIHR1cmJvOiB0cnVlLFxuXG4gICAgICAvKipcbiAgICAgICAqIEVuYWJsZSByZXNldCB0YXNrIGJ5IGRlZmF1bHQuXG4gICAgICAgKi9cbiAgICAgIHJlc2V0VGFzazogdHJ1ZSxcblxuICAgICAgLyoqXG4gICAgICAgKiBJbmNsdWRlIHNlbGYgYXMgYSBkZXZEZXBcbiAgICAgICAqL1xuICAgICAgZGV2RGVwczogW1wiQGNvZGVkcmlmdGVycy9jb25maWd1bGF0b3JcIiwgXCJAY29kZWRyaWZ0ZXJzL3V0aWxzXCJdLFxuXG4gICAgICAvKipcbiAgICAgICAqIFBOUE0gb3B0aW9ucyBmb3IgdGhlIG1vbm9yZXBvLlxuICAgICAgICovXG4gICAgICBwbnBtT3B0aW9uczoge1xuICAgICAgICBwbnBtV29ya3NwYWNlT3B0aW9uczoge1xuICAgICAgICAgIGRlZmF1bHRDYXRhbG9nOiB7XG4gICAgICAgICAgICBbXCJhd3MtY2RrXCJdOiBWRVJTSU9OLkFXU19DREtfQ0xJX1ZFUlNJT04sXG4gICAgICAgICAgICBbXCJhd3MtY2RrLWxpYlwiXTogVkVSU0lPTi5BV1NfQ0RLX0xJQl9WRVJTSU9OLFxuICAgICAgICAgICAgW1wicHJvamVuXCJdOiBWRVJTSU9OLlBST0pFTl9WRVJTSU9OLFxuICAgICAgICAgICAgW1wiY29uc3RydWN0c1wiXTogVkVSU0lPTi5BV1NfQ09OU1RSVUNUU19WRVJTSU9OLFxuICAgICAgICAgICAgW1widHVyYm9cIl06IFZFUlNJT04uVFVSQk9fVkVSU0lPTixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogUkVRVUlSRUQgT1BUSU9OU1xuICAgICAqXG4gICAgICogVGhlc2Ugb3B0aW9ucyBjYW5ub3QgYmUgY2hhbmdlZCBieSB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGNvbnN0IHJlcXVpcmVkT3B0aW9uczogT21pdDxUeXBlU2NyaXB0UHJvamVjdE9wdGlvbnMsIFwibmFtZVwiPiA9IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhpcyBpcyByZXF1aXJlZCBiZWNhdXNlIGl0J3Mgc3RhbmRhcmQgcHJhY3RpY2UgYW5kIGFsc28gdG8gc2ltcGxpZnlcbiAgICAgICAqIHNvbWUgd29ya2Zsb3cgZGVzaWduLlxuICAgICAgICovXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogXCJtYWluXCIsXG5cbiAgICAgIC8qKlxuICAgICAgICogVXNlIFBOUE0gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAoWWFybikuIE11Y2ggb2YgdGhlIGVjb3N5c3RlbSBkZXBlbmRzXG4gICAgICAgKiBvbiBQTlBNIGFuZCBtYWtpbmcgbW9ub3JlcG9zIFBOUE0gb25seSBzaW1wbGlmaWVzIG1hbnkgY29uZmlndXJhdGlvbnMuXG4gICAgICAgKi9cbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSxcblxuICAgICAgLyoqXG4gICAgICAgKiBTb21lIGFkZGl0aW9uYWwgcHJlLWJ1aWxkIHN0ZXBzIGlmIHdlJ3JlIHVzaW5nIHR1cmJvJ3MgcmVtb3RlIGNhY2hlLlxuICAgICAgICovXG4gICAgICBidWlsZFdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIC4uLmJ1aWxkV29ya2Zsb3dPcHRpb25zPy5wZXJtaXNzaW9ucyxcbiAgICAgICAgICAuLi51c2VyT3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucz8ucGVybWlzc2lvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHByZUJ1aWxkU3RlcHM6IFtcbiAgICAgICAgICAuLi4oYnVpbGRXb3JrZmxvd09wdGlvbnM/LnByZUJ1aWxkU3RlcHMgPz8gW10pLFxuICAgICAgICAgIC4uLih1c2VyT3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucz8ucHJlQnVpbGRTdGVwcyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBDT05TVFJVQ1RPUlxuICAgICAqXG4gICAgICogQ29tYmluZXMgZGVmYXVsdCBvcHRpb25zIHdpdGggdXNlciBwcm92aWRlZCBvcHRpb25zIGFuZCByZXF1aXJlZCBvcHRpb25zLlxuICAgICAqIFN0b3JlIHRoZSBvcHRpb25zIGluIGEgY29uc3Qgc28gd2UgY2FuIHVzZSB0aGVtIGFmdGVyIHN1cGVyKCksIGZhcnRoZXJcbiAgICAgKiBpbnRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXBwbGllZE9wdGlvbnMgPSBtZXJnZShcbiAgICAgIGRlZmF1bHRPcHRpb25zLFxuICAgICAgdXNlck9wdGlvbnMsXG4gICAgICByZXF1aXJlZE9wdGlvbnMsXG4gICAgKTtcblxuICAgIHN1cGVyKHsgLi4ub3B0aW9ucyB9KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFBVQkxJQyBQUk9QU1xuICAgICAqXG4gICAgICogU29tZSBwcm9wcyBhcmUgaGlkZGVuIGJ5IFByb2plbiBhbmQgd2UgbmVlZCB0byBleHBvc2UgdGhlbSBmb3IgdGhlXG4gICAgICogbW9ub3JlcG8gdG8gd29yayBwcm9wZXJseS4gVGhpcyBpcyB3aGVyZSB3ZSBzdG9yZSB0aGVtLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5wbnBtVmVyc2lvbiA9IG9wdGlvbnMucG5wbVZlcnNpb24hO1xuXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgICAqXG4gICAgICogQ1VTVE9NIENPTkZJR1NcbiAgICAgKlxuICAgICAqIFdlIGFkZCBzb21lIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbnMgdG8gdGhlIG1vbm9yZXBvIHJvb3QgcHJvamVjdCBiZWxvd1xuICAgICAqIHN1Y2ggYXMgVHVyYm9yZXBvLCBWUyBDb2RlIGNvbmZpZywgYW5kIHRoZSBQTlBNIHdvcmtzcGFjZSBmaWxlLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgLyoqXG4gICAgICogQWRkIFZTQ29kZSBjb25maWd1cmF0aW9uXG4gICAgICovXG4gICAgbmV3IFZTQ29kZUNvbmZpZyh0aGlzKTtcblxuICAgIC8qKlxuICAgICAqIEFkZCB3b3Jrc3BhY2UgZGVmaW5pdGlvbiB0byBQTlBNIHJvb3RcbiAgICAgKi9cbiAgICBuZXcgUG5wbVdvcmtzcGFjZSh0aGlzLCBvcHRpb25zLnBucG1PcHRpb25zPy5wbnBtV29ya3NwYWNlT3B0aW9ucyk7XG5cbiAgICAvKipcbiAgICAgKiBUdXJuIG9uIHR1cmJvcmVwbyBzdXBwb3J0IGlmIHJlcXVlc3RlZC5cbiAgICAgKi9cbiAgICBpZiAob3B0aW9ucy50dXJibykge1xuICAgICAgbmV3IFR1cmJvUmVwbyh0aGlzLCBvcHRpb25zLnR1cmJvT3B0aW9ucyk7XG5cbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdz8uYWRkUG9zdEJ1aWxkU3RlcHMoe1xuICAgICAgICBuYW1lOiBcIkJ1aWxkIFN1YiBQcm9qZWN0c1wiLFxuICAgICAgICBydW46IGBucHggcHJvamVuICR7Uk9PVF9DSV9UQVNLX05BTUV9YCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZCByZXNldCB0YXNrIGlmIGVuYWJsZWQuXG4gICAgICovXG4gICAgaWYgKG9wdGlvbnMucmVzZXRUYXNrICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgZGVmYXVsdFJlc2V0VGFza09wdGlvbnM6IFJlc2V0VGFza09wdGlvbnMgPSB7XG4gICAgICAgIHBhdGhzVG9SZW1vdmU6IFtcIm5vZGVfbW9kdWxlc1wiLCBcIi50dXJib1wiLCBcImRpc3RcIiwgXCJsaWJcIl0sXG4gICAgICB9O1xuICAgICAgY29uc3QgdXNlclJlc2V0VGFza09wdGlvbnMgPSBvcHRpb25zLnJlc2V0VGFza09wdGlvbnMgPz8ge307XG4gICAgICBjb25zdCByZXNldFRhc2tPcHRpb25zOiBSZXNldFRhc2tPcHRpb25zID0gbWVyZ2UoXG4gICAgICAgIGRlZmF1bHRSZXNldFRhc2tPcHRpb25zLFxuICAgICAgICB7XG4gICAgICAgICAgLi4udXNlclJlc2V0VGFza09wdGlvbnMsXG4gICAgICAgICAgcGF0aHNUb1JlbW92ZTogW1xuICAgICAgICAgICAgLi4uKGRlZmF1bHRSZXNldFRhc2tPcHRpb25zLnBhdGhzVG9SZW1vdmUgPz8gW10pLFxuICAgICAgICAgICAgLi4uKHVzZXJSZXNldFRhc2tPcHRpb25zLnBhdGhzVG9SZW1vdmUgPz8gW10pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbmV3IFJlc2V0VGFzayh0aGlzLCByZXNldFRhc2tPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IHBhY2thZ2UgbWFuYWdlclxuICAgICAqL1xuICAgIC8vIGNvbnN0IHBucG1WZXJzaW9uID0gb3B0aW9ucy5wbnBtVmVyc2lvbiA/PyBWRVJTSU9OLlBOUE1fVkVSU0lPTjtcbiAgICB0aGlzLnBhY2thZ2UuZmlsZS5hZGRPdmVycmlkZShcbiAgICAgIFwicGFja2FnZU1hbmFnZXJcIixcbiAgICAgIGBwbnBtQCR7b3B0aW9ucy5wbnBtVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiBBZGQgc29tZSBzaWxseSB0aGluZ3MgdG8gdGhlIGdpdGlnbm9yZS5cbiAgICAgKi9cbiAgICB0aGlzLmdpdGlnbm9yZT8uYWRkUGF0dGVybnMoXCIuRFNfU3RvcmVcIik7XG5cbiAgICAvKipcbiAgICAgKiBVc2UgY2F0YWxvZyB2ZXJzaW9uIGZvciBjb25zdHJ1Y3RzIHZlcnNpb25cbiAgICAgKi9cbiAgICB0aGlzLmFkZERldkRlcHMoXCJjb25zdHJ1Y3RzQGNhdGFsb2c6XCIpO1xuXG4gICAgLyoqXG4gICAgICogQWRkIGEgdGFzayBvbiB0aGUgbW9ub3JlcG8ncyByb290IHByb2plY3QgdGhhdCB3aWxsIGF0dGVtcHQgdG8gdXBncmFkZVxuICAgICAqIHRoZSBAY29kZWRyaWZ0ZXJzL2NvbmZpZ3VsYXRvciBwYWNrYWdlIHZlcnNpb24gbmlnaHRseS4gVGhpcyBrZWVwcyB0aGVcbiAgICAgKiBwcm9qZWN0IHVwLXRvLWRhdGUgd2l0aCB0aGUgbGF0ZXN0IG9mZmljaWFsIENvZGVEcmlmdGVycyBjb25maWdzLi5cbiAgICAgKi9cbiAgICBpZiAob3B0aW9ucy51cGdyYWRlQ29uZmlndWxhdG9yVGFzayAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMudXBncmFkZUNvbmZpZ3VsYXRvclRhc2sgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5jbHVkZTogW1wiQGNvZGVkcmlmdGVycy9jb25maWd1bGF0b3JcIiwgXCJAY29kZWRyaWZ0ZXJzL3V0aWxzXCJdLFxuICAgICAgICAgICAgdGFza05hbWU6IGB1cGdyYWRlLWNvZGVkcmlmdGVycy1jb25maWd1bGF0b3JgLFxuICAgICAgICAgICAgd29ya2Zsb3dPcHRpb25zOiB7XG4gICAgICAgICAgICAgIHNjaGVkdWxlOiBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuREFJTFksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy51cGdyYWRlQ29uZmlndWxhdG9yVGFza09wdGlvbnMgPz8ge30sXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSBhbGwgcGFja2FnZXMgYWZ0ZXIgdGhlIHJvb3Qgb2YgdGhlIG1vbm9yZXBvJ3MgdXBkYXRlZC5cbiAgICAgKiBSdW4gdGhlIGRlZmF1bHQgdGFzayBhZnRlciB0aGUgdXBncmFkZSB0byBlbnN1cmUgYWxsIHBhY2thZ2VzIGFyZVxuICAgICAqIHVwZGF0ZWQuIEluIHBhcnRpY3VsYXIgbWFrZSBzdXJlIHRoZSBwbnBtLXdvcmtzcGFjZSBmaWxlIHdhcyBub3RcbiAgICAgKiB0YW1wZXJlZCB3aXRoIGR1cmluZyB0aGUgdXBncmFkZS5cbiAgICAgKi9cbiAgICB0aGlzLnRhc2tzLnRyeUZpbmQoXCJwb3N0LXVwZ3JhZGVcIik/LmV4ZWMoXCJwbnBtIHVwZ3JhZGUgLXJcIik7XG4gICAgdGhpcy50YXNrcy50cnlGaW5kKFwicG9zdC11cGdyYWRlXCIpPy5zcGF3bih0aGlzLmRlZmF1bHRUYXNrISk7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3dzIGEgc3ViIHByb2plY3QgdG8gcmVxdWVzdCBpbnN0YWxsYXRpb24gb2YgZGVwZW5kZW5jeSBhdCB0aGUgTW9ub3JlcG8gcm9vdFxuICAgKiBUaGV5IG11c3QgcHJvdmlkZSBhIGZ1bmN0aW9uIHRoYXQgaXMgZXhlY3V0ZWQgYWZ0ZXIgZGVwZW5kZW5jaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWRcbiAgICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHRoZSBpbnN0YWxsIGNvbW1hbmQgaXMgcnVuIGZvciBhIHNlY29uZCB0aW1lIGFmdGVyIGFsbCBzdWIgcHJvamVjdCByZXF1ZXN0cyBoYXZlIHJ1bi5cbiAgICogVGhpcyBpcyB1c2VkIHRvIHJlc29sdmUgZGVwZW5kZW5jeSB2ZXJzaW9ucyBmcm9tIGAqYCB0byBhIGNvbmNyZXRlIHZlcnNpb24gY29uc3RyYWludC5cbiAgICovXG4gIHB1YmxpYyByZXF1ZXN0SW5zdGFsbERlcGVuZGVuY2llcyhyZXNvbHZlcjogSURlcGVuZGVuY3lSZXNvbHZlcikge1xuICAgIHRoaXMucG9zdEluc3RhbGxEZXBlbmRlbmNpZXMucHVzaChyZXNvbHZlci5yZXNvbHZlRGVwc0FuZFdyaXRlUGFja2FnZUpzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2tzIGludG8gdGhlIGluc3RhbGwgZGVwZW5kZW5jaWVzIGN5Y2xlXG4gICAqL1xuICBwdWJsaWMgcG9zdFN5bnRoZXNpemUoKSB7XG4gICAgaWYgKHRoaXMucG9zdEluc3RhbGxEZXBlbmRlbmNpZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBub2RlUGtnOiBhbnkgPSB0aGlzLnBhY2thZ2U7XG4gICAgICBub2RlUGtnLmluc3RhbGxEZXBlbmRlbmNpZXMoKTtcblxuICAgICAgY29uc3QgY29tcGxldGVkUmVxdWVzdHMgPSB0aGlzLnBvc3RJbnN0YWxsRGVwZW5kZW5jaWVzLm1hcCgocmVxdWVzdCkgPT5cbiAgICAgICAgcmVxdWVzdCgpLFxuICAgICAgKTtcbiAgICAgIGlmIChjb21wbGV0ZWRSZXF1ZXN0cy5zb21lKEJvb2xlYW4pKSB7XG4gICAgICAgIG5vZGVQa2cuaW5zdGFsbERlcGVuZGVuY2llcygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnBvc3RJbnN0YWxsRGVwZW5kZW5jaWVzID0gW107XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,20 +0,0 @@
1
- import { typescript } from "projen";
2
- import { ResetTaskOptions } from "../tasks/reset-task";
3
- /**
4
- * Configuration options for TypeScriptProject.
5
- */
6
- export interface TypeScriptProjectOptions extends Omit<typescript.TypeScriptProjectOptions, "defaultReleaseBranch"> {
7
- /**
8
- * Enable the reset task that deletes all build artifacts.
9
- *
10
- * @default true
11
- */
12
- readonly resetTask?: boolean;
13
- /**
14
- * Options for the reset task.
15
- */
16
- readonly resetTaskOptions?: ResetTaskOptions;
17
- }
18
- export declare class TypeScriptProject extends typescript.TypeScriptProject {
19
- constructor(userOptions: TypeScriptProjectOptions);
20
- }