@aws/nx-plugin 0.40.1 → 0.41.1

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.
package/README.md CHANGED
@@ -59,6 +59,7 @@
59
59
  - `ts#nx-generator` - Add an [Nx Generator](https://nx.dev/features/generate-code) to a TypeScript project.
60
60
  - `ts#mcp-server` - Add a [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server to a TypeScript project.
61
61
  - `ts#lambda-function` - Generate a TypeScript lambda function with optional type-safe event sources.
62
+ - `terraform#project` - Generate a new Terraform project.
62
63
  - `py#project` - Generate a uv based Python project.
63
64
  - `py#fast-api` - Generate a FastAPI backend service with [AWS Powertools](https://github.com/aws-powertools/powertools-lambda-python) pre-configured.
64
65
  - `py#lambda-function` - Add a lambda function to an existing python project with optional type-safe event sources.
package/generators.json CHANGED
@@ -156,6 +156,13 @@
156
156
  "schema": "./src/ts/nx-plugin/schema.json",
157
157
  "description": "Generate an Nx Plugin of your own! Build custom generators automatically made available for AI vibe-coding via MCP",
158
158
  "metric": "g22"
159
+ },
160
+ "terraform#project": {
161
+ "factory": "./src/terraform/project/generator",
162
+ "schema": "./src/terraform/project/schema.json",
163
+ "description": "Generates a Terraform project",
164
+ "metric": "g23",
165
+ "guidePages": ["terraform-project"]
159
166
  }
160
167
  }
161
168
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws/nx-plugin",
3
- "version": "0.40.1",
3
+ "version": "0.41.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/awslabs/nx-plugin-for-aws.git",
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ export { terraformProjectGenerator } from '../src/terraform/project/generator';
6
+ export type { TerraformProjectGeneratorSchema } from '../src/terraform/project/schema';
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.terraformProjectGenerator = void 0;
8
+ // Terraform Project Generator
9
+ var generator_1 = require("../src/terraform/project/generator");
10
+ Object.defineProperty(exports, "terraformProjectGenerator", { enumerable: true, get: function () { return generator_1.terraformProjectGenerator; } });
11
+ //# sourceMappingURL=terraform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform.js","sourceRoot":"","sources":["../../../../packages/nx-plugin/sdk/terraform.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,8BAA8B;AAC9B,gEAA+E;AAAtE,sHAAA,yBAAyB,OAAA"}
@@ -58,6 +58,8 @@ The following list of generators are what is currently available in the \`@aws/n
58
58
 
59
59
  - **ts#nx-plugin**: Generate an Nx Plugin of your own! Build custom generators automatically made available for AI vibe-coding via MCP
60
60
 
61
+ - **terraform#project**: Generates a Terraform project
62
+
61
63
  You also have the option of using additional [commmunity plugins](https://nx.dev/plugin-registry) as needed.
62
64
 
63
65
  ## Invoking a generator
@@ -0,0 +1,91 @@
1
+ # Local values for resource naming and tagging
2
+ locals {
3
+ account_id = data.aws_caller_identity.current.account_id
4
+ region = var.aws_region
5
+ bucket_name = "${local.account_id}-tf-state-${local.region}"
6
+ }
7
+
8
+ # S3 bucket for Terraform state
9
+ resource "aws_s3_bucket" "terraform_state" {
10
+ bucket = local.bucket_name
11
+ force_destroy = false
12
+ }
13
+
14
+ # S3 bucket versioning (hardcoded to enabled)
15
+ resource "aws_s3_bucket_versioning" "terraform_state" {
16
+ bucket = aws_s3_bucket.terraform_state.id
17
+ versioning_configuration {
18
+ status = "Enabled"
19
+ }
20
+ }
21
+
22
+ # S3 bucket server-side encryption (hardcoded to AES256)
23
+ resource "aws_s3_bucket_server_side_encryption_configuration" "terraform_state" {
24
+ bucket = aws_s3_bucket.terraform_state.id
25
+
26
+ rule {
27
+ apply_server_side_encryption_by_default {
28
+ sse_algorithm = "AES256"
29
+ }
30
+ }
31
+ }
32
+
33
+ # S3 bucket public access block
34
+ resource "aws_s3_bucket_public_access_block" "terraform_state" {
35
+ bucket = aws_s3_bucket.terraform_state.id
36
+
37
+ block_public_acls = true
38
+ block_public_policy = true
39
+ ignore_public_acls = true
40
+ restrict_public_buckets = true
41
+ }
42
+
43
+ # S3 bucket lifecycle configuration (simplified)
44
+ resource "aws_s3_bucket_lifecycle_configuration" "terraform_state" {
45
+ depends_on = [aws_s3_bucket_versioning.terraform_state]
46
+ bucket = aws_s3_bucket.terraform_state.id
47
+
48
+ rule {
49
+ id = "terraform_state_lifecycle"
50
+ status = "Enabled"
51
+
52
+ # Apply to all objects in the bucket
53
+ filter {}
54
+
55
+ # Delete old versions after 30 days
56
+ noncurrent_version_expiration {
57
+ noncurrent_days = 30
58
+ }
59
+
60
+ # Delete incomplete multipart uploads after 7 days
61
+ abort_incomplete_multipart_upload {
62
+ days_after_initiation = 7
63
+ }
64
+ }
65
+ }
66
+
67
+ # S3 bucket policy to deny insecure connections
68
+ resource "aws_s3_bucket_policy" "terraform_state" {
69
+ bucket = aws_s3_bucket.terraform_state.id
70
+
71
+ policy = jsonencode({
72
+ Version = "2012-10-17"
73
+ Statement = [
74
+ {
75
+ Sid = "DenyInsecureConnections"
76
+ Effect = "Deny"
77
+ Principal = "*"
78
+ Action = "s3:*"
79
+ Resource = [
80
+ aws_s3_bucket.terraform_state.arn,
81
+ "${aws_s3_bucket.terraform_state.arn}/*"
82
+ ]
83
+ Condition = {
84
+ Bool = {
85
+ "aws:SecureTransport" = "false"
86
+ }
87
+ }
88
+ }
89
+ ]
90
+ })
91
+ }
@@ -0,0 +1,6 @@
1
+ provider "aws" {
2
+ region = var.aws_region
3
+ }
4
+
5
+ data "aws_caller_identity" "current" {}
6
+ data "aws_region" "current" {}
@@ -0,0 +1,4 @@
1
+ variable "aws_region" {
2
+ description = "AWS Region (us-east-1, us-west-2, ap-southeast-2, etc)"
3
+ type = string
4
+ }
@@ -0,0 +1,3 @@
1
+ # aws_region is dynamically set based on assumed role
2
+ # aws_region = "xxx"
3
+ environment = "dev"
@@ -0,0 +1,14 @@
1
+ locals {
2
+ account_id = data.aws_caller_identity.current.account_id
3
+ aws_region = data.aws_region.current.id
4
+ }
5
+
6
+ resource "null_resource" "print_info" {
7
+ # triggers = {
8
+ # always_run = timestamp()
9
+ # }
10
+
11
+ provisioner "local-exec" {
12
+ command = "echo 'AWS Region: ${local.aws_region}, AWS Account: ${local.account_id}, Environment: ${var.environment}'"
13
+ }
14
+ }
@@ -0,0 +1,9 @@
1
+ output "aws_region" {
2
+ description = "AWS region"
3
+ value = data.aws_region.current.id
4
+ }
5
+
6
+ output "environment" {
7
+ description = "Environment (dev, staging, prod)"
8
+ value = var.environment
9
+ }
@@ -0,0 +1,20 @@
1
+ terraform {
2
+ required_providers {
3
+ aws = {
4
+ source = "hashicorp/aws"
5
+ version = "~> 6.0"
6
+ }
7
+ }
8
+
9
+ backend "s3" {
10
+ encrypt = true
11
+ use_lockfile = true
12
+ }
13
+ }
14
+
15
+ provider "aws" {
16
+ region = var.aws_region
17
+ }
18
+
19
+ data "aws_caller_identity" "current" {}
20
+ data "aws_region" "current" {}
@@ -0,0 +1,10 @@
1
+ variable "aws_region" {
2
+ description = "AWS Region (us-east-1, us-west-2, ap-southeast-2, etc)"
3
+ type = string
4
+ default = null
5
+ }
6
+
7
+ variable "environment" {
8
+ description = "Environment (dev, staging, prod)"
9
+ type = string
10
+ }
@@ -0,0 +1,5 @@
1
+ resource "null_resource" "hello_world" {
2
+ provisioner "local-exec" {
3
+ command = "echo 'TODO'"
4
+ }
5
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { Tree, GeneratorCallback } from '@nx/devkit';
6
+ import { TerraformProjectGeneratorSchema } from './schema';
7
+ import { NxGeneratorInfo } from '../../utils/nx';
8
+ export declare const TERRAFORM_PROJECT_GENERATOR_INFO: NxGeneratorInfo;
9
+ export declare function terraformProjectGenerator(tree: Tree, schema: TerraformProjectGeneratorSchema): Promise<GeneratorCallback>;
10
+ export default terraformProjectGenerator;
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TERRAFORM_PROJECT_GENERATOR_INFO = void 0;
4
+ exports.terraformProjectGenerator = terraformProjectGenerator;
5
+ const tslib_1 = require("tslib");
6
+ /**
7
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
8
+ * SPDX-License-Identifier: Apache-2.0
9
+ */
10
+ const devkit_1 = require("@nx/devkit");
11
+ const generator_1 = require("../../ts/lib/generator");
12
+ const path_1 = require("path");
13
+ const object_1 = require("../../utils/object");
14
+ const nx_1 = require("../../utils/nx");
15
+ const git_1 = require("../../utils/git");
16
+ const versions_1 = require("../../utils/versions");
17
+ const NX_EXTEND_PLUGIN = '@nx-extend/terraform';
18
+ exports.TERRAFORM_PROJECT_GENERATOR_INFO = (0, nx_1.getGeneratorInfo)(__filename);
19
+ function terraformProjectGenerator(tree, schema) {
20
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
21
+ var _a, _b;
22
+ // Just use getTsLibDetails as it isn't specific to TS
23
+ const lib = (0, generator_1.getTsLibDetails)(tree, schema);
24
+ const outDirToRootRelativePath = (0, path_1.relative)((0, path_1.join)(tree.root, lib.dir, 'src'), tree.root);
25
+ const distDir = (0, path_1.join)(outDirToRootRelativePath, 'dist', lib.dir);
26
+ const tfDistDir = (0, path_1.join)(distDir, 'terraform');
27
+ const checkovDistDir = (0, path_1.join)(distDir, 'checkov');
28
+ (0, git_1.updateGitIgnore)(tree, '.', (patterns) => [...patterns, '.terraform']);
29
+ const applicationTargets = {
30
+ apply: {
31
+ executor: 'nx:run-commands',
32
+ defaultConfiguration: 'dev',
33
+ configurations: {
34
+ dev: {
35
+ command: `terraform apply ${tfDistDir}/dev.tfplan`,
36
+ },
37
+ },
38
+ options: {
39
+ forwardAllArgs: true,
40
+ cwd: '{projectRoot}/src',
41
+ },
42
+ dependsOn: ['plan'],
43
+ },
44
+ bootstrap: {
45
+ executor: 'nx:run-commands',
46
+ options: {
47
+ forwardAllArgs: true,
48
+ commands: [
49
+ `aws s3 cp s3://$(aws sts get-caller-identity --query Account --output text)-tf-state-$(aws configure get region)/bootstrap.tfstate ${tfDistDir}/bootstrap.tfstate || true`,
50
+ 'terraform init',
51
+ `terraform apply -auto-approve -state=${tfDistDir}/bootstrap.tfstate -var="aws_region=$(aws configure get region)"`,
52
+ `aws s3 cp ${tfDistDir}/bootstrap.tfstate s3://$(aws sts get-caller-identity --query Account --output text)-tf-state-$(aws configure get region)/bootstrap.tfstate`,
53
+ ],
54
+ parallel: false,
55
+ cwd: '{projectRoot}/bootstrap',
56
+ },
57
+ },
58
+ 'bootstrap-destroy': {
59
+ executor: 'nx:run-commands',
60
+ options: {
61
+ forwardAllArgs: true,
62
+ command: `terraform destroy -state=${tfDistDir}/bootstrap.tfstate`,
63
+ cwd: '{projectRoot}/bootstrap',
64
+ },
65
+ },
66
+ destroy: {
67
+ executor: 'nx:run-commands',
68
+ defaultConfiguration: 'dev',
69
+ configurations: {
70
+ dev: {
71
+ command: 'terraform destroy -var-file=env/dev.tfvars',
72
+ },
73
+ },
74
+ options: {
75
+ forwardAllArgs: true,
76
+ cwd: '{projectRoot}/src',
77
+ },
78
+ dependsOn: ['init'],
79
+ },
80
+ init: {
81
+ executor: 'nx:run-commands',
82
+ defaultConfiguration: 'dev',
83
+ configurations: {
84
+ dev: {
85
+ command: 'terraform init -reconfigure -backend-config="region=$(aws configure get region)" -backend-config="bucket=$(aws sts get-caller-identity --query Account --output text)-tf-state-$(aws configure get region)" -backend-config="key=dev/terraform.tfstate"',
86
+ },
87
+ },
88
+ options: {
89
+ forwardAllArgs: true,
90
+ cwd: '{projectRoot}/src',
91
+ },
92
+ },
93
+ output: {
94
+ executor: 'nx:run-commands',
95
+ cache: true,
96
+ inputs: ['default'],
97
+ options: {
98
+ command: 'terraform output -json',
99
+ forwardAllArgs: true,
100
+ cwd: '{projectRoot}/src',
101
+ },
102
+ },
103
+ plan: {
104
+ executor: 'nx:run-commands',
105
+ defaultConfiguration: 'dev',
106
+ configurations: {
107
+ dev: {
108
+ command: `terraform plan -var-file=env/dev.tfvars -out=${tfDistDir}/dev.tfplan`,
109
+ },
110
+ },
111
+ options: {
112
+ forwardAllArgs: true,
113
+ cwd: '{projectRoot}/src',
114
+ },
115
+ dependsOn: ['init'],
116
+ },
117
+ };
118
+ const libTargets = {
119
+ fmt: {
120
+ executor: 'nx:run-commands',
121
+ cache: true,
122
+ inputs: ['default'],
123
+ options: {
124
+ command: 'terraform fmt',
125
+ forwardAllArgs: true,
126
+ cwd: '{projectRoot}/src',
127
+ },
128
+ },
129
+ init: {
130
+ executor: 'nx:run-commands',
131
+ defaultConfiguration: 'dev',
132
+ configurations: {
133
+ dev: {
134
+ command: 'terraform init',
135
+ },
136
+ },
137
+ options: {
138
+ forwardAllArgs: true,
139
+ cwd: '{projectRoot}/src',
140
+ },
141
+ },
142
+ test: {
143
+ executor: 'nx:run-commands',
144
+ cache: true,
145
+ outputs: [`{workspaceRoot}/dist/${lib.dir}/checkov`],
146
+ options: {
147
+ command: `uvx checkov --directory . -o json --output-file-path ${checkovDistDir}`,
148
+ forwardAllArgs: true,
149
+ cwd: '{projectRoot}/src',
150
+ },
151
+ dependsOn: ['validate'],
152
+ },
153
+ validate: {
154
+ executor: 'nx:run-commands',
155
+ cache: true,
156
+ inputs: ['default'],
157
+ options: {
158
+ command: 'terraform validate',
159
+ forwardAllArgs: true,
160
+ cwd: '{projectRoot}/src',
161
+ },
162
+ },
163
+ };
164
+ (0, devkit_1.addProjectConfiguration)(tree, lib.fullyQualifiedName, {
165
+ root: lib.dir,
166
+ projectType: schema.type,
167
+ sourceRoot: (0, devkit_1.joinPathFragments)(lib.dir, 'src'),
168
+ targets: (0, object_1.sortObjectKeys)(Object.assign(Object.assign({}, libTargets), (schema.type === 'application' ? applicationTargets : {}))),
169
+ });
170
+ (0, nx_1.addGeneratorMetadata)(tree, lib.fullyQualifiedName, exports.TERRAFORM_PROJECT_GENERATOR_INFO);
171
+ (0, devkit_1.generateFiles)(tree, // the virtual file system
172
+ (0, devkit_1.joinPathFragments)(__dirname, `./files/${schema.type}`), // path to the file templates
173
+ lib.dir, // destination path of the files
174
+ {}, {
175
+ overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
176
+ });
177
+ const nxJson = (0, devkit_1.readNxJson)(tree);
178
+ if (!((_a = nxJson.plugins) === null || _a === void 0 ? void 0 : _a.find((p) => typeof p === 'string'
179
+ ? p === NX_EXTEND_PLUGIN
180
+ : p.plugin === NX_EXTEND_PLUGIN))) {
181
+ nxJson.plugins = [...((_b = nxJson.plugins) !== null && _b !== void 0 ? _b : []), NX_EXTEND_PLUGIN];
182
+ (0, devkit_1.updateNxJson)(tree, nxJson);
183
+ }
184
+ // TODO: TF Metrics
185
+ // await addGeneratorMetricsIfApplicable(tree, [
186
+ // TERRAFORM_PROJECT_GENERATOR_INFO,
187
+ // ]);
188
+ (0, devkit_1.addDependenciesToPackageJson)(tree, {}, (0, versions_1.withVersions)(['@nx-extend/terraform']));
189
+ return () => {
190
+ (0, devkit_1.installPackagesTask)(tree);
191
+ };
192
+ });
193
+ }
194
+ exports.default = terraformProjectGenerator;
195
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/terraform/project/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ import { ProjectType } from '@nx/devkit';
6
+
7
+ /**
8
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
9
+ * SPDX-License-Identifier: Apache-2.0
10
+ */
11
+ export interface TerraformProjectGeneratorSchema {
12
+ name: string;
13
+ type: ProjectType;
14
+ directory?: string;
15
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "$id": "Terraform",
4
+ "title": "",
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "description": "The name of the project.",
9
+ "type": "string",
10
+ "$default": {
11
+ "$source": "argv",
12
+ "index": 0
13
+ },
14
+ "x-prompt": "What name would you like to use for the project?",
15
+ "pattern": "^[a-zA-Z][^:]*$"
16
+ },
17
+ "type": {
18
+ "type": "string",
19
+ "enum": ["application", "library"],
20
+ "x-priority": "important",
21
+ "x-prompt": "What type of Terraform project is this?",
22
+ "description": "Whether this is a terraform lib (re-usable modules) or app (deployable).",
23
+ "default": "application"
24
+ },
25
+ "directory": {
26
+ "description": "The directory of the new project.",
27
+ "type": "string",
28
+ "alias": "dir",
29
+ "x-priority": "important",
30
+ "default": "packages",
31
+ "x-prompt": "What directory would you like to store your project in?"
32
+ }
33
+ },
34
+ "required": ["name"]
35
+ }
@@ -15,6 +15,7 @@ export declare const VERSIONS: {
15
15
  readonly '@middy/core': "^6.0.0";
16
16
  readonly '@nxlv/python': "~21.2.0";
17
17
  readonly '@nx/devkit': "~21.0.3";
18
+ readonly '@nx-extend/terraform': "^9.0.0";
18
19
  readonly '@modelcontextprotocol/sdk': "^1.11.3";
19
20
  readonly '@tanstack/react-router': "^1.121.16";
20
21
  readonly '@tanstack/router-plugin': "^1.121.16";
@@ -60,5 +61,5 @@ export type IVersion = keyof typeof VERSIONS;
60
61
  * Add versions to the given dependencies
61
62
  */
62
63
  export declare const withVersions: (deps: (keyof typeof VERSIONS)[]) => {
63
- [k: string]: "^0.0.60" | "^3.775.0" | "^3.848.0" | "^2.24.1" | "^6.0.0" | "~21.2.0" | "~21.0.3" | "^1.11.3" | "^1.121.16" | "^1.120.17" | "^1.121.0" | "^3.0.94" | "^3.0.928" | "^1.0.38" | "^5.74.3" | "^5.84.2" | "11.0.0" | "^22.13.13" | "^8.10.148" | "^2.8.18" | "^5.0.3" | "^4.2.0" | "^1.0.20" | "^2.1006.0" | "^2.207.0" | "^3.10.3" | "^10.4.2" | "^2.8.5" | "^0.25.1" | "^5.2.5" | "^5.1.0" | "^2.4.0" | "^3.2.0" | "^3.5.3" | "^0.5.21" | "^4.1.11" | "4.20.1" | "^5.1.4" | "^4.0.14" | "npm:zod@^3";
64
+ [k: string]: "^0.0.60" | "^3.775.0" | "^3.848.0" | "^2.24.1" | "^6.0.0" | "~21.2.0" | "~21.0.3" | "^9.0.0" | "^1.11.3" | "^1.121.16" | "^1.120.17" | "^1.121.0" | "^3.0.94" | "^3.0.928" | "^1.0.38" | "^5.74.3" | "^5.84.2" | "11.0.0" | "^22.13.13" | "^8.10.148" | "^2.8.18" | "^5.0.3" | "^4.2.0" | "^1.0.20" | "^2.1006.0" | "^2.207.0" | "^3.10.3" | "^10.4.2" | "^2.8.5" | "^0.25.1" | "^5.2.5" | "^5.1.0" | "^2.4.0" | "^3.2.0" | "^3.5.3" | "^0.5.21" | "^4.1.11" | "4.20.1" | "^5.1.4" | "^4.0.14" | "npm:zod@^3";
64
65
  };
@@ -18,6 +18,7 @@ exports.VERSIONS = {
18
18
  '@middy/core': '^6.0.0',
19
19
  '@nxlv/python': '~21.2.0',
20
20
  '@nx/devkit': '~21.0.3',
21
+ '@nx-extend/terraform': '^9.0.0',
21
22
  '@modelcontextprotocol/sdk': '^1.11.3',
22
23
  '@tanstack/react-router': '^1.121.16',
23
24
  '@tanstack/router-plugin': '^1.121.16',
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,QAAQ,GAAG;IACtB,iCAAiC,EAAE,SAAS;IAC5C,kCAAkC,EAAE,UAAU;IAC9C,+BAA+B,EAAE,UAAU;IAC3C,+CAA+C,EAAE,UAAU;IAC3D,2CAA2C,EAAE,UAAU;IACvD,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,+BAA+B,EAAE,SAAS;IAC1C,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,2BAA2B,EAAE,SAAS;IACtC,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IACtC,4BAA4B,EAAE,WAAW;IACzC,+BAA+B,EAAE,WAAW;IAC5C,wBAAwB,EAAE,UAAU;IACpC,qCAAqC,EAAE,SAAS;IAChD,+BAA+B,EAAE,UAAU;IAC3C,kCAAkC,EAAE,SAAS;IAC7C,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,4BAA4B,EAAE,QAAQ;IACtC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,SAAS;IAC9B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,wBAAwB,EAAE,QAAQ;IAClC,OAAO,EAAE,QAAQ;IACjB,qBAAqB,EAAE,QAAQ;IAC/B,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE,SAAS;IACtB,mBAAmB,EAAE,SAAS;IAC9B,GAAG,EAAE,QAAQ,EAAE,kDAAkD;IACjE,qBAAqB,EAAE,QAAQ;IAC/B,GAAG,EAAE,SAAS;IACd,2FAA2F;IAC3F,oEAAoE;IACpE,QAAQ,EAAE,YAAY;CACd,CAAC;AAEX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADjD,QAAA,YAAY,gBACqC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,QAAQ,GAAG;IACtB,iCAAiC,EAAE,SAAS;IAC5C,kCAAkC,EAAE,UAAU;IAC9C,+BAA+B,EAAE,UAAU;IAC3C,+CAA+C,EAAE,UAAU;IAC3D,2CAA2C,EAAE,UAAU;IACvD,+BAA+B,EAAE,SAAS;IAC1C,gCAAgC,EAAE,SAAS;IAC3C,+BAA+B,EAAE,SAAS;IAC1C,+BAA+B,EAAE,SAAS;IAC1C,aAAa,EAAE,QAAQ;IACvB,cAAc,EAAE,SAAS;IACzB,YAAY,EAAE,SAAS;IACvB,sBAAsB,EAAE,QAAQ;IAChC,2BAA2B,EAAE,SAAS;IACtC,wBAAwB,EAAE,WAAW;IACrC,yBAAyB,EAAE,WAAW;IACtC,4BAA4B,EAAE,WAAW;IACzC,+BAA+B,EAAE,WAAW;IAC5C,wBAAwB,EAAE,UAAU;IACpC,qCAAqC,EAAE,SAAS;IAChD,+BAA+B,EAAE,UAAU;IAC3C,kCAAkC,EAAE,SAAS;IAC7C,uBAAuB,EAAE,SAAS;IAClC,gCAAgC,EAAE,SAAS;IAC3C,4BAA4B,EAAE,QAAQ;IACtC,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,WAAW;IAC1B,mBAAmB,EAAE,WAAW;IAChC,aAAa,EAAE,SAAS;IACxB,gBAAgB,EAAE,QAAQ;IAC1B,eAAe,EAAE,QAAQ;IACzB,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,SAAS;IAC9B,UAAU,EAAE,SAAS;IACrB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;IAClB,wBAAwB,EAAE,QAAQ;IAClC,OAAO,EAAE,QAAQ;IACjB,qBAAqB,EAAE,QAAQ;IAC/B,gBAAgB,EAAE,QAAQ;IAC1B,QAAQ,EAAE,QAAQ;IAClB,oBAAoB,EAAE,QAAQ;IAC9B,oBAAoB,EAAE,SAAS;IAC/B,WAAW,EAAE,SAAS;IACtB,mBAAmB,EAAE,SAAS;IAC9B,GAAG,EAAE,QAAQ,EAAE,kDAAkD;IACjE,qBAAqB,EAAE,QAAQ;IAC/B,GAAG,EAAE,SAAS;IACd,2FAA2F;IAC3F,oEAAoE;IACpE,QAAQ,EAAE,YAAY;CACd,CAAC;AAEX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAA+B,EAAE,EAAE,CAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADjD,QAAA,YAAY,gBACqC"}