@codedrifters/configulator 0.0.85 → 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 +11 -8
  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 -82
  31. package/lib/projects/monorepo-project.js +0 -277
  32. package/lib/projects/typescript-project.d.ts +0 -20
  33. package/lib/projects/typescript-project.js +0 -181
  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,86 +0,0 @@
1
- import { AWS_STAGE_TYPE, AwsStageType, DeploymentTargetRoleType } from "@codedrifters/utils";
2
- import { Component } from "projen";
3
- import { AwsCdkTypeScriptApp } from "projen/lib/awscdk";
4
- import { BuildWorkflow, BuildWorkflowOptions } from "projen/lib/build";
5
- import { JobStep } from "projen/lib/github/workflows-model";
6
- import { ValueOf } from "type-fest";
7
- import { AwsDeploymentTarget } from "../aws/aws-deployment-target";
8
- export declare const PROD_DEPLOY_NAME = "prod-deploy";
9
- export interface DeployWorkflowOptions {
10
- /**
11
- * What type of deploy is this workflow for?
12
- *
13
- * @default AWS_STAGE_TYPE.DEV
14
- */
15
- readonly awsStageType?: ValueOf<typeof AWS_STAGE_TYPE>;
16
- /**
17
- * Optionally feed a list of targets to deploy to.
18
- *
19
- * @default discovers all targets using stageType
20
- */
21
- readonly awsDeploymentTargets?: Array<AwsDeploymentTarget>;
22
- /**
23
- * Existing workflow, useful if we're tacking deployments onto an existing
24
- * build workflow
25
- */
26
- readonly buildWorkflow?: BuildWorkflow;
27
- /**
28
- * Options for the build workflow, if no build workflow is provided.
29
- */
30
- readonly buildWorkflowOptions?: Partial<BuildWorkflowOptions>;
31
- /**
32
- * Projects that should complete deployment before this one starts.
33
- */
34
- readonly deployAfterTargets?: Array<AwsDeploymentTarget>;
35
- }
36
- export declare class AwsDeployWorkflow extends Component {
37
- project: AwsCdkTypeScriptApp;
38
- static of(project: AwsCdkTypeScriptApp, buildWorkflow: BuildWorkflow): AwsDeployWorkflow | undefined;
39
- /**
40
- * The root project for this deploy workflow. Must be a monorepo project.
41
- */
42
- private rootProject;
43
- /**
44
- * What type of deploy is this workflow for?
45
- */
46
- awsStageType: AwsStageType;
47
- /**
48
- * AWS environment type, such as primary or secondary.
49
- *
50
- * @deprecated Use deployment target role terminology elsewhere. This property is maintained for backward compatibility.
51
- * @default 'primary' (this is the only type supported currently)
52
- */
53
- awsEnvironmentType: DeploymentTargetRoleType;
54
- /**
55
- * The list of targets to deploy to.
56
- */
57
- readonly awsDeploymentTargets: Array<AwsDeploymentTarget>;
58
- /**
59
- * Hold the deploy workflow so we can add to it in preSynth
60
- */
61
- buildWorkflow: BuildWorkflow;
62
- /**
63
- * Was this workflow created externally?
64
- */
65
- externalWorkflow: boolean;
66
- /**
67
- * Projects that should complete deployment before this one starts.
68
- */
69
- deployAfterTargets: Array<AwsDeploymentTarget>;
70
- constructor(project: AwsCdkTypeScriptApp, options?: DeployWorkflowOptions);
71
- setupNode: () => Array<JobStep>;
72
- setupPnpm: () => Array<JobStep>;
73
- /**
74
- * Builds a GitHub Actions condition string that checks if the current branch
75
- * matches any of the provided branch patterns.
76
- *
77
- * Handles both exact matches (e.g., "main") and glob patterns (e.g., "feature/*").
78
- * Also allows workflow_dispatch (manual runs) to proceed.
79
- *
80
- * @param branches Array of GitBranch objects with branch patterns
81
- * @returns Condition string or empty string if no branches provided
82
- */
83
- private buildBranchFilterCondition;
84
- private deploySteps;
85
- preSynthesize(): void;
86
- }
@@ -1,313 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AwsDeployWorkflow = exports.PROD_DEPLOY_NAME = void 0;
4
- const utils_1 = require("@codedrifters/utils");
5
- const projen_1 = require("projen");
6
- const build_1 = require("projen/lib/build");
7
- const github_1 = require("projen/lib/github");
8
- const workflows_model_1 = require("projen/lib/github/workflows-model");
9
- const aws_1 = require("../aws");
10
- const projects_1 = require("../projects");
11
- const turbo_1 = require("../turbo");
12
- const versions_1 = require("../versions");
13
- exports.PROD_DEPLOY_NAME = "prod-deploy";
14
- class AwsDeployWorkflow extends projen_1.Component {
15
- static of(project, buildWorkflow) {
16
- const isDefined = (c) => c instanceof AwsDeployWorkflow && c.buildWorkflow === buildWorkflow;
17
- return project.components.find(isDefined);
18
- }
19
- constructor(project, options = {}) {
20
- super(project);
21
- this.project = project;
22
- /**
23
- * AWS environment type, such as primary or secondary.
24
- *
25
- * @deprecated Use deployment target role terminology elsewhere. This property is maintained for backward compatibility.
26
- * @default 'primary' (this is the only type supported currently)
27
- */
28
- this.awsEnvironmentType = utils_1.DEPLOYMENT_TARGET_ROLE.PRIMARY;
29
- this.setupNode = () => {
30
- return [
31
- {
32
- name: "Setup Node",
33
- uses: "actions/setup-node@v4",
34
- with: {
35
- ["node-version"]: versions_1.VERSION.NODE_WORKFLOWS,
36
- },
37
- // occasionally this step fails due to internal issues at github
38
- timeoutMinutes: 1,
39
- },
40
- ];
41
- };
42
- this.setupPnpm = () => {
43
- return [
44
- {
45
- name: "Setup PNPM",
46
- uses: "pnpm/action-setup@v3",
47
- with: {
48
- version: versions_1.VERSION.PNPM_VERSION,
49
- },
50
- },
51
- ];
52
- };
53
- /**
54
- * Builds a GitHub Actions condition string that checks if the current branch
55
- * matches any of the provided branch patterns.
56
- *
57
- * Handles both exact matches (e.g., "main") and glob patterns (e.g., "feature/*").
58
- * Also allows workflow_dispatch (manual runs) to proceed.
59
- *
60
- * @param branches Array of GitBranch objects with branch patterns
61
- * @returns Condition string or empty string if no branches provided
62
- */
63
- this.buildBranchFilterCondition = (branches) => {
64
- if (!branches || branches.length === 0) {
65
- return "";
66
- }
67
- const conditions = [];
68
- // Always allow workflow_dispatch (manual workflow runs)
69
- conditions.push("github.event_name == 'workflow_dispatch'");
70
- for (const branch of branches) {
71
- const branchPattern = branch.branch;
72
- // Handle glob patterns (e.g., "feature/*")
73
- if (branchPattern.includes("*")) {
74
- // Replace * with proper startsWith check
75
- const prefix = branchPattern.replace(/\*.*$/, "");
76
- conditions.push(`startsWith(github.ref, 'refs/heads/${prefix}')`);
77
- }
78
- else {
79
- // Exact match
80
- conditions.push(`github.ref == 'refs/heads/${branchPattern}'`);
81
- }
82
- }
83
- // Combine all conditions with OR
84
- return conditions.join(" || ");
85
- };
86
- this.deploySteps = (target) => {
87
- const { awsStageType, deploymentTargetRole, account, region, ciDeploymentConfig, awsDeploymentConfig, } = target;
88
- const { roleArn, stackPattern } = ciDeploymentConfig ?? {};
89
- const { rootCdkOut } = awsDeploymentConfig;
90
- return [
91
- ...this.setupPnpm(),
92
- ...this.setupNode(),
93
- /**
94
- * Install CDK
95
- */
96
- {
97
- name: "Install CDK",
98
- run: "pnpm add aws-cdk",
99
- },
100
- /**
101
- * Configure AWS creds.
102
- */
103
- {
104
- name: `AWS Creds ${awsStageType}/${deploymentTargetRole}/${account}/${region}`,
105
- uses: "aws-actions/configure-aws-credentials@v4",
106
- with: {
107
- "role-to-assume": roleArn,
108
- "aws-region": region,
109
- "role-duration-seconds": 900, // 15 minutes
110
- },
111
- },
112
- /**
113
- * Run CDK Deploy
114
- */
115
- {
116
- name: `Deploy ${awsStageType}/${deploymentTargetRole}/${account}/${region}`,
117
- run: `pnpm dlx aws-cdk deploy --no-rollback --require-approval=never --app=${rootCdkOut} "${stackPattern}"`,
118
- },
119
- ];
120
- };
121
- /***************************************************************************
122
- *
123
- * Root project check
124
- *
125
- * Detect the root project and ensure it's of type MonorepoProject.
126
- *
127
- **************************************************************************/
128
- if (!(project.root instanceof projects_1.MonorepoProject)) {
129
- throw new Error("AwsDeployWorkflow requires the root project to be a MonorepoProject");
130
- }
131
- this.rootProject = project.root;
132
- /***************************************************************************
133
- *
134
- * GitHub Check
135
- *
136
- * Make sure github config is active in the project. This is to ensure all
137
- * workflows will be output properly during synth.
138
- *
139
- **************************************************************************/
140
- const github = github_1.GitHub.of(this.rootProject);
141
- if (!github) {
142
- throw new Error("AwsDeployWorkflow requires a GitHub component in the root project");
143
- }
144
- /***************************************************************************
145
- *
146
- * TurboRepo Check
147
- *
148
- * If turbo is enabled, we may need the options later in this file.
149
- *
150
- **************************************************************************/
151
- const turbo = turbo_1.TurboRepo.of(this.rootProject);
152
- const buildWorkflowOptions = turbo?.remoteCacheOptions
153
- ? turbo_1.TurboRepo.buildWorkflowOptions(turbo.remoteCacheOptions)
154
- : {};
155
- /***************************************************************************
156
- *
157
- * Workflow Deploy Type
158
- *
159
- * What type of environments are we deploying into? We'll default to dev to
160
- * be safe.
161
- *
162
- **************************************************************************/
163
- this.awsStageType = options.awsStageType ?? utils_1.AWS_STAGE_TYPE.DEV;
164
- /***************************************************************************
165
- *
166
- * Workflow Deploy Targets
167
- *
168
- * Use provided targets or discover them based on the deploy type. Only
169
- * include targets that are marked for CI/CD.
170
- *
171
- **************************************************************************/
172
- this.awsDeploymentTargets =
173
- options.awsDeploymentTargets ??
174
- aws_1.AwsDeploymentConfig.of(project)?.awsDeploymentTargets.filter((target) => target.awsStageType === this.awsStageType && target.ciDeployment) ??
175
- [];
176
- this.deployAfterTargets = options.deployAfterTargets ?? [];
177
- /***************************************************************************
178
- *
179
- * Build Workflow Options
180
- *
181
- * Can't use the options if an existing workflow was passed in.
182
- *
183
- **************************************************************************/
184
- if (options.buildWorkflow && options.buildWorkflowOptions) {
185
- throw new Error("Cannot provide both buildWorkflow and buildWorkflowOptions");
186
- }
187
- this.externalWorkflow = !!options.buildWorkflow;
188
- /***************************************************************************
189
- *
190
- * Build Workflow
191
- *
192
- * Create a workflow either based on input or from scratch.
193
- *
194
- **************************************************************************/
195
- this.buildWorkflow =
196
- options.buildWorkflow ??
197
- new build_1.BuildWorkflow(this.rootProject, {
198
- /**
199
- * Name based on project and environment.
200
- */
201
- name: options.buildWorkflowOptions?.name ??
202
- [
203
- "deploy",
204
- project.name,
205
- this.awsStageType,
206
- this.awsEnvironmentType,
207
- ].join("-"),
208
- /**
209
- * Use the root projects build task.
210
- */
211
- buildTask: this.rootProject.buildTask,
212
- /**
213
- * Use push triggers based n the branch config for each environment.
214
- */
215
- workflowTriggers: {
216
- push: {
217
- branches: [
218
- ...this.awsDeploymentTargets.flatMap((t) => t.branches.map((b) => b.branch)),
219
- ],
220
- },
221
- workflowDispatch: {},
222
- ...options.buildWorkflowOptions?.workflowTriggers,
223
- },
224
- /**
225
- * Never allow mutations for deploys. This should have been handled
226
- * during build.
227
- */
228
- mutableBuild: false,
229
- /**
230
- * Do this pre-merge of permissions and build steps
231
- */
232
- ...options.buildWorkflowOptions,
233
- /**
234
- * Some additional permissions may be required when turbo's involved.
235
- */
236
- permissions: {
237
- ...options.buildWorkflowOptions?.permissions,
238
- ...buildWorkflowOptions?.permissions,
239
- },
240
- /**
241
- * Assemble all pre-build steps
242
- */
243
- preBuildSteps: [
244
- ...this.setupPnpm(),
245
- ...this.setupNode(),
246
- {
247
- name: "Install dependencies",
248
- run: "pnpm i --no-frozen-lockfile",
249
- },
250
- ...(options.buildWorkflowOptions?.preBuildSteps ?? []),
251
- ...(buildWorkflowOptions?.preBuildSteps ?? []),
252
- ],
253
- });
254
- /***************************************************************************
255
- *
256
- * Add Deployments to workflow
257
- *
258
- **************************************************************************/
259
- const buildJobName = (target) => {
260
- return [
261
- target.awsStageType,
262
- target.deploymentTargetRole,
263
- "deploy",
264
- target.project.name,
265
- target.account,
266
- target.region,
267
- ].join("-");
268
- };
269
- this.awsDeploymentTargets.forEach((target) => {
270
- const deployJobName = buildJobName(target);
271
- // Build the branch filter condition
272
- const branchFilterCondition = this.buildBranchFilterCondition(target.branches);
273
- // Combine with the existing build mutation check
274
- const jobCondition = branchFilterCondition
275
- ? [
276
- "${{ !needs.build.outputs.self_mutation_happened }}",
277
- `(${branchFilterCondition})`,
278
- ].join(" && ")
279
- : "${{ !needs.build.outputs.self_mutation_happened }}";
280
- this.buildWorkflow.addPostBuildJob(deployJobName, {
281
- name: `Deploy ${this.project.name} ${target.awsStageType}/${target.deploymentTargetRole}/${target.account}/${target.region}`,
282
- needs: [
283
- "build",
284
- ...this.deployAfterTargets.map((p) => {
285
- return buildJobName(p);
286
- }),
287
- ],
288
- runsOn: ["ubuntu-latest"],
289
- permissions: {
290
- contents: workflows_model_1.JobPermission.READ,
291
- idToken: workflows_model_1.JobPermission.WRITE,
292
- },
293
- concurrency: deployJobName,
294
- if: jobCondition,
295
- steps: [...this.deploySteps(target)],
296
- });
297
- });
298
- }
299
- preSynthesize() {
300
- /**
301
- * Ensure turbo is active when needed.
302
- */
303
- if (!this.externalWorkflow && turbo_1.TurboRepo.of(this.rootProject)) {
304
- this.buildWorkflow.addPostBuildSteps({
305
- name: "Build Sub Projects",
306
- run: `npx projen ${turbo_1.ROOT_CI_TASK_NAME}`,
307
- });
308
- }
309
- super.preSynthesize();
310
- }
311
- }
312
- exports.AwsDeployWorkflow = AwsDeployWorkflow;
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlcGxveS13b3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy93b3JrZmxvd3MvYXdzLWRlcGxveS13b3JrZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FLNkI7QUFDN0IsbUNBQW1DO0FBRW5DLDRDQUF1RTtBQUN2RSw4Q0FBMkM7QUFDM0MsdUVBQTJFO0FBRTNFLGdDQUE2QztBQUc3QywwQ0FBOEM7QUFDOUMsb0NBQXdEO0FBQ3hELDBDQUFzQztBQUV6QixRQUFBLGdCQUFnQixHQUFHLGFBQWEsQ0FBQztBQWtDOUMsTUFBYSxpQkFBa0IsU0FBUSxrQkFBUztJQUN2QyxNQUFNLENBQUMsRUFBRSxDQUNkLE9BQTRCLEVBQzVCLGFBQTRCO1FBRTVCLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBWSxFQUEwQixFQUFFLENBQ3pELENBQUMsWUFBWSxpQkFBaUIsSUFBSSxDQUFDLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQztRQUN0RSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUF5Q0QsWUFDUyxPQUE0QixFQUNuQyxVQUFpQyxFQUFFO1FBRW5DLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUhSLFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBOUJyQzs7Ozs7V0FLRztRQUNJLHVCQUFrQixHQUN2Qiw4QkFBc0IsQ0FBQyxPQUFPLENBQUM7UUEyUDFCLGNBQVMsR0FBRyxHQUFtQixFQUFFO1lBQ3RDLE9BQU87Z0JBQ0w7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLElBQUksRUFBRSx1QkFBdUI7b0JBQzdCLElBQUksRUFBRTt3QkFDSixDQUFDLGNBQWMsQ0FBQyxFQUFFLGtCQUFPLENBQUMsY0FBYztxQkFDekM7b0JBQ0QsZ0VBQWdFO29CQUNoRSxjQUFjLEVBQUUsQ0FBQztpQkFDbEI7YUFDRixDQUFDO1FBQ0osQ0FBQyxD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U3RhZ2VUeXBlLFxuICBERVBMT1lNRU5UX1RBUkdFVF9ST0xFLFxuICBEZXBsb3ltZW50VGFyZ2V0Um9sZVR5cGUsXG59IGZyb20gXCJAY29kZWRyaWZ0ZXJzL3V0aWxzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBBd3NDZGtUeXBlU2NyaXB0QXBwIH0gZnJvbSBcInByb2plbi9saWIvYXdzY2RrXCI7XG5pbXBvcnQgeyBCdWlsZFdvcmtmbG93LCBCdWlsZFdvcmtmbG93T3B0aW9ucyB9IGZyb20gXCJwcm9qZW4vbGliL2J1aWxkXCI7XG5pbXBvcnQgeyBHaXRIdWIgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWJcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24sIEpvYlN0ZXAgfSBmcm9tIFwicHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgeyBWYWx1ZU9mIH0gZnJvbSBcInR5cGUtZmVzdFwiO1xuaW1wb3J0IHsgQXdzRGVwbG95bWVudENvbmZpZyB9IGZyb20gXCIuLi9hd3NcIjtcbmltcG9ydCB7IEF3c0RlcGxveW1lbnRUYXJnZXQgfSBmcm9tIFwiLi4vYXdzL2F3cy1kZXBsb3ltZW50LXRhcmdldFwiO1xuaW1wb3J0IHsgR2l0QnJhbmNoIH0gZnJvbSBcIi4uL2dpdFwiO1xuaW1wb3J0IHsgTW9ub3JlcG9Qcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RzXCI7XG5pbXBvcnQgeyBST09UX0NJX1RBU0tfTkFNRSwgVHVyYm9SZXBvIH0gZnJvbSBcIi4uL3R1cmJvXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4uL3ZlcnNpb25zXCI7XG5cbmV4cG9ydCBjb25zdCBQUk9EX0RFUExPWV9OQU1FID0gXCJwcm9kLWRlcGxveVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlcGxveVdvcmtmbG93T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGF0IHR5cGUgb2YgZGVwbG95IGlzIHRoaXMgd29ya2Zsb3cgZm9yP1xuICAgKlxuICAgKiBAZGVmYXVsdCBBV1NfU1RBR0VfVFlQRS5ERVZcbiAgICovXG4gIHJlYWRvbmx5IGF3c1N0YWdlVHlwZT86IFZhbHVlT2Y8dHlwZW9mIEFXU19TVEFHRV9UWVBFPjtcblxuICAvKipcbiAgICogT3B0aW9uYWxseSBmZWVkIGEgbGlzdCBvZiB0YXJnZXRzIHRvIGRlcGxveSB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgZGlzY292ZXJzIGFsbCB0YXJnZXRzIHVzaW5nIHN0YWdlVHlwZVxuICAgKi9cbiAgcmVhZG9ubHkgYXdzRGVwbG95bWVudFRhcmdldHM/OiBBcnJheTxBd3NEZXBsb3ltZW50VGFyZ2V0PjtcblxuICAvKipcbiAgICogRXhpc3Rpbmcgd29ya2Zsb3csIHVzZWZ1bCBpZiB3ZSdyZSB0YWNraW5nIGRlcGxveW1lbnRzIG9udG8gYW4gZXhpc3RpbmdcbiAgICogYnVpbGQgd29ya2Zsb3dcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3c/OiBCdWlsZFdvcmtmbG93O1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgYnVpbGQgd29ya2Zsb3csIGlmIG5vIGJ1aWxkIHdvcmtmbG93IGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvd09wdGlvbnM/OiBQYXJ0aWFsPEJ1aWxkV29ya2Zsb3dPcHRpb25zPjtcblxuICAvKipcbiAgICogUHJvamVjdHMgdGhhdCBzaG91bGQgY29tcGxldGUgZGVwbG95bWVudCBiZWZvcmUgdGhpcyBvbmUgc3RhcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95QWZ0ZXJUYXJnZXRzPzogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD47XG59XG5cbmV4cG9ydCBjbGFzcyBBd3NEZXBsb3lXb3JrZmxvdyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb2YoXG4gICAgcHJvamVjdDogQXdzQ2RrVHlwZVNjcmlwdEFwcCxcbiAgICBidWlsZFdvcmtmbG93OiBCdWlsZFdvcmtmbG93LFxuICApOiBBd3NEZXBsb3lXb3JrZmxvdyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNEZWZpbmVkID0gKGM6IENvbXBvbmVudCk6IGMgaXMgQXdzRGVwbG95V29ya2Zsb3cgPT5cbiAgICAgIGMgaW5zdGFuY2VvZiBBd3NEZXBsb3lXb3JrZmxvdyAmJiBjLmJ1aWxkV29ya2Zsb3cgPT09IGJ1aWxkV29ya2Zsb3c7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzRGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJvb3QgcHJvamVjdCBmb3IgdGhpcyBkZXBsb3kgd29ya2Zsb3cuIE11c3QgYmUgYSBtb25vcmVwbyBwcm9qZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByb290UHJvamVjdDogTW9ub3JlcG9Qcm9qZWN0O1xuXG4gIC8qKlxuICAgKiBXaGF0IHR5cGUgb2YgZGVwbG95IGlzIHRoaXMgd29ya2Zsb3cgZm9yP1xuICAgKi9cbiAgcHVibGljIGF3c1N0YWdlVHlwZTogQXdzU3RhZ2VUeXBlO1xuXG4gIC8qKlxuICAgKiBBV1MgZW52aXJvbm1lbnQgdHlwZSwgc3VjaCBhcyBwcmltYXJ5IG9yIHNlY29uZGFyeS5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGRlcGxveW1lbnQgdGFyZ2V0IHJvbGUgdGVybWlub2xvZ3kgZWxzZXdoZXJlLiBUaGlzIHByb3BlcnR5IGlzIG1haW50YWluZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5JyAodGhpcyBpcyB0aGUgb25seSB0eXBlIHN1cHBvcnRlZCBjdXJyZW50bHkpXG4gICAqL1xuICBwdWJsaWMgYXdzRW52aXJvbm1lbnRUeXBlOiBEZXBsb3ltZW50VGFyZ2V0Um9sZVR5cGUgPVxuICAgIERFUExPWU1FTlRfVEFSR0VUX1JPTEUuUFJJTUFSWTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdGFyZ2V0cyB0byBkZXBsb3kgdG8uXG4gICAqL1xuICByZWFkb25seSBhd3NEZXBsb3ltZW50VGFyZ2V0czogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD47XG5cbiAgLyoqXG4gICAqIEhvbGQgdGhlIGRlcGxveSB3b3JrZmxvdyBzbyB3ZSBjYW4gYWRkIHRvIGl0IGluIHByZVN5bnRoXG4gICAqL1xuICBwdWJsaWMgYnVpbGRXb3JrZmxvdzogQnVpbGRXb3JrZmxvdztcblxuICAvKipcbiAgICogV2FzIHRoaXMgd29ya2Zsb3cgY3JlYXRlZCBleHRlcm5hbGx5P1xuICAgKi9cbiAgcHVibGljIGV4dGVybmFsV29ya2Zsb3c6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByb2plY3RzIHRoYXQgc2hvdWxkIGNvbXBsZXRlIGRlcGxveW1lbnQgYmVmb3JlIHRoaXMgb25lIHN0YXJ0cy5cbiAgICovXG4gIHB1YmxpYyBkZXBsb3lBZnRlclRhcmdldHM6IEFycmF5PEF3c0RlcGxveW1lbnRUYXJnZXQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBwcm9qZWN0OiBBd3NDZGtUeXBlU2NyaXB0QXBwLFxuICAgIG9wdGlvbnM6IERlcGxveVdvcmtmbG93T3B0aW9ucyA9IHt9LFxuICApIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFJvb3QgcHJvamVjdCBjaGVja1xuICAgICAqXG4gICAgICogRGV0ZWN0IHRoZSByb290IHByb2plY3QgYW5kIGVuc3VyZSBpdCdzIG9mIHR5cGUgTW9ub3JlcG9Qcm9qZWN0LlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgaWYgKCEocHJvamVjdC5yb290IGluc3RhbmNlb2YgTW9ub3JlcG9Qcm9qZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkF3c0RlcGxveVdvcmtmbG93IHJlcXVpcmVzIHRoZSByb290IHByb2plY3QgdG8gYmUgYSBNb25vcmVwb1Byb2plY3RcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yb290UHJvamVjdCA9IHByb2plY3Qucm9vdDtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEdpdEh1YiBDaGVja1xuICAgICAqXG4gICAgICogTWFrZSBzdXJlIGdpdGh1YiBjb25maWcgaXMgYWN0aXZlIGluIHRoZSBwcm9qZWN0LiBUaGlzIGlzIHRvIGVuc3VyZSBhbGxcbiAgICAgKiB3b3JrZmxvd3Mgd2lsbCBiZSBvdXRwdXQgcHJvcGVybHkgZHVyaW5nIHN5bnRoLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgZ2l0aHViID0gR2l0SHViLm9mKHRoaXMucm9vdFByb2plY3QpO1xuXG4gICAgaWYgKCFnaXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBd3NEZXBsb3lXb3JrZmxvdyByZXF1aXJlcyBhIEdpdEh1YiBjb21wb25lbnQgaW4gdGhlIHJvb3QgcHJvamVjdFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBUdXJib1JlcG8gQ2hlY2tcbiAgICAgKlxuICAgICAqIElmIHR1cmJvIGlzIGVuYWJsZWQsIHdlIG1heSBuZWVkIHRoZSBvcHRpb25zIGxhdGVyIGluIHRoaXMgZmlsZS5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGNvbnN0IHR1cmJvID0gVHVyYm9SZXBvLm9mKHRoaXMucm9vdFByb2plY3QpO1xuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3dPcHRpb25zOiBQYXJ0aWFsPEJ1aWxkV29ya2Zsb3dPcHRpb25zPiA9XG4gICAgICB0dXJibz8ucmVtb3RlQ2FjaGVPcHRpb25zXG4gICAgICAgID8gVHVyYm9SZXBvLmJ1aWxkV29ya2Zsb3dPcHRpb25zKHR1cmJvLnJlbW90ZUNhY2hlT3B0aW9ucylcbiAgICAgICAgOiB7fTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIFdvcmtmbG93IERlcGxveSBUeXBlXG4gICAgICpcbiAgICAgKiBXaGF0IHR5cGUgb2YgZW52aXJvbm1lbnRzIGFyZSB3ZSBkZXBsb3lpbmcgaW50bz8gV2UnbGwgZGVmYXVsdCB0byBkZXYgdG9cbiAgICAgKiBiZSBzYWZlLlxuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgdGhpcy5hd3NTdGFnZVR5cGUgPSBvcHRpb25zLmF3c1N0YWdlVHlwZSA/PyBBV1NfU1RBR0VfVFlQRS5ERVY7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBXb3JrZmxvdyBEZXBsb3kgVGFyZ2V0c1xuICAgICAqXG4gICAgICogVXNlIHByb3ZpZGVkIHRhcmdldHMgb3IgZGlzY292ZXIgdGhlbSBiYXNlZCBvbiB0aGUgZGVwbG95IHR5cGUuIE9ubHlcbiAgICAgKiBpbmNsdWRlIHRhcmdldHMgdGhhdCBhcmUgbWFya2VkIGZvciBDSS9DRC5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYXdzRGVwbG95bWVudFRhcmdldHMgPVxuICAgICAgb3B0aW9ucy5hd3NEZXBsb3ltZW50VGFyZ2V0cyA/P1xuICAgICAgQXdzRGVwbG95bWVudENvbmZpZy5vZihwcm9qZWN0KT8uYXdzRGVwbG95bWVudFRhcmdldHMuZmlsdGVyKFxuICAgICAgICAodGFyZ2V0KSA9PlxuICAgICAgICAgIHRhcmdldC5hd3NTdGFnZVR5cGUgPT09IHRoaXMuYXdzU3RhZ2VUeXBlICYmIHRhcmdldC5jaURlcGxveW1lbnQsXG4gICAgICApID8/XG4gICAgICBbXTtcblxuICAgIHRoaXMuZGVwbG95QWZ0ZXJUYXJnZXRzID0gb3B0aW9ucy5kZXBsb3lBZnRlclRhcmdldHMgPz8gW107XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBCdWlsZCBXb3JrZmxvdyBPcHRpb25zXG4gICAgICpcbiAgICAgKiBDYW4ndCB1c2UgdGhlIG9wdGlvbnMgaWYgYW4gZXhpc3Rpbmcgd29ya2Zsb3cgd2FzIHBhc3NlZCBpbi5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIGlmIChvcHRpb25zLmJ1aWxkV29ya2Zsb3cgJiYgb3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNhbm5vdCBwcm92aWRlIGJvdGggYnVpbGRXb3JrZmxvdyBhbmQgYnVpbGRXb3JrZmxvd09wdGlvbnNcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5leHRlcm5hbFdvcmtmbG93ID0gISFvcHRpb25zLmJ1aWxkV29ya2Zsb3c7XG5cbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBCdWlsZCBXb3JrZmxvd1xuICAgICAqXG4gICAgICogQ3JlYXRlIGEgd29ya2Zsb3cgZWl0aGVyIGJhc2VkIG9uIGlucHV0IG9yIGZyb20gc2NyYXRjaC5cbiAgICAgKlxuICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAgIHRoaXMuYnVpbGRXb3JrZmxvdyA9XG4gICAgICBvcHRpb25zLmJ1aWxkV29ya2Zsb3cgPz9cbiAgICAgIG5ldyBCdWlsZFdvcmtmbG93KHRoaXMucm9vdFByb2plY3QsIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE5hbWUgYmFzZWQgb24gcHJvamVjdCBhbmQgZW52aXJvbm1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBuYW1lOlxuICAgICAgICAgIG9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnM/Lm5hbWUgPz9cbiAgICAgICAgICBbXG4gICAgICAgICAgICBcImRlcGxveVwiLFxuICAgICAgICAgICAgcHJvamVjdC5uYW1lLFxuICAgICAgICAgICAgdGhpcy5hd3NTdGFnZVR5cGUsXG4gICAgICAgICAgICB0aGlzLmF3c0Vudmlyb25tZW50VHlwZSxcbiAgICAgICAgICBdLmpvaW4oXCItXCIpLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVc2UgdGhlIHJvb3QgcHJvamVjdHMgYnVpbGQgdGFzay5cbiAgICAgICAgICovXG4gICAgICAgIGJ1aWxkVGFzazogdGhpcy5yb290UHJvamVjdC5idWlsZFRhc2ssXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVzZSBwdXNoIHRyaWdnZXJzIGJhc2VkIG4gdGhlIGJyYW5jaCBjb25maWcgZm9yIGVhY2ggZW52aXJvbm1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB3b3JrZmxvd1RyaWdnZXJzOiB7XG4gICAgICAgICAgcHVzaDoge1xuICAgICAgICAgICAgYnJhbmNoZXM6IFtcbiAgICAgICAgICAgICAgLi4udGhpcy5hd3NEZXBsb3ltZW50VGFyZ2V0cy5mbGF0TWFwKCh0KSA9PlxuICAgICAgICAgICAgICAgIHQuYnJhbmNoZXMubWFwKChiKSA9PiBiLmJyYW5jaCksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge30sXG4gICAgICAgICAgLi4ub3B0aW9ucy5idWlsZFdvcmtmbG93T3B0aW9ucz8ud29ya2Zsb3dUcmlnZ2VycyxcbiAgICAgICAgfSxcblxuICAgICAgICAvKipcbiAgICAgICAgICogTmV2ZXIgYWxsb3cgbXV0YXRpb25zIGZvciBkZXBsb3lzLiBUaGlzIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZFxuICAgICAgICAgKiBkdXJpbmcgYnVpbGQuXG4gICAgICAgICAqL1xuICAgICAgICBtdXRhYmxlQnVpbGQ6IGZhbHNlLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEbyB0aGlzIHByZS1tZXJnZSBvZiBwZXJtaXNzaW9ucyBhbmQgYnVpbGQgc3RlcHNcbiAgICAgICAgICovXG4gICAgICAgIC4uLm9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnMsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNvbWUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgcmVxdWlyZWQgd2hlbiB0dXJibydzIGludm9sdmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgICAuLi5vcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zPy5wZXJtaXNzaW9ucyxcbiAgICAgICAgICAuLi5idWlsZFdvcmtmbG93T3B0aW9ucz8ucGVybWlzc2lvbnMsXG4gICAgICAgIH0sXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFzc2VtYmxlIGFsbCBwcmUtYnVpbGQgc3RlcHNcbiAgICAgICAgICovXG4gICAgICAgIHByZUJ1aWxkU3RlcHM6IFtcbiAgICAgICAgICAuLi50aGlzLnNldHVwUG5wbSgpLFxuICAgICAgICAgIC4uLnRoaXMuc2V0dXBOb2RlKCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsIGRlcGVuZGVuY2llc1wiLFxuICAgICAgICAgICAgcnVuOiBcInBucG0gaSAtLW5vLWZyb3plbi1sb2NrZmlsZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uKG9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnM/LnByZUJ1aWxkU3RlcHMgPz8gW10pLFxuICAgICAgICAgIC4uLihidWlsZFdvcmtmbG93T3B0aW9ucz8ucHJlQnVpbGRTdGVwcyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICAgKlxuICAgICAqIEFkZCBEZXBsb3ltZW50cyB0byB3b3JrZmxvd1xuICAgICAqXG4gICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gICAgY29uc3QgYnVpbGRKb2JOYW1lID0gKHRhcmdldDogQXdzRGVwbG95bWVudFRhcmdldCkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGFyZ2V0LmF3c1N0YWdlVHlwZSxcbiAgICAgICAgdGFyZ2V0LmRlcGxveW1lbnRUYXJnZXRSb2xlLFxuICAgICAgICBcImRlcGxveVwiLFxuICAgICAgICB0YXJnZXQucHJvamVjdC5uYW1lLFxuICAgICAgICB0YXJnZXQuYWNjb3VudCxcbiAgICAgICAgdGFyZ2V0LnJlZ2lvbixcbiAgICAgIF0uam9pbihcIi1cIik7XG4gICAgfTtcblxuICAgIHRoaXMuYXdzRGVwbG95bWVudFRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiB7XG4gICAgICBjb25zdCBkZXBsb3lKb2JOYW1lID0gYnVpbGRKb2JOYW1lKHRhcmdldCk7XG5cbiAgICAgIC8vIEJ1aWxkIHRoZSBicmFuY2ggZmlsdGVyIGNvbmRpdGlvblxuICAgICAgY29uc3QgYnJhbmNoRmlsdGVyQ29uZGl0aW9uID0gdGhpcy5idWlsZEJyYW5jaEZpbHRlckNvbmRpdGlvbihcbiAgICAgICAgdGFyZ2V0LmJyYW5jaGVzLFxuICAgICAgKTtcblxuICAgICAgLy8gQ29tYmluZSB3aXRoIHRoZSBleGlzdGluZyBidWlsZCBtdXRhdGlvbiBjaGVja1xuICAgICAgY29uc3Qgam9iQ29uZGl0aW9uID0gYnJhbmNoRmlsdGVyQ29uZGl0aW9uXG4gICAgICAgID8gW1xuICAgICAgICAgICAgXCIke3sgIW5lZWRzLmJ1aWxkLm91dHB1dHMuc2VsZl9tdXRhdGlvbl9oYXBwZW5lZCB9fVwiLFxuICAgICAgICAgICAgYCgke2JyYW5jaEZpbHRlckNvbmRpdGlvbn0pYCxcbiAgICAgICAgICBdLmpvaW4oXCIgJiYgXCIpXG4gICAgICAgIDogXCIke3sgIW5lZWRzLmJ1aWxkLm91dHB1dHMuc2VsZl9tdXRhdGlvbl9oYXBwZW5lZCB9fVwiO1xuXG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkSm9iKGRlcGxveUpvYk5hbWUsIHtcbiAgICAgICAgbmFtZTogYERlcGxveSAke3RoaXMucHJvamVjdC5uYW1lfSAke3RhcmdldC5hd3NTdGFnZVR5cGV9LyR7dGFyZ2V0LmRlcGxveW1lbnRUYXJnZXRSb2xlfS8ke3RhcmdldC5hY2NvdW50fS8ke3RhcmdldC5yZWdpb259YCxcbiAgICAgICAgbmVlZHM6IFtcbiAgICAgICAgICBcImJ1aWxkXCIsXG4gICAgICAgICAgLi4udGhpcy5kZXBsb3lBZnRlclRhcmdldHMubWFwKChwKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYnVpbGRKb2JOYW1lKHApO1xuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgICBydW5zT246IFtcInVidW50dS1sYXRlc3RcIl0sXG4gICAgICAgIHBlcm1pc3Npb25zOiB7XG4gICAgICAgICAgY29udGVudHM6IEpvYlBlcm1pc3Npb24uUkVBRCxcbiAgICAgICAgICBpZFRva2VuOiBKb2JQZXJtaXNzaW9uLldSSVRFLFxuICAgICAgICB9LFxuICAgICAgICBjb25jdXJyZW5jeTogZGVwbG95Sm9iTmFtZSxcbiAgICAgICAgaWY6IGpvYkNvbmRpdGlvbixcbiAgICAgICAgc3RlcHM6IFsuLi50aGlzLmRlcGxveVN0ZXBzKHRhcmdldCldLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2V0dXBOb2RlID0gKCk6IEFycmF5PEpvYlN0ZXA+ID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIlNldHVwIE5vZGVcIixcbiAgICAgICAgdXNlczogXCJhY3Rpb25zL3NldHVwLW5vZGVAdjRcIixcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIFtcIm5vZGUtdmVyc2lvblwiXTogVkVSU0lPTi5OT0RFX1dPUktGTE9XUyxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gb2NjYXNpb25hbGx5IHRoaXMgc3RlcCBmYWlscyBkdWUgdG8gaW50ZXJuYWwgaXNzdWVzIGF0IGdpdGh1YlxuICAgICAgICB0aW1lb3V0TWludXRlczogMSxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcblxuICBwdWJsaWMgc2V0dXBQbnBtID0gKCk6IEFycmF5PEpvYlN0ZXA+ID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIlNldHVwIFBOUE1cIixcbiAgICAgICAgdXNlczogXCJwbnBtL2FjdGlvbi1zZXR1cEB2M1wiLFxuICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgdmVyc2lvbjogVkVSU0lPTi5QTlBNX1ZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH07XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIEdpdEh1YiBBY3Rpb25zIGNvbmRpdGlvbiBzdHJpbmcgdGhhdCBjaGVja3MgaWYgdGhlIGN1cnJlbnQgYnJhbmNoXG4gICAqIG1hdGNoZXMgYW55IG9mIHRoZSBwcm92aWRlZCBicmFuY2ggcGF0dGVybnMuXG4gICAqXG4gICAqIEhhbmRsZXMgYm90aCBleGFjdCBtYXRjaGVzIChlLmcuLCBcIm1haW5cIikgYW5kIGdsb2IgcGF0dGVybnMgKGUuZy4sIFwiZmVhdHVyZS8qXCIpLlxuICAgKiBBbHNvIGFsbG93cyB3b3JrZmxvd19kaXNwYXRjaCAobWFudWFsIHJ1bnMpIHRvIHByb2NlZWQuXG4gICAqXG4gICAqIEBwYXJhbSBicmFuY2hlcyBBcnJheSBvZiBHaXRCcmFuY2ggb2JqZWN0cyB3aXRoIGJyYW5jaCBwYXR0ZXJuc1xuICAgKiBAcmV0dXJucyBDb25kaXRpb24gc3RyaW5nIG9yIGVtcHR5IHN0cmluZyBpZiBubyBicmFuY2hlcyBwcm92aWRlZFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEJyYW5jaEZpbHRlckNvbmRpdGlvbiA9IChicmFuY2hlczogQXJyYXk8R2l0QnJhbmNoPik6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFicmFuY2hlcyB8fCBicmFuY2hlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmRpdGlvbnM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgIC8vIEFsd2F5cyBhbGxvdyB3b3JrZmxvd19kaXNwYXRjaCAobWFudWFsIHdvcmtmbG93IHJ1bnMpXG4gICAgY29uZGl0aW9ucy5wdXNoKFwiZ2l0aHViLmV2ZW50X25hbWUgPT0gJ3dvcmtmbG93X2Rpc3BhdGNoJ1wiKTtcblxuICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICBjb25zdCBicmFuY2hQYXR0ZXJuID0gYnJhbmNoLmJyYW5jaDtcblxuICAgICAgLy8gSGFuZGxlIGdsb2IgcGF0dGVybnMgKGUuZy4sIFwiZmVhdHVyZS8qXCIpXG4gICAgICBpZiAoYnJhbmNoUGF0dGVybi5pbmNsdWRlcyhcIipcIikpIHtcbiAgICAgICAgLy8gUmVwbGFjZSAqIHdpdGggcHJvcGVyIHN0YXJ0c1dpdGggY2hlY2tcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYnJhbmNoUGF0dGVybi5yZXBsYWNlKC9cXCouKiQvLCBcIlwiKTtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKGBzdGFydHNXaXRoKGdpdGh1Yi5yZWYsICdyZWZzL2hlYWRzLyR7cHJlZml4fScpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFeGFjdCBtYXRjaFxuICAgICAgICBjb25kaXRpb25zLnB1c2goYGdpdGh1Yi5yZWYgPT0gJ3JlZnMvaGVhZHMvJHticmFuY2hQYXR0ZXJufSdgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb21iaW5lIGFsbCBjb25kaXRpb25zIHdpdGggT1JcbiAgICByZXR1cm4gY29uZGl0aW9ucy5qb2luKFwiIHx8IFwiKTtcbiAgfTtcblxuICBwcml2YXRlIGRlcGxveVN0ZXBzID0gKHRhcmdldDogQXdzRGVwbG95bWVudFRhcmdldCk6IEFycmF5PEpvYlN0ZXA+ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBhd3NTdGFnZVR5cGUsXG4gICAgICBkZXBsb3ltZW50VGFyZ2V0Um9sZSxcbiAgICAgIGFjY291bnQsXG4gICAgICByZWdpb24sXG4gICAgICBjaURlcGxveW1lbnRDb25maWcsXG4gICAgICBhd3NEZXBsb3ltZW50Q29uZmlnLFxuICAgIH0gPSB0YXJnZXQ7XG4gICAgY29uc3QgeyByb2xlQXJuLCBzdGFja1BhdHRlcm4gfSA9IGNpRGVwbG95bWVudENvbmZpZyA/PyB7fTtcbiAgICBjb25zdCB7IHJvb3RDZGtPdXQgfSA9IGF3c0RlcGxveW1lbnRDb25maWc7XG5cbiAgICByZXR1cm4gW1xuICAgICAgLi4udGhpcy5zZXR1cFBucG0oKSxcbiAgICAgIC4uLnRoaXMuc2V0dXBOb2RlKCksXG5cbiAgICAgIC8qKlxuICAgICAgICogSW5zdGFsbCBDREtcbiAgICAgICAqL1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIkluc3RhbGwgQ0RLXCIsXG4gICAgICAgIHJ1bjogXCJwbnBtIGFkZCBhd3MtY2RrXCIsXG4gICAgICB9LFxuXG4gICAgICAvKipcbiAgICAgICAqIENvbmZpZ3VyZSBBV1MgY3JlZHMuXG4gICAgICAgKi9cbiAgICAgIHtcbiAgICAgICAgbmFtZTogYEFXUyBDcmVkcyAke2F3c1N0YWdlVHlwZX0vJHtkZXBsb3ltZW50VGFyZ2V0Um9sZX0vJHthY2NvdW50fS8ke3JlZ2lvbn1gLFxuICAgICAgICB1c2VzOiBcImF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjRcIixcbiAgICAgICAgd2l0aDoge1xuICAgICAgICAgIFwicm9sZS10by1hc3N1bWVcIjogcm9sZUFybixcbiAgICAgICAgICBcImF3cy1yZWdpb25cIjogcmVnaW9uLFxuICAgICAgICAgIFwicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCI6IDkwMCwgLy8gMTUgbWludXRlc1xuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLyoqXG4gICAgICAgKiBSdW4gQ0RLIERlcGxveVxuICAgICAgICovXG4gICAgICB7XG4gICAgICAgIG5hbWU6IGBEZXBsb3kgJHthd3NTdGFnZVR5cGV9LyR7ZGVwbG95bWVudFRhcmdldFJvbGV9LyR7YWNjb3VudH0vJHtyZWdpb259YCxcbiAgICAgICAgcnVuOiBgcG5wbSBkbHggYXdzLWNkayBkZXBsb3kgLS1uby1yb2xsYmFjayAtLXJlcXVpcmUtYXBwcm92YWw9bmV2ZXIgLS1hcHA9JHtyb290Q2RrT3V0fSBcIiR7c3RhY2tQYXR0ZXJufVwiYCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfTtcblxuICBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIEVuc3VyZSB0dXJibyBpcyBhY3RpdmUgd2hlbiBuZWVkZWQuXG4gICAgICovXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsV29ya2Zsb3cgJiYgVHVyYm9SZXBvLm9mKHRoaXMucm9vdFByb2plY3QpKSB7XG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkU3RlcHMoe1xuICAgICAgICBuYW1lOiBcIkJ1aWxkIFN1YiBQcm9qZWN0c1wiLFxuICAgICAgICBydW46IGBucHggcHJvamVuICR7Uk9PVF9DSV9UQVNLX05BTUV9YCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHN1cGVyLnByZVN5bnRoZXNpemUoKTtcbiAgfVxufVxuIl19
@@ -1 +0,0 @@
1
- export * from "./aws-deploy-workflow";
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./aws-deploy-workflow"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3dzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3REFBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9hd3MtZGVwbG95LXdvcmtmbG93XCI7XG4iXX0=