@aws/nx-plugin 0.5.1 → 0.7.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 +157 -0
- package/generators.json +26 -10
- package/package.json +3 -1
- package/src/api-connection/README.md +0 -0
- package/src/api-connection/generator.d.ts +20 -0
- package/src/api-connection/generator.js +101 -0
- package/src/api-connection/generator.js.map +1 -0
- package/src/api-connection/schema.d.ts +10 -0
- package/src/api-connection/schema.json +32 -0
- package/src/cloudscape-website/app/README.md +3 -3
- package/src/cloudscape-website/app/__snapshots__/generator.spec.ts.snap +4 -2
- package/src/cloudscape-website/app/files/common/constructs/src/app/static-websites/__websiteNameKebabCase__.ts.template +1 -1
- package/src/cloudscape-website/app/generator.js +25 -10
- package/src/cloudscape-website/app/generator.js.map +1 -1
- package/src/cloudscape-website/cognito-auth/README.md +4 -4
- package/src/infra/app/README.md +3 -3
- package/src/infra/app/__snapshots__/generator.spec.ts.snap +24 -41
- package/src/infra/app/generator.js +2 -1
- package/src/infra/app/generator.js.map +1 -1
- package/src/py/fast-api/files/app/__name__/main.py.template +9 -0
- package/src/py/fast-api/files/app/tests/test_main.py +7 -0
- package/src/py/fast-api/files/common/constructs/src/app/http-apis/__apiNameKebabCase__.ts.template +22 -0
- package/src/py/fast-api/generator.d.ts +11 -0
- package/src/py/fast-api/generator.js +120 -0
- package/src/py/fast-api/generator.js.map +1 -0
- package/src/py/fast-api/schema.d.ts +9 -0
- package/src/py/fast-api/schema.json +22 -0
- package/src/py/project/generator.d.ts +31 -0
- package/src/py/project/generator.js +103 -0
- package/src/py/project/generator.js.map +1 -0
- package/src/py/project/schema.d.ts +11 -0
- package/src/py/project/schema.json +32 -0
- package/src/trpc/backend/__snapshots__/generator.spec.ts.snap +50 -44
- package/src/trpc/backend/files/common/constructs/src/app/{trpc-apis → http-apis}/__apiNameKebabCase__.ts.template +7 -3
- package/src/trpc/backend/generator.js +30 -23
- package/src/trpc/backend/generator.js.map +1 -1
- package/src/trpc/backend/schema.json +1 -1
- package/src/trpc/react/__snapshots__/generator.spec.ts.snap +1 -1
- package/src/trpc/react/files/src/hooks/useSigV4.tsx.template +1 -1
- package/src/trpc/react/generator.js +1 -40
- package/src/trpc/react/generator.js.map +1 -1
- package/src/trpc/react/schema.json +1 -1
- package/src/ts/lib/__snapshots__/generator.spec.ts.snap +12 -33
- package/src/ts/lib/eslint.js +28 -0
- package/src/ts/lib/eslint.js.map +1 -1
- package/src/ts/lib/generator.js +20 -12
- package/src/ts/lib/generator.js.map +1 -1
- package/src/ts/lib/ts-project-utils.js +2 -2
- package/src/ts/lib/ts-project-utils.js.map +1 -1
- package/src/utils/ast.d.ts +4 -0
- package/src/utils/ast.js +10 -1
- package/src/utils/ast.js.map +1 -1
- package/src/{trpc/backend/files/common/constructs/src/core/trpc-api.ts.template → utils/files/http-api/common/constructs/src/core/http-api.ts.template} +20 -18
- package/src/utils/http-api.d.ts +6 -0
- package/src/utils/http-api.js +61 -0
- package/src/utils/http-api.js.map +1 -0
- package/src/utils/names.d.ts +1 -0
- package/src/utils/names.js +4 -1
- package/src/utils/names.js.map +1 -1
- package/src/utils/npm-scope.js +2 -2
- package/src/utils/npm-scope.js.map +1 -1
- package/src/utils/nx.d.ts +8 -0
- package/src/utils/nx.js +11 -0
- package/src/utils/nx.js.map +1 -0
- package/src/utils/shared-constructs.js +1 -1
- package/src/utils/shared-constructs.js.map +1 -1
- package/src/utils/versions.d.ts +5 -2
- package/src/utils/versions.js +4 -1
- package/src/utils/versions.js.map +1 -1
|
@@ -39,7 +39,7 @@ Then add authentication:
|
|
|
39
39
|
|
|
40
40
|
1. Open the NX Console in VSCode
|
|
41
41
|
2. Click on "Generate"
|
|
42
|
-
3. Search for "cloudscape-website#cognito-auth"
|
|
42
|
+
3. Search for "ts#cloudscape-website#cognito-auth"
|
|
43
43
|
4. Fill in the required parameters:
|
|
44
44
|
- project: Your existing Cloudscape application name
|
|
45
45
|
- allowSignup: Whether to enable self-signup (optional)
|
|
@@ -50,19 +50,19 @@ Then add authentication:
|
|
|
50
50
|
Add authentication to your existing Cloudscape application:
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
nx g @aws/nx-plugin:cloudscape-website#cognito-auth --project=my-cloudscape-app --cognito-domain=<your-domain-prefix>
|
|
53
|
+
nx g @aws/nx-plugin:ts#cloudscape-website#cognito-auth --project=my-cloudscape-app --cognito-domain=<your-domain-prefix>
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
Enable self-signup:
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
nx g @aws/nx-plugin:cloudscape-website#cognito-auth --project=my-cloudscape-app --allowSignup=true --cognito-domain=<your-domain-prefix>
|
|
59
|
+
nx g @aws/nx-plugin:ts#cloudscape-website#cognito-auth --project=my-cloudscape-app --allowSignup=true --cognito-domain=<your-domain-prefix>
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
You can also perform a dry-run to see what files would be generated without actually creating them:
|
|
63
63
|
|
|
64
64
|
```bash
|
|
65
|
-
nx g @aws/nx-plugin:cloudscape-website#cognito-auth --project=my-cloudscape-app --cognito-domain=<your-domain-prefix> --dry-run
|
|
65
|
+
nx g @aws/nx-plugin:ts#cloudscape-website#cognito-auth --project=my-cloudscape-app --cognito-domain=<your-domain-prefix> --dry-run
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
All methods will add Cognito authentication to your existing Cloudscape website application with all the necessary components and infrastructure code.
|
package/src/infra/app/README.md
CHANGED
|
@@ -21,7 +21,7 @@ Then generate your application:
|
|
|
21
21
|
|
|
22
22
|
1. Open the NX Console in VSCode
|
|
23
23
|
2. Click on "Generate"
|
|
24
|
-
3. Search for "infra
|
|
24
|
+
3. Search for "ts#infra"
|
|
25
25
|
4. Fill in the required parameters in the form
|
|
26
26
|
5. Click "Run"
|
|
27
27
|
|
|
@@ -30,13 +30,13 @@ Then generate your application:
|
|
|
30
30
|
Generate the application:
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
nx g @aws/nx-plugin:infra
|
|
33
|
+
nx g @aws/nx-plugin:ts#infra my-infra --directory=apps/infrastructure
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
You can also perform a dry-run to see what files would be generated without actually creating them:
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
nx g @aws/nx-plugin:infra
|
|
39
|
+
nx g @aws/nx-plugin:ts#infra my-infra --directory=apps/infrastructure --dry-run
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
## Input Parameters
|
|
@@ -6,7 +6,7 @@ exports[`infra generator > should add required dependencies to package.json > de
|
|
|
6
6
|
"aws-cdk": "^2.166.0",
|
|
7
7
|
"aws-cdk-lib": "^2.166.0",
|
|
8
8
|
"constructs": "^10.4.2",
|
|
9
|
-
"esbuild": "^0.
|
|
9
|
+
"esbuild": "^0.25.0",
|
|
10
10
|
"source-map-support": "^0.5.21",
|
|
11
11
|
}
|
|
12
12
|
`;
|
|
@@ -22,6 +22,7 @@ exports[`infra generator > should add required dependencies to package.json > de
|
|
|
22
22
|
"@swc-node/register": "~1.9.1",
|
|
23
23
|
"@swc/core": "~1.5.7",
|
|
24
24
|
"@swc/helpers": "~0.5.11",
|
|
25
|
+
"@types/node": "^22.13.1",
|
|
25
26
|
"@vitest/coverage-v8": "^1.0.4",
|
|
26
27
|
"@vitest/ui": "^1.3.1",
|
|
27
28
|
"eslint": "^9.8.0",
|
|
@@ -45,7 +46,7 @@ exports[`infra generator > should add required dependencies to package.json > pa
|
|
|
45
46
|
"aws-cdk": "^2.166.0",
|
|
46
47
|
"aws-cdk-lib": "^2.166.0",
|
|
47
48
|
"constructs": "^10.4.2",
|
|
48
|
-
"esbuild": "^0.
|
|
49
|
+
"esbuild": "^0.25.0",
|
|
49
50
|
"source-map-support": "^0.5.21",
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
@@ -58,6 +59,7 @@ exports[`infra generator > should add required dependencies to package.json > pa
|
|
|
58
59
|
"@swc-node/register": "~1.9.1",
|
|
59
60
|
"@swc/core": "~1.5.7",
|
|
60
61
|
"@swc/helpers": "~0.5.11",
|
|
62
|
+
"@types/node": "^22.13.1",
|
|
61
63
|
"@vitest/coverage-v8": "^1.0.4",
|
|
62
64
|
"@vitest/ui": "^1.3.1",
|
|
63
65
|
"eslint": "^9.8.0",
|
|
@@ -120,17 +122,13 @@ exports[`infra generator > should configure project.json with correct targets >
|
|
|
120
122
|
],
|
|
121
123
|
},
|
|
122
124
|
"compile": {
|
|
123
|
-
"executor": "
|
|
125
|
+
"executor": "nx:run-commands",
|
|
124
126
|
"options": {
|
|
125
|
-
"
|
|
126
|
-
|
|
127
|
-
],
|
|
128
|
-
"main": "packages/test/src/main.ts",
|
|
129
|
-
"outputPath": "dist/packages/test",
|
|
130
|
-
"tsConfig": "packages/test/tsconfig.json",
|
|
127
|
+
"command": "tsc --build tsconfig.lib.json",
|
|
128
|
+
"cwd": "{projectRoot}",
|
|
131
129
|
},
|
|
132
130
|
"outputs": [
|
|
133
|
-
"{
|
|
131
|
+
"{workspaceRoot}/dist/packages/test/tsc",
|
|
134
132
|
],
|
|
135
133
|
},
|
|
136
134
|
"deploy": {
|
|
@@ -140,9 +138,6 @@ exports[`infra generator > should configure project.json with correct targets >
|
|
|
140
138
|
"cwd": "packages/test",
|
|
141
139
|
},
|
|
142
140
|
},
|
|
143
|
-
"lint": {
|
|
144
|
-
"executor": "@nx/eslint:lint",
|
|
145
|
-
},
|
|
146
141
|
"synth": {
|
|
147
142
|
"cache": true,
|
|
148
143
|
"dependsOn": [
|
|
@@ -462,23 +457,18 @@ exports[`infra generator > should generate files with correct content > project-
|
|
|
462
457
|
"dependsOn": ["lint", "compile", "test", "synth"]
|
|
463
458
|
},
|
|
464
459
|
"compile": {
|
|
465
|
-
"executor": "
|
|
466
|
-
"outputs": ["{
|
|
460
|
+
"executor": "nx:run-commands",
|
|
461
|
+
"outputs": ["{workspaceRoot}/dist/packages/test/tsc"],
|
|
467
462
|
"options": {
|
|
468
|
-
"
|
|
469
|
-
"
|
|
470
|
-
"tsConfig": "packages/test/tsconfig.json",
|
|
471
|
-
"assets": ["packages/test/*.md"]
|
|
463
|
+
"command": "tsc --build tsconfig.lib.json",
|
|
464
|
+
"cwd": "{projectRoot}"
|
|
472
465
|
}
|
|
473
466
|
},
|
|
474
|
-
"
|
|
475
|
-
"executor": "
|
|
476
|
-
},
|
|
477
|
-
"test": {
|
|
478
|
-
"executor": "@nx/vite:test",
|
|
479
|
-
"outputs": ["{options.reportsDirectory}"],
|
|
467
|
+
"deploy": {
|
|
468
|
+
"executor": "nx:run-commands",
|
|
480
469
|
"options": {
|
|
481
|
-
"
|
|
470
|
+
"cwd": "packages/test",
|
|
471
|
+
"command": "cdk deploy --require-approval=never --app ../../dist/packages/test/cdk.out"
|
|
482
472
|
}
|
|
483
473
|
},
|
|
484
474
|
"synth": {
|
|
@@ -491,11 +481,11 @@ exports[`infra generator > should generate files with correct content > project-
|
|
|
491
481
|
"command": "cdk synth"
|
|
492
482
|
}
|
|
493
483
|
},
|
|
494
|
-
"
|
|
495
|
-
"executor": "nx:
|
|
484
|
+
"test": {
|
|
485
|
+
"executor": "@nx/vite:test",
|
|
486
|
+
"outputs": ["{options.reportsDirectory}"],
|
|
496
487
|
"options": {
|
|
497
|
-
"
|
|
498
|
-
"command": "cdk deploy --require-approval=never --app ../../dist/packages/test/cdk.out"
|
|
488
|
+
"reportsDirectory": "../../coverage/packages/test"
|
|
499
489
|
}
|
|
500
490
|
}
|
|
501
491
|
}
|
|
@@ -766,17 +756,13 @@ exports[`infra generator > should handle custom project names correctly > custom
|
|
|
766
756
|
],
|
|
767
757
|
},
|
|
768
758
|
"compile": {
|
|
769
|
-
"executor": "
|
|
759
|
+
"executor": "nx:run-commands",
|
|
770
760
|
"options": {
|
|
771
|
-
"
|
|
772
|
-
|
|
773
|
-
],
|
|
774
|
-
"main": "packages/custom-infra/src/main.ts",
|
|
775
|
-
"outputPath": "dist/packages/custom-infra",
|
|
776
|
-
"tsConfig": "packages/custom-infra/tsconfig.json",
|
|
761
|
+
"command": "tsc --build tsconfig.lib.json",
|
|
762
|
+
"cwd": "{projectRoot}",
|
|
777
763
|
},
|
|
778
764
|
"outputs": [
|
|
779
|
-
"{
|
|
765
|
+
"{workspaceRoot}/dist/packages/custom-infra/tsc",
|
|
780
766
|
],
|
|
781
767
|
},
|
|
782
768
|
"deploy": {
|
|
@@ -786,9 +772,6 @@ exports[`infra generator > should handle custom project names correctly > custom
|
|
|
786
772
|
"cwd": "packages/custom-infra",
|
|
787
773
|
},
|
|
788
774
|
},
|
|
789
|
-
"lint": {
|
|
790
|
-
"executor": "@nx/eslint:lint",
|
|
791
|
-
},
|
|
792
775
|
"synth": {
|
|
793
776
|
"cache": true,
|
|
794
777
|
"dependsOn": [
|
|
@@ -14,6 +14,7 @@ const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
|
14
14
|
const ast_1 = require("../../utils/ast");
|
|
15
15
|
const path_1 = tslib_1.__importDefault(require("path"));
|
|
16
16
|
const format_1 = require("../../utils/format");
|
|
17
|
+
const nx_1 = require("../../utils/nx");
|
|
17
18
|
function infraGenerator(tree, schema) {
|
|
18
19
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
19
20
|
const lib = (0, generator_1.getTsLibDetails)(tree, schema);
|
|
@@ -46,7 +47,6 @@ function infraGenerator(tree, schema) {
|
|
|
46
47
|
...((_a = config.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []),
|
|
47
48
|
'synth',
|
|
48
49
|
];
|
|
49
|
-
config.targets.compile.options.main = (0, devkit_1.joinPathFragments)(libraryRoot, 'src', 'main.ts');
|
|
50
50
|
config.targets.synth = {
|
|
51
51
|
cache: true,
|
|
52
52
|
executor: 'nx:run-commands',
|
|
@@ -64,6 +64,7 @@ function infraGenerator(tree, schema) {
|
|
|
64
64
|
command: `cdk deploy --require-approval=never --app ${synthDirFromProject}`,
|
|
65
65
|
},
|
|
66
66
|
};
|
|
67
|
+
config.targets = (0, nx_1.sortProjectTargets)(config.targets);
|
|
67
68
|
return config;
|
|
68
69
|
});
|
|
69
70
|
(0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'src', 'core', 'index.ts'), './cfn-guard.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/infra/app/generator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/infra/app/generator.ts"],"names":[],"mappings":"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"}
|
package/src/py/fast-api/files/common/constructs/src/app/http-apis/__apiNameKebabCase__.ts.template
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Construct } from 'constructs';
|
|
2
|
+
import * as url from 'url';
|
|
3
|
+
import { HttpApi } from '../../core/http-api.js';
|
|
4
|
+
import { HttpIamAuthorizer } from 'aws-cdk-lib/aws-apigatewayv2-authorizers';
|
|
5
|
+
import { Runtime } from 'aws-cdk-lib/aws-lambda';
|
|
6
|
+
|
|
7
|
+
export class <%= apiNameClassName %> extends HttpApi {
|
|
8
|
+
constructor(scope: Construct, id: string) {
|
|
9
|
+
super(scope, id, {
|
|
10
|
+
defaultAuthorizer: new HttpIamAuthorizer(),
|
|
11
|
+
apiName: '<%= apiNameClassName %>',
|
|
12
|
+
runtime: Runtime.PYTHON_3_12,
|
|
13
|
+
handler: '<%= apiNameSnakeCase %>.main.handler',
|
|
14
|
+
handlerFilePath: url.fileURLToPath(
|
|
15
|
+
new URL(
|
|
16
|
+
'../../../../../../dist/<%= dir %>/bundle',
|
|
17
|
+
import.meta.url
|
|
18
|
+
)
|
|
19
|
+
)
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { GeneratorCallback, Tree } from '@nx/devkit';
|
|
6
|
+
import { FastApiProjectGeneratorSchema } from './schema';
|
|
7
|
+
/**
|
|
8
|
+
* Generates a Python FastAPI project
|
|
9
|
+
*/
|
|
10
|
+
export declare const fastApiProjectGenerator: (tree: Tree, schema: FastApiProjectGeneratorSchema) => Promise<GeneratorCallback>;
|
|
11
|
+
export default fastApiProjectGenerator;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fastApiProjectGenerator = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
*/
|
|
9
|
+
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
const provider_1 = require("@nxlv/python/src/provider/uv/provider");
|
|
11
|
+
const logger_1 = require("@nxlv/python/src/executors/utils/logger");
|
|
12
|
+
const generator_1 = tslib_1.__importStar(require("../project/generator"));
|
|
13
|
+
const toml_1 = require("@iarna/toml");
|
|
14
|
+
const shared_constructs_1 = require("../../utils/shared-constructs");
|
|
15
|
+
const names_1 = require("../../utils/names");
|
|
16
|
+
const ast_1 = require("../../utils/ast");
|
|
17
|
+
const format_1 = require("../../utils/format");
|
|
18
|
+
const http_api_1 = require("../../utils/http-api");
|
|
19
|
+
const nx_1 = require("../../utils/nx");
|
|
20
|
+
/**
|
|
21
|
+
* Generates a Python FastAPI project
|
|
22
|
+
*/
|
|
23
|
+
const fastApiProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
yield (0, shared_constructs_1.sharedConstructsGenerator)(tree);
|
|
26
|
+
const { dir, normalizedName, normalizedModuleName, fullyQualifiedName } = (0, generator_1.getPyProjectDetails)(tree, {
|
|
27
|
+
name: schema.name,
|
|
28
|
+
directory: schema.directory,
|
|
29
|
+
});
|
|
30
|
+
const apiNameSnakeCase = (0, names_1.toSnakeCase)(schema.name);
|
|
31
|
+
const apiNameKebabCase = (0, names_1.toKebabCase)(schema.name);
|
|
32
|
+
const apiNameClassName = (0, names_1.toClassName)(schema.name);
|
|
33
|
+
const enhancedOptions = Object.assign(Object.assign({}, schema), { dir,
|
|
34
|
+
apiNameClassName,
|
|
35
|
+
apiNameKebabCase,
|
|
36
|
+
apiNameSnakeCase });
|
|
37
|
+
yield (0, generator_1.default)(tree, {
|
|
38
|
+
name: normalizedName,
|
|
39
|
+
directory: schema.directory,
|
|
40
|
+
moduleName: normalizedModuleName,
|
|
41
|
+
projectType: 'application',
|
|
42
|
+
});
|
|
43
|
+
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, fullyQualifiedName);
|
|
44
|
+
projectConfig.targets.bundle = {
|
|
45
|
+
cache: true,
|
|
46
|
+
executor: 'nx:run-commands',
|
|
47
|
+
outputs: [`{workspaceRoot}/dist/${dir}/bundle`],
|
|
48
|
+
options: {
|
|
49
|
+
commands: [
|
|
50
|
+
`uv export --frozen --no-dev --no-editable --project ${normalizedName} -o dist/${dir}/bundle/requirements.txt`,
|
|
51
|
+
`uv pip install --no-installer-metadata --no-compile-bytecode --python-platform x86_64-manylinux2014 --python \`uv python pin\` --target dist/${dir}/bundle -r dist/${dir}/bundle/requirements.txt`
|
|
52
|
+
],
|
|
53
|
+
parallel: false,
|
|
54
|
+
},
|
|
55
|
+
dependsOn: ['compile'],
|
|
56
|
+
};
|
|
57
|
+
projectConfig.targets.build.dependsOn = [
|
|
58
|
+
...((_a = projectConfig.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []),
|
|
59
|
+
'bundle',
|
|
60
|
+
];
|
|
61
|
+
projectConfig.targets.serve = {
|
|
62
|
+
executor: '@nxlv/python:run-commands',
|
|
63
|
+
options: {
|
|
64
|
+
command: `uv run fastapi dev ${normalizedName}/main.py`,
|
|
65
|
+
cwd: dir,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
projectConfig.metadata = {
|
|
69
|
+
apiName: schema.name,
|
|
70
|
+
apiType: 'fast-api',
|
|
71
|
+
};
|
|
72
|
+
projectConfig.targets = (0, nx_1.sortProjectTargets)(projectConfig.targets);
|
|
73
|
+
(0, devkit_1.updateProjectConfiguration)(tree, normalizedName, projectConfig);
|
|
74
|
+
[
|
|
75
|
+
(0, devkit_1.joinPathFragments)(dir, normalizedModuleName !== null && normalizedModuleName !== void 0 ? normalizedModuleName : normalizedName, 'hello.py'),
|
|
76
|
+
(0, devkit_1.joinPathFragments)(dir, 'tests', 'test_hello.py'),
|
|
77
|
+
].forEach((f) => tree.delete(f));
|
|
78
|
+
(0, devkit_1.generateFiles)(tree, // the virtual file system
|
|
79
|
+
(0, devkit_1.joinPathFragments)(__dirname, 'files', 'app'), // path to the file templates
|
|
80
|
+
dir, // destination path of the files
|
|
81
|
+
{
|
|
82
|
+
name: normalizedName,
|
|
83
|
+
}, {
|
|
84
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.Overwrite,
|
|
85
|
+
});
|
|
86
|
+
if (!tree.exists((0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'http-apis', `${apiNameKebabCase}.ts`))) {
|
|
87
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files', shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'src', 'app'), (0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'src', 'app'), enhancedOptions, {
|
|
88
|
+
overwriteStrategy: devkit_1.OverwriteStrategy.KeepExisting,
|
|
89
|
+
});
|
|
90
|
+
(0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'index.ts'), './http-apis/index.js');
|
|
91
|
+
(0, ast_1.addStarExport)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'src', 'app', 'http-apis', 'index.ts'), `./${apiNameKebabCase}.js`);
|
|
92
|
+
}
|
|
93
|
+
(0, http_api_1.addHttpApi)(tree, apiNameClassName);
|
|
94
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(shared_constructs_1.PACKAGES_DIR, shared_constructs_1.SHARED_CONSTRUCTS_DIR, 'project.json'), (config) => {
|
|
95
|
+
var _a;
|
|
96
|
+
if (!config.targets) {
|
|
97
|
+
config.targets = {};
|
|
98
|
+
}
|
|
99
|
+
if (!config.targets.build) {
|
|
100
|
+
config.targets.build = {};
|
|
101
|
+
}
|
|
102
|
+
config.targets.build.dependsOn = [
|
|
103
|
+
...((_a = config.targets.build.dependsOn) !== null && _a !== void 0 ? _a : []),
|
|
104
|
+
`${fullyQualifiedName}:build`,
|
|
105
|
+
];
|
|
106
|
+
return config;
|
|
107
|
+
});
|
|
108
|
+
const projectToml = (0, toml_1.parse)(tree.read((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), 'utf8'));
|
|
109
|
+
projectToml.project.dependencies = ['fastapi', 'mangum'].concat(((_b = projectToml.project) === null || _b === void 0 ? void 0 : _b.dependencies) || []);
|
|
110
|
+
projectToml['dependency-groups'] = { dev: ['fastapi[standard]>=0.115'] };
|
|
111
|
+
tree.write((0, devkit_1.joinPathFragments)(dir, 'pyproject.toml'), (0, toml_1.stringify)(projectToml));
|
|
112
|
+
yield (0, format_1.formatFilesInSubtree)(tree);
|
|
113
|
+
return () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
114
|
+
yield new provider_1.UVProvider(tree.root, new logger_1.Logger(), tree).install();
|
|
115
|
+
(0, devkit_1.installPackagesTask)(tree);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
exports.fastApiProjectGenerator = fastApiProjectGenerator;
|
|
119
|
+
exports.default = exports.fastApiProjectGenerator;
|
|
120
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/fast-api/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
|
+
"$id": "TsLib",
|
|
4
|
+
"title": "Create a Python FastAPI project",
|
|
5
|
+
"description": "Create a Python FastAPI project",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"name": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "project name.",
|
|
11
|
+
"x-priority": "important"
|
|
12
|
+
},
|
|
13
|
+
"directory": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "Parent directory where the project is placed.",
|
|
16
|
+
"default": "packages",
|
|
17
|
+
"x-prompt": "Which directory do you want to create the project in?",
|
|
18
|
+
"x-priority": "important"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"required": ["name"]
|
|
22
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { GeneratorCallback, Tree } from '@nx/devkit';
|
|
6
|
+
import { PyProjectGeneratorSchema } from './schema';
|
|
7
|
+
export interface PyProjectDetails {
|
|
8
|
+
readonly normalizedName: string;
|
|
9
|
+
/**
|
|
10
|
+
* Full package name including scope (eg foo.bar)
|
|
11
|
+
*/
|
|
12
|
+
readonly fullyQualifiedName: string;
|
|
13
|
+
/**
|
|
14
|
+
* Directory of the library relative to the root
|
|
15
|
+
*/
|
|
16
|
+
readonly dir: string;
|
|
17
|
+
readonly normalizedModuleName?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns details about the Python project to be created
|
|
21
|
+
*/
|
|
22
|
+
export declare const getPyProjectDetails: (tree: Tree, schema: {
|
|
23
|
+
name: string;
|
|
24
|
+
directory?: string;
|
|
25
|
+
moduleName?: string;
|
|
26
|
+
}) => PyProjectDetails;
|
|
27
|
+
/**
|
|
28
|
+
* Generates a Python project
|
|
29
|
+
*/
|
|
30
|
+
export declare const pyProjectGenerator: (tree: Tree, schema: PyProjectGeneratorSchema) => Promise<GeneratorCallback>;
|
|
31
|
+
export default pyProjectGenerator;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pyProjectGenerator = exports.getPyProjectDetails = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
/**
|
|
6
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
7
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
8
|
+
*/
|
|
9
|
+
const devkit_1 = require("@nx/devkit");
|
|
10
|
+
const generator_1 = tslib_1.__importDefault(require("@nxlv/python/src/generators/migrate-to-shared-venv/generator"));
|
|
11
|
+
const generator_2 = tslib_1.__importDefault(require("@nxlv/python/src/generators/uv-project/generator"));
|
|
12
|
+
const provider_1 = require("@nxlv/python/src/provider/uv/provider");
|
|
13
|
+
const logger_1 = require("@nxlv/python/src/executors/utils/logger");
|
|
14
|
+
const versions_1 = require("../../utils/versions");
|
|
15
|
+
const npm_scope_1 = require("../../utils/npm-scope");
|
|
16
|
+
const names_1 = require("../../utils/names");
|
|
17
|
+
const nx_1 = require("../../utils/nx");
|
|
18
|
+
/**
|
|
19
|
+
* Returns details about the Python project to be created
|
|
20
|
+
*/
|
|
21
|
+
const getPyProjectDetails = (tree, schema) => {
|
|
22
|
+
var _a;
|
|
23
|
+
const scope = (0, names_1.toSnakeCase)((0, npm_scope_1.getNpmScope)(tree));
|
|
24
|
+
const normalizedName = (0, names_1.toSnakeCase)(schema.name);
|
|
25
|
+
const normalizedModuleName = (0, names_1.toSnakeCase)(schema.moduleName);
|
|
26
|
+
const fullyQualifiedName = `${scope}.${normalizedName}`;
|
|
27
|
+
const dir = (0, devkit_1.joinPathFragments)((_a = (0, names_1.toSnakeCase)(schema.directory)) !== null && _a !== void 0 ? _a : '.', normalizedName);
|
|
28
|
+
return { dir, fullyQualifiedName, normalizedName, normalizedModuleName };
|
|
29
|
+
};
|
|
30
|
+
exports.getPyProjectDetails = getPyProjectDetails;
|
|
31
|
+
/**
|
|
32
|
+
* Generates a Python project
|
|
33
|
+
*/
|
|
34
|
+
const pyProjectGenerator = (tree, schema) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
+
var _a, _b, _c;
|
|
36
|
+
const { dir, normalizedName, normalizedModuleName, fullyQualifiedName } = (0, exports.getPyProjectDetails)(tree, schema);
|
|
37
|
+
const pythonPlugin = (0, versions_1.withVersions)(['@nxlv/python']);
|
|
38
|
+
Object.entries(pythonPlugin).forEach(([name, version]) => (0, devkit_1.ensurePackage)(name, version));
|
|
39
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
|
40
|
+
if (!((_a = nxJson.plugins) === null || _a === void 0 ? void 0 : _a.find((p) => typeof p === 'string'
|
|
41
|
+
? p === '@nxlv/python'
|
|
42
|
+
: p.plugin === '@nxlv/python'))) {
|
|
43
|
+
nxJson.plugins = [
|
|
44
|
+
...((_b = nxJson.plugins) !== null && _b !== void 0 ? _b : []),
|
|
45
|
+
{
|
|
46
|
+
plugin: '@nxlv/python',
|
|
47
|
+
options: {
|
|
48
|
+
packageManager: 'uv',
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
(0, devkit_1.updateNxJson)(tree, nxJson);
|
|
53
|
+
}
|
|
54
|
+
if (!tree.exists('uv.lock')) {
|
|
55
|
+
yield (0, generator_1.default)(tree, {
|
|
56
|
+
autoActivate: true,
|
|
57
|
+
packageManager: 'uv',
|
|
58
|
+
moveDevDependencies: false,
|
|
59
|
+
pyenvPythonVersion: '3.12.0',
|
|
60
|
+
pyprojectPythonDependency: '>=3.12',
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
yield (0, generator_2.default)(tree, {
|
|
64
|
+
name: normalizedName,
|
|
65
|
+
publishable: false,
|
|
66
|
+
buildLockedVersions: true,
|
|
67
|
+
buildBundleLocalDependencies: true,
|
|
68
|
+
linter: 'ruff',
|
|
69
|
+
rootPyprojectDependencyGroup: 'main',
|
|
70
|
+
pyenvPythonVersion: '3.12.0',
|
|
71
|
+
pyprojectPythonDependency: '>=3.12',
|
|
72
|
+
projectType: schema.projectType,
|
|
73
|
+
projectNameAndRootFormat: 'as-provided',
|
|
74
|
+
moduleName: normalizedModuleName,
|
|
75
|
+
directory: dir,
|
|
76
|
+
unitTestRunner: 'pytest',
|
|
77
|
+
codeCoverage: true,
|
|
78
|
+
codeCoverageHtmlReport: true,
|
|
79
|
+
codeCoverageXmlReport: true,
|
|
80
|
+
unitTestHtmlReport: true,
|
|
81
|
+
unitTestJUnitReport: true,
|
|
82
|
+
});
|
|
83
|
+
const outputPath = `{workspaceRoot}/dist/${dir}`;
|
|
84
|
+
const buildOutputPath = (0, devkit_1.joinPathFragments)(outputPath, 'build');
|
|
85
|
+
const projectConfiguration = (0, devkit_1.readProjectConfiguration)(tree, normalizedName);
|
|
86
|
+
projectConfiguration.name = fullyQualifiedName;
|
|
87
|
+
const buildTarget = projectConfiguration.targets.build;
|
|
88
|
+
projectConfiguration.targets.compile = Object.assign(Object.assign({}, buildTarget), { outputs: [buildOutputPath], options: Object.assign(Object.assign({}, buildTarget.options), { outputPath: buildOutputPath }) });
|
|
89
|
+
projectConfiguration.targets.build = {
|
|
90
|
+
dependsOn: ['lint', 'compile', 'test', ...((_c = buildTarget.dependsOn) !== null && _c !== void 0 ? _c : [])],
|
|
91
|
+
options: {
|
|
92
|
+
outputPath,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
projectConfiguration.targets = (0, nx_1.sortProjectTargets)(projectConfiguration.targets);
|
|
96
|
+
(0, devkit_1.updateProjectConfiguration)(tree, normalizedName, projectConfiguration);
|
|
97
|
+
return () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
98
|
+
yield new provider_1.UVProvider(tree.root, new logger_1.Logger(), tree).install();
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
exports.pyProjectGenerator = pyProjectGenerator;
|
|
102
|
+
exports.default = exports.pyProjectGenerator;
|
|
103
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/py/project/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface PyProjectGeneratorSchema {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
readonly projectType: 'application' | 'library';
|
|
9
|
+
readonly directory?: string;
|
|
10
|
+
readonly moduleName?: string;
|
|
11
|
+
}
|