@aws/nx-plugin 0.103.0 → 0.104.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/package.json +1 -1
- package/src/open-api/ts-client/__snapshots__/generator.additional-properties.spec.ts.snap +202 -0
- package/src/open-api/ts-client/__snapshots__/generator.content-type.spec.ts.snap +475 -0
- package/src/open-api/ts-client/__snapshots__/generator.fast-api.spec.ts.snap +353 -0
- package/src/open-api/ts-client/files/client.gen.ts.template +22 -1
- package/src/open-api/ts-client/files/types.gen.ts.template +5 -1
- package/src/open-api/utils/codegen-data.js +7 -2
- package/src/open-api/utils/codegen-data.js.map +1 -1
- package/src/open-api/utils/normalise.js +14 -0
- package/src/open-api/utils/normalise.js.map +1 -1
- package/src/py/fast-api/__snapshots__/generator.spec.ts.snap +8 -8
- package/src/py/lambda-function/__snapshots__/generator.spec.ts.snap +3 -3
- package/src/py/mcp-server/files/deploy/Dockerfile.template +1 -1
- package/src/py/project/generator.js +4 -4
- package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/py/strands-agent/files/deploy/Dockerfile.template +1 -1
- package/src/utils/agent-connection/files/py-core-auth/auth/sigv4.py.template +1 -1
- package/src/utils/api-constructs/files/cdk/app/apis/http/__apiNameKebabCase__.ts.template +1 -1
- package/src/utils/api-constructs/files/cdk/app/apis/rest/__apiNameKebabCase__.ts.template +1 -1
- package/src/utils/api-constructs/files/terraform/app/apis/http/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -1
- package/src/utils/api-constructs/files/terraform/app/apis/rest/__apiNameKebabCase__/__apiNameKebabCase__.tf.template +1 -1
- package/src/utils/function-constructs/function-constructs.js +2 -2
- package/src/utils/py.js +20 -18
- package/src/utils/py.js.map +1 -1
|
@@ -478,7 +478,7 @@ export class TestApi<
|
|
|
478
478
|
pattern: 'isolated',
|
|
479
479
|
operations: OPERATION_DETAILS,
|
|
480
480
|
defaultIntegrationOptions: <FunctionProps>{
|
|
481
|
-
runtime: Runtime.
|
|
481
|
+
runtime: Runtime.PYTHON_3_14,
|
|
482
482
|
handler: 'run.sh',
|
|
483
483
|
code: Code.fromAsset(
|
|
484
484
|
url.fileURLToPath(
|
|
@@ -1368,7 +1368,7 @@ export class TestApi<
|
|
|
1368
1368
|
pattern: 'isolated',
|
|
1369
1369
|
operations: OPERATION_DETAILS,
|
|
1370
1370
|
defaultIntegrationOptions: <FunctionProps>{
|
|
1371
|
-
runtime: Runtime.
|
|
1371
|
+
runtime: Runtime.PYTHON_3_14,
|
|
1372
1372
|
handler: 'run.sh',
|
|
1373
1373
|
code: Code.fromAsset(
|
|
1374
1374
|
url.fileURLToPath(
|
|
@@ -2296,7 +2296,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2296
2296
|
function_name = "TestApiHandler"
|
|
2297
2297
|
role = aws_iam_role.lambda_execution_role.arn
|
|
2298
2298
|
handler = "run.sh"
|
|
2299
|
-
runtime = "python3.
|
|
2299
|
+
runtime = "python3.14"
|
|
2300
2300
|
layers = ["arn:aws:lambda:\${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
2301
2301
|
timeout = 30
|
|
2302
2302
|
memory_size = 128
|
|
@@ -2944,7 +2944,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
2944
2944
|
function_name = "TestApiHandler"
|
|
2945
2945
|
role = aws_iam_role.lambda_execution_role.arn
|
|
2946
2946
|
handler = "run.sh"
|
|
2947
|
-
runtime = "python3.
|
|
2947
|
+
runtime = "python3.14"
|
|
2948
2948
|
layers = ["arn:aws:lambda:\${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
2949
2949
|
timeout = 30
|
|
2950
2950
|
memory_size = 128
|
|
@@ -3579,7 +3579,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
3579
3579
|
function_name = "TestApiHandler"
|
|
3580
3580
|
role = aws_iam_role.lambda_execution_role.arn
|
|
3581
3581
|
handler = "run.sh"
|
|
3582
|
-
runtime = "python3.
|
|
3582
|
+
runtime = "python3.14"
|
|
3583
3583
|
layers = ["arn:aws:lambda:\${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
3584
3584
|
timeout = 30
|
|
3585
3585
|
memory_size = 128
|
|
@@ -4238,7 +4238,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
4238
4238
|
function_name = "TestApiHandler"
|
|
4239
4239
|
role = aws_iam_role.lambda_execution_role.arn
|
|
4240
4240
|
handler = "run.sh"
|
|
4241
|
-
runtime = "python3.
|
|
4241
|
+
runtime = "python3.14"
|
|
4242
4242
|
layers = ["arn:aws:lambda:\${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
4243
4243
|
timeout = 30
|
|
4244
4244
|
memory_size = 128
|
|
@@ -5041,7 +5041,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
5041
5041
|
function_name = "TestApiHandler"
|
|
5042
5042
|
role = aws_iam_role.lambda_execution_role.arn
|
|
5043
5043
|
handler = "run.sh"
|
|
5044
|
-
runtime = "python3.
|
|
5044
|
+
runtime = "python3.14"
|
|
5045
5045
|
layers = ["arn:aws:lambda:\${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
5046
5046
|
timeout = 30
|
|
5047
5047
|
memory_size = 128
|
|
@@ -5846,7 +5846,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
5846
5846
|
function_name = "TestApiHandler"
|
|
5847
5847
|
role = aws_iam_role.lambda_execution_role.arn
|
|
5848
5848
|
handler = "run.sh"
|
|
5849
|
-
runtime = "python3.
|
|
5849
|
+
runtime = "python3.14"
|
|
5850
5850
|
layers = ["arn:aws:lambda:\${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
5851
5851
|
timeout = 30
|
|
5852
5852
|
memory_size = 128
|
|
@@ -45,7 +45,7 @@ export class TestProjectTestFunction extends Function {
|
|
|
45
45
|
constructor(scope: Construct, id: string) {
|
|
46
46
|
super(scope, id, {
|
|
47
47
|
timeout: Duration.seconds(30),
|
|
48
|
-
runtime: Runtime.
|
|
48
|
+
runtime: Runtime.PYTHON_3_14,
|
|
49
49
|
handler: 'test_project.test_function.lambda_handler',
|
|
50
50
|
code: Code.fromAsset(
|
|
51
51
|
url.fileURLToPath(
|
|
@@ -179,7 +179,7 @@ resource "aws_lambda_function" "lambda_function" {
|
|
|
179
179
|
role = aws_iam_role.lambda_role.arn
|
|
180
180
|
handler = "test_project.test_function.lambda_handler"
|
|
181
181
|
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
|
|
182
|
-
runtime = "python3.
|
|
182
|
+
runtime = "python3.14"
|
|
183
183
|
timeout = 30
|
|
184
184
|
|
|
185
185
|
tracing_config {
|
|
@@ -332,7 +332,7 @@ resource "aws_lambda_function" "lambda_function" {
|
|
|
332
332
|
role = aws_iam_role.lambda_role.arn
|
|
333
333
|
handler = "test_project.snapshot_function.lambda_handler"
|
|
334
334
|
source_code_hash = data.archive_file.lambda_zip.output_base64sha256
|
|
335
|
-
runtime = "python3.
|
|
335
|
+
runtime = "python3.14"
|
|
336
336
|
timeout = 30
|
|
337
337
|
|
|
338
338
|
tracing_config {
|
|
@@ -57,8 +57,8 @@ const pyProjectGenerator = async (tree, schema) => {
|
|
|
57
57
|
autoActivate: true,
|
|
58
58
|
packageManager: 'uv',
|
|
59
59
|
moveDevDependencies: false,
|
|
60
|
-
pyenvPythonVersion: '3.
|
|
61
|
-
pyprojectPythonDependency: '>=3.
|
|
60
|
+
pyenvPythonVersion: '3.14.0',
|
|
61
|
+
pyprojectPythonDependency: '>=3.14',
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
await (0, nxlv_python_1.uvProjectGenerator)(tree, {
|
|
@@ -68,8 +68,8 @@ const pyProjectGenerator = async (tree, schema) => {
|
|
|
68
68
|
buildBundleLocalDependencies: true,
|
|
69
69
|
linter: 'ruff',
|
|
70
70
|
rootPyprojectDependencyGroup: 'main',
|
|
71
|
-
pyenvPythonVersion: '3.
|
|
72
|
-
pyprojectPythonDependency: '>=3.
|
|
71
|
+
pyenvPythonVersion: '3.14.0',
|
|
72
|
+
pyprojectPythonDependency: '>=3.14',
|
|
73
73
|
projectType: schema.projectType,
|
|
74
74
|
projectNameAndRootFormat: 'as-provided',
|
|
75
75
|
moduleName: normalizedModuleName,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
2
|
|
|
3
3
|
exports[`py#strands-agent generator > should match snapshot for BedrockAgentCoreRuntime generated constructs files > agent-Dockerfile 1`] = `
|
|
4
|
-
"FROM public.ecr.aws/docker/library/python:3.
|
|
4
|
+
"FROM public.ecr.aws/docker/library/python:3.14-slim
|
|
5
5
|
|
|
6
6
|
WORKDIR /app
|
|
7
7
|
|
|
@@ -25,7 +25,7 @@ class SigV4HTTPXAuth(httpx.Auth):
|
|
|
25
25
|
|
|
26
26
|
def auth_flow(
|
|
27
27
|
self, request: httpx.Request
|
|
28
|
-
) -> Generator[httpx.Request, httpx.Response
|
|
28
|
+
) -> Generator[httpx.Request, httpx.Response]:
|
|
29
29
|
headers = dict(request.headers)
|
|
30
30
|
|
|
31
31
|
headers.pop("connection", None)
|
|
@@ -133,7 +133,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
133
133
|
runtime = "nodejs22.x"
|
|
134
134
|
<%_ } else if (backend.type === 'fastapi') { _%>
|
|
135
135
|
handler = "run.sh"
|
|
136
|
-
runtime = "python3.
|
|
136
|
+
runtime = "python3.14"
|
|
137
137
|
layers = ["arn:aws:lambda:${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
138
138
|
<%_ } _%>
|
|
139
139
|
timeout = 30
|
|
@@ -130,7 +130,7 @@ resource "aws_lambda_function" "api_lambda" {
|
|
|
130
130
|
runtime = "nodejs22.x"
|
|
131
131
|
<%_ } else if (backend.type === 'fastapi') { _%>
|
|
132
132
|
handler = "run.sh"
|
|
133
|
-
runtime = "python3.
|
|
133
|
+
runtime = "python3.14"
|
|
134
134
|
layers = ["arn:aws:lambda:${data.aws_region.current.name}:753240598075:layer:LambdaAdapterLayerX86:24"]
|
|
135
135
|
<%_ } _%>
|
|
136
136
|
timeout = 30
|
|
@@ -42,7 +42,7 @@ const addLambdaFunctionCdkConstructs = async (tree, options) => {
|
|
|
42
42
|
// Generate app specific CDK construct
|
|
43
43
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'cdk', 'app', 'lambda-functions'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'lambda-functions'), {
|
|
44
44
|
...options,
|
|
45
|
-
runtime: `Runtime.${options.runtime === 'python' ? '
|
|
45
|
+
runtime: `Runtime.${options.runtime === 'python' ? 'PYTHON_3_14' : 'NODEJS_LATEST'}`,
|
|
46
46
|
}, {
|
|
47
47
|
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
48
48
|
});
|
|
@@ -54,7 +54,7 @@ const addLambdaFunctionTerraformModules = (tree, options) => {
|
|
|
54
54
|
// Generate app specific terraform module
|
|
55
55
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', 'terraform', 'app', 'lambda-functions'), (0, devkit_1.joinPathFragments)(shared_constructs_constants_1.PACKAGES_DIR, shared_constructs_constants_1.SHARED_TERRAFORM_DIR, 'src', 'app', 'lambda-functions'), {
|
|
56
56
|
...options,
|
|
57
|
-
runtime: options.runtime === 'python' ? 'python3.
|
|
57
|
+
runtime: options.runtime === 'python' ? 'python3.14' : 'nodejs22.x',
|
|
58
58
|
}, {
|
|
59
59
|
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
60
60
|
});
|
package/src/utils/py.js
CHANGED
|
@@ -10,36 +10,38 @@ const devkit_1 = require("@nx/devkit");
|
|
|
10
10
|
const versions_1 = require("./versions");
|
|
11
11
|
const pip_requirements_js_1 = require("pip-requirements-js");
|
|
12
12
|
const toml_2 = require("./toml");
|
|
13
|
+
// Dedup key that distinguishes bare packages from the same package with
|
|
14
|
+
// extras (e.g. `foo` vs `foo[bar]`), so adding a bare dep doesn't drop a
|
|
15
|
+
// previously-added variant with extras.
|
|
16
|
+
const depKey = (dep) => {
|
|
17
|
+
const parsed = (0, pip_requirements_js_1.parsePipRequirementsLine)(dep);
|
|
18
|
+
if (parsed?.type !== 'ProjectName') {
|
|
19
|
+
return dep;
|
|
20
|
+
}
|
|
21
|
+
const extras = [...(parsed.extras ?? [])].sort().join(',');
|
|
22
|
+
return extras ? `${parsed.name}[${extras}]` : parsed.name;
|
|
23
|
+
};
|
|
24
|
+
const mergeDeps = (existing, deps) => {
|
|
25
|
+
const incomingKeys = new Set(deps.map(depKey));
|
|
26
|
+
return [
|
|
27
|
+
...(existing ?? []).filter((dep) => !incomingKeys.has(depKey(dep))),
|
|
28
|
+
...(0, versions_1.withPyVersions)(deps),
|
|
29
|
+
];
|
|
30
|
+
};
|
|
13
31
|
/**
|
|
14
32
|
* Add dependencies to a pyproject.toml file
|
|
15
33
|
*/
|
|
16
34
|
const addDependenciesToPyProjectToml = (tree, projectRoot, deps) => {
|
|
17
35
|
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), 'utf8'));
|
|
18
|
-
|
|
19
|
-
projectToml.project.dependencies = [
|
|
20
|
-
// Replace any dependencies that already exist
|
|
21
|
-
...(projectToml.project?.dependencies ?? []).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),
|
|
26
|
-
];
|
|
36
|
+
projectToml.project.dependencies = mergeDeps(projectToml.project?.dependencies, deps);
|
|
27
37
|
tree.write((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
28
38
|
};
|
|
29
39
|
exports.addDependenciesToPyProjectToml = addDependenciesToPyProjectToml;
|
|
30
40
|
const addDependenciesToDependencyGroupInPyProjectToml = (tree, projectRoot, group, deps) => {
|
|
31
41
|
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), 'utf8'));
|
|
32
|
-
const newDeps = new Set(deps);
|
|
33
42
|
projectToml['dependency-groups'] = {
|
|
34
43
|
...projectToml['dependency-groups'],
|
|
35
|
-
[group]: [
|
|
36
|
-
// Replace any dependencies that already exist
|
|
37
|
-
...(projectToml['dependency-groups']?.[group] ?? []).filter((dep) => {
|
|
38
|
-
const parsedDep = (0, pip_requirements_js_1.parsePipRequirementsLine)(dep);
|
|
39
|
-
return parsedDep.type !== 'ProjectName' || !newDeps.has(parsedDep.name);
|
|
40
|
-
}),
|
|
41
|
-
...(0, versions_1.withPyVersions)(deps),
|
|
42
|
-
],
|
|
44
|
+
[group]: mergeDeps(projectToml['dependency-groups']?.[group], deps),
|
|
43
45
|
};
|
|
44
46
|
tree.write((0, devkit_1.joinPathFragments)(projectRoot, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
45
47
|
};
|
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;AAErD,yCAA2D;AAC3D,6DAA+D;AAC/D,iCAAoC;AAEpC
|
|
1
|
+
{"version":3,"file":"py.js","sourceRoot":"","sources":["../../../../../packages/nx-plugin/src/utils/py.ts"],"names":[],"mappings":"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"}
|