@aws/nx-plugin 0.42.0 → 0.43.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.
- package/LICENSE-THIRD-PARTY +40255 -0
- package/README.md +1 -0
- package/generators.json +6 -0
- package/package.json +2 -1
- package/sdk/py.d.ts +2 -0
- package/sdk/py.js +3 -1
- package/sdk/py.js.map +1 -1
- package/src/preset/__snapshots__/generator.spec.ts.snap +2 -0
- package/src/py/fast-api/generator.js +10 -12
- package/src/py/fast-api/generator.js.map +1 -1
- package/src/py/fast-api/react/generator.js +2 -2
- package/src/py/fast-api/react/generator.js.map +1 -1
- package/src/py/lambda-function/generator.js +7 -15
- package/src/py/lambda-function/generator.js.map +1 -1
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +27 -2
- package/src/py/mcp-server/files/Dockerfile.template +1 -5
- package/src/py/mcp-server/generator.js +10 -6
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.json +3 -3
- package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +375 -0
- package/src/py/strands-agent/files/Dockerfile.template +14 -0
- package/src/py/strands-agent/files/__init__.py.template +0 -0
- package/src/py/strands-agent/files/agent.py.template +22 -0
- package/src/py/strands-agent/files/agentcore_mcp_client.py.template +99 -0
- package/src/py/strands-agent/files/main.py.template +24 -0
- package/src/py/strands-agent/generator.d.ts +10 -0
- package/src/py/strands-agent/generator.js +137 -0
- package/src/py/strands-agent/generator.js.map +1 -0
- package/src/py/strands-agent/schema.d.ts +12 -0
- package/src/py/strands-agent/schema.json +33 -0
- package/src/terraform/project/files/application/src/main.tf.template +5 -0
- package/src/terraform/project/generator.js +13 -5
- package/src/terraform/project/generator.js.map +1 -1
- package/src/trpc/backend/generator.js +27 -33
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/react/generator.js +2 -2
- package/src/trpc/react/generator.js.map +1 -1
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +22 -1
- package/src/ts/mcp-server/generator.js +4 -3
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.json +3 -3
- package/src/ts/nx-plugin/generator.js +4 -1
- package/src/ts/nx-plugin/generator.js.map +1 -1
- package/src/ts/react-website/app/generator.js.map +1 -1
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +16 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +33 -8
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/app/{mcp-servers/__mcpServerNameKebabCase__/__mcpServerNameKebabCase__.ts.template → agent-core/__nameKebabCase__/__nameKebabCase__.ts.template} +5 -5
- package/src/utils/agent-core-constructs/files/core/agent-core/runtime.ts.template +22 -1
- package/src/utils/files/terraform/src/metrics/metrics.tf.template +19 -0
- package/src/utils/metrics.d.ts +3 -1
- package/src/utils/metrics.js +36 -3
- package/src/utils/metrics.js.map +1 -1
- package/src/utils/port.d.ts +4 -6
- package/src/utils/port.js +32 -12
- package/src/utils/port.js.map +1 -1
- package/src/utils/py.d.ts +2 -1
- package/src/utils/py.js +8 -3
- package/src/utils/py.js.map +1 -1
- package/src/utils/shared-constructs.d.ts +4 -1
- package/src/utils/shared-constructs.js +70 -45
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/versions.d.ts +28 -3
- package/src/utils/versions.js +29 -4
- package/src/utils/versions.js.map +1 -1
- /package/src/utils/agent-core-constructs/files/app/{mcp-servers/__mcpServerNameKebabCase__ → agent-core/__nameKebabCase__}/Dockerfile.template +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-core-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-core-constructs/agent-core-constructs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"agent-core-constructs.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/utils/agent-core-constructs/agent-core-constructs.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAMoB;AACpB,gFAGwC;AACxC,gCAAuC;AACvC,0CAA2C;AAU3C,MAAM,qBAAqB,GAAG,CAC5B,IAAU,EACV,OAAmC,EACnC,EAAE;IACF,yCAAyC;IACzC,IAAA,qCAA4B,EAC1B,IAAI,EACJ,EAAE,EACF,IAAA,uBAAY,EAAC,CAAC,2CAA2C,CAAC,CAAC,CAC5D,CAAC;IAEF,sCAAsC;IACtC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAC3D,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,MAAM,EACN,YAAY,CACb,EACD,EAAE,EACF;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,sCAAsC;IACtC,IAAA,sBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EAAC,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,EAC1D,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,OAAO,CAAC,YAAY,CACrB,EACD,OAAO,EACP;QACE,iBAAiB,EAAE,0BAAiB,CAAC,YAAY;KAClD,CACF,CAAC;IAEF,oCAAoC;IACpC,IAAA,mBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,OAAO,CAAC,YAAY,EACpB,UAAU,CACX,EACD,KAAK,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,KAAK,CACzD,CAAC;IACF,IAAA,mBAAa,EACX,IAAI,EACJ,IAAA,0BAAiB,EACf,0CAAY,EACZ,mDAAqB,EACrB,KAAK,EACL,KAAK,EACL,UAAU,CACX,EACD,KAAK,OAAO,CAAC,YAAY,WAAW,CACrC,CAAC;AACJ,CAAC,CAAC;AAQF;;GAEG;AACI,MAAM,qBAAqB,GAAG,CACnC,IAAU,EACV,OAAmC,EACnC,EAAE;IACF,qBAAqB,CAAC,IAAI,EAAE;QAC1B,aAAa,EAAE,OAAO,CAAC,sBAAsB;QAC7C,aAAa,EAAE,OAAO,CAAC,sBAAsB;QAC7C,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,aAAa;QAC3B,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,qBAAqB,yBAWhC;AAQF;;GAEG;AACI,MAAM,iBAAiB,GAAG,CAC/B,IAAU,EACV,OAA+B,EAC/B,EAAE;IACF,qBAAqB,CAAC,IAAI,EAAE;QAC1B,aAAa,EAAE,OAAO,CAAC,kBAAkB;QACzC,aAAa,EAAE,OAAO,CAAC,kBAAkB;QACzC,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,MAAM;KACvB,CAAC,CAAC;AACL,CAAC,CAAC;AAXW,QAAA,iBAAiB,qBAW5B"}
|
|
@@ -8,16 +8,16 @@ import {
|
|
|
8
8
|
AgentCoreRuntimeProps,
|
|
9
9
|
} from '../../../core/agent-core/runtime.js';
|
|
10
10
|
|
|
11
|
-
export type <%-
|
|
11
|
+
export type <%- nameClassName %>Props = Omit<
|
|
12
12
|
AgentCoreRuntimeProps,
|
|
13
13
|
'runtimeName' | 'serverProtocol' | 'containerUri'
|
|
14
14
|
>;
|
|
15
15
|
|
|
16
|
-
export class <%-
|
|
16
|
+
export class <%- nameClassName %> extends Construct {
|
|
17
17
|
public readonly dockerImage: DockerImageAsset;
|
|
18
18
|
public readonly agentCoreRuntime: AgentCoreRuntime;
|
|
19
19
|
|
|
20
|
-
constructor(scope: Construct, id: string, props?: <%-
|
|
20
|
+
constructor(scope: Construct, id: string, props?: <%- nameClassName %>Props) {
|
|
21
21
|
super(scope, id);
|
|
22
22
|
|
|
23
23
|
this.dockerImage = new DockerImageAsset(this, 'DockerImage', {
|
|
@@ -30,8 +30,8 @@ export class <%- mcpServerNameClassName %> extends Construct {
|
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
this.agentCoreRuntime = new AgentCoreRuntime(this, 'AgentCore', {
|
|
33
|
-
runtimeName: '<%-
|
|
34
|
-
serverProtocol: '
|
|
33
|
+
runtimeName: '<%- nameClassName %>',
|
|
34
|
+
serverProtocol: '<%- serverProtocol %>',
|
|
35
35
|
containerUri: this.dockerImage.imageUri,
|
|
36
36
|
...props,
|
|
37
37
|
});
|
|
@@ -4,6 +4,9 @@ import {
|
|
|
4
4
|
PolicyStatement,
|
|
5
5
|
Effect,
|
|
6
6
|
PolicyDocument,
|
|
7
|
+
IGrantable,
|
|
8
|
+
Grant,
|
|
9
|
+
IPrincipal,
|
|
7
10
|
} from 'aws-cdk-lib/aws-iam';
|
|
8
11
|
import {
|
|
9
12
|
AwsCustomResource,
|
|
@@ -30,10 +33,12 @@ export interface AgentCoreRuntimeProps {
|
|
|
30
33
|
/**
|
|
31
34
|
* A construct for creating a Bedrock AgentCore Runtime
|
|
32
35
|
*/
|
|
33
|
-
export class AgentCoreRuntime extends Construct {
|
|
36
|
+
export class AgentCoreRuntime extends Construct implements IGrantable {
|
|
34
37
|
public readonly role: Role;
|
|
35
38
|
public readonly arn: string;
|
|
36
39
|
|
|
40
|
+
public readonly grantPrincipal: IPrincipal;
|
|
41
|
+
|
|
37
42
|
constructor(scope: Construct, id: string, props: AgentCoreRuntimeProps) {
|
|
38
43
|
super(scope, id);
|
|
39
44
|
|
|
@@ -125,6 +130,7 @@ export class AgentCoreRuntime extends Construct {
|
|
|
125
130
|
}),
|
|
126
131
|
},
|
|
127
132
|
});
|
|
133
|
+
this.grantPrincipal = this.role.grantPrincipal;
|
|
128
134
|
|
|
129
135
|
const agentRuntime = new AwsCustomResource(this, 'MCPSeverRuntime', {
|
|
130
136
|
onCreate: {
|
|
@@ -137,6 +143,8 @@ export class AgentCoreRuntime extends Construct {
|
|
|
137
143
|
containerUri: props.containerUri,
|
|
138
144
|
},
|
|
139
145
|
},
|
|
146
|
+
description: props.description,
|
|
147
|
+
environmentVariables: props.environment,
|
|
140
148
|
networkConfiguration: {
|
|
141
149
|
networkMode: 'PUBLIC',
|
|
142
150
|
},
|
|
@@ -159,6 +167,8 @@ export class AgentCoreRuntime extends Construct {
|
|
|
159
167
|
containerUri: props.containerUri,
|
|
160
168
|
},
|
|
161
169
|
},
|
|
170
|
+
description: props.description,
|
|
171
|
+
environmentVariables: props.environment,
|
|
162
172
|
networkConfiguration: {
|
|
163
173
|
networkMode: 'PUBLIC',
|
|
164
174
|
},
|
|
@@ -192,4 +202,15 @@ export class AgentCoreRuntime extends Construct {
|
|
|
192
202
|
|
|
193
203
|
this.arn = agentRuntime.getResponseField('agentRuntimeArn');
|
|
194
204
|
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Grant permissions to invoke the agent runtime (if using IAM auth - not required for JWT auth)
|
|
208
|
+
*/
|
|
209
|
+
public grantInvoke = (grantee: IGrantable) => {
|
|
210
|
+
Grant.addToPrincipal({
|
|
211
|
+
grantee,
|
|
212
|
+
actions: ['bedrock-agentcore:InvokeAgentRuntime'],
|
|
213
|
+
resourceArns: [this.arn, `${this.arn}/*`],
|
|
214
|
+
});
|
|
215
|
+
};
|
|
195
216
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# CloudFormation stack for metrics tracking
|
|
2
|
+
resource "aws_cloudformation_stack" "metrics" {
|
|
3
|
+
name = "nx-plugin-metrics"
|
|
4
|
+
|
|
5
|
+
template_body = jsonencode({
|
|
6
|
+
AWSTemplateFormatVersion = "2010-09-09"
|
|
7
|
+
Description = "<%= metricId %> (version:<%= version %>) (tag:<%= tags %>)"
|
|
8
|
+
Resources = {
|
|
9
|
+
# Empty stack - used only for metrics tracking via description
|
|
10
|
+
MetricsPlaceholder = {
|
|
11
|
+
Type = "AWS::CloudFormation::WaitConditionHandle"
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
tags = {
|
|
17
|
+
Purpose = "nx-plugin-metrics"
|
|
18
|
+
}
|
|
19
|
+
}
|
package/src/utils/metrics.d.ts
CHANGED
|
@@ -6,8 +6,10 @@ import { Tree } from '@nx/devkit';
|
|
|
6
6
|
import { NxGeneratorInfo } from './nx';
|
|
7
7
|
export declare const METRIC_ID = "uksb-4wk0bqpg5s";
|
|
8
8
|
export declare const METRICS_ASPECT_FILE_PATH: string;
|
|
9
|
+
export declare const TERRAFORM_METRICS_FILE_PATH: string;
|
|
9
10
|
export declare const metricsAspectVariableQuery: (variableName: string, valueQuery: string) => string;
|
|
10
11
|
/**
|
|
11
|
-
* Instruments metrics by updating the MetricsAspect in common/constructs/src/core/app.ts if the file exists
|
|
12
|
+
* Instruments metrics by updating the MetricsAspect in common/constructs/src/core/app.ts if the file exists,
|
|
13
|
+
* or updating the Terraform metrics CloudFormation stack if it exists
|
|
12
14
|
*/
|
|
13
15
|
export declare const addGeneratorMetricsIfApplicable: (tree: Tree, generatorInfo: NxGeneratorInfo[]) => Promise<void>;
|
package/src/utils/metrics.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addGeneratorMetricsIfApplicable = exports.metricsAspectVariableQuery = exports.METRICS_ASPECT_FILE_PATH = exports.METRIC_ID = void 0;
|
|
3
|
+
exports.addGeneratorMetricsIfApplicable = exports.metricsAspectVariableQuery = exports.TERRAFORM_METRICS_FILE_PATH = exports.METRICS_ASPECT_FILE_PATH = exports.METRIC_ID = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
/**
|
|
6
6
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
@@ -14,15 +14,19 @@ const nx_1 = require("./nx");
|
|
|
14
14
|
const shared_constructs_constants_1 = require("./shared-constructs-constants");
|
|
15
15
|
// Used to identify @aws/nx-plugin in AWS metrics
|
|
16
16
|
exports.METRIC_ID = 'uksb-4wk0bqpg5s';
|
|
17
|
-
// File in which the MetricsAspect may exist
|
|
17
|
+
// File in which the MetricsAspect may exist (CDK)
|
|
18
18
|
exports.METRICS_ASPECT_FILE_PATH = (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'core', 'app.ts');
|
|
19
|
+
// File in which the Terraform metrics CloudFormation stack may exist
|
|
20
|
+
exports.TERRAFORM_METRICS_FILE_PATH = (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, 'common', 'terraform', 'src', 'metrics', 'metrics.tf');
|
|
19
21
|
// Query to find a particular metrics aspect variable
|
|
20
22
|
const metricsAspectVariableQuery = (variableName, valueQuery) => `ClassDeclaration[name.name="MetricsAspect"] MethodDeclaration[name.name="visit"] VariableDeclaration:has(Identifier[name="${variableName}"]) ${valueQuery}`;
|
|
21
23
|
exports.metricsAspectVariableQuery = metricsAspectVariableQuery;
|
|
22
24
|
/**
|
|
23
|
-
* Instruments metrics by updating the MetricsAspect in common/constructs/src/core/app.ts if the file exists
|
|
25
|
+
* Instruments metrics by updating the MetricsAspect in common/constructs/src/core/app.ts if the file exists,
|
|
26
|
+
* or updating the Terraform metrics CloudFormation stack if it exists
|
|
24
27
|
*/
|
|
25
28
|
const addGeneratorMetricsIfApplicable = (tree, generatorInfo) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
29
|
+
// Handle CDK metrics
|
|
26
30
|
if (tree.exists(exports.METRICS_ASPECT_FILE_PATH)) {
|
|
27
31
|
// Update the id
|
|
28
32
|
(0, ast_1.replaceIfExists)(tree, exports.METRICS_ASPECT_FILE_PATH, (0, exports.metricsAspectVariableQuery)('id', 'StringLiteral'), () => {
|
|
@@ -44,6 +48,35 @@ const addGeneratorMetricsIfApplicable = (tree, generatorInfo) => tslib_1.__await
|
|
|
44
48
|
});
|
|
45
49
|
yield (0, format_1.formatFilesInSubtree)(tree, exports.METRICS_ASPECT_FILE_PATH);
|
|
46
50
|
}
|
|
51
|
+
// Handle Terraform metrics
|
|
52
|
+
if (tree.exists(exports.TERRAFORM_METRICS_FILE_PATH)) {
|
|
53
|
+
yield updateTerraformMetrics(tree, generatorInfo);
|
|
54
|
+
}
|
|
47
55
|
});
|
|
48
56
|
exports.addGeneratorMetricsIfApplicable = addGeneratorMetricsIfApplicable;
|
|
57
|
+
/**
|
|
58
|
+
* Updates the Terraform metrics CloudFormation stack with generator information
|
|
59
|
+
*/
|
|
60
|
+
const updateTerraformMetrics = (tree, generatorInfo) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
61
|
+
const content = tree.read(exports.TERRAFORM_METRICS_FILE_PATH, 'utf-8') || '';
|
|
62
|
+
// Extract existing tags from the Description field in the CloudFormation template
|
|
63
|
+
const descriptionMatch = content.match(/Description\s*=\s*"([^"]*)"/);
|
|
64
|
+
const existingDescription = descriptionMatch ? descriptionMatch[1] : '';
|
|
65
|
+
// Parse existing metrics from description
|
|
66
|
+
const existingMetrics = new Set();
|
|
67
|
+
const tagMatch = existingDescription.match(/\(tag:([^)]*)\)/);
|
|
68
|
+
if (tagMatch && tagMatch[1]) {
|
|
69
|
+
tagMatch[1].split(',').forEach((tag) => existingMetrics.add(tag.trim()));
|
|
70
|
+
}
|
|
71
|
+
// Add new metrics
|
|
72
|
+
const newTags = generatorInfo
|
|
73
|
+
.filter((info) => !existingMetrics.has(info.metric))
|
|
74
|
+
.map((info) => info.metric);
|
|
75
|
+
const allTags = [...existingMetrics, ...newTags];
|
|
76
|
+
// Build new description
|
|
77
|
+
const newDescription = `(${exports.METRIC_ID}) (version:${(0, nx_1.getPackageVersion)()}) (tag:${allTags.join(',')})`;
|
|
78
|
+
// Update the Description in the CloudFormation template within the Terraform file
|
|
79
|
+
const updatedContent = content.replace(/Description\s*=\s*"[^"]*"/, `Description = "${newDescription}"`);
|
|
80
|
+
tree.write(exports.TERRAFORM_METRICS_FILE_PATH, updatedContent);
|
|
81
|
+
});
|
|
49
82
|
//# sourceMappingURL=metrics.js.map
|
package/src/utils/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/metrics.ts"],"names":[],"mappings":";;;;AAAA;;;GAGG;AACH,uCAAqD;AACrD,2CAA4E;AAC5E,+BAAwC;AACxC,qCAAgD;AAChD,6BAA0D;AAC1D,+EAGuC;AAEvC,iDAAiD;AACpC,QAAA,SAAS,GAAG,iBAAiB,CAAC;AAE3C,
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/metrics.ts"],"names":[],"mappings":"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"}
|
package/src/utils/port.d.ts
CHANGED
|
@@ -2,11 +2,9 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
import { Tree } from '@nx/devkit';
|
|
6
|
-
import { NxGeneratorInfo } from './nx';
|
|
5
|
+
import { ProjectConfiguration, Tree } from '@nx/devkit';
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* Assumes startPort is sufficiently spaced from other generators!
|
|
7
|
+
* Assign a port for a particular target within a project.
|
|
8
|
+
* Mutates the project to add/update its metadata.ports with the newly assigned port
|
|
11
9
|
*/
|
|
12
|
-
export declare const
|
|
10
|
+
export declare const assignPort: (tree: Tree, project: ProjectConfiguration, startPort: number) => number;
|
package/src/utils/port.js
CHANGED
|
@@ -1,23 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.assignPort = void 0;
|
|
4
4
|
/**
|
|
5
5
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
6
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
7
|
*/
|
|
8
8
|
const devkit_1 = require("@nx/devkit");
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Assumes startPort is sufficiently spaced from other generators!
|
|
10
|
+
* Assign a port for a particular target within a project.
|
|
11
|
+
* Mutates the project to add/update its metadata.ports with the newly assigned port
|
|
13
12
|
*/
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
const assignPort = (tree, project, startPort) => {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
var _c;
|
|
16
|
+
// Find all existing ports
|
|
17
|
+
const allPorts = new Set([...(0, devkit_1.getProjects)(tree).values()].flatMap((p) => {
|
|
18
|
+
const metadata = p.metadata;
|
|
19
|
+
const ports = [];
|
|
20
|
+
// Support old port assignment where each project registered a single port
|
|
21
|
+
if ((metadata === null || metadata === void 0 ? void 0 : metadata.port) && typeof metadata.port === 'number') {
|
|
22
|
+
ports.push(metadata.port);
|
|
23
|
+
}
|
|
24
|
+
if ((metadata === null || metadata === void 0 ? void 0 : metadata.ports) && typeof metadata.ports === 'object' && Array.isArray(metadata.ports)) {
|
|
25
|
+
ports.push(...metadata.ports);
|
|
26
|
+
}
|
|
27
|
+
return ports;
|
|
28
|
+
}));
|
|
29
|
+
// Find the next available port higher than the start port
|
|
30
|
+
let candidatePort = startPort;
|
|
31
|
+
while (allPorts.has(candidatePort)) {
|
|
32
|
+
candidatePort++;
|
|
33
|
+
}
|
|
34
|
+
(_a = project.metadata) !== null && _a !== void 0 ? _a : (project.metadata = {});
|
|
35
|
+
(_b = (_c = project.metadata).ports) !== null && _b !== void 0 ? _b : (_c.ports = []);
|
|
36
|
+
project.metadata.ports = [
|
|
37
|
+
...project.metadata.ports,
|
|
38
|
+
candidatePort,
|
|
39
|
+
];
|
|
40
|
+
return candidatePort;
|
|
21
41
|
};
|
|
22
|
-
exports.
|
|
42
|
+
exports.assignPort = assignPort;
|
|
23
43
|
//# sourceMappingURL=port.js.map
|
package/src/utils/port.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/port.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/port.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCAAqE;AAErE;;;GAGG;AACI,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,OAA6B,EAAE,SAAiB,EAAE,EAAE;;;IACzF,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACrE,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAe,CAAC;QACnC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,0EAA0E;QAC1E,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,KAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,KAAK,KAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3F,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC,CAAC;IAEJ,0DAA0D;IAC1D,IAAI,aAAa,GAAG,SAAS,CAAC;IAC9B,OAAO,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;QACnC,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,MAAA,OAAO,CAAC,QAAQ,oCAAhB,OAAO,CAAC,QAAQ,GAAK,EAAE,EAAC;IACxB,YAAC,OAAO,CAAC,QAAgB,EAAC,KAAK,uCAAL,KAAK,GAAK,EAAE,EAAC;IACtC,OAAO,CAAC,QAAgB,CAAC,KAAK,GAAG;QAChC,GAAI,OAAO,CAAC,QAAgB,CAAC,KAAK;QAClC,aAAa;KACd,CAAC;IAEF,OAAO,aAAa,CAAC;AACvB,CAAC,CAAC;AA7BW,QAAA,UAAU,cA6BrB"}
|
package/src/utils/py.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Tree } from '@nx/devkit';
|
|
2
|
+
import { IPyDepVersion } from './versions';
|
|
2
3
|
/**
|
|
3
4
|
* Add dependencies to a pyproject.toml file
|
|
4
5
|
*/
|
|
5
|
-
export declare const addDependenciesToPyProjectToml: (tree: Tree, projectRoot: string, deps:
|
|
6
|
+
export declare const addDependenciesToPyProjectToml: (tree: Tree, projectRoot: string, deps: IPyDepVersion[]) => void;
|
package/src/utils/py.js
CHANGED
|
@@ -7,6 +7,8 @@ exports.addDependenciesToPyProjectToml = void 0;
|
|
|
7
7
|
*/
|
|
8
8
|
const toml_1 = require("@iarna/toml");
|
|
9
9
|
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
const versions_1 = require("./versions");
|
|
11
|
+
const pip_requirements_js_1 = require("pip-requirements-js");
|
|
10
12
|
/**
|
|
11
13
|
* Add dependencies to a pyproject.toml file
|
|
12
14
|
*/
|
|
@@ -15,9 +17,12 @@ const addDependenciesToPyProjectToml = (tree, projectRoot, deps) => {
|
|
|
15
17
|
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), 'utf8'));
|
|
16
18
|
const newDeps = new Set(deps);
|
|
17
19
|
projectToml.project.dependencies = [
|
|
18
|
-
//
|
|
19
|
-
...((_b = (_a = projectToml.project) === null || _a === void 0 ? void 0 : _a.dependencies) !== null && _b !== void 0 ? _b : []).filter((dep) =>
|
|
20
|
-
|
|
20
|
+
// Replace any dependencies that already exist
|
|
21
|
+
...((_b = (_a = projectToml.project) === null || _a === void 0 ? void 0 : _a.dependencies) !== null && _b !== void 0 ? _b : []).filter((dep) => {
|
|
22
|
+
const parsedDep = (0, pip_requirements_js_1.parsePipRequirementsLine)(dep);
|
|
23
|
+
return parsedDep.type !== 'ProjectName' || !newDeps.has(parsedDep.name);
|
|
24
|
+
}),
|
|
25
|
+
...(0, versions_1.withPyVersions)(deps),
|
|
21
26
|
];
|
|
22
27
|
tree.write((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
23
28
|
};
|
package/src/utils/py.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,sCAA+C;AAC/C,uCAAqD;
|
|
1
|
+
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,sCAA+C;AAC/C,uCAAqD;AAErD,yCAA2D;AAC3D,6DAA+D;AAE/D;;GAEG;AACI,MAAM,8BAA8B,GAAG,CAC5C,IAAU,EACV,WAAmB,EACnB,IAAqB,EACrB,EAAE;;IACF,MAAM,WAAW,GAAG,IAAA,YAAK,EACvB,IAAI,CAAC,IAAI,CAAC,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CACjD,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;IACtC,WAAW,CAAC,OAAO,CAAC,YAAY,GAAG;QACjC,8CAA8C;QAC9C,GAAG,CAAC,MAAA,MAAA,WAAW,CAAC,OAAO,0CAAE,YAAY,mCAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1D,MAAM,SAAS,GAAG,IAAA,8CAAwB,EAAC,GAAG,CAAC,CAAC;YAChD,OAAO,SAAS,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1E,CAAC,CAAC;QACF,GAAG,IAAA,yBAAc,EAAC,IAAI,CAAC;KACxB,CAAC;IACF,IAAI,CAAC,KAAK,CACR,IAAA,0BAAiB,EAAC,WAAW,EAAE,gBAAgB,CAAC,EAChD,IAAA,gBAAS,EAAC,WAAW,CAAC,CACvB,CAAC;AACJ,CAAC,CAAC;AArBW,QAAA,8BAA8B,kCAqBzC"}
|
|
@@ -3,4 +3,7 @@
|
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
5
|
import { Tree } from '@nx/devkit';
|
|
6
|
-
export
|
|
6
|
+
export interface SharedConstructsGeneratorOptions {
|
|
7
|
+
iacProvider?: 'CDK' | 'Terraform';
|
|
8
|
+
}
|
|
9
|
+
export declare function sharedConstructsGenerator(tree: Tree, options?: SharedConstructsGeneratorOptions): Promise<void>;
|
|
@@ -9,59 +9,84 @@ const tslib_1 = require("tslib");
|
|
|
9
9
|
const devkit_1 = require("@nx/devkit");
|
|
10
10
|
const npm_scope_1 = require("./npm-scope");
|
|
11
11
|
const generator_1 = tslib_1.__importDefault(require("../ts/lib/generator"));
|
|
12
|
+
const generator_2 = tslib_1.__importDefault(require("../terraform/project/generator"));
|
|
12
13
|
const versions_1 = require("./versions");
|
|
13
14
|
const format_1 = require("./format");
|
|
14
15
|
const shared_constructs_constants_1 = require("./shared-constructs-constants");
|
|
15
16
|
const utils_1 = require("./config/utils");
|
|
16
|
-
function sharedConstructsGenerator(
|
|
17
|
-
return tslib_1.__awaiter(this,
|
|
17
|
+
function sharedConstructsGenerator(tree_1) {
|
|
18
|
+
return tslib_1.__awaiter(this, arguments, void 0, function* (tree, options = {}) {
|
|
18
19
|
var _a, _b;
|
|
20
|
+
const { iacProvider = 'CDK' } = options;
|
|
19
21
|
const npmScopePrefix = (0, npm_scope_1.getNpmScopePrefix)(tree);
|
|
20
22
|
updateGitignore(tree);
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
23
|
+
if (iacProvider === 'CDK') {
|
|
24
|
+
if (!tree.exists((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.TYPE_DEFINITIONS_DIR, 'project.json'))) {
|
|
25
|
+
yield (0, generator_1.default)(tree, {
|
|
26
|
+
name: shared_constructs_constants_1.TYPE_DEFINITIONS_NAME,
|
|
27
|
+
directory: shared_constructs_constants_1.PACKAGES_DIR,
|
|
28
|
+
subDirectory: shared_constructs_constants_1.TYPE_DEFINITIONS_DIR,
|
|
29
|
+
});
|
|
30
|
+
tree.delete((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.TYPE_DEFINITIONS_DIR, 'src'));
|
|
31
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', shared_constructs_constants_1.TYPE_DEFINITIONS_DIR, 'src'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.TYPE_DEFINITIONS_DIR, 'src'), {
|
|
32
|
+
npmScopePrefix,
|
|
33
|
+
}, {
|
|
34
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
35
|
+
});
|
|
36
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'common', 'readme'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.TYPE_DEFINITIONS_DIR), {
|
|
37
|
+
fullyQualifiedName: `${npmScopePrefix}${shared_constructs_constants_1.TYPE_DEFINITIONS_NAME}`,
|
|
38
|
+
name: shared_constructs_constants_1.TYPE_DEFINITIONS_NAME,
|
|
39
|
+
pkgMgrCmd: (0, devkit_1.getPackageManagerCommand)().exec,
|
|
40
|
+
}, {
|
|
41
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
|
|
42
|
+
});
|
|
43
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
44
|
+
}
|
|
45
|
+
if (!tree.exists((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'project.json'))) {
|
|
46
|
+
yield (0, generator_1.default)(tree, {
|
|
47
|
+
name: shared_constructs_constants_1.SHARED_CONSTRUCTS_NAME,
|
|
48
|
+
directory: shared_constructs_constants_1.PACKAGES_DIR,
|
|
49
|
+
subDirectory: shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR,
|
|
50
|
+
});
|
|
51
|
+
tree.delete((0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src'));
|
|
52
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src'), {
|
|
53
|
+
npmScopePrefix,
|
|
54
|
+
scopeAlias: (0, npm_scope_1.toScopeAlias)(npmScopePrefix),
|
|
55
|
+
tags: (_b = (_a = (yield (0, utils_1.readAwsNxPluginConfig)(tree))) === null || _a === void 0 ? void 0 : _a.tags) !== null && _b !== void 0 ? _b : [],
|
|
56
|
+
}, {
|
|
57
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
58
|
+
});
|
|
59
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'common', 'readme'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR), {
|
|
60
|
+
fullyQualifiedName: `${npmScopePrefix}${shared_constructs_constants_1.SHARED_CONSTRUCTS_NAME}`,
|
|
61
|
+
name: shared_constructs_constants_1.SHARED_CONSTRUCTS_NAME,
|
|
62
|
+
pkgMgrCmd: (0, devkit_1.getPackageManagerCommand)().exec,
|
|
63
|
+
}, {
|
|
64
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
|
|
65
|
+
});
|
|
66
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)(['constructs', 'aws-cdk-lib']), (0, versions_1.withVersions)(['@types/node']));
|
|
67
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
68
|
+
}
|
|
41
69
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
});
|
|
63
|
-
(0, devkit_1.addDependenciesToPackageJson)(tree, (0, versions_1.withVersions)(['constructs', 'aws-cdk-lib']), (0, versions_1.withVersions)(['@types/node']));
|
|
64
|
-
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
70
|
+
// Handle Terraform provider
|
|
71
|
+
if (iacProvider === 'Terraform') {
|
|
72
|
+
const terraformLibPath = (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, 'common', 'terraform');
|
|
73
|
+
if (!tree.exists((0, devkit_1.joinPathFragments)(terraformLibPath, 'project.json'))) {
|
|
74
|
+
yield (0, generator_2.default)(tree, {
|
|
75
|
+
name: 'terraform',
|
|
76
|
+
directory: (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, 'common'),
|
|
77
|
+
type: 'library',
|
|
78
|
+
});
|
|
79
|
+
tree.delete((0, devkit_1.joinPathFragments)(terraformLibPath, 'src', 'main.tf'));
|
|
80
|
+
// Create the metrics.tf file with empty initial values
|
|
81
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'terraform'), terraformLibPath, {
|
|
82
|
+
metricId: '',
|
|
83
|
+
version: '',
|
|
84
|
+
tags: '',
|
|
85
|
+
}, {
|
|
86
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
87
|
+
});
|
|
88
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
89
|
+
}
|
|
65
90
|
}
|
|
66
91
|
});
|
|
67
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-constructs.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"shared-constructs.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/shared-constructs.ts"],"names":[],"mappings":"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"}
|
package/src/utils/versions.d.ts
CHANGED
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
3
|
* SPDX-License-Identifier: Apache-2.0
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Versons for TypeScript dependencies added by generators
|
|
7
|
+
*/
|
|
8
|
+
export declare const TS_VERSIONS: {
|
|
6
9
|
readonly '@cdklabs/cdk-validator-cfnguard': "^0.0.60";
|
|
7
10
|
readonly '@aws-sdk/client-cognito-identity': "^3.775.0";
|
|
8
11
|
readonly '@aws-sdk/credential-providers': "^3.775.0";
|
|
@@ -57,10 +60,32 @@ export declare const VERSIONS: {
|
|
|
57
60
|
readonly zod: "^4.0.14";
|
|
58
61
|
readonly 'zod-v3': "npm:zod@^3";
|
|
59
62
|
};
|
|
60
|
-
export type
|
|
63
|
+
export type ITsDepVersion = keyof typeof TS_VERSIONS;
|
|
61
64
|
/**
|
|
62
65
|
* Add versions to the given dependencies
|
|
63
66
|
*/
|
|
64
|
-
export declare const withVersions: (deps:
|
|
67
|
+
export declare const withVersions: (deps: ITsDepVersion[]) => {
|
|
65
68
|
[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" | "^0.16.5" | "^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";
|
|
66
69
|
};
|
|
70
|
+
/**
|
|
71
|
+
* Versions for Python dependencies added by generators
|
|
72
|
+
*/
|
|
73
|
+
export declare const PY_VERSIONS: {
|
|
74
|
+
readonly 'aws-lambda-powertools': "~=3.19.0";
|
|
75
|
+
readonly 'aws-lambda-powertools[tracer]': "~=3.19.0";
|
|
76
|
+
readonly 'aws-lambda-powertools[parser]': "~=3.19.0";
|
|
77
|
+
readonly 'aws-opentelemetry-distro': "~=0.11.0";
|
|
78
|
+
readonly 'bedrock-agentcore': "~=0.1.2";
|
|
79
|
+
readonly boto3: "~=1.40.14";
|
|
80
|
+
readonly fastapi: "~=0.116.1";
|
|
81
|
+
readonly 'fastapi[standard]': "~=0.116.1";
|
|
82
|
+
readonly mangum: "~=0.19.0";
|
|
83
|
+
readonly mcp: "~=1.13.0";
|
|
84
|
+
readonly 'strands-agents': "~=1.5.0";
|
|
85
|
+
readonly 'strands-agents-tools': "~=0.2.4";
|
|
86
|
+
};
|
|
87
|
+
export type IPyDepVersion = keyof typeof PY_VERSIONS;
|
|
88
|
+
/**
|
|
89
|
+
* Add versions to the given dependencies
|
|
90
|
+
*/
|
|
91
|
+
export declare const withPyVersions: (deps: IPyDepVersion[]) => string[];
|
package/src/utils/versions.js
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.withVersions = exports.VERSIONS = void 0;
|
|
4
2
|
/**
|
|
5
3
|
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
6
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
7
5
|
*/
|
|
8
|
-
exports
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.withPyVersions = exports.PY_VERSIONS = exports.withVersions = exports.TS_VERSIONS = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Versons for TypeScript dependencies added by generators
|
|
10
|
+
*/
|
|
11
|
+
exports.TS_VERSIONS = {
|
|
9
12
|
'@cdklabs/cdk-validator-cfnguard': '^0.0.60',
|
|
10
13
|
'@aws-sdk/client-cognito-identity': '^3.775.0',
|
|
11
14
|
'@aws-sdk/credential-providers': '^3.775.0',
|
|
@@ -65,6 +68,28 @@ exports.VERSIONS = {
|
|
|
65
68
|
/**
|
|
66
69
|
* Add versions to the given dependencies
|
|
67
70
|
*/
|
|
68
|
-
const withVersions = (deps) => Object.fromEntries(deps.map((dep) => [dep, exports.
|
|
71
|
+
const withVersions = (deps) => Object.fromEntries(deps.map((dep) => [dep, exports.TS_VERSIONS[dep]]));
|
|
69
72
|
exports.withVersions = withVersions;
|
|
73
|
+
/**
|
|
74
|
+
* Versions for Python dependencies added by generators
|
|
75
|
+
*/
|
|
76
|
+
exports.PY_VERSIONS = {
|
|
77
|
+
'aws-lambda-powertools': '~=3.19.0',
|
|
78
|
+
'aws-lambda-powertools[tracer]': '~=3.19.0',
|
|
79
|
+
'aws-lambda-powertools[parser]': '~=3.19.0',
|
|
80
|
+
'aws-opentelemetry-distro': '~=0.11.0',
|
|
81
|
+
'bedrock-agentcore': '~=0.1.2',
|
|
82
|
+
boto3: '~=1.40.14',
|
|
83
|
+
fastapi: '~=0.116.1',
|
|
84
|
+
'fastapi[standard]': '~=0.116.1',
|
|
85
|
+
mangum: '~=0.19.0',
|
|
86
|
+
mcp: '~=1.13.0',
|
|
87
|
+
'strands-agents': '~=1.5.0',
|
|
88
|
+
'strands-agents-tools': '~=0.2.4',
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Add versions to the given dependencies
|
|
92
|
+
*/
|
|
93
|
+
const withPyVersions = (deps) => deps.map((dep) => `${dep}${exports.PY_VERSIONS[dep]}`);
|
|
94
|
+
exports.withPyVersions = withPyVersions;
|
|
70
95
|
//# sourceMappingURL=versions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/versions.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,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,iCAAiC,EAAE,SAAS;IAC5C,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;AAGX;;GAEG;AACI,MAAM,YAAY,GAAG,CAAC,IAAqB,EAAE,EAAE,CACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,mBAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AADpD,QAAA,YAAY,gBACwC;AAEjE;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,uBAAuB,EAAE,UAAU;IACnC,+BAA+B,EAAE,UAAU;IAC3C,+BAA+B,EAAE,UAAU;IAC3C,0BAA0B,EAAE,UAAU;IACtC,mBAAmB,EAAE,SAAS;IAC9B,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,WAAW;IACpB,mBAAmB,EAAE,WAAW;IAChC,MAAM,EAAE,UAAU;IAClB,GAAG,EAAE,UAAU;IACf,gBAAgB,EAAE,SAAS;IAC3B,sBAAsB,EAAE,SAAS;CACzB,CAAC;AAGX;;GAEG;AACI,MAAM,cAAc,GAAG,CAAC,IAAqB,EAAE,EAAE,CACtD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,mBAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AADpC,QAAA,cAAc,kBACsB"}
|