@codedrifters/configulator 0.0.0

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 (41) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +4 -0
  3. package/lib/aws/aws-deployment-config.d.ts +141 -0
  4. package/lib/aws/aws-deployment-config.js +165 -0
  5. package/lib/aws/aws-types.d.ts +63 -0
  6. package/lib/aws/aws-types.js +9 -0
  7. package/lib/aws/index.d.ts +2 -0
  8. package/lib/aws/index.js +19 -0
  9. package/lib/git/git-types.d.ts +18 -0
  10. package/lib/git/git-types.js +9 -0
  11. package/lib/git/index.d.ts +1 -0
  12. package/lib/git/index.js +18 -0
  13. package/lib/pnpm/index.d.ts +1 -0
  14. package/lib/pnpm/index.js +18 -0
  15. package/lib/pnpm/pnpm-workspace.d.ts +5 -0
  16. package/lib/pnpm/pnpm-workspace.js +36 -0
  17. package/lib/turbo/index.d.ts +2 -0
  18. package/lib/turbo/index.js +19 -0
  19. package/lib/turbo/turbo-repo-task.d.ts +36 -0
  20. package/lib/turbo/turbo-repo-task.js +43 -0
  21. package/lib/turbo/turbo-repo.d.ts +268 -0
  22. package/lib/turbo/turbo-repo.js +213 -0
  23. package/lib/typescript/index.d.ts +1 -0
  24. package/lib/typescript/index.js +18 -0
  25. package/lib/typescript/typescript-config.d.ts +13 -0
  26. package/lib/typescript/typescript-config.js +40 -0
  27. package/lib/versions.d.ts +22 -0
  28. package/lib/versions.js +26 -0
  29. package/lib/vscode/index.d.ts +1 -0
  30. package/lib/vscode/index.js +18 -0
  31. package/lib/vscode/vscode.d.ts +10 -0
  32. package/lib/vscode/vscode.js +37 -0
  33. package/lib/workflows/build-workflow.d.ts +13 -0
  34. package/lib/workflows/build-workflow.js +64 -0
  35. package/lib/workflows/deploy-workflow.d.ts +17 -0
  36. package/lib/workflows/deploy-workflow.js +113 -0
  37. package/lib/workflows/index.d.ts +2 -0
  38. package/lib/workflows/index.js +19 -0
  39. package/lib/workflows/steps/deploy.d.ts +4 -0
  40. package/lib/workflows/steps/deploy.js +62 -0
  41. package/package.json +63 -0
package/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2025 CodeDrifters
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # Configulator
2
+
3
+ A library of Projen components used by CodeDrifters to manage repository configuration across various projects.
4
+
@@ -0,0 +1,141 @@
1
+ import { Component, Project } from "projen";
2
+ import { TypeScriptAppProject } from "projen/lib/typescript";
3
+ import { GitBranch } from "../git/git-types";
4
+ /*******************************************************************************
5
+ *
6
+ *
7
+ ******************************************************************************/
8
+ export interface AwsDeploymentConfigOptions {
9
+ }
10
+ export declare const AWS_DEPLOY_TYPE: {
11
+ /**
12
+ * Development environment, typically used for testing and development.
13
+ */
14
+ readonly DEV: "dev";
15
+ /**
16
+ * Staging environment, used for pre-production testing.
17
+ */
18
+ readonly STAGE: "stage";
19
+ /**
20
+ * Production environment, used for live deployments.
21
+ */
22
+ readonly PROD: "prod";
23
+ };
24
+ /**
25
+ * Above const as a type.
26
+ */
27
+ export type AwsDeploymentType = (typeof AWS_DEPLOY_TYPE)[keyof typeof AWS_DEPLOY_TYPE];
28
+ /**
29
+ * Represents the configuration for local deployment in AWS.
30
+ */
31
+ export interface AwsLocalDeploymentConfig {
32
+ /**
33
+ * The AWS profile (in ~/.aws/config) to use for local deployment.
34
+ *
35
+ * @default generated dynamically based role name, account and region
36
+ */
37
+ profile?: string;
38
+ /**
39
+ * Named Role used to conduct local deployments.
40
+ *
41
+ * @default "administratoraccess"
42
+ */
43
+ roleName?: string;
44
+ }
45
+ export interface CiDeploymentConfig {
46
+ /**
47
+ * The OIDC IAM Role to assume for CI deployments.
48
+ */
49
+ roleArn: string;
50
+ }
51
+ /**
52
+ * Represents a deployment target in AWS, including account and region, and
53
+ * branches allowed to deploy to this target.
54
+ */
55
+ export interface AwsDeploymentTarget {
56
+ /**
57
+ * The account name for the deployment target.
58
+ */
59
+ account: string;
60
+ /**
61
+ * The AWS region for the deployment target.
62
+ */
63
+ region: string;
64
+ /**'
65
+ * AWS deployment type, such as dev, stage, or prod.
66
+ */
67
+ awsDeploymentType: AwsDeploymentType;
68
+ /**
69
+ * The AWS profile to use for this deployment target.
70
+ */
71
+ branches: Array<GitBranch>;
72
+ /**
73
+ * Can this deployment target be used for local development?
74
+ */
75
+ localDeployment: boolean;
76
+ /**
77
+ * Configuration when deploying to this target locally.
78
+ */
79
+ localDeploymentConfig?: AwsLocalDeploymentConfig;
80
+ /**
81
+ * Can this deployment target be used in CI deployments?
82
+ */
83
+ ciDeployment: boolean;
84
+ ciDeploymentConfig?: CiDeploymentConfig;
85
+ }
86
+ export declare class AwsDeploymentConfig extends Component {
87
+ static of(project: Project): Array<AwsDeploymentConfig> | undefined;
88
+ /**
89
+ * Environment variables to be injected into all tasks.
90
+ */
91
+ private readonly env;
92
+ /**
93
+ * The relative path to the project directory from the root of the project.
94
+ */
95
+ private readonly projectPath;
96
+ /**
97
+ * The relative path to the root of the project from the output directory.
98
+ */
99
+ private readonly rootPath;
100
+ /**
101
+ * The output directory for the CDK synthesis.
102
+ */
103
+ private readonly cdkOut;
104
+ /**
105
+ * Array of targets for deployment.
106
+ */
107
+ readonly deploymentTargets: Array<AwsDeploymentTarget>;
108
+ constructor(project: TypeScriptAppProject);
109
+ /**
110
+ * Adds a deployment target to the configuration.
111
+ *
112
+ * @param target The deployment target to add.
113
+ */
114
+ addDeploymentTarget(target: AwsDeploymentTarget): void;
115
+ /*****************************************************************************
116
+ *
117
+ * Synth Tasks
118
+ *
119
+ * - Configure synth task to use the branch name
120
+ * - Change the output location for easier workflows.
121
+ *
122
+ ****************************************************************************/
123
+ private configureSynthTask;
124
+ /*****************************************************************************
125
+ *
126
+ * Deploy Tasks
127
+ *
128
+ * - If local deploy, add a deploy task.
129
+ *
130
+ ****************************************************************************/
131
+ private configureDeployTask;
132
+ /*****************************************************************************
133
+ *
134
+ * Watch tasks
135
+ *
136
+ * - Configure watch task to use the branch name
137
+ * - configure watch task to use the correct synth output location.
138
+ *
139
+ ****************************************************************************/
140
+ private configureWatchTask;
141
+ }
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsDeploymentConfig = exports.AWS_DEPLOY_TYPE = void 0;
4
+ const node_path_1 = require("node:path");
5
+ const projen_1 = require("projen");
6
+ exports.AWS_DEPLOY_TYPE = {
7
+ /**
8
+ * Development environment, typically used for testing and development.
9
+ */
10
+ DEV: "dev",
11
+ /**
12
+ * Staging environment, used for pre-production testing.
13
+ */
14
+ STAGE: "stage",
15
+ /**
16
+ * Production environment, used for live deployments.
17
+ */
18
+ PROD: "prod",
19
+ };
20
+ class AwsDeploymentConfig extends projen_1.Component {
21
+ static of(project) {
22
+ const isDefined = (c) => c instanceof AwsDeploymentConfig;
23
+ return project.components.filter(isDefined);
24
+ }
25
+ constructor(project) {
26
+ super(project);
27
+ /**
28
+ * Array of targets for deployment.
29
+ */
30
+ this.deploymentTargets = [];
31
+ /*****************************************************************************
32
+ *
33
+ * Synth Tasks
34
+ *
35
+ * - Configure synth task to use the branch name
36
+ * - Change the output location for easier workflows.
37
+ *
38
+ ****************************************************************************/
39
+ this.configureSynthTask = () => {
40
+ this.project.tasks.tryFind("synth")?.reset(`rm -rf ${this.cdkOut}`);
41
+ this.project.tasks
42
+ .tryFind("synth")
43
+ ?.exec(`cdk synth --output ${this.cdkOut}`, { env: this.env });
44
+ this.project.tasks.tryFind("synth:silent")?.reset(`rm -rf ${this.cdkOut}`);
45
+ this.project.tasks
46
+ .tryFind("synth:silent")
47
+ ?.exec(`cdk synth -q --output ${this.cdkOut}`, { env: this.env });
48
+ };
49
+ /*****************************************************************************
50
+ *
51
+ * Deploy Tasks
52
+ *
53
+ * - If local deploy, add a deploy task.
54
+ *
55
+ ****************************************************************************/
56
+ this.configureDeployTask = (target) => {
57
+ if (target.localDeployment) {
58
+ const taskName = ["deploy", target.account, target.region].join(":");
59
+ const deployTask = this.project.tasks.addTask(taskName, {
60
+ env: this.env,
61
+ });
62
+ deployTask.exec(`cdk deploy --lookups=false --require-approval=never --profile=${target.localDeploymentConfig?.profile} --app=${this.cdkOut} "*-${target.account}-${target.region}"`);
63
+ }
64
+ };
65
+ /*****************************************************************************
66
+ *
67
+ * Watch tasks
68
+ *
69
+ * - Configure watch task to use the branch name
70
+ * - configure watch task to use the correct synth output location.
71
+ *
72
+ ****************************************************************************/
73
+ this.configureWatchTask = (target) => {
74
+ if (target.localDeployment) {
75
+ const taskName = ["watch", target.account, target.region].join(":");
76
+ const watchTask = this.project.tasks.addTask(taskName, { env: this.env });
77
+ // update the synth first
78
+ const synthSilent = this.project.tasks.tryFind("synth:silent");
79
+ if (synthSilent) {
80
+ watchTask.spawn(synthSilent);
81
+ }
82
+ // do a normal deploy
83
+ watchTask.exec(`cdk deploy --lookups=false --require-approval=never --profile=${target.localDeploymentConfig?.profile} --app=${this.cdkOut} "*-${target.account}-${target.region}"`);
84
+ // watch for changes and log output
85
+ watchTask.exec(`cdk watch --lookups=false --require-approval=never --hotswap --profile=${target.localDeploymentConfig?.profile} "*-${target.account}-${target.region}"`);
86
+ }
87
+ };
88
+ /**
89
+ * Common variables used across tasks.
90
+ */
91
+ this.env = { GIT_BRANCH: "$(git branch --show-current)" };
92
+ this.projectPath = (0, node_path_1.relative)(project.root.outdir, project.outdir);
93
+ this.rootPath = (0, node_path_1.relative)(project.outdir, project.root.outdir);
94
+ this.cdkOut = (0, node_path_1.join)(this.rootPath, "dist", this.projectPath, "cdk.out");
95
+ /**
96
+ * Reset some tasks we will rebuild below.
97
+ */
98
+ ["deploy", "watch"].forEach((taskName) => {
99
+ const task = project.tasks.tryFind(taskName);
100
+ if (task) {
101
+ task.reset();
102
+ task.say("Generic task is disabled. Please use the specific task for your deployment target.");
103
+ }
104
+ });
105
+ /**
106
+ * Redefine Synth here
107
+ *
108
+ * Deploy and watch get reconfigured per deployment target.
109
+ * @see addDeploymentTarget()
110
+ */
111
+ this.configureSynthTask();
112
+ }
113
+ /**
114
+ * Adds a deployment target to the configuration.
115
+ *
116
+ * @param target The deployment target to add.
117
+ */
118
+ addDeploymentTarget(target) {
119
+ /***************************************************************************
120
+ *
121
+ * Configure the deploy target.
122
+ *
123
+ * - For local deployments, discover or build profile name.
124
+ * - For CI deployments, discover or build role ARN.
125
+ * - Add the target to the deployment targets array.
126
+ *
127
+ **************************************************************************/
128
+ /**
129
+ * Some defaults for local deployments.
130
+ */
131
+ if (target.localDeployment) {
132
+ const roleName = target.localDeploymentConfig?.roleName?.toLowerCase() ||
133
+ "administratoraccess";
134
+ const profile = target.localDeploymentConfig?.profile ||
135
+ `${roleName}-${target.account}-${target.region}`;
136
+ target = {
137
+ ...target,
138
+ localDeploymentConfig: {
139
+ profile,
140
+ roleName,
141
+ },
142
+ };
143
+ }
144
+ /**
145
+ * Some defaults for CI deployments.
146
+ */
147
+ if (target.ciDeployment) {
148
+ const roleArn = target.ciDeploymentConfig?.roleArn ||
149
+ `arn:aws:iam::${target.account}:role/GitHub${this.project.name.replace("-", "")}`;
150
+ target = {
151
+ ...target,
152
+ ciDeploymentConfig: {
153
+ roleArn,
154
+ },
155
+ };
156
+ }
157
+ this.deploymentTargets.push(target);
158
+ // Deploy tasks are configured per target.
159
+ this.configureDeployTask(target);
160
+ // Watch tasks are configured per target.
161
+ this.configureWatchTask(target);
162
+ }
163
+ }
164
+ exports.AwsDeploymentConfig = AwsDeploymentConfig;
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWRlcGxveW1lbnQtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3cy9hd3MtZGVwbG95bWVudC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUNBQTJDO0FBQzNDLG1DQUE0QztBQWUvQixRQUFBLGVBQWUsR0FBRztJQUM3Qjs7T0FFRztJQUNILEdBQUcsRUFBRSxLQUFLO0lBRVY7O09BRUc7SUFDSCxLQUFLLEVBQUUsT0FBTztJQUVkOztPQUVHO0lBQ0gsSUFBSSxFQUFFLE1BQU07Q0FDSixDQUFDO0FBaUZYLE1BQWEsbUJBQW9CLFNBQVEsa0JBQVM7SUFDekMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQVksRUFBNEIsRUFBRSxDQUMzRCxDQUFDLFlBQVksbUJBQW1CLENBQUM7UUFDbkMsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBMkJELFlBQVksT0FBNkI7UUFDdkMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBTmpCOztXQUVHO1FBQ2Esc0JBQWlCLEdBQStCLEVBQUUsQ0FBQztRQWdHbkU7Ozs7Ozs7c0ZBTzhFO1FBRXRFLHVCQUFrQixHQUFHLEdBQVMsRUFBRTtZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2lCQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUM7Z0JBQ2pCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFFakUsSUFBSSxD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TyxHQUNYLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxPQUFPO2dCQUNsQyxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sZUFBZSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFFcEYsTUFBTSxHQUFHO2dCQUNQLEdBQUcsTUFBTTtnQkFDVCxrQkFBa0IsRUFBRTtvQkFDbEIsT0FBTztpQkFDUjthQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQywwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWpDLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQTBFRjtBQXRNRCxrREFzTUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luLCByZWxhdGl2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgUHJvamVjdCB9IGZyb20gXCJwcm9qZW5cIjtcbmltcG9ydCB7IFR5cGVTY3JpcHRBcHBQcm9qZWN0IH0gZnJvbSBcInByb2plbi9saWIvdHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgR2l0QnJhbmNoIH0gZnJvbSBcIi4uL2dpdC9naXQtdHlwZXNcIjtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqXG4gKlxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuZXhwb3J0IGludGVyZmFjZSBBd3NEZXBsb3ltZW50Q29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKlxuICAgKi9cbn1cblxuZXhwb3J0IGNvbnN0IEFXU19ERVBMT1lfVFlQRSA9IHtcbiAgLyoqXG4gICAqIERldmVsb3BtZW50IGVudmlyb25tZW50LCB0eXBpY2FsbHkgdXNlZCBmb3IgdGVzdGluZyBhbmQgZGV2ZWxvcG1lbnQuXG4gICAqL1xuICBERVY6IFwiZGV2XCIsXG5cbiAgLyoqXG4gICAqIFN0YWdpbmcgZW52aXJvbm1lbnQsIHVzZWQgZm9yIHByZS1wcm9kdWN0aW9uIHRlc3RpbmcuXG4gICAqL1xuICBTVEFHRTogXCJzdGFnZVwiLFxuXG4gIC8qKlxuICAgKiBQcm9kdWN0aW9uIGVudmlyb25tZW50LCB1c2VkIGZvciBsaXZlIGRlcGxveW1lbnRzLlxuICAgKi9cbiAgUFJPRDogXCJwcm9kXCIsXG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIEFib3ZlIGNvbnN0IGFzIGEgdHlwZS5cbiAqL1xuZXhwb3J0IHR5cGUgQXdzRGVwbG95bWVudFR5cGUgPVxuICAodHlwZW9mIEFXU19ERVBMT1lfVFlQRSlba2V5b2YgdHlwZW9mIEFXU19ERVBMT1lfVFlQRV07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgbG9jYWwgZGVwbG95bWVudCBpbiBBV1MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzTG9jYWxEZXBsb3ltZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgcHJvZmlsZSAoaW4gfi8uYXdzL2NvbmZpZykgdG8gdXNlIGZvciBsb2NhbCBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBnZW5lcmF0ZWQgZHluYW1pY2FsbHkgYmFzZWQgcm9sZSBuYW1lLCBhY2NvdW50IGFuZCByZWdpb25cbiAgICovXG4gIHByb2ZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWVkIFJvbGUgdXNlZCB0byBjb25kdWN0IGxvY2FsIGRlcGxveW1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImFkbWluaXN0cmF0b3JhY2Nlc3NcIlxuICAgKi9cbiAgcm9sZU5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lEZXBsb3ltZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBPSURDIElBTSBSb2xlIHRvIGFzc3VtZSBmb3IgQ0kgZGVwbG95bWVudHMuXG4gICAqL1xuICByb2xlQXJuOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRlcGxveW1lbnQgdGFyZ2V0IGluIEFXUywgaW5jbHVkaW5nIGFjY291bnQgYW5kIHJlZ2lvbiwgYW5kXG4gKiBicmFuY2hlcyBhbGxvd2VkIHRvIGRlcGxveSB0byB0aGlzIHRhcmdldC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NEZXBsb3ltZW50VGFyZ2V0IHtcbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IG5hbWUgZm9yIHRoZSBkZXBsb3ltZW50IHRhcmdldC5cbiAgICovXG4gIGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyByZWdpb24gZm9yIHRoZSBkZXBsb3ltZW50IHRhcmdldC5cbiAgICovXG4gIHJlZ2lvbjogc3RyaW5nO1xuXG4gIC8qKidcbiAgICogQVdTIGRlcGxveW1lbnQgdHlwZSwgc3VjaCBhcyBkZXYsIHN0YWdlLCBvciBwcm9kLlxuICAgKi9cbiAgYXdzRGVwbG95bWVudFR5cGU6IEF3c0RlcGxveW1lbnRUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIHByb2ZpbGUgdG8gdXNlIGZvciB0aGlzIGRlcGxveW1lbnQgdGFyZ2V0LlxuICAgKi9cbiAgYnJhbmNoZXM6IEFycmF5PEdpdEJyYW5jaD47XG5cbiAgLyoqXG4gICAqIENhbiB0aGlzIGRlcGxveW1lbnQgdGFyZ2V0IGJlIHVzZWQgZm9yIGxvY2FsIGRldmVsb3BtZW50P1xuICAgKi9cbiAgbG9jYWxEZXBsb3ltZW50OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIHdoZW4gZGVwbG95aW5nIHRvIHRoaXMgdGFyZ2V0IGxvY2FsbHkuXG4gICAqL1xuICBsb2NhbERlcGxveW1lbnRDb25maWc/OiBBd3NMb2NhbERlcGxveW1lbnRDb25maWc7XG5cbiAgLyoqXG4gICAqIENhbiB0aGlzIGRlcGxveW1lbnQgdGFyZ2V0IGJlIHVzZWQgaW4gQ0kgZGVwbG95bWVudHM/XG4gICAqL1xuICBjaURlcGxveW1lbnQ6IGJvb2xlYW47XG5cbiAgLypcbiAgICogQ29uZmlndXJhdGlvbiB3aGVuIGRlcGxveWluZyB0byB0aGlzIHRhcmdldCBpbiBDSS5cblxuICAgKi9cbiAgY2lEZXBsb3ltZW50Q29uZmlnPzogQ2lEZXBsb3ltZW50Q29uZmlnO1xufVxuXG5leHBvcnQgY2xhc3MgQXdzRGVwbG95bWVudENvbmZpZyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IEFycmF5PEF3c0RlcGxveW1lbnRDb25maWc+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RlZmluZWQgPSAoYzogQ29tcG9uZW50KTogYyBpcyBBd3NEZXBsb3ltZW50Q29uZmlnID0+XG4gICAgICBjIGluc3RhbmNlb2YgQXdzRGVwbG95bWVudENvbmZpZztcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbHRlcihpc0RlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB0byBiZSBpbmplY3RlZCBpbnRvIGFsbCB0YXNrcy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgcHJvamVjdCBkaXJlY3RvcnkgZnJvbSB0aGUgcm9vdCBvZiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbGF0aXZlIHBhdGggdG8gdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QgZnJvbSB0aGUgb3V0cHV0IGRpcmVjdG9yeS5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcm9vdFBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBDREsgc3ludGhlc2lzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBjZGtPdXQ6IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgdGFyZ2V0cyBmb3IgZGVwbG95bWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXBsb3ltZW50VGFyZ2V0czogQXJyYXk8QXdzRGVwbG95bWVudFRhcmdldD4gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBUeXBlU2NyaXB0QXBwUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgLyoqXG4gICAgICogQ29tbW9uIHZhcmlhYmxlcyB1c2VkIGFjcm9zcyB0YXNrcy5cbiAgICAgKi9cbiAgICB0aGlzLmVudiA9IHsgR0lUX0JSQU5DSDogXCIkKGdpdCBicmFuY2ggLS1zaG93LWN1cnJlbnQpXCIgfTtcbiAgICB0aGlzLnByb2plY3RQYXRoID0gcmVsYXRpdmUocHJvamVjdC5yb290Lm91dGRpciwgcHJvamVjdC5vdXRkaXIpO1xuICAgIHRoaXMucm9vdFBhdGggPSByZWxhdGl2ZShwcm9qZWN0Lm91dGRpciwgcHJvamVjdC5yb290Lm91dGRpcik7XG4gICAgdGhpcy5jZGtPdXQgPSBqb2luKHRoaXMucm9vdFBhdGgsIFwiZGlzdFwiLCB0aGlzLnByb2plY3RQYXRoLCBcImNkay5vdXRcIik7XG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBzb21lIHRhc2tzIHdlIHdpbGwgcmVidWlsZCBiZWxvdy5cbiAgICAgKi9cbiAgICBbXCJkZXBsb3lcIiwgXCJ3YXRjaFwiXS5mb3JFYWNoKCh0YXNrTmFtZSkgPT4ge1xuICAgICAgY29uc3QgdGFzayA9IHByb2plY3QudGFza3MudHJ5RmluZCh0YXNrTmFtZSk7XG4gICAgICBpZiAodGFzaykge1xuICAgICAgICB0YXNrLnJlc2V0KCk7XG4gICAgICAgIHRhc2suc2F5KFxuICAgICAgICAgIFwiR2VuZXJpYyB0YXNrIGlzIGRpc2FibGVkLiBQbGVhc2UgdXNlIHRoZSBzcGVjaWZpYyB0YXNrIGZvciB5b3VyIGRlcGxveW1lbnQgdGFyZ2V0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICogUmVkZWZpbmUgU3ludGggaGVyZVxuICAgICAqXG4gICAgICogRGVwbG95IGFuZCB3YXRjaCBnZXQgcmVjb25maWd1cmVkIHBlciBkZXBsb3ltZW50IHRhcmdldC5cbiAgICAgKiBAc2VlIGFkZERlcGxveW1lbnRUYXJnZXQoKVxuICAgICAqL1xuICAgIHRoaXMuY29uZmlndXJlU3ludGhUYXNrKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGRlcGxveW1lbnQgdGFyZ2V0IHRvIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBkZXBsb3ltZW50IHRhcmdldCB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwbG95bWVudFRhcmdldCh0YXJnZXQ6IEF3c0RlcGxveW1lbnRUYXJnZXQpOiB2b2lkIHtcbiAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAgICpcbiAgICAgKiBDb25maWd1cmUgdGhlIGRlcGxveSB0YXJnZXQuXG4gICAgICpcbiAgICAgKiAtIEZvciBsb2NhbCBkZXBsb3ltZW50cywgZGlzY292ZXIgb3IgYnVpbGQgcHJvZmlsZSBuYW1lLlxuICAgICAqIC0gRm9yIENJIGRlcGxveW1lbnRzLCBkaXNjb3ZlciBvciBidWlsZCByb2xlIEFSTi5cbiAgICAgKiAtIEFkZCB0aGUgdGFyZ2V0IHRvIHRoZSBkZXBsb3ltZW50IHRhcmdldHMgYXJyYXkuXG4gICAgICpcbiAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgICAvKipcbiAgICAgKiBTb21lIGRlZmF1bHRzIGZvciBsb2NhbCBkZXBsb3ltZW50cy5cbiAgICAgKi9cbiAgICBpZiAodGFyZ2V0LmxvY2FsRGVwbG95bWVudCkge1xuICAgICAgY29uc3Qgcm9sZU5hbWUgPVxuICAgICAgICB0YXJnZXQubG9jYWxEZXBsb3ltZW50Q29uZmlnPy5yb2xlTmFtZT8udG9Mb3dlckNhc2UoKSB8fFxuICAgICAgICBcImFkbWluaXN0cmF0b3JhY2Nlc3NcIjtcbiAgICAgIGNvbnN0IHByb2ZpbGUgPVxuICAgICAgICB0YXJnZXQubG9jYWxEZXBsb3ltZW50Q29uZmlnPy5wcm9maWxlIHx8XG4gICAgICAgIGAke3JvbGVOYW1lfS0ke3RhcmdldC5hY2NvdW50fS0ke3RhcmdldC5yZWdpb259YDtcblxuICAgICAgdGFyZ2V0ID0ge1xuICAgICAgICAuLi50YXJnZXQsXG4gICAgICAgIGxvY2FsRGVwbG95bWVudENvbmZpZzoge1xuICAgICAgICAgIHByb2ZpbGUsXG4gICAgICAgICAgcm9sZU5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNvbWUgZGVmYXVsdHMgZm9yIENJIGRlcGxveW1lbnRzLlxuICAgICAqL1xuICAgIGlmICh0YXJnZXQuY2lEZXBsb3ltZW50KSB7XG4gICAgICBjb25zdCByb2xlQXJuID1cbiAgICAgICAgdGFyZ2V0LmNpRGVwbG95bWVudENvbmZpZz8ucm9sZUFybiB8fFxuICAgICAgICBgYXJuOmF3czppYW06OiR7dGFyZ2V0LmFjY291bnR9OnJvbGUvR2l0SHViJHt0aGlzLnByb2plY3QubmFtZS5yZXBsYWNlKFwiLVwiLCBcIlwiKX1gO1xuXG4gICAgICB0YXJnZXQgPSB7XG4gICAgICAgIC4uLnRhcmdldCxcbiAgICAgICAgY2lEZXBsb3ltZW50Q29uZmlnOiB7XG4gICAgICAgICAgcm9sZUFybixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5kZXBsb3ltZW50VGFyZ2V0cy5wdXNoKHRhcmdldCk7XG5cbiAgICAvLyBEZXBsb3kgdGFza3MgYXJlIGNvbmZpZ3VyZWQgcGVyIHRhcmdldC5cbiAgICB0aGlzLmNvbmZpZ3VyZURlcGxveVRhc2sodGFyZ2V0KTtcblxuICAgIC8vIFdhdGNoIHRhc2tzIGFyZSBjb25maWd1cmVkIHBlciB0YXJnZXQuXG4gICAgdGhpcy5jb25maWd1cmVXYXRjaFRhc2sodGFyZ2V0KTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBTeW50aCBUYXNrc1xuICAgKlxuICAgKiAtIENvbmZpZ3VyZSBzeW50aCB0YXNrIHRvIHVzZSB0aGUgYnJhbmNoIG5hbWVcbiAgICogLSBDaGFuZ2UgdGhlIG91dHB1dCBsb2NhdGlvbiBmb3IgZWFzaWVyIHdvcmtmbG93cy5cbiAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBjb25maWd1cmVTeW50aFRhc2sgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJzeW50aFwiKT8ucmVzZXQoYHJtIC1yZiAke3RoaXMuY2RrT3V0fWApO1xuICAgIHRoaXMucHJvamVjdC50YXNrc1xuICAgICAgLnRyeUZpbmQoXCJzeW50aFwiKVxuICAgICAgPy5leGVjKGBjZGsgc3ludGggLS1vdXRwdXQgJHt0aGlzLmNka091dH1gLCB7IGVudjogdGhpcy5lbnYgfSk7XG5cbiAgICB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInN5bnRoOnNpbGVudFwiKT8ucmVzZXQoYHJtIC1yZiAke3RoaXMuY2RrT3V0fWApO1xuICAgIHRoaXMucHJvamVjdC50YXNrc1xuICAgICAgLnRyeUZpbmQoXCJzeW50aDpzaWxlbnRcIilcbiAgICAgID8uZXhlYyhgY2RrIHN5bnRoIC1xIC0tb3V0cHV0ICR7dGhpcy5jZGtPdXR9YCwgeyBlbnY6IHRoaXMuZW52IH0pO1xuICB9O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKlxuICAgKiBEZXBsb3kgVGFza3NcbiAgICpcbiAgICogLSBJZiBsb2NhbCBkZXBsb3ksIGFkZCBhIGRlcGxveSB0YXNrLlxuICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwcml2YXRlIGNvbmZpZ3VyZURlcGxveVRhc2sgPSAodGFyZ2V0OiBBd3NEZXBsb3ltZW50VGFyZ2V0KTogdm9pZCA9PiB7XG4gICAgaWYgKHRhcmdldC5sb2NhbERlcGxveW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhc2tOYW1lID0gW1wiZGVwbG95XCIsIHRhcmdldC5hY2NvdW50LCB0YXJnZXQucmVnaW9uXS5qb2luKFwiOlwiKTtcbiAgICAgIGNvbnN0IGRlcGxveVRhc2sgPSB0aGlzLnByb2plY3QudGFza3MuYWRkVGFzayh0YXNrTmFtZSwge1xuICAgICAgICBlbnY6IHRoaXMuZW52LFxuICAgICAgfSk7XG4gICAgICBkZXBsb3lUYXNrLmV4ZWMoXG4gICAgICAgIGBjZGsgZGVwbG95IC0tbG9va3Vwcz1mYWxzZSAtLXJlcXVpcmUtYXBwcm92YWw9bmV2ZXIgLS1wcm9maWxlPSR7dGFyZ2V0LmxvY2FsRGVwbG95bWVudENvbmZpZz8ucHJvZmlsZX0gLS1hcHA9JHt0aGlzLmNka091dH0gXCIqLSR7dGFyZ2V0LmFjY291bnR9LSR7dGFyZ2V0LnJlZ2lvbn1cImAsXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICpcbiAgICogV2F0Y2ggdGFza3NcbiAgICpcbiAgICogLSBDb25maWd1cmUgd2F0Y2ggdGFzayB0byB1c2UgdGhlIGJyYW5jaCBuYW1lXG4gICAqIC0gY29uZmlndXJlIHdhdGNoIHRhc2sgdG8gdXNlIHRoZSBjb3JyZWN0IHN5bnRoIG91dHB1dCBsb2NhdGlvbi5cbiAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBjb25maWd1cmVXYXRjaFRhc2sgPSAodGFyZ2V0OiBBd3NEZXBsb3ltZW50VGFyZ2V0KTogdm9pZCA9PiB7XG4gICAgaWYgKHRhcmdldC5sb2NhbERlcGxveW1lbnQpIHtcbiAgICAgIGNvbnN0IHRhc2tOYW1lID0gW1wid2F0Y2hcIiwgdGFyZ2V0LmFjY291bnQsIHRhcmdldC5yZWdpb25dLmpvaW4oXCI6XCIpO1xuICAgICAgY29uc3Qgd2F0Y2hUYXNrID0gdGhpcy5wcm9qZWN0LnRhc2tzLmFkZFRhc2sodGFza05hbWUsIHsgZW52OiB0aGlzLmVudiB9KTtcblxuICAgICAgLy8gdXBkYXRlIHRoZSBzeW50aCBmaXJzdFxuICAgICAgY29uc3Qgc3ludGhTaWxlbnQgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZChcInN5bnRoOnNpbGVudFwiKTtcbiAgICAgIGlmIChzeW50aFNpbGVudCkge1xuICAgICAgICB3YXRjaFRhc2suc3Bhd24oc3ludGhTaWxlbnQpO1xuICAgICAgfVxuXG4gICAgICAvLyBkbyBhIG5vcm1hbCBkZXBsb3lcbiAgICAgIHdhdGNoVGFzay5leGVjKFxuICAgICAgICBgY2RrIGRlcGxveSAtLWxvb2t1cHM9ZmFsc2UgLS1yZXF1aXJlLWFwcHJvdmFsPW5ldmVyIC0tcHJvZmlsZT0ke3RhcmdldC5sb2NhbERlcGxveW1lbnRDb25maWc/LnByb2ZpbGV9IC0tYXBwPSR7dGhpcy5jZGtPdXR9IFwiKi0ke3RhcmdldC5hY2NvdW50fS0ke3RhcmdldC5yZWdpb259XCJgLFxuICAgICAgKTtcblxuICAgICAgLy8gd2F0Y2ggZm9yIGNoYW5nZXMgYW5kIGxvZyBvdXRwdXRcbiAgICAgIHdhdGNoVGFzay5leGVjKFxuICAgICAgICBgY2RrIHdhdGNoIC0tbG9va3Vwcz1mYWxzZSAtLXJlcXVpcmUtYXBwcm92YWw9bmV2ZXIgLS1ob3Rzd2FwIC0tcHJvZmlsZT0ke3RhcmdldC5sb2NhbERlcGxveW1lbnRDb25maWc/LnByb2ZpbGV9IFwiKi0ke3RhcmdldC5hY2NvdW50fS0ke3RhcmdldC5yZWdpb259XCJgLFxuICAgICAgKTtcbiAgICB9XG4gIH07XG59XG4iXX0=
@@ -0,0 +1,63 @@
1
+ /*******************************************************************************
2
+ *
3
+ * AWS Organization, Account, and Region Definitions. These shapes are used
4
+ * when configuring deployment targets that automation can deploy projects into.
5
+ *
6
+ ******************************************************************************/
7
+ /**
8
+ * AWS Region
9
+ *
10
+ * Represents an active Region that deployments can be made into.
11
+ */
12
+ export interface AwsRegion {
13
+ /**
14
+ * The name of the AWS region.
15
+ */
16
+ name: string;
17
+ /**
18
+ * The code of the AWS region (e.g., us-east-1).
19
+ */
20
+ code: string;
21
+ /**
22
+ * Indicates if the region is currently active as a targets for deployments.
23
+ */
24
+ active: boolean;
25
+ }
26
+ /**
27
+ * AWS Account
28
+ *
29
+ * Represents an AWS account with its details.
30
+ */
31
+ export interface AwsAccount {
32
+ /**
33
+ * The name of the AWS account.
34
+ */
35
+ name: string;
36
+ /**
37
+ * The ID (account number) of the AWS account.
38
+ */
39
+ id: string;
40
+ /**
41
+ * The list of active regions available in the AWS account.
42
+ */
43
+ regions: Array<AwsRegion>;
44
+ }
45
+ /**
46
+ * AWS Organization
47
+ *
48
+ * Represents one Organization configuration.
49
+ */
50
+ export interface AwsOrganization {
51
+ /**
52
+ * The name of the AWS organization.
53
+ */
54
+ name: string;
55
+ /**
56
+ * The ID of the AWS organization.
57
+ */
58
+ id: string;
59
+ /**
60
+ * The list of AWS accounts in the organization.
61
+ */
62
+ accounts: Array<AwsAccount>;
63
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /*******************************************************************************
3
+ *
4
+ * AWS Organization, Account, and Region Definitions. These shapes are used
5
+ * when configuring deployment targets that automation can deploy projects into.
6
+ *
7
+ ******************************************************************************/
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F3cy9hd3MtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztnRkFLZ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICpcbiAqIEFXUyBPcmdhbml6YXRpb24sIEFjY291bnQsIGFuZCBSZWdpb24gRGVmaW5pdGlvbnMuIFRoZXNlIHNoYXBlcyBhcmUgdXNlZFxuICogd2hlbiBjb25maWd1cmluZyBkZXBsb3ltZW50IHRhcmdldHMgdGhhdCBhdXRvbWF0aW9uIGNhbiBkZXBsb3kgcHJvamVjdHMgaW50by5cbiAqXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4vKipcbiAqIEFXUyBSZWdpb25cbiAqXG4gKiBSZXByZXNlbnRzIGFuIGFjdGl2ZSBSZWdpb24gdGhhdCBkZXBsb3ltZW50cyBjYW4gYmUgbWFkZSBpbnRvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c1JlZ2lvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIHJlZ2lvbi5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvZGUgb2YgdGhlIEFXUyByZWdpb24gKGUuZy4sIHVzLWVhc3QtMSkuXG4gICAqL1xuICBjb2RlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgcmVnaW9uIGlzIGN1cnJlbnRseSBhY3RpdmUgYXMgYSB0YXJnZXRzIGZvciBkZXBsb3ltZW50cy5cbiAgICovXG4gIGFjdGl2ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBV1MgQWNjb3VudFxuICpcbiAqIFJlcHJlc2VudHMgYW4gQVdTIGFjY291bnQgd2l0aCBpdHMgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NBY2NvdW50IHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgYWNjb3VudC5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIChhY2NvdW50IG51bWJlcikgb2YgdGhlIEFXUyBhY2NvdW50LlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgYWN0aXZlIHJlZ2lvbnMgYXZhaWxhYmxlIGluIHRoZSBBV1MgYWNjb3VudC5cbiAgICovXG4gIHJlZ2lvbnM6IEFycmF5PEF3c1JlZ2lvbj47XG59XG5cbi8qKlxuICogQVdTIE9yZ2FuaXphdGlvblxuICpcbiAqIFJlcHJlc2VudHMgb25lIE9yZ2FuaXphdGlvbiBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c09yZ2FuaXphdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBBV1Mgb3JnYW5pemF0aW9uLlxuICAgKi9cbiAgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgQVdTIGFjY291bnRzIGluIHRoZSBvcmdhbml6YXRpb24uXG4gICAqL1xuICBhY2NvdW50czogQXJyYXk8QXdzQWNjb3VudD47XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from "./aws-types";
2
+ export * from "./aws-deployment-config";
@@ -0,0 +1,19 @@
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-types"), exports);
18
+ __exportStar(require("./aws-deployment-config"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsMERBQXdDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXdzLXR5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9hd3MtZGVwbG95bWVudC1jb25maWdcIjtcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ /*******************************************************************************
2
+ *
3
+ * Git configs for this repo. This venn diagram has a great deal of overlap
4
+ * with GitHub config options but is not a perfect circle.
5
+ *
6
+ ******************************************************************************/
7
+ export interface GitBranch {
8
+ /**
9
+ * The name of the branch pattern.
10
+ *
11
+ * @example "main" or "feature/*"
12
+ */
13
+ branch: string;
14
+ /**
15
+ * Description for this branch's purpose, used for generated documentation.
16
+ */
17
+ description?: Array<string>;
18
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ /*******************************************************************************
3
+ *
4
+ * Git configs for this repo. This venn diagram has a great deal of overlap
5
+ * with GitHub config options but is not a perfect circle.
6
+ *
7
+ ******************************************************************************/
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdC9naXQtdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7OztnRkFLZ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICpcbiAqIEdpdCBjb25maWdzIGZvciB0aGlzIHJlcG8uIFRoaXMgdmVubiBkaWFncmFtIGhhcyBhIGdyZWF0IGRlYWwgb2Ygb3ZlcmxhcFxuICogd2l0aCBHaXRIdWIgY29uZmlnIG9wdGlvbnMgYnV0IGlzIG5vdCBhIHBlcmZlY3QgY2lyY2xlLlxuICpcbiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0QnJhbmNoIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBicmFuY2ggcGF0dGVybi5cbiAgICpcbiAgICogQGV4YW1wbGUgXCJtYWluXCIgb3IgXCJmZWF0dXJlLypcIlxuICAgKi9cbiAgYnJhbmNoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIGZvciB0aGlzIGJyYW5jaCdzIHB1cnBvc2UsIHVzZWQgZm9yIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLlxuICAgKi9cbiAgZGVzY3JpcHRpb24/OiBBcnJheTxzdHJpbmc+O1xufVxuIl19
@@ -0,0 +1 @@
1
+ export * from "./git-types";
@@ -0,0 +1,18 @@
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("./git-types"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2l0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9naXQtdHlwZXNcIjtcbiJdfQ==
@@ -0,0 +1 @@
1
+ export * from "./pnpm-workspace";
@@ -0,0 +1,18 @@
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("./pnpm-workspace"), exports);
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG5wbS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcG5wbS13b3Jrc3BhY2VcIjtcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ import { Component, Project } from "projen";
2
+ export declare class PnpmWorkspace extends Component {
3
+ static of(project: Project): PnpmWorkspace | undefined;
4
+ constructor(project: Project);
5
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PnpmWorkspace = void 0;
4
+ const path_1 = require("path");
5
+ const projen_1 = require("projen");
6
+ class PnpmWorkspace extends projen_1.Component {
7
+ static of(project) {
8
+ const isDefined = (c) => c instanceof PnpmWorkspace;
9
+ return project.root.components.find(isDefined);
10
+ }
11
+ constructor(project) {
12
+ super(project);
13
+ const fileName = "pnpm-workspace.yaml";
14
+ /**
15
+ * In case that this file is in a package, don't package it.
16
+ */
17
+ project.addPackageIgnore(fileName);
18
+ /**
19
+ * Write pnpm workspace file
20
+ */
21
+ new projen_1.YamlFile(this.project, fileName, {
22
+ obj: {
23
+ packages: () => {
24
+ const packages = new Array();
25
+ for (const subproject of project.subprojects) {
26
+ // grab the relative out directory
27
+ packages.push((0, path_1.relative)(this.project.outdir, subproject.outdir));
28
+ }
29
+ return packages;
30
+ },
31
+ },
32
+ });
33
+ }
34
+ }
35
+ exports.PnpmWorkspace = PnpmWorkspace;
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG5wbS13b3Jrc3BhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcG5wbS9wbnBtLXdvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBZ0M7QUFDaEMsbUNBQXNEO0FBRXRELE1BQWEsYUFBYyxTQUFRLGtCQUFTO0lBQ25DLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFZLEVBQXNCLEVBQUUsQ0FDckQsQ0FBQyxZQUFZLGFBQWEsQ0FBQztRQUM3QixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsWUFBWSxPQUFnQjtRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixNQUFNLFFBQVEsR0FBVyxxQkFBcUIsQ0FBQztRQUUvQzs7V0FFRztRQUNILE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVuQzs7V0FFRztRQUNILElBQUksaUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUNuQyxHQUFHLEVBQUU7Z0JBQ0gsUUFBUSxFQUFFLEdBQUcsRUFBRTtvQkFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO29CQUNyQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDN0Msa0NBQWtDO3dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUEsZUFBUSxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxDQUFDO29CQUNELE9BQU8sUUFBUSxDQUFDO2dCQUNsQixDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFqQ0Qsc0NBaUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVsYXRpdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBQcm9qZWN0LCBZYW1sRmlsZSB9IGZyb20gXCJwcm9qZW5cIjtcblxuZXhwb3J0IGNsYXNzIFBucG1Xb3Jrc3BhY2UgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBQbnBtV29ya3NwYWNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0RlZmluZWQgPSAoYzogQ29tcG9uZW50KTogYyBpcyBQbnBtV29ya3NwYWNlID0+XG4gICAgICBjIGluc3RhbmNlb2YgUG5wbVdvcmtzcGFjZTtcbiAgICByZXR1cm4gcHJvamVjdC5yb290LmNvbXBvbmVudHMuZmluZChpc0RlZmluZWQpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgY29uc3QgZmlsZU5hbWU6IHN0cmluZyA9IFwicG5wbS13b3Jrc3BhY2UueWFtbFwiO1xuXG4gICAgLyoqXG4gICAgICogSW4gY2FzZSB0aGF0IHRoaXMgZmlsZSBpcyBpbiBhIHBhY2thZ2UsIGRvbid0IHBhY2thZ2UgaXQuXG4gICAgICovXG4gICAgcHJvamVjdC5hZGRQYWNrYWdlSWdub3JlKGZpbGVOYW1lKTtcblxuICAgIC8qKlxuICAgICAqIFdyaXRlIHBucG0gd29ya3NwYWNlIGZpbGVcbiAgICAgKi9cbiAgICBuZXcgWWFtbEZpbGUodGhpcy5wcm9qZWN0LCBmaWxlTmFtZSwge1xuICAgICAgb2JqOiB7XG4gICAgICAgIHBhY2thZ2VzOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFja2FnZXMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgICAgICAgIGZvciAoY29uc3Qgc3VicHJvamVjdCBvZiBwcm9qZWN0LnN1YnByb2plY3RzKSB7XG4gICAgICAgICAgICAvLyBncmFiIHRoZSByZWxhdGl2ZSBvdXQgZGlyZWN0b3J5XG4gICAgICAgICAgICBwYWNrYWdlcy5wdXNoKHJlbGF0aXZlKHRoaXMucHJvamVjdC5vdXRkaXIsIHN1YnByb2plY3Qub3V0ZGlyKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBwYWNrYWdlcztcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from "./turbo-repo-task";
2
+ export * from "./turbo-repo";
@@ -0,0 +1,19 @@
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("./turbo-repo-task"), exports);
18
+ __exportStar(require("./turbo-repo"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHVyYm8vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUFrQztBQUNsQywrQ0FBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi90dXJiby1yZXBvLXRhc2tcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R1cmJvLXJlcG9cIjtcbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import { Component, Project } from "projen/lib";
2
+ /**
3
+ * Each of the below options corresponds to a task property found here:
4
+ * * https://turborepo.com/docs/reference/configuration#defining-tasks
5
+ */
6
+ export interface TurboRepoTaskOptions {
7
+ readonly name: string;
8
+ readonly dependsOn?: Array<string>;
9
+ readonly env?: Array<string>;
10
+ readonly passThroughEnv?: Array<string>;
11
+ readonly outputs?: Array<string>;
12
+ readonly cache?: boolean;
13
+ readonly inputs?: Array<string>;
14
+ readonly outputLogs?: "full" | "hash-only" | "new-only" | "errors-only" | "none";
15
+ readonly persistent?: boolean;
16
+ readonly interactive?: boolean;
17
+ }
18
+ export declare class TurboRepoTask extends Component {
19
+ readonly project: Project;
20
+ readonly name: string;
21
+ dependsOn: Array<string>;
22
+ readonly env: Array<string>;
23
+ readonly passThroughEnv: Array<string>;
24
+ outputs: Array<string>;
25
+ cache: boolean;
26
+ inputs: Array<string>;
27
+ readonly outputLogs: "full" | "hash-only" | "new-only" | "errors-only" | "none";
28
+ readonly persistent: boolean;
29
+ readonly interactive: boolean;
30
+ /**
31
+ * Include this task in turbo.json output?
32
+ */
33
+ isActive: boolean;
34
+ constructor(project: Project, options: TurboRepoTaskOptions);
35
+ taskConfig(): Record<string, any>;
36
+ }