skuba 14.0.0-node-24-20251205044715 → 14.0.0-node-24-20251209021412
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/lib/cli/migrate/index.js +3 -3
- package/lib/cli/migrate/index.js.map +1 -1
- package/lib/cli/migrate/nodeVersion/checks.js +6 -3
- package/lib/cli/migrate/nodeVersion/checks.js.map +2 -2
- package/lib/cli/migrate/nodeVersion/index.d.ts +2 -2
- package/lib/cli/migrate/nodeVersion/index.js +9 -9
- package/lib/cli/migrate/nodeVersion/index.js.map +1 -1
- package/lib/cli/migrate/nodeVersion/upgrade.js +42 -13
- package/lib/cli/migrate/nodeVersion/upgrade.js.map +2 -2
- package/package.json +4 -4
- package/template/express-rest-api/package.json +1 -1
- package/template/greeter/package.json +2 -2
- package/template/koa-rest-api/package.json +1 -1
- package/template/lambda-sqs-worker-cdk/package.json +4 -4
- package/template/private-npm-package/_package.json +1 -1
package/lib/cli/migrate/index.js
CHANGED
|
@@ -29,21 +29,21 @@ const migrations = {
|
|
|
29
29
|
nodeVersion: "20",
|
|
30
30
|
ECMAScriptVersion: "ES2023",
|
|
31
31
|
packageNodeVersion: "16",
|
|
32
|
-
|
|
32
|
+
packageECMAScriptVersion: "ES2021",
|
|
33
33
|
infraPackages: []
|
|
34
34
|
}),
|
|
35
35
|
node22: () => (0, import_nodeVersion.nodeVersionMigration)({
|
|
36
36
|
nodeVersion: "22",
|
|
37
37
|
ECMAScriptVersion: "ES2024",
|
|
38
38
|
packageNodeVersion: "18",
|
|
39
|
-
|
|
39
|
+
packageECMAScriptVersion: "ES2022",
|
|
40
40
|
infraPackages: []
|
|
41
41
|
}),
|
|
42
42
|
node24: () => (0, import_nodeVersion.nodeVersionMigration)({
|
|
43
43
|
nodeVersion: "24",
|
|
44
44
|
ECMAScriptVersion: "ES2024",
|
|
45
45
|
packageNodeVersion: "20",
|
|
46
|
-
|
|
46
|
+
packageECMAScriptVersion: "ES2023",
|
|
47
47
|
infraPackages: [
|
|
48
48
|
{
|
|
49
49
|
name: "aws-cdk-lib",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/cli/migrate/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { log } from '../../utils/logging.js';\n\nimport { nodeVersionMigration } from './nodeVersion/index.js';\n\nexport const migrations = {\n node20: () =>\n nodeVersionMigration({\n nodeVersion: '20',\n ECMAScriptVersion: 'ES2023',\n packageNodeVersion: '16',\n
|
|
4
|
+
"sourcesContent": ["import { log } from '../../utils/logging.js';\n\nimport { nodeVersionMigration } from './nodeVersion/index.js';\n\nexport const migrations = {\n node20: () =>\n nodeVersionMigration({\n nodeVersion: '20',\n ECMAScriptVersion: 'ES2023',\n packageNodeVersion: '16',\n packageECMAScriptVersion: 'ES2021',\n infraPackages: [],\n }),\n node22: () =>\n nodeVersionMigration({\n nodeVersion: '22',\n ECMAScriptVersion: 'ES2024',\n packageNodeVersion: '18',\n packageECMAScriptVersion: 'ES2022',\n infraPackages: [],\n }),\n node24: () =>\n nodeVersionMigration({\n nodeVersion: '24',\n ECMAScriptVersion: 'ES2024',\n packageNodeVersion: '20',\n packageECMAScriptVersion: 'ES2023',\n infraPackages: [\n {\n name: 'aws-cdk-lib',\n version: '2.224.0',\n },\n {\n name: 'datadog-cdk-constructs-v2',\n version: '3.4.0',\n },\n {\n name: 'osls',\n version: '3.61.0',\n },\n {\n name: 'serverless',\n version: '4.25.0',\n },\n {\n name: 'serverless-plugin-datadog',\n version: '5.114.0',\n },\n {\n name: '@types/node',\n version: '24.10.1',\n },\n ],\n }),\n} satisfies Record<string, () => Promise<void>>;\n\nconst logAvailableMigrations = () => {\n log.ok('Available migrations:');\n Object.keys(migrations).forEach((migration) => {\n log.ok(`- ${migration}`);\n });\n};\n\nexport const migrate = async (args = process.argv.slice(2)) => {\n if (!args[0]) {\n log.err('Provide a migration to run.');\n logAvailableMigrations();\n process.exitCode = 1;\n return;\n }\n\n if (args.includes('--help') || args.includes('-h') || args[0] === 'help') {\n logAvailableMigrations();\n return;\n }\n\n const migration = migrations[args[0] as keyof typeof migrations];\n\n if (!migration) {\n log.err(`Migration \"${args[0]}\" is not a valid option.`);\n logAvailableMigrations();\n process.exitCode = 1;\n return;\n }\n\n await migration();\n};\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AAEpB,yBAAqC;AAE9B,MAAM,aAAa;AAAA,EACxB,QAAQ,UACN,yCAAqB;AAAA,IACnB,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,eAAe,CAAC;AAAA,EAClB,CAAC;AAAA,EACH,QAAQ,UACN,yCAAqB;AAAA,IACnB,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,eAAe,CAAC;AAAA,EAClB,CAAC;AAAA,EACH,QAAQ,UACN,yCAAqB;AAAA,IACnB,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,oBAAoB;AAAA,IACpB,0BAA0B;AAAA,IAC1B,eAAe;AAAA,MACb;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AACL;AAEA,MAAM,yBAAyB,MAAM;AACnC,qBAAI,GAAG,uBAAuB;AAC9B,SAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,cAAc;AAC7C,uBAAI,GAAG,KAAK,SAAS,EAAE;AAAA,EACzB,CAAC;AACH;AAEO,MAAM,UAAU,OAAO,OAAO,QAAQ,KAAK,MAAM,CAAC,MAAM;AAC7D,MAAI,CAAC,KAAK,CAAC,GAAG;AACZ,uBAAI,IAAI,6BAA6B;AACrC,2BAAuB;AACvB,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,MAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,MAAM,QAAQ;AACxE,2BAAuB;AACvB;AAAA,EACF;AAEA,QAAM,YAAY,WAAW,KAAK,CAAC,CAA4B;AAE/D,MAAI,CAAC,WAAW;AACd,uBAAI,IAAI,cAAc,KAAK,CAAC,CAAC,0BAA0B;AACvD,2BAAuB;AACvB,YAAQ,WAAW;AACnB;AAAA,EACF;AAEA,QAAM,UAAU;AAClB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -46,15 +46,18 @@ const isLikelyPackage = async (currentPath) => {
|
|
|
46
46
|
if (typeof packageJson.exports === "object") {
|
|
47
47
|
return true;
|
|
48
48
|
}
|
|
49
|
+
if (packageJson.private === true) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
if (packageJson.publishConfig) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
49
55
|
if (typeof packageJson.types === "string") {
|
|
50
56
|
return true;
|
|
51
57
|
}
|
|
52
58
|
if (typeof packageJson.module === "string") {
|
|
53
59
|
return true;
|
|
54
60
|
}
|
|
55
|
-
if (packageJson.private === true) {
|
|
56
|
-
return false;
|
|
57
|
-
}
|
|
58
61
|
return false;
|
|
59
62
|
};
|
|
60
63
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/migrate/nodeVersion/checks.ts"],
|
|
4
|
-
"sourcesContent": ["import { log } from '../../../utils/logging.js';\nimport { getConsumerManifest } from '../../../utils/manifest.js';\nimport type { SkubaPackageJson } from '../../init/writePackageJson.js';\n\nexport const isLikelyPackage = async (\n currentPath: string,\n): Promise<boolean> => {\n const nearestPackageJsonResult = await getConsumerManifest(currentPath);\n if (!nearestPackageJsonResult) {\n log.warn('package.json not found');\n return false;\n }\n\n const { packageJson } = nearestPackageJsonResult;\n\n const type = (packageJson.skuba as SkubaPackageJson)?.type;\n\n if (type === 'application') {\n return false;\n }\n\n if (type === 'package') {\n return true;\n }\n\n if (typeof packageJson.sideEffects === 'boolean') {\n return true;\n }\n\n if (\n typeof packageJson.types === 'string' &&\n typeof packageJson.module === 'string' &&\n typeof packageJson.main === 'string'\n ) {\n return true;\n }\n\n if (typeof packageJson.exports === 'object') {\n return true;\n }\n\n if (
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAAoC;AAG7B,MAAM,kBAAkB,OAC7B,gBACqB;AACrB,QAAM,2BAA2B,UAAM,qCAAoB,WAAW;AACtE,MAAI,CAAC,0BAA0B;AAC7B,uBAAI,KAAK,wBAAwB;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,YAAY,IAAI;AAExB,QAAM,OAAQ,YAAY,OAA4B;AAEtD,MAAI,SAAS,eAAe;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,gBAAgB,WAAW;AAChD,WAAO;AAAA,EACT;AAEA,MACE,OAAO,YAAY,UAAU,YAC7B,OAAO,YAAY,WAAW,YAC9B,OAAO,YAAY,SAAS,UAC5B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,YAAY,UAAU;AAC3C,WAAO;AAAA,EACT;
|
|
4
|
+
"sourcesContent": ["import { log } from '../../../utils/logging.js';\nimport { getConsumerManifest } from '../../../utils/manifest.js';\nimport type { SkubaPackageJson } from '../../init/writePackageJson.js';\n\nexport const isLikelyPackage = async (\n currentPath: string,\n): Promise<boolean> => {\n const nearestPackageJsonResult = await getConsumerManifest(currentPath);\n if (!nearestPackageJsonResult) {\n log.warn('package.json not found');\n return false;\n }\n\n const { packageJson } = nearestPackageJsonResult;\n\n const type = (packageJson.skuba as SkubaPackageJson)?.type;\n\n if (type === 'application') {\n return false;\n }\n\n if (type === 'package') {\n return true;\n }\n\n if (typeof packageJson.sideEffects === 'boolean') {\n return true;\n }\n\n if (\n typeof packageJson.types === 'string' &&\n typeof packageJson.module === 'string' &&\n typeof packageJson.main === 'string'\n ) {\n return true;\n }\n\n if (typeof packageJson.exports === 'object') {\n return true;\n }\n\n // private true would imply this is either an internal package or application\n if (packageJson.private === true) {\n return false;\n }\n\n if (packageJson.publishConfig) {\n return true;\n }\n\n if (typeof packageJson.types === 'string') {\n return true;\n }\n\n if (typeof packageJson.module === 'string') {\n return true;\n }\n\n return false;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAAoC;AAG7B,MAAM,kBAAkB,OAC7B,gBACqB;AACrB,QAAM,2BAA2B,UAAM,qCAAoB,WAAW;AACtE,MAAI,CAAC,0BAA0B;AAC7B,uBAAI,KAAK,wBAAwB;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,YAAY,IAAI;AAExB,QAAM,OAAQ,YAAY,OAA4B;AAEtD,MAAI,SAAS,eAAe;AAC1B,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,WAAW;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,gBAAgB,WAAW;AAChD,WAAO;AAAA,EACT;AAEA,MACE,OAAO,YAAY,UAAU,YAC7B,OAAO,YAAY,WAAW,YAC9B,OAAO,YAAY,SAAS,UAC5B;AACA,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,YAAY,UAAU;AAC3C,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,YAAY,MAAM;AAChC,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,eAAe;AAC7B,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,UAAU,UAAU;AACzC,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,YAAY,WAAW,UAAU;AAC1C,WAAO;AAAA,EACT;AAEA,SAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export declare const nodeVersionMigration: ({ nodeVersion, ECMAScriptVersion, packageNodeVersion,
|
|
1
|
+
export declare const nodeVersionMigration: ({ nodeVersion, ECMAScriptVersion, packageNodeVersion, packageECMAScriptVersion, infraPackages, }: {
|
|
2
2
|
nodeVersion: string;
|
|
3
3
|
ECMAScriptVersion: string;
|
|
4
4
|
packageNodeVersion: string;
|
|
5
|
-
|
|
5
|
+
packageECMAScriptVersion: string;
|
|
6
6
|
infraPackages: Array<{
|
|
7
7
|
name: string;
|
|
8
8
|
version: string;
|
|
@@ -42,7 +42,7 @@ var import_upgrade = require("./upgrade.js");
|
|
|
42
42
|
const subPatches = ({
|
|
43
43
|
nodeVersion,
|
|
44
44
|
ECMAScriptVersion,
|
|
45
|
-
|
|
45
|
+
packageECMAScriptVersion,
|
|
46
46
|
packageNodeVersion
|
|
47
47
|
}) => [
|
|
48
48
|
{
|
|
@@ -183,13 +183,13 @@ const subPatches = ({
|
|
|
183
183
|
}
|
|
184
184
|
},
|
|
185
185
|
{
|
|
186
|
-
type: "
|
|
186
|
+
type: "ecmascript",
|
|
187
187
|
files: "**/tsconfig*.json",
|
|
188
188
|
regex: () => /("target":\s*")(ES\d+)"/gim,
|
|
189
189
|
replace: {
|
|
190
190
|
package: {
|
|
191
|
-
string: `$1${
|
|
192
|
-
version:
|
|
191
|
+
string: `$1${packageECMAScriptVersion}"`,
|
|
192
|
+
version: packageECMAScriptVersion,
|
|
193
193
|
captureGroup: 2
|
|
194
194
|
},
|
|
195
195
|
default: {
|
|
@@ -200,13 +200,13 @@ const subPatches = ({
|
|
|
200
200
|
}
|
|
201
201
|
},
|
|
202
202
|
{
|
|
203
|
-
type: "
|
|
203
|
+
type: "ecmascript",
|
|
204
204
|
files: "**/tsconfig*.json",
|
|
205
205
|
regex: () => /("lib":\s*\[)([\S\s]*?)(ES\d+)([\S\s]*?)(\])/gim,
|
|
206
206
|
replace: {
|
|
207
207
|
package: {
|
|
208
|
-
string: `$1$2${
|
|
209
|
-
version:
|
|
208
|
+
string: `$1$2${packageECMAScriptVersion}$4$5`,
|
|
209
|
+
version: packageECMAScriptVersion,
|
|
210
210
|
captureGroup: 3
|
|
211
211
|
},
|
|
212
212
|
default: {
|
|
@@ -290,7 +290,7 @@ const nodeVersionMigration = async ({
|
|
|
290
290
|
nodeVersion,
|
|
291
291
|
ECMAScriptVersion,
|
|
292
292
|
packageNodeVersion,
|
|
293
|
-
|
|
293
|
+
packageECMAScriptVersion,
|
|
294
294
|
infraPackages
|
|
295
295
|
}, dir = process.cwd()) => {
|
|
296
296
|
import_logging.log.ok(
|
|
@@ -303,7 +303,7 @@ const nodeVersionMigration = async ({
|
|
|
303
303
|
nodeVersion,
|
|
304
304
|
ECMAScriptVersion,
|
|
305
305
|
packageNodeVersion,
|
|
306
|
-
|
|
306
|
+
packageECMAScriptVersion
|
|
307
307
|
},
|
|
308
308
|
dir
|
|
309
309
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/migrate/nodeVersion/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\nimport { coerce, lt } from 'semver';\n\nimport { log } from '../../../utils/logging.js';\nimport { createDestinationFileReader } from '../../configure/analysis/project.js';\n\nimport { isLikelyPackage } from './checks.js';\nimport { tryUpgradeInfraPackages } from './upgrade.js';\n\ntype FileSelector =\n | { files: string; file?: never }\n | { file: string; files?: never };\n\ntype ReplaceOptions = {\n version: string;\n string: string;\n captureGroup: number;\n};\n\ntype SubPatch = FileSelector & {\n type: 'nodejs' | '
|
|
4
|
+
"sourcesContent": ["import { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\nimport { coerce, lt } from 'semver';\n\nimport { log } from '../../../utils/logging.js';\nimport { createDestinationFileReader } from '../../configure/analysis/project.js';\n\nimport { isLikelyPackage } from './checks.js';\nimport { tryUpgradeInfraPackages } from './upgrade.js';\n\ntype FileSelector =\n | { files: string; file?: never }\n | { file: string; files?: never };\n\ntype ReplaceOptions = {\n version: string;\n string: string;\n captureGroup: number;\n};\n\ntype SubPatch = FileSelector & {\n type: 'nodejs' | 'ecmascript';\n regex: () => RegExp;\n replace: {\n package?: ReplaceOptions;\n default: ReplaceOptions;\n };\n};\n\nconst subPatches = ({\n nodeVersion,\n ECMAScriptVersion,\n packageECMAScriptVersion,\n packageNodeVersion,\n}: Versions): SubPatch[] => [\n {\n type: 'nodejs',\n file: '.nvmrc',\n regex: () => /.*([0-9.]+).*/gm,\n replace: {\n default: {\n captureGroup: 1,\n string: nodeVersion,\n version: nodeVersion,\n },\n },\n },\n {\n type: 'nodejs',\n files: '**/Dockerfile*',\n\n regex: () =>\n /^FROM(.*) (public.ecr.aws\\/docker\\/library\\/)?node:([0-9]+(?:\\.[0-9]+(?:\\.[0-9]+)?)?)(-[a-z0-9]+)?(@sha256:[a-f0-9]{64})?( .*)?$/gm,\n replace: {\n default: {\n captureGroup: 3,\n string: `FROM$1 $2node:${nodeVersion}$4$6`,\n version: nodeVersion,\n },\n },\n },\n {\n type: 'nodejs',\n files: '**/Dockerfile*',\n regex: () =>\n /^FROM(.*) gcr.io\\/distroless\\/nodejs(\\d+)-debian(\\d+)(@sha256:[a-f0-9]{64})?(\\.[^- \\n]+)?(-[^ \\n]+)?( .+|)$/gm,\n replace: {\n default: {\n captureGroup: 2,\n string: `FROM$1 gcr.io/distroless/nodejs${nodeVersion}-debian$3$6$7`,\n version: nodeVersion,\n },\n },\n },\n\n {\n type: 'nodejs',\n files: '**/serverless*.y*ml',\n regex: () => /\\bnodejs(\\d+).x\\b/gm,\n replace: {\n default: {\n captureGroup: 1,\n string: `nodejs${nodeVersion}.x`,\n version: nodeVersion,\n },\n },\n },\n {\n type: 'nodejs',\n files: '**/serverless*.y*ml',\n regex: () => /\\bnode(\\d+)\\b/gm,\n replace: {\n default: {\n captureGroup: 1,\n string: `node${nodeVersion}`,\n version: nodeVersion,\n },\n },\n },\n\n {\n type: 'nodejs',\n files: '**/infra/**/*.ts',\n regex: () => /NODEJS_(\\d+)_X/g,\n replace: {\n default: {\n captureGroup: 1,\n string: `NODEJS_${nodeVersion}_X`,\n version: nodeVersion,\n },\n },\n },\n {\n type: 'nodejs',\n files: '**/infra/**/*.ts',\n regex: () => /(target:\\s*'node)(\\d+)(.+)$/gm,\n replace: {\n default: {\n captureGroup: 2,\n string: `$1${nodeVersion}$3`,\n version: nodeVersion,\n },\n },\n },\n\n {\n type: 'nodejs',\n files: '**/.buildkite/*',\n regex: () =>\n /(image: )(public.ecr.aws\\/docker\\/library\\/)?(node:)([0-9.]+)(\\.[^- \\n]+)?(-[^ \\n]+)?$/gm,\n replace: {\n default: {\n captureGroup: 4,\n string: `$1$2$3${nodeVersion}$5$6`,\n version: nodeVersion,\n },\n },\n },\n {\n type: 'nodejs',\n files: '.node-version*',\n regex: () => /(\\d+(?:\\.\\d+)*)/g,\n replace: {\n default: {\n captureGroup: 1,\n string: `${nodeVersion}`,\n version: nodeVersion,\n },\n },\n },\n\n {\n type: 'nodejs',\n files: '**/package.json',\n regex: () =>\n /([\"']engines[\"']:\\s*{[\\s\\S]*?[\"']node[\"']:\\s*[\"']>=)(\\d+(?:\\.\\d+)*)(['\"]\\s*})/gm,\n replace: {\n package: {\n string: `$1${packageNodeVersion}$3`,\n version: packageNodeVersion,\n captureGroup: 2,\n },\n default: {\n string: `$1${nodeVersion}$3`,\n version: nodeVersion,\n captureGroup: 2,\n },\n },\n },\n {\n type: 'nodejs',\n files: '**/docker-compose*.y*ml',\n regex: () =>\n /(image: )(public.ecr.aws\\/docker\\/library\\/)?(node:)([0-9.]+)(\\.[^- \\n]+)?(-[^ \\n]+)?$/gm,\n\n replace: {\n default: {\n captureGroup: 4,\n string: `$1$2$3${nodeVersion}$5$6`,\n version: nodeVersion,\n },\n },\n },\n {\n type: 'ecmascript',\n files: '**/tsconfig*.json',\n regex: () => /(\"target\":\\s*\")(ES\\d+)\"/gim,\n replace: {\n package: {\n string: `$1${packageECMAScriptVersion}\"`,\n version: packageECMAScriptVersion,\n captureGroup: 2,\n },\n default: {\n string: `$1${ECMAScriptVersion}\"`,\n version: ECMAScriptVersion,\n captureGroup: 2,\n },\n },\n },\n {\n type: 'ecmascript',\n files: '**/tsconfig*.json',\n regex: () => /(\"lib\":\\s*\\[)([\\S\\s]*?)(ES\\d+)([\\S\\s]*?)(\\])/gim,\n replace: {\n package: {\n string: `$1$2${packageECMAScriptVersion}$4$5`,\n version: packageECMAScriptVersion,\n captureGroup: 3,\n },\n default: {\n string: `$1$2${ECMAScriptVersion}$4$5`,\n version: ECMAScriptVersion,\n captureGroup: 3,\n },\n },\n },\n];\n\ntype Versions = {\n nodeVersion: string;\n ECMAScriptVersion: string;\n packageNodeVersion: string;\n packageECMAScriptVersion: string;\n};\n\nconst getTemplatedReplace = async (\n path: string,\n replace: SubPatch['replace'],\n): Promise<ReplaceOptions> => {\n if (!replace.package) {\n return replace.default;\n }\n\n const isPackage = await isLikelyPackage(path);\n\n if (isPackage) {\n return replace.package;\n }\n\n return replace.default;\n};\n\nconst runSubPatch = async (dir: string, patch: SubPatch) => {\n const readFile = createDestinationFileReader(dir);\n const paths = patch.file\n ? [patch.file]\n : await glob(patch.files ?? [], {\n cwd: dir,\n ignore: ['**/node_modules/**'],\n });\n\n await Promise.all(\n paths.map(async (path) => {\n const contents = await readFile(path);\n if (!contents) {\n return;\n }\n\n const regexResult = patch.regex().exec(contents);\n\n if (!regexResult) {\n return;\n }\n\n const templateReplace = await getTemplatedReplace(path, patch.replace);\n\n if (\n !lessThan(\n regexResult[templateReplace.captureGroup] as string,\n templateReplace.version,\n )\n ) {\n return;\n }\n\n await writePatchedContents({\n path,\n contents,\n templated: templateReplace.string,\n regex: patch.regex,\n });\n }),\n );\n};\n\nconst lessThan = (versionA: string, versionB: string) => {\n if (versionA.toLowerCase().startsWith('es')) {\n return Number(versionA.slice(2)) < Number(versionB.slice(2));\n }\n\n const coersedA = coerce(versionA);\n const coersedB = coerce(versionB);\n\n if (!coersedA || !coersedB) {\n throw new Error(\n `Unable to coerce versions for comparison: \"${versionA}\" and \"${versionB}\"`,\n );\n }\n\n return lt(coersedA, coersedB);\n};\n\nconst writePatchedContents = async ({\n path,\n contents,\n templated,\n regex,\n}: {\n path: string;\n contents: string;\n templated: string;\n regex: () => RegExp;\n}) => {\n const modified = contents.replaceAll(regex(), templated);\n await fs.promises.writeFile(path, modified);\n};\n\nconst upgrade = async (versions: Versions, dir: string) => {\n for (const subPatch of subPatches(versions)) {\n await runSubPatch(dir, subPatch);\n }\n};\n\nexport const nodeVersionMigration = async (\n {\n nodeVersion,\n ECMAScriptVersion,\n packageNodeVersion,\n packageECMAScriptVersion,\n infraPackages,\n }: {\n nodeVersion: string;\n ECMAScriptVersion: string;\n packageNodeVersion: string;\n packageECMAScriptVersion: string;\n infraPackages: Array<{ name: string; version: string }>;\n },\n dir = process.cwd(),\n) => {\n log.ok(\n `Upgrading project to Node.js ${nodeVersion} and package targets to Node.js ${packageNodeVersion}`,\n );\n\n try {\n await tryUpgradeInfraPackages('format', infraPackages);\n await upgrade(\n {\n nodeVersion,\n ECMAScriptVersion,\n packageNodeVersion,\n packageECMAScriptVersion,\n },\n dir,\n );\n\n log.ok(\n `Upgraded project to Node.js ${nodeVersion} and package targets to Node.js ${packageNodeVersion}`,\n );\n } catch (error) {\n log.err('Failed to upgrade');\n log.subtle(inspect(error));\n process.exitCode = 1;\n }\n};\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["fs"]
|
|
7
7
|
}
|
|
@@ -39,10 +39,32 @@ var import_semver = require("semver");
|
|
|
39
39
|
var import_exec = require("../../../utils/exec.js");
|
|
40
40
|
var import_logging = require("../../../utils/logging.js");
|
|
41
41
|
var import_packageManager = require("../../../utils/packageManager.js");
|
|
42
|
-
const packageVersionRegex = (packageName) => new RegExp(`"${packageName}"\\s*:\\s*"([^"]+)"`, "g");
|
|
43
|
-
const yamlPackageVersionRegex = (packageName) => new RegExp(
|
|
42
|
+
const packageVersionRegex = (packageName) => new RegExp(`"\\b${packageName}\\b"\\s*:\\s*"([^"]+)"`, "g");
|
|
43
|
+
const yamlPackageVersionRegex = (packageName) => new RegExp(`\\b${packageName}\\b:\\s*([^\\s]+)`, "g");
|
|
44
|
+
const normalizeVersionRange = (currentVersion, newVersion) => {
|
|
45
|
+
if (currentVersion.startsWith("^")) {
|
|
46
|
+
return `^${newVersion}`;
|
|
47
|
+
}
|
|
48
|
+
if (currentVersion.startsWith("~")) {
|
|
49
|
+
return `~${newVersion}`;
|
|
50
|
+
}
|
|
51
|
+
if (currentVersion.startsWith(">=") || currentVersion.startsWith(">") || currentVersion.startsWith("<=") || currentVersion.startsWith("<")) {
|
|
52
|
+
return `^${newVersion}`;
|
|
53
|
+
}
|
|
54
|
+
if (currentVersion.includes("x") || currentVersion.includes("X")) {
|
|
55
|
+
return `^${newVersion}`;
|
|
56
|
+
}
|
|
57
|
+
if (currentVersion.includes(" - ")) {
|
|
58
|
+
return `^${newVersion}`;
|
|
59
|
+
}
|
|
60
|
+
const coercedCurrent = (0, import_semver.coerce)(currentVersion);
|
|
61
|
+
if (coercedCurrent && (0, import_semver.lt)(coercedCurrent, newVersion)) {
|
|
62
|
+
return newVersion;
|
|
63
|
+
}
|
|
64
|
+
return currentVersion;
|
|
65
|
+
};
|
|
44
66
|
const upgradeInfraPackages = async (mode, packages) => {
|
|
45
|
-
const [packageJsonPaths,
|
|
67
|
+
const [packageJsonPaths, pnpmWorkspacePaths] = await Promise.all([
|
|
46
68
|
(0, import_fast_glob.glob)(["**/package.json"], {
|
|
47
69
|
ignore: ["**/.git", "**/node_modules"]
|
|
48
70
|
}),
|
|
@@ -50,10 +72,10 @@ const upgradeInfraPackages = async (mode, packages) => {
|
|
|
50
72
|
ignore: ["**/.git", "**/node_modules"]
|
|
51
73
|
})
|
|
52
74
|
]);
|
|
53
|
-
if (packageJsonPaths.length === 0 &&
|
|
75
|
+
if (packageJsonPaths.length === 0 && pnpmWorkspacePaths.length === 0) {
|
|
54
76
|
return {
|
|
55
77
|
result: "skip",
|
|
56
|
-
reason: "no package.json files found"
|
|
78
|
+
reason: "no package.json or pnpm-workspace.yaml files found"
|
|
57
79
|
};
|
|
58
80
|
}
|
|
59
81
|
const [packageJsons, pnpmWorkspaces] = await Promise.all([
|
|
@@ -67,7 +89,7 @@ const upgradeInfraPackages = async (mode, packages) => {
|
|
|
67
89
|
})
|
|
68
90
|
),
|
|
69
91
|
Promise.all(
|
|
70
|
-
|
|
92
|
+
pnpmWorkspacePaths.map(async (file) => {
|
|
71
93
|
const contents = await import_fs_extra.default.readFile(file, "utf8");
|
|
72
94
|
return {
|
|
73
95
|
file,
|
|
@@ -80,9 +102,14 @@ const upgradeInfraPackages = async (mode, packages) => {
|
|
|
80
102
|
const updated = packages.reduce((contents, packageName) => {
|
|
81
103
|
const regex = packageVersionRegex(packageName.name);
|
|
82
104
|
return contents.replaceAll(regex, (match, currentVersion) => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
105
|
+
if (currentVersion.startsWith("*") || currentVersion.startsWith("workspace:") || currentVersion.startsWith("link:") || currentVersion.startsWith("file:") || currentVersion.startsWith("catalog:")) {
|
|
106
|
+
return match;
|
|
107
|
+
}
|
|
108
|
+
const newVersion = normalizeVersionRange(
|
|
109
|
+
currentVersion,
|
|
110
|
+
packageName.version
|
|
111
|
+
);
|
|
112
|
+
return newVersion === currentVersion ? match : `"${packageName.name}":"${newVersion}"`;
|
|
86
113
|
});
|
|
87
114
|
}, file.contents);
|
|
88
115
|
return {
|
|
@@ -94,9 +121,11 @@ const upgradeInfraPackages = async (mode, packages) => {
|
|
|
94
121
|
const updated = packages.reduce((contents, packageName) => {
|
|
95
122
|
const regex = yamlPackageVersionRegex(packageName.name);
|
|
96
123
|
return contents.replace(regex, (match, currentVersion) => {
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
124
|
+
const newVersion = normalizeVersionRange(
|
|
125
|
+
currentVersion,
|
|
126
|
+
packageName.version
|
|
127
|
+
);
|
|
128
|
+
return newVersion === currentVersion ? match : `${packageName.name}: ${newVersion}`;
|
|
100
129
|
});
|
|
101
130
|
}, file.contents);
|
|
102
131
|
return {
|
|
@@ -123,7 +152,7 @@ const upgradeInfraPackages = async (mode, packages) => {
|
|
|
123
152
|
)
|
|
124
153
|
);
|
|
125
154
|
const packageManager = await (0, import_packageManager.detectPackageManager)();
|
|
126
|
-
await (0, import_exec.exec)(packageManager.command, "install", "--
|
|
155
|
+
await (0, import_exec.exec)(packageManager.command, "install", "--frozen-lockfile=false");
|
|
127
156
|
return {
|
|
128
157
|
result: "apply"
|
|
129
158
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/cli/migrate/nodeVersion/upgrade.ts"],
|
|
4
|
-
"sourcesContent": ["import { inspect } from 'node:util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\nimport { lt } from 'semver';\n\nimport { exec } from '../../../utils/exec.js';\nimport { log } from '../../../utils/logging.js';\nimport { detectPackageManager } from '../../../utils/packageManager.js';\nimport type { PatchReturnType } from '../../lint/internalLints/upgrade/index.js';\n\nconst packageVersionRegex = (packageName: string) =>\n new RegExp(`\"${packageName}\"\\\\s*:\\\\s*\"([^\"]+)\"`, 'g');\n\nconst yamlPackageVersionRegex = (packageName: string) =>\n new RegExp(
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAAwB;AAExB,uBAAqB;AACrB,sBAAe;AACf,
|
|
4
|
+
"sourcesContent": ["import { inspect } from 'node:util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\nimport { coerce, lt } from 'semver';\n\nimport { exec } from '../../../utils/exec.js';\nimport { log } from '../../../utils/logging.js';\nimport { detectPackageManager } from '../../../utils/packageManager.js';\nimport type { PatchReturnType } from '../../lint/internalLints/upgrade/index.js';\n\nconst packageVersionRegex = (packageName: string) =>\n new RegExp(`\"\\\\b${packageName}\\\\b\"\\\\s*:\\\\s*\"([^\"]+)\"`, 'g');\n\nconst yamlPackageVersionRegex = (packageName: string) =>\n new RegExp(`\\\\b${packageName}\\\\b:\\\\s*([^\\\\s]+)`, 'g');\n\nconst normalizeVersionRange = (\n currentVersion: string,\n newVersion: string,\n): string => {\n if (currentVersion.startsWith('^')) {\n return `^${newVersion}`;\n }\n\n if (currentVersion.startsWith('~')) {\n return `~${newVersion}`;\n }\n\n // >=1.2.3, >1.2.3, <=1.2.3, <1.2.3\n if (\n currentVersion.startsWith('>=') ||\n currentVersion.startsWith('>') ||\n currentVersion.startsWith('<=') ||\n currentVersion.startsWith('<')\n ) {\n return `^${newVersion}`;\n }\n\n // 1.x, 1.2.x, 1.x.x\n if (currentVersion.includes('x') || currentVersion.includes('X')) {\n return `^${newVersion}`;\n }\n\n // 1.0.0 - 2.0.0\n if (currentVersion.includes(' - ')) {\n return `^${newVersion}`;\n }\n\n const coercedCurrent = coerce(currentVersion);\n if (coercedCurrent && lt(coercedCurrent, newVersion)) {\n return newVersion;\n }\n\n return currentVersion;\n};\n\ntype PackageInfo = {\n name: string;\n version: string;\n};\n\nexport const upgradeInfraPackages = async (\n mode: 'lint' | 'format',\n packages: PackageInfo[],\n): Promise<PatchReturnType> => {\n const [packageJsonPaths, pnpmWorkspacePaths] = await Promise.all([\n glob(['**/package.json'], {\n ignore: ['**/.git', '**/node_modules'],\n }),\n glob('**/pnpm-workspace.yaml', {\n ignore: ['**/.git', '**/node_modules'],\n }),\n ]);\n\n if (packageJsonPaths.length === 0 && pnpmWorkspacePaths.length === 0) {\n return {\n result: 'skip',\n reason: 'no package.json or pnpm-workspace.yaml files found',\n };\n }\n\n const [packageJsons, pnpmWorkspaces] = await Promise.all([\n Promise.all(\n packageJsonPaths.map(async (file) => {\n const contents = await fs.readFile(file, 'utf8');\n\n return {\n file,\n contents,\n };\n }),\n ),\n Promise.all(\n pnpmWorkspacePaths.map(async (file) => {\n const contents = await fs.readFile(file, 'utf8');\n\n return {\n file,\n contents,\n };\n }),\n ),\n ]);\n\n const patchedPackageJsons = packageJsons\n .map((file) => {\n const updated = packages.reduce((contents, packageName) => {\n const regex = packageVersionRegex(packageName.name);\n return contents.replaceAll(regex, (match, currentVersion: string) => {\n if (\n currentVersion.startsWith('*') ||\n currentVersion.startsWith('workspace:') ||\n currentVersion.startsWith('link:') ||\n currentVersion.startsWith('file:') ||\n currentVersion.startsWith('catalog:')\n ) {\n return match;\n }\n\n const newVersion = normalizeVersionRange(\n currentVersion,\n packageName.version,\n );\n\n return newVersion === currentVersion\n ? match\n : `\"${packageName.name}\":\"${newVersion}\"`;\n });\n }, file.contents);\n\n return {\n ...file,\n updated,\n };\n })\n .filter(({ contents, updated }) => contents !== updated);\n\n const patchedPnpmWorkspaces = pnpmWorkspaces\n .map((file) => {\n const updated = packages.reduce((contents, packageName) => {\n const regex = yamlPackageVersionRegex(packageName.name);\n return contents.replace(regex, (match, currentVersion: string) => {\n const newVersion = normalizeVersionRange(\n currentVersion,\n packageName.version,\n );\n\n return newVersion === currentVersion\n ? match\n : `${packageName.name}: ${newVersion}`;\n });\n }, file.contents);\n\n return {\n ...file,\n updated,\n };\n })\n .filter(({ contents, updated }) => contents !== updated);\n\n if (patchedPackageJsons.length === 0 && patchedPnpmWorkspaces.length === 0) {\n return {\n result: 'skip',\n reason: 'no package.json or pnpm-workspace.yaml files to patch',\n };\n }\n\n if (mode === 'lint') {\n return {\n result: 'apply',\n };\n }\n\n await Promise.all(\n [...patchedPackageJsons, ...patchedPnpmWorkspaces].map(\n async ({ file, updated }) => {\n await fs.writeFile(file, updated, 'utf8');\n },\n ),\n );\n\n const packageManager = await detectPackageManager();\n\n await exec(packageManager.command, 'install', '--frozen-lockfile=false');\n\n return {\n result: 'apply',\n };\n};\n\nexport const tryUpgradeInfraPackages = async (\n mode: 'lint' | 'format',\n packages: PackageInfo[],\n): Promise<PatchReturnType> => {\n try {\n return await upgradeInfraPackages(mode, packages);\n } catch (err) {\n log.err('Failed to upgrade infrastructure packages');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["fs"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skuba",
|
|
3
|
-
"version": "14.0.0-node-24-
|
|
3
|
+
"version": "14.0.0-node-24-20251209021412",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "SEEK development toolkit for backend applications and packages",
|
|
6
6
|
"homepage": "https://github.com/seek-oss/skuba#readme",
|
|
@@ -97,11 +97,11 @@
|
|
|
97
97
|
"ts-node": "^10.9.2",
|
|
98
98
|
"tsconfig-paths": "^4.0.0",
|
|
99
99
|
"tsconfig-seek": "2.0.0",
|
|
100
|
-
"tsx": "^4.
|
|
100
|
+
"tsx": "^4.21.0",
|
|
101
101
|
"typescript": "~5.9.0",
|
|
102
102
|
"zod": "^4.0.0",
|
|
103
|
-
"
|
|
104
|
-
"
|
|
103
|
+
"eslint-config-skuba": "7.2.1",
|
|
104
|
+
"@skuba-lib/api": "^2.0.0-node-24-20251209021412"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@changesets/cli": "2.29.8",
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"test:watch": "skuba test --watch"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"skuba-dive": "4.0.0-node-24-
|
|
22
|
+
"skuba-dive": "4.0.0-node-24-20251209021412"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.13.10",
|
|
26
|
-
"skuba": "14.0.0-node-24-
|
|
26
|
+
"skuba": "14.0.0-node-24-20251209021412"
|
|
27
27
|
},
|
|
28
28
|
"packageManager": "pnpm@10.24.0",
|
|
29
29
|
"engines": {
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"@aws-sdk/client-sns": "^3.363.0",
|
|
25
25
|
"@seek/aws-codedeploy-hooks": "^2.0.0",
|
|
26
26
|
"@seek/logger": "^11.1.0",
|
|
27
|
-
"skuba-dive": "4.0.0-node-24-
|
|
27
|
+
"skuba-dive": "4.0.0-node-24-20251209021412",
|
|
28
28
|
"zod": "^4.0.0"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
@@ -33,16 +33,16 @@
|
|
|
33
33
|
"@types/chance": "^1.1.3",
|
|
34
34
|
"@types/node": "^22.13.10",
|
|
35
35
|
"aws-cdk": "^2.1010.0",
|
|
36
|
-
"aws-cdk-lib": "^2.
|
|
36
|
+
"aws-cdk-lib": "^2.232.1",
|
|
37
37
|
"aws-sdk-client-mock": "^4.0.0",
|
|
38
38
|
"aws-sdk-client-mock-jest": "^4.0.0",
|
|
39
39
|
"chance": "^1.1.8",
|
|
40
40
|
"constructs": "^10.0.17",
|
|
41
|
-
"datadog-cdk-constructs-v2": "^3.
|
|
41
|
+
"datadog-cdk-constructs-v2": "^3.4.0",
|
|
42
42
|
"datadog-lambda-js": "^12.0.0",
|
|
43
43
|
"dd-trace": "^5.0.0",
|
|
44
44
|
"pino-pretty": "^13.0.0",
|
|
45
|
-
"skuba": "14.0.0-node-24-
|
|
45
|
+
"skuba": "14.0.0-node-24-20251209021412"
|
|
46
46
|
},
|
|
47
47
|
"packageManager": "pnpm@10.24.0",
|
|
48
48
|
"engines": {
|