@phila/cli 0.0.12 → 0.0.13
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 +6 -6
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/deploy.d.ts +8 -2
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +18 -7
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +30 -3
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/ship.js +2 -2
- package/dist/commands/ship.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +17 -7
- package/dist/commands/validate.js.map +1 -1
- package/dist/templates/_shared/city.config.json.tmpl +1 -0
- package/dist/templates/_shared/webapp-cdk-package.json.tmpl +0 -3
- package/dist/templates/lambda-api-nodejs/README.md.tmpl +5 -5
- package/dist/templates/lambda-api-nodejs/apps/__lambdaName__/index.ts +1 -1
- package/dist/templates/lambda-api-nodejs/apps/__lambdaName__/package.json +2 -2
- package/dist/templates/lambda-api-nodejs/cdk/app.ts.tmpl +2 -2
- package/dist/templates/lambda-api-nodejs/cdk/cdk.json +1 -1
- package/dist/templates/lambda-api-nodejs/cdk/package.json +0 -3
- package/dist/templates/lambda-api-nodejs/package.json.tmpl +3 -0
- package/dist/templates/lambda-dynamo-api/README.md.tmpl +5 -5
- package/dist/templates/lambda-dynamo-api/apps/__lambdaName__/index.ts +1 -1
- package/dist/templates/lambda-dynamo-api/apps/__lambdaName__/package.json +2 -2
- package/dist/templates/lambda-dynamo-api/cdk/app.ts.tmpl +2 -2
- package/dist/templates/lambda-dynamo-api/cdk/cdk.json +3 -8
- package/dist/templates/lambda-dynamo-api/cdk/package.json +0 -3
- package/dist/templates/lambda-dynamo-api/package.json.tmpl +3 -0
- package/dist/templates/lambda-postgres-api/README.md.tmpl +6 -6
- package/dist/templates/lambda-postgres-api/apps/__lambdaName__/index.ts +1 -1
- package/dist/templates/lambda-postgres-api/apps/__lambdaName__/package.json +2 -2
- package/dist/templates/lambda-postgres-api/cdk/app.ts.tmpl +2 -2
- package/dist/templates/lambda-postgres-api/cdk/cdk.json +1 -1
- package/dist/templates/lambda-postgres-api/cdk/package.json +0 -3
- package/dist/templates/lambda-postgres-api/package.json.tmpl +3 -0
- package/dist/templates/static-site/README.md.tmpl +2 -2
- package/dist/templates/static-site/cdk/app.ts.tmpl +2 -2
- package/dist/templates/static-site/cdk/cdk.json +1 -1
- package/dist/templates/static-site/cdk/package.json +0 -3
- package/dist/templates/static-site/frontend/README.md +4 -4
- package/dist/templates/static-site/package.json.tmpl +4 -1
- package/dist/templates/webapp-ecs-dotnet/README.md.tmpl +4 -4
- package/dist/templates/webapp-ecs-dotnet/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-ecs-dotnet/cdk/cdk.json +1 -1
- package/dist/templates/webapp-ecs-dotnet/package.json.tmpl +6 -3
- package/dist/templates/webapp-ecs-node/README.md.tmpl +7 -7
- package/dist/templates/webapp-ecs-node/apps/api/Dockerfile +5 -5
- package/dist/templates/webapp-ecs-node/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-ecs-node/cdk/cdk.json +1 -1
- package/dist/templates/webapp-ecs-node/package.json.tmpl +7 -4
- package/dist/templates/webapp-ecs-postgres-dotnet/README.md.tmpl +5 -5
- package/dist/templates/webapp-ecs-postgres-dotnet/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-ecs-postgres-dotnet/cdk/cdk.json +1 -1
- package/dist/templates/webapp-ecs-postgres-dotnet/package.json.tmpl +6 -3
- package/dist/templates/webapp-ecs-postgres-node/README.md.tmpl +8 -8
- package/dist/templates/webapp-ecs-postgres-node/apps/api/Dockerfile +5 -5
- package/dist/templates/webapp-ecs-postgres-node/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-ecs-postgres-node/cdk/cdk.json +1 -1
- package/dist/templates/webapp-ecs-postgres-node/package.json.tmpl +7 -4
- package/dist/templates/webapp-lambda-dotnet/README.md.tmpl +4 -4
- package/dist/templates/webapp-lambda-dotnet/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-lambda-dotnet/cdk/cdk.json +1 -1
- package/dist/templates/webapp-lambda-dotnet/package.json.tmpl +6 -3
- package/dist/templates/webapp-lambda-dynamo-dotnet/README.md.tmpl +4 -4
- package/dist/templates/webapp-lambda-dynamo-dotnet/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-lambda-dynamo-dotnet/cdk/cdk.json +1 -1
- package/dist/templates/webapp-lambda-dynamo-dotnet/package.json.tmpl +6 -3
- package/dist/templates/webapp-lambda-dynamo-node/README.md.tmpl +6 -6
- package/dist/templates/webapp-lambda-dynamo-node/apps/api/index.ts +1 -1
- package/dist/templates/webapp-lambda-dynamo-node/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-lambda-dynamo-node/cdk/cdk.json +1 -1
- package/dist/templates/webapp-lambda-dynamo-node/package.json.tmpl +6 -3
- package/dist/templates/webapp-lambda-node/README.md.tmpl +5 -5
- package/dist/templates/webapp-lambda-node/apps/api/index.ts +1 -1
- package/dist/templates/webapp-lambda-node/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-lambda-node/cdk/cdk.json +1 -1
- package/dist/templates/webapp-lambda-node/package.json.tmpl +6 -3
- package/dist/templates/webapp-lambda-postgres-dotnet/README.md.tmpl +5 -5
- package/dist/templates/webapp-lambda-postgres-dotnet/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-lambda-postgres-dotnet/cdk/cdk.json +1 -1
- package/dist/templates/webapp-lambda-postgres-dotnet/package.json.tmpl +6 -3
- package/dist/templates/webapp-lambda-postgres-node/README.md.tmpl +7 -7
- package/dist/templates/webapp-lambda-postgres-node/apps/api/index.ts +1 -1
- package/dist/templates/webapp-lambda-postgres-node/cdk/app.ts.tmpl +3 -4
- package/dist/templates/webapp-lambda-postgres-node/cdk/cdk.json +1 -1
- package/dist/templates/webapp-lambda-postgres-node/package.json.tmpl +6 -3
- package/dist/utils/install-env.d.ts +1 -1
- package/dist/utils/install-env.js +6 -6
- package/dist/utils/install-env.js.map +1 -1
- package/dist/utils/package-manager.d.ts +34 -2
- package/dist/utils/package-manager.d.ts.map +1 -1
- package/dist/utils/package-manager.js +102 -15
- package/dist/utils/package-manager.js.map +1 -1
- package/dist/utils/template.d.ts +7 -0
- package/dist/utils/template.d.ts.map +1 -1
- package/dist/utils/template.js +8 -1
- package/dist/utils/template.js.map +1 -1
- package/package.json +1 -1
|
@@ -22,23 +22,23 @@ View the [architecture diagram](https://github.com/CityOfPhiladelphia/phila-ctl/
|
|
|
22
22
|
|
|
23
23
|
```bash
|
|
24
24
|
# Install dependencies
|
|
25
|
-
|
|
25
|
+
{{installCommand}}
|
|
26
26
|
|
|
27
27
|
# Build all packages
|
|
28
|
-
|
|
28
|
+
{{runScriptPrefix}} build
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
### Development
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
# Run frontend dev server
|
|
35
|
-
|
|
35
|
+
{{runScriptPrefix}} dev
|
|
36
36
|
|
|
37
37
|
# Build frontend for production
|
|
38
|
-
|
|
38
|
+
{{runScriptPrefix}} build:frontend
|
|
39
39
|
|
|
40
40
|
# Build API
|
|
41
|
-
|
|
41
|
+
{{runScriptPrefix}} build:api
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
### Deployment
|
|
@@ -115,7 +115,7 @@ The API uses [@phila/philaroute](https://www.npmjs.com/package/@phila/philaroute
|
|
|
115
115
|
1. Install a PostgreSQL client:
|
|
116
116
|
```bash
|
|
117
117
|
cd apps/api
|
|
118
|
-
|
|
118
|
+
{{addCommand}} pg @types/pg @aws-sdk/client-secrets-manager
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
2. The template includes example connection code in `apps/api/index.ts`
|
|
@@ -141,7 +141,7 @@ Credentials are stored in AWS Secrets Manager. The secret contains:
|
|
|
141
141
|
To use serverless Aurora instead of provisioned RDS, update `cdk/app.ts`:
|
|
142
142
|
|
|
143
143
|
```typescript
|
|
144
|
-
new LambdaPostgresApi(stack, '{{appName}}Api', {
|
|
144
|
+
new LambdaPostgresApi(stack as any, '{{appName}}Api', {
|
|
145
145
|
...context,
|
|
146
146
|
serverless: true, // Enable serverless Aurora
|
|
147
147
|
});
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* by the CDK construct.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import type { APIGWV1Payload } from '@phila/philaroute/dist/
|
|
15
|
+
import type { APIGWV1Payload } from '@phila/philaroute/dist/aws';
|
|
16
16
|
import type { RestAccumulator } from '@phila/philaroute/dist/types';
|
|
17
17
|
import { Router, http, validate } from '@phila/philaroute';
|
|
18
18
|
import { getPool } from '@phila/db-postgres';
|
|
@@ -37,14 +37,13 @@ const stack = new Stack(app, '{{appName}}-' + environment, {
|
|
|
37
37
|
stackName: '{{appName}}-' + environment,
|
|
38
38
|
});
|
|
39
39
|
|
|
40
|
-
//
|
|
41
|
-
new StaticSite(stack, '{{appName}}Site', {
|
|
40
|
+
// Scope as any so linked @phila/constructs resolves to a single Construct type at runtime.
|
|
41
|
+
new StaticSite(stack as any, '{{appName}}Site', {
|
|
42
42
|
...context,
|
|
43
43
|
assetDir: '../frontend/dist',
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
-
|
|
47
|
-
new LambdaPostgresApi(stack, '{{appName}}Api', {
|
|
46
|
+
new LambdaPostgresApi(stack as any, '{{appName}}Api', {
|
|
48
47
|
...context,
|
|
49
48
|
apiId: 'api',
|
|
50
49
|
runtime: 'nodejs20',
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
"private": true,
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "{{buildCommand}}",
|
|
8
|
-
"build:frontend": "cd frontend &&
|
|
9
|
-
"build:api": "cd apps/api &&
|
|
10
|
-
"dev": "cd frontend &&
|
|
8
|
+
"build:frontend": "cd frontend && {{runScriptPrefix}} build",
|
|
9
|
+
"build:api": "cd apps/api && {{runScriptPrefix}} build",
|
|
10
|
+
"dev": "cd frontend && {{runScriptPrefix}} dev",
|
|
11
11
|
"test": "{{testCommand}}",
|
|
12
12
|
"synth": "cd cdk && cdk synth",
|
|
13
13
|
"deploy": "cd cdk && cdk deploy",
|
|
@@ -21,5 +21,8 @@
|
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "^20.10.0",
|
|
23
23
|
"typescript": "^5.3.0"
|
|
24
|
+
},
|
|
25
|
+
"overrides": {
|
|
26
|
+
"constructs": "10.4.4"
|
|
24
27
|
}
|
|
25
28
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns env for running install in a project. If
|
|
2
|
+
* Returns env for running install in a project. If project root .npmrc exists,
|
|
3
3
|
* sets NPM_CONFIG_USERCONFIG. If that file references NPM_FONTAWESOME_TOKEN
|
|
4
4
|
* and the token is not in the environment, prompts for it.
|
|
5
5
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// ABOUTME: Prepares env for project install (
|
|
2
|
+
// ABOUTME: Prepares env for project install (root .npmrc and Font Awesome token)
|
|
3
3
|
// ABOUTME: Used by validate, init, and deploy when running install
|
|
4
4
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
5
|
if (k2 === undefined) k2 = k;
|
|
@@ -43,17 +43,17 @@ const fs = __importStar(require("fs"));
|
|
|
43
43
|
const path = __importStar(require("path"));
|
|
44
44
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
45
45
|
/**
|
|
46
|
-
* Returns env for running install in a project. If
|
|
46
|
+
* Returns env for running install in a project. If project root .npmrc exists,
|
|
47
47
|
* sets NPM_CONFIG_USERCONFIG. If that file references NPM_FONTAWESOME_TOKEN
|
|
48
48
|
* and the token is not in the environment, prompts for it.
|
|
49
49
|
*/
|
|
50
50
|
async function prepareInstallEnv(projectDir) {
|
|
51
|
-
const
|
|
52
|
-
if (!fs.existsSync(
|
|
51
|
+
const rootNpmrc = path.join(projectDir, '.npmrc');
|
|
52
|
+
if (!fs.existsSync(rootNpmrc)) {
|
|
53
53
|
return process.env;
|
|
54
54
|
}
|
|
55
|
-
let installEnv = { ...process.env, NPM_CONFIG_USERCONFIG:
|
|
56
|
-
const npmrcContent = fs.readFileSync(
|
|
55
|
+
let installEnv = { ...process.env, NPM_CONFIG_USERCONFIG: rootNpmrc };
|
|
56
|
+
const npmrcContent = fs.readFileSync(rootNpmrc, 'utf-8');
|
|
57
57
|
if (npmrcContent.includes('NPM_FONTAWESOME_TOKEN') && !process.env.NPM_FONTAWESOME_TOKEN) {
|
|
58
58
|
const { token } = await inquirer_1.default.prompt([
|
|
59
59
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-env.js","sourceRoot":"","sources":["../../src/utils/install-env.ts"],"names":[],"mappings":";AAAA,
|
|
1
|
+
{"version":3,"file":"install-env.js","sourceRoot":"","sources":["../../src/utils/install-env.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,mEAAmE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWnE,8CAoBC;AA7BD,uCAAyB;AACzB,2CAA6B;AAC7B,wDAAgC;AAEhC;;;;GAIG;AACI,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CAAC,GAAG,CAAC;IACrB,CAAC;IACD,IAAI,UAAU,GAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,EAAE,SAAS,EAAE,CAAC;IACzF,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACzD,IAAI,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACzF,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAoB;YACzD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,+EAA+E;gBACxF,QAAQ,EAAE,CAAC,CAAS,EAAE,EAAE,CACtB,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,8CAA8C;aACvF;SACF,CAAC,CAAC;QACH,UAAU,GAAG,EAAE,GAAG,UAAU,EAAE,qBAAqB,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
export type PackageManager = 'npm' | 'pnpm' | 'yarn';
|
|
2
2
|
/**
|
|
3
|
-
* Detects which package manager is being used in a directory
|
|
4
|
-
*
|
|
3
|
+
* Detects which package manager is being used in a directory.
|
|
4
|
+
* Lock files take precedence (they indicate which manager was used to install).
|
|
5
|
+
* pnpm-workspace.yaml is only used when no lock file exists (e.g. template default).
|
|
5
6
|
*/
|
|
6
7
|
export declare function detectPackageManager(dir: string): PackageManager;
|
|
8
|
+
/**
|
|
9
|
+
* Resolves package manager: uses config.packageManager when set and valid,
|
|
10
|
+
* otherwise detects from lock files in dir.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolvePackageManager(config: {
|
|
13
|
+
packageManager?: string;
|
|
14
|
+
} | null, dir: string): PackageManager;
|
|
7
15
|
/**
|
|
8
16
|
* Gets the install command for a package manager
|
|
9
17
|
*/
|
|
@@ -26,6 +34,30 @@ export declare function getWorkspaceBuildCommand(pm: PackageManager, script?: st
|
|
|
26
34
|
* (runs test script across all workspaces, with --if-present support for npm)
|
|
27
35
|
*/
|
|
28
36
|
export declare function getWorkspaceTestCommand(pm: PackageManager, ifPresent?: boolean): string;
|
|
37
|
+
/**
|
|
38
|
+
* Gets the command to run a local binary (exec equivalent).
|
|
39
|
+
* Use for e.g. tsc, ts-node: getExecCommand(pm) + ' tsc'
|
|
40
|
+
*/
|
|
41
|
+
export declare function getExecCommand(pm: PackageManager): string;
|
|
42
|
+
/**
|
|
43
|
+
* Gets the prefix to run a script (e.g. "pnpm run") for use in shell commands.
|
|
44
|
+
* Use for e.g. "cd frontend && " + getRunScriptPrefix(pm) + " build"
|
|
45
|
+
*/
|
|
46
|
+
export declare function getRunScriptPrefix(pm: PackageManager): string;
|
|
47
|
+
/**
|
|
48
|
+
* Gets the CI install command (frozen lockfile, no update).
|
|
49
|
+
* Use in Dockerfiles and CI for reproducible installs.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getCiCommand(pm: PackageManager): string;
|
|
52
|
+
/**
|
|
53
|
+
* Gets the CI install command for production dependencies only.
|
|
54
|
+
*/
|
|
55
|
+
export declare function getCiProdCommand(pm: PackageManager): string;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the lockfile name for the package manager.
|
|
58
|
+
* Use in Dockerfile COPY so the right lockfile is included.
|
|
59
|
+
*/
|
|
60
|
+
export declare function getLockfileName(pm: PackageManager): string;
|
|
29
61
|
/**
|
|
30
62
|
* Gets the CDK command for a package manager
|
|
31
63
|
* Returns the command to run CDK from the local node_modules
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD
|
|
1
|
+
{"version":3,"file":"package-manager.d.ts","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;AAErD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAYhE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,EAC1C,GAAG,EAAE,MAAM,GACV,cAAc,CAMhB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAU5D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAUxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAW3E;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAWpF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,cAAc,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,CAUvF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAUzD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAU7D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAUvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAU3D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAU1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,CAUxD"}
|
|
@@ -36,38 +36,51 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
36
36
|
})();
|
|
37
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
38
|
exports.detectPackageManager = detectPackageManager;
|
|
39
|
+
exports.resolvePackageManager = resolvePackageManager;
|
|
39
40
|
exports.getInstallCommand = getInstallCommand;
|
|
40
41
|
exports.getAddCommand = getAddCommand;
|
|
41
42
|
exports.getBuildCommand = getBuildCommand;
|
|
42
43
|
exports.getWorkspaceBuildCommand = getWorkspaceBuildCommand;
|
|
43
44
|
exports.getWorkspaceTestCommand = getWorkspaceTestCommand;
|
|
45
|
+
exports.getExecCommand = getExecCommand;
|
|
46
|
+
exports.getRunScriptPrefix = getRunScriptPrefix;
|
|
47
|
+
exports.getCiCommand = getCiCommand;
|
|
48
|
+
exports.getCiProdCommand = getCiProdCommand;
|
|
49
|
+
exports.getLockfileName = getLockfileName;
|
|
44
50
|
exports.getCdkCommand = getCdkCommand;
|
|
45
51
|
const path = __importStar(require("path"));
|
|
46
52
|
const fs = __importStar(require("fs-extra"));
|
|
47
53
|
/**
|
|
48
|
-
* Detects which package manager is being used in a directory
|
|
49
|
-
*
|
|
54
|
+
* Detects which package manager is being used in a directory.
|
|
55
|
+
* Lock files take precedence (they indicate which manager was used to install).
|
|
56
|
+
* pnpm-workspace.yaml is only used when no lock file exists (e.g. template default).
|
|
50
57
|
*/
|
|
51
58
|
function detectPackageManager(dir) {
|
|
52
|
-
|
|
59
|
+
const npmLock = path.join(dir, 'package-lock.json');
|
|
53
60
|
const pnpmLock = path.join(dir, 'pnpm-lock.yaml');
|
|
61
|
+
const yarnLock = path.join(dir, 'yarn.lock');
|
|
54
62
|
const pnpmWorkspace = path.join(dir, 'pnpm-workspace.yaml');
|
|
55
|
-
if (fs.existsSync(
|
|
63
|
+
if (fs.existsSync(npmLock))
|
|
64
|
+
return 'npm';
|
|
65
|
+
if (fs.existsSync(pnpmLock))
|
|
56
66
|
return 'pnpm';
|
|
57
|
-
|
|
58
|
-
// Check for yarn lock file
|
|
59
|
-
const yarnLock = path.join(dir, 'yarn.lock');
|
|
60
|
-
if (fs.existsSync(yarnLock)) {
|
|
67
|
+
if (fs.existsSync(yarnLock))
|
|
61
68
|
return 'yarn';
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const npmLock = path.join(dir, 'package-lock.json');
|
|
65
|
-
if (fs.existsSync(npmLock)) {
|
|
66
|
-
return 'npm';
|
|
67
|
-
}
|
|
68
|
-
// Default to npm if no lock file found
|
|
69
|
+
if (fs.existsSync(pnpmWorkspace))
|
|
70
|
+
return 'pnpm';
|
|
69
71
|
return 'npm';
|
|
70
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Resolves package manager: uses config.packageManager when set and valid,
|
|
75
|
+
* otherwise detects from lock files in dir.
|
|
76
|
+
*/
|
|
77
|
+
function resolvePackageManager(config, dir) {
|
|
78
|
+
const configured = config?.packageManager;
|
|
79
|
+
if (configured === 'npm' || configured === 'pnpm' || configured === 'yarn') {
|
|
80
|
+
return configured;
|
|
81
|
+
}
|
|
82
|
+
return detectPackageManager(dir);
|
|
83
|
+
}
|
|
71
84
|
/**
|
|
72
85
|
* Gets the install command for a package manager
|
|
73
86
|
*/
|
|
@@ -142,6 +155,80 @@ function getWorkspaceTestCommand(pm, ifPresent) {
|
|
|
142
155
|
return `npm test --workspaces${ifPresent ? ' --if-present' : ''}`;
|
|
143
156
|
}
|
|
144
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Gets the command to run a local binary (exec equivalent).
|
|
160
|
+
* Use for e.g. tsc, ts-node: getExecCommand(pm) + ' tsc'
|
|
161
|
+
*/
|
|
162
|
+
function getExecCommand(pm) {
|
|
163
|
+
switch (pm) {
|
|
164
|
+
case 'pnpm':
|
|
165
|
+
return 'pnpm exec';
|
|
166
|
+
case 'yarn':
|
|
167
|
+
return 'yarn exec';
|
|
168
|
+
case 'npm':
|
|
169
|
+
default:
|
|
170
|
+
return 'npx';
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Gets the prefix to run a script (e.g. "pnpm run") for use in shell commands.
|
|
175
|
+
* Use for e.g. "cd frontend && " + getRunScriptPrefix(pm) + " build"
|
|
176
|
+
*/
|
|
177
|
+
function getRunScriptPrefix(pm) {
|
|
178
|
+
switch (pm) {
|
|
179
|
+
case 'pnpm':
|
|
180
|
+
return 'pnpm run';
|
|
181
|
+
case 'yarn':
|
|
182
|
+
return 'yarn run';
|
|
183
|
+
case 'npm':
|
|
184
|
+
default:
|
|
185
|
+
return 'npm run';
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Gets the CI install command (frozen lockfile, no update).
|
|
190
|
+
* Use in Dockerfiles and CI for reproducible installs.
|
|
191
|
+
*/
|
|
192
|
+
function getCiCommand(pm) {
|
|
193
|
+
switch (pm) {
|
|
194
|
+
case 'pnpm':
|
|
195
|
+
return 'pnpm install --frozen-lockfile';
|
|
196
|
+
case 'yarn':
|
|
197
|
+
return 'yarn install --frozen-lockfile';
|
|
198
|
+
case 'npm':
|
|
199
|
+
default:
|
|
200
|
+
return 'npm ci';
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Gets the CI install command for production dependencies only.
|
|
205
|
+
*/
|
|
206
|
+
function getCiProdCommand(pm) {
|
|
207
|
+
switch (pm) {
|
|
208
|
+
case 'pnpm':
|
|
209
|
+
return 'pnpm install --frozen-lockfile --prod';
|
|
210
|
+
case 'yarn':
|
|
211
|
+
return 'yarn install --frozen-lockfile --production';
|
|
212
|
+
case 'npm':
|
|
213
|
+
default:
|
|
214
|
+
return 'npm ci --omit=dev';
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Gets the lockfile name for the package manager.
|
|
219
|
+
* Use in Dockerfile COPY so the right lockfile is included.
|
|
220
|
+
*/
|
|
221
|
+
function getLockfileName(pm) {
|
|
222
|
+
switch (pm) {
|
|
223
|
+
case 'pnpm':
|
|
224
|
+
return 'pnpm-lock.yaml';
|
|
225
|
+
case 'yarn':
|
|
226
|
+
return 'yarn.lock';
|
|
227
|
+
case 'npm':
|
|
228
|
+
default:
|
|
229
|
+
return 'package-lock.json';
|
|
230
|
+
}
|
|
231
|
+
}
|
|
145
232
|
/**
|
|
146
233
|
* Gets the CDK command for a package manager
|
|
147
234
|
* Returns the command to run CDK from the local node_modules
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,iEAAiE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"package-manager.js","sourceRoot":"","sources":["../../src/utils/package-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/template.d.ts
CHANGED
|
@@ -19,6 +19,13 @@ export interface TemplateVariables {
|
|
|
19
19
|
packageManager: string;
|
|
20
20
|
buildCommand: string;
|
|
21
21
|
testCommand: string;
|
|
22
|
+
execCommand: string;
|
|
23
|
+
runScriptPrefix: string;
|
|
24
|
+
installCommand: string;
|
|
25
|
+
addCommand: string;
|
|
26
|
+
ciCommand: string;
|
|
27
|
+
ciProdCommand: string;
|
|
28
|
+
lockfileName: string;
|
|
22
29
|
}
|
|
23
30
|
/**
|
|
24
31
|
* Copy a template file or directory to a destination, applying variable substitutions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAaf"}
|
package/dist/utils/template.js
CHANGED
|
@@ -121,7 +121,14 @@ function applyVariables(content, variables) {
|
|
|
121
121
|
.replace(/\{\{prodVpc\}\}/g, variables.prodVpc)
|
|
122
122
|
.replace(/\{\{packageManager\}\}/g, variables.packageManager)
|
|
123
123
|
.replace(/\{\{buildCommand\}\}/g, variables.buildCommand)
|
|
124
|
-
.replace(/\{\{testCommand\}\}/g, variables.testCommand)
|
|
124
|
+
.replace(/\{\{testCommand\}\}/g, variables.testCommand)
|
|
125
|
+
.replace(/\{\{execCommand\}\}/g, variables.execCommand)
|
|
126
|
+
.replace(/\{\{runScriptPrefix\}\}/g, variables.runScriptPrefix)
|
|
127
|
+
.replace(/\{\{installCommand\}\}/g, variables.installCommand)
|
|
128
|
+
.replace(/\{\{addCommand\}\}/g, variables.addCommand)
|
|
129
|
+
.replace(/\{\{ciCommand\}\}/g, variables.ciCommand)
|
|
130
|
+
.replace(/\{\{ciProdCommand\}\}/g, variables.ciProdCommand)
|
|
131
|
+
.replace(/\{\{lockfileName\}\}/g, variables.lockfileName);
|
|
125
132
|
}
|
|
126
133
|
/**
|
|
127
134
|
* Replace __variable__ patterns in paths (for directory names)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,qEAAqE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"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"}
|