skuba 10.0.0-node-22-20250115223210 → 10.0.0-node-22-20250213035014

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.
Files changed (84) hide show
  1. package/lib/cli/init/prompts.d.ts +1 -1
  2. package/lib/cli/lint/internalLints/upgrade/patches/10.0.0/index.js +1 -1
  3. package/lib/cli/lint/internalLints/upgrade/patches/10.0.0/index.js.map +1 -1
  4. package/lib/cli/migrate/nodeVersion/getNode22TypesVersion.d.ts +6 -1
  5. package/lib/cli/migrate/nodeVersion/getNode22TypesVersion.js +22 -4
  6. package/lib/cli/migrate/nodeVersion/getNode22TypesVersion.js.map +2 -2
  7. package/lib/cli/migrate/nodeVersion/index.d.ts +0 -6
  8. package/lib/cli/migrate/nodeVersion/index.js +28 -35
  9. package/lib/cli/migrate/nodeVersion/index.js.map +2 -2
  10. package/lib/cli/migrate/nodeVersion/packageJsonChecks.d.ts +2 -2
  11. package/lib/cli/migrate/nodeVersion/packageJsonChecks.js +19 -14
  12. package/lib/cli/migrate/nodeVersion/packageJsonChecks.js.map +2 -2
  13. package/lib/index.js +3 -3
  14. package/lib/utils/template.d.ts +2 -2
  15. package/lib/utils/template.js +0 -5
  16. package/lib/utils/template.js.map +2 -2
  17. package/package.json +14 -14
  18. package/template/base/tsconfig.json +2 -2
  19. package/template/express-rest-api/.buildkite/pipeline.yml +4 -4
  20. package/template/express-rest-api/.gantry/common.yml +1 -2
  21. package/template/express-rest-api/.nvmrc +1 -1
  22. package/template/express-rest-api/Dockerfile +1 -1
  23. package/template/express-rest-api/Dockerfile.dev-deps +2 -2
  24. package/template/express-rest-api/package.json +4 -4
  25. package/template/greeter/.buildkite/pipeline.yml +1 -1
  26. package/template/greeter/.nvmrc +1 -1
  27. package/template/greeter/Dockerfile +2 -2
  28. package/template/greeter/README.md +1 -1
  29. package/template/greeter/package.json +4 -4
  30. package/template/koa-rest-api/.buildkite/pipeline.yml +4 -4
  31. package/template/koa-rest-api/.gantry/common.yml +1 -2
  32. package/template/koa-rest-api/.nvmrc +1 -1
  33. package/template/koa-rest-api/Dockerfile +1 -1
  34. package/template/koa-rest-api/Dockerfile.dev-deps +1 -1
  35. package/template/koa-rest-api/package.json +3 -3
  36. package/template/koa-rest-api/tsconfig.json +2 -2
  37. package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +2 -2
  38. package/template/lambda-sqs-worker-cdk/.nvmrc +1 -1
  39. package/template/lambda-sqs-worker-cdk/Dockerfile +3 -3
  40. package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +2 -2
  41. package/template/lambda-sqs-worker-cdk/infra/appStack.ts +2 -2
  42. package/template/lambda-sqs-worker-cdk/infra/config.ts +1 -1
  43. package/template/lambda-sqs-worker-cdk/infra/index.ts +3 -5
  44. package/template/lambda-sqs-worker-cdk/package.json +4 -4
  45. package/template/lambda-sqs-worker-cdk/tsconfig.json +2 -2
  46. package/template/oss-npm-package/.github/workflows/release.yml +1 -1
  47. package/template/oss-npm-package/.github/workflows/validate.yml +1 -1
  48. package/template/oss-npm-package/.nvmrc +1 -1
  49. package/template/oss-npm-package/_package.json +1 -1
  50. package/template/private-npm-package/.nvmrc +1 -1
  51. package/template/private-npm-package/_package.json +2 -2
  52. package/template/lambda-sqs-worker/.buildkite/pipeline.yml +0 -108
  53. package/template/lambda-sqs-worker/.env +0 -1
  54. package/template/lambda-sqs-worker/.nvmrc +0 -1
  55. package/template/lambda-sqs-worker/Dockerfile +0 -17
  56. package/template/lambda-sqs-worker/README.md +0 -132
  57. package/template/lambda-sqs-worker/_.npmrc +0 -13
  58. package/template/lambda-sqs-worker/docker-compose.yml +0 -10
  59. package/template/lambda-sqs-worker/package.json +0 -45
  60. package/template/lambda-sqs-worker/serverless.yml +0 -213
  61. package/template/lambda-sqs-worker/skuba.template.js +0 -33
  62. package/template/lambda-sqs-worker/src/app.test.ts +0 -116
  63. package/template/lambda-sqs-worker/src/app.ts +0 -57
  64. package/template/lambda-sqs-worker/src/config.ts +0 -62
  65. package/template/lambda-sqs-worker/src/framework/handler.test.ts +0 -61
  66. package/template/lambda-sqs-worker/src/framework/handler.ts +0 -43
  67. package/template/lambda-sqs-worker/src/framework/logging.ts +0 -27
  68. package/template/lambda-sqs-worker/src/framework/metrics.ts +0 -14
  69. package/template/lambda-sqs-worker/src/framework/validation.test.ts +0 -84
  70. package/template/lambda-sqs-worker/src/framework/validation.ts +0 -10
  71. package/template/lambda-sqs-worker/src/hooks.ts +0 -95
  72. package/template/lambda-sqs-worker/src/mapping/jobScorer.ts +0 -22
  73. package/template/lambda-sqs-worker/src/services/aws.ts +0 -5
  74. package/template/lambda-sqs-worker/src/services/jobScorer.test.ts +0 -44
  75. package/template/lambda-sqs-worker/src/services/jobScorer.ts +0 -59
  76. package/template/lambda-sqs-worker/src/services/pipelineEventSender.test.ts +0 -40
  77. package/template/lambda-sqs-worker/src/services/pipelineEventSender.ts +0 -33
  78. package/template/lambda-sqs-worker/src/testing/handler.ts +0 -13
  79. package/template/lambda-sqs-worker/src/testing/logging.ts +0 -19
  80. package/template/lambda-sqs-worker/src/testing/services.ts +0 -28
  81. package/template/lambda-sqs-worker/src/testing/types.ts +0 -33
  82. package/template/lambda-sqs-worker/src/types/jobScorer.ts +0 -15
  83. package/template/lambda-sqs-worker/src/types/pipelineEvents.ts +0 -21
  84. package/template/lambda-sqs-worker/tsconfig.json +0 -13
@@ -63,5 +63,5 @@ export declare const BASE_PROMPT_PROPS: {
63
63
  };
64
64
  export declare const SHOULD_CONTINUE_PROMPT: Select<"yes" | "no">;
65
65
  export declare const GIT_PATH_PROMPT: Input;
66
- export declare const TEMPLATE_PROMPT: Select<"express-rest-api" | "greeter" | "koa-rest-api" | "lambda-sqs-worker" | "lambda-sqs-worker-cdk" | "oss-npm-package" | "private-npm-package" | "github →">;
66
+ export declare const TEMPLATE_PROMPT: Select<"express-rest-api" | "greeter" | "koa-rest-api" | "lambda-sqs-worker-cdk" | "oss-npm-package" | "private-npm-package" | "github →">;
67
67
  export {};
@@ -25,7 +25,7 @@ var import_upgradeNode = require("./upgradeNode");
25
25
  const patches = [
26
26
  {
27
27
  apply: import_upgradeNode.tryUpgradeNode,
28
- description: "Upgrades Node.js to version 22"
28
+ description: "Upgrade Node.js to version 22"
29
29
  }
30
30
  ];
31
31
  // 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/lint/internalLints/upgrade/patches/10.0.0/index.ts"],
4
- "sourcesContent": ["import type { Patches } from '../..';\n\nimport { tryUpgradeNode } from './upgradeNode';\n\nexport const patches: Patches = [\n {\n apply: tryUpgradeNode,\n description: 'Upgrades Node.js to version 22',\n },\n];\n"],
4
+ "sourcesContent": ["import type { Patches } from '../..';\n\nimport { tryUpgradeNode } from './upgradeNode';\n\nexport const patches: Patches = [\n {\n apply: tryUpgradeNode,\n description: 'Upgrade Node.js to version 22',\n },\n];\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,yBAA+B;AAExB,MAAM,UAAmB;AAAA,EAC9B;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AACF;",
6
6
  "names": []
7
7
  }
@@ -1 +1,6 @@
1
- export declare const getNode22TypesVersion: (major: number) => string;
1
+ type VersionResult = {
2
+ version: string;
3
+ err?: string;
4
+ };
5
+ export declare const getNode22TypesVersion: (major: number, defaultVersion: string) => Promise<VersionResult>;
6
+ export {};
@@ -21,10 +21,28 @@ __export(getNode22TypesVersion_exports, {
21
21
  getNode22TypesVersion: () => getNode22TypesVersion
22
22
  });
23
23
  module.exports = __toCommonJS(getNode22TypesVersion_exports);
24
- var import_child_process = require("child_process");
25
- const getNode22TypesVersion = (major) => (0, import_child_process.execSync)(
26
- `npm show @types/node@^${major} version --json | jq '.[-1]'`
27
- ).toString();
24
+ const getNode22TypesVersion = async (major, defaultVersion) => {
25
+ try {
26
+ const response = await fetch("https://registry.npmjs.org/@types/node");
27
+ if (!response.ok)
28
+ throw new Error(`Failed to fetch: ${response.statusText}`);
29
+ const json = await response.json();
30
+ const versions = Object.keys(json.versions).filter((v) => v.startsWith(`${major}.`)).sort((a, b) => b.localeCompare(a, void 0, { numeric: true }));
31
+ const latestVersion = versions[0];
32
+ const versionRegex = /(22\.\d+\.\d+)/;
33
+ if (!latestVersion || !versionRegex.test(latestVersion)) {
34
+ throw new Error("No version found");
35
+ }
36
+ return {
37
+ version: versionRegex.exec(latestVersion)?.[0] ?? defaultVersion
38
+ };
39
+ } catch {
40
+ return {
41
+ version: defaultVersion,
42
+ err: "Failed to fetch latest version, using fallback version"
43
+ };
44
+ }
45
+ };
28
46
  // Annotate the CommonJS export names for ESM import in node:
29
47
  0 && (module.exports = {
30
48
  getNode22TypesVersion
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cli/migrate/nodeVersion/getNode22TypesVersion.ts"],
4
- "sourcesContent": ["import { execSync } from 'child_process';\n\nexport const getNode22TypesVersion = (major: number) =>\n execSync(\n `npm show @types/node@^${major} version --json | jq '.[-1]'`,\n ).toString();\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAyB;AAElB,MAAM,wBAAwB,CAAC,cACpC;AAAA,EACE,yBAAyB,KAAK;AAChC,EAAE,SAAS;",
4
+ "sourcesContent": ["type VersionResult = {\n version: string;\n err?: string;\n};\n\nexport const getNode22TypesVersion = async (\n major: number,\n defaultVersion: string,\n): Promise<VersionResult> => {\n try {\n const response = await fetch('https://registry.npmjs.org/@types/node');\n if (!response.ok)\n throw new Error(`Failed to fetch: ${response.statusText}`);\n\n const json = (await response.json()) as {\n versions: Record<string, unknown>;\n };\n const versions = Object.keys(json.versions)\n .filter((v) => v.startsWith(`${major}.`))\n .sort((a, b) => b.localeCompare(a, undefined, { numeric: true }));\n\n const latestVersion = versions[0];\n const versionRegex = /(22\\.\\d+\\.\\d+)/;\n\n if (!latestVersion || !versionRegex.test(latestVersion)) {\n throw new Error('No version found');\n }\n\n return {\n version: versionRegex.exec(latestVersion)?.[0] ?? defaultVersion,\n };\n } catch {\n return {\n version: defaultVersion,\n err: 'Failed to fetch latest version, using fallback version',\n };\n }\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,MAAM,wBAAwB,OACnC,OACA,mBAC2B;AAC3B,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,wCAAwC;AACrE,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,oBAAoB,SAAS,UAAU,EAAE;AAE3D,UAAM,OAAQ,MAAM,SAAS,KAAK;AAGlC,UAAM,WAAW,OAAO,KAAK,KAAK,QAAQ,EACvC,OAAO,CAAC,MAAM,EAAE,WAAW,GAAG,KAAK,GAAG,CAAC,EACvC,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,GAAG,QAAW,EAAE,SAAS,KAAK,CAAC,CAAC;AAElE,UAAM,gBAAgB,SAAS,CAAC;AAChC,UAAM,eAAe;AAErB,QAAI,CAAC,iBAAiB,CAAC,aAAa,KAAK,aAAa,GAAG;AACvD,YAAM,IAAI,MAAM,kBAAkB;AAAA,IACpC;AAEA,WAAO;AAAA,MACL,SAAS,aAAa,KAAK,aAAa,IAAI,CAAC,KAAK;AAAA,IACpD;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,MACL,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,10 +1,4 @@
1
- type VersionResult = {
2
- version: string;
3
- err: string | undefined;
4
- };
5
- export declare const getNode22TypeVersion: (major: number, defaultVersion: string) => VersionResult;
6
1
  export declare const nodeVersionMigration: ({ nodeVersion, ECMAScriptVersion, }: {
7
2
  nodeVersion: number;
8
3
  ECMAScriptVersion: string;
9
4
  }, dir?: string) => Promise<void>;
10
- export {};
@@ -28,7 +28,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var nodeVersion_exports = {};
30
30
  __export(nodeVersion_exports, {
31
- getNode22TypeVersion: () => getNode22TypeVersion,
32
31
  nodeVersionMigration: () => nodeVersionMigration
33
32
  });
34
33
  module.exports = __toCommonJS(nodeVersion_exports);
@@ -40,25 +39,6 @@ var import_project = require("../../configure/analysis/project");
40
39
  var import_getNode22TypesVersion = require("./getNode22TypesVersion");
41
40
  var import_packageJsonChecks = require("./packageJsonChecks");
42
41
  const DEFAULT_NODE_TYPES = "22.9.0";
43
- const getNode22TypeVersion = (major, defaultVersion) => {
44
- try {
45
- const version = (0, import_getNode22TypesVersion.getNode22TypesVersion)(major);
46
- const versionRegex = /(22\.\d+\.\d+)/;
47
- if (!version || !versionRegex.test(version)) {
48
- throw new Error("No version found");
49
- }
50
- const sanitizedVersion = version.replace(versionRegex, "$1").replace(/"/g, "").trim();
51
- return {
52
- version: sanitizedVersion,
53
- err: void 0
54
- };
55
- } catch {
56
- return {
57
- version: defaultVersion,
58
- err: "Failed to fetch latest version, using fallback version"
59
- };
60
- }
61
- };
62
42
  const SHA_REGEX = /(?<=node.*)(@sha256:[a-f0-9]{64})/gm;
63
43
  const subPatches = [
64
44
  { id: "nvmrc", file: ".nvmrc", replace: "<%- version %>\n" },
@@ -120,12 +100,20 @@ const subPatches = [
120
100
  replace: "$1<%- version %>$3"
121
101
  }
122
102
  ],
123
- {
124
- id: "tsconfig",
125
- files: "**/tsconfig.json",
126
- test: /("target":\s*")(ES?:[0-9]+|Next|[A-Za-z]+[0-9]*)"/gim,
127
- replace: '$1<%- version %>"'
128
- },
103
+ [
104
+ {
105
+ id: "tsconfig-target",
106
+ files: "**/tsconfig.json",
107
+ test: /("target":\s*")(ES\d+)"/gim,
108
+ replace: '$1<%- version %>"'
109
+ },
110
+ {
111
+ id: "tsconfig-lib",
112
+ files: "**/tsconfig.json",
113
+ test: /("lib":\s*\[)([\S\s]*?)(ES\d+)([\S\s]*?)(\])/gim,
114
+ replace: "$1$2<%- version %>$4$5"
115
+ }
116
+ ],
129
117
  {
130
118
  id: "docker-compose",
131
119
  files: "**/docker-compose*.y*ml",
@@ -161,10 +149,14 @@ const runSubPatch = async ({ nodeVersion, nodeTypesVersion, ECMAScriptVersion },
161
149
  }
162
150
  const unPinnedContents = removeNodeShas(contents);
163
151
  if (patch.id === "serverless") {
164
- await (0, import_packageJsonChecks.checkServerlessVersion)();
152
+ if (!await (0, import_packageJsonChecks.validServerlessVersion)()) {
153
+ return;
154
+ }
165
155
  }
166
156
  if (patch.id === "package-json-1") {
167
- await (0, import_packageJsonChecks.checkServerlessVersion)();
157
+ if (!await (0, import_packageJsonChecks.validServerlessVersion)()) {
158
+ return;
159
+ }
168
160
  return await writePatchedContents({
169
161
  path,
170
162
  contents: unPinnedContents,
@@ -175,9 +167,10 @@ const runSubPatch = async ({ nodeVersion, nodeTypesVersion, ECMAScriptVersion },
175
167
  test: patch.test
176
168
  });
177
169
  }
178
- if (patch.id === "tsconfig") {
179
- await (0, import_packageJsonChecks.checkSkubaType)();
180
- await (0, import_packageJsonChecks.checkServerlessVersion)();
170
+ if (patch.id.includes("tsconfig")) {
171
+ if (!await (0, import_packageJsonChecks.validServerlessVersion)() || !await (0, import_packageJsonChecks.validSkubaType)()) {
172
+ return;
173
+ }
181
174
  return await writePatchedContents({
182
175
  path,
183
176
  contents: unPinnedContents,
@@ -189,8 +182,9 @@ const runSubPatch = async ({ nodeVersion, nodeTypesVersion, ECMAScriptVersion },
189
182
  });
190
183
  }
191
184
  if (patch.id === "package-json-2") {
192
- await (0, import_packageJsonChecks.checkSkubaType)();
193
- await (0, import_packageJsonChecks.checkServerlessVersion)();
185
+ if (!await (0, import_packageJsonChecks.validServerlessVersion)() || !await (0, import_packageJsonChecks.validSkubaType)()) {
186
+ return;
187
+ }
194
188
  }
195
189
  await writePatchedContents({
196
190
  path,
@@ -230,7 +224,7 @@ const nodeVersionMigration = async ({
230
224
  }, dir = process.cwd()) => {
231
225
  import_logging.log.ok(`Upgrading to Node.js ${nodeVersion}`);
232
226
  try {
233
- const { version: nodeTypesVersion, err } = getNode22TypeVersion(
227
+ const { version: nodeTypesVersion, err } = await (0, import_getNode22TypesVersion.getNode22TypesVersion)(
234
228
  nodeVersion,
235
229
  DEFAULT_NODE_TYPES
236
230
  );
@@ -247,7 +241,6 @@ const nodeVersionMigration = async ({
247
241
  };
248
242
  // Annotate the CommonJS export names for ESM import in node:
249
243
  0 && (module.exports = {
250
- getNode22TypeVersion,
251
244
  nodeVersionMigration
252
245
  });
253
246
  //# sourceMappingURL=index.js.map
@@ -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';\n\nimport { log } from '../../../utils/logging';\nimport { createDestinationFileReader } from '../../configure/analysis/project';\n\nimport { getNode22TypesVersion } from './getNode22TypesVersion';\nimport { checkServerlessVersion, checkSkubaType } from './packageJsonChecks';\n\nconst DEFAULT_NODE_TYPES = '22.9.0';\n\ntype SubPatch =\n | (({ files: string; file?: never } | { file: string; files?: never }) & {\n test?: RegExp;\n replace: string;\n id: string;\n })\n | Array<\n ({ files: string; file?: never } | { file: string; files?: never }) & {\n test?: RegExp;\n replace: string;\n id: string;\n }\n >;\n\ntype VersionResult = {\n version: string;\n err: string | undefined;\n};\n\nexport const getNode22TypeVersion = (\n major: number,\n defaultVersion: string,\n): VersionResult => {\n try {\n const version = getNode22TypesVersion(major);\n const versionRegex = /(22\\.\\d+\\.\\d+)/;\n if (!version || !versionRegex.test(version)) {\n throw new Error('No version found');\n }\n const sanitizedVersion = version\n .replace(versionRegex, '$1')\n .replace(/\"/g, '')\n .trim();\n return {\n version: sanitizedVersion,\n err: undefined,\n };\n } catch {\n return {\n version: defaultVersion,\n err: 'Failed to fetch latest version, using fallback version',\n };\n }\n};\n\nconst SHA_REGEX = /(?<=node.*)(@sha256:[a-f0-9]{64})/gm;\n\nconst subPatches: SubPatch[] = [\n { id: 'nvmrc', file: '.nvmrc', replace: '<%- version %>\\n' },\n {\n id: 'Dockerfile-1',\n files: '**/Dockerfile*',\n test: /^FROM(.*) (public.ecr.aws\\/docker\\/library\\/)?node:[0-9.]+(@sha256:[a-f0-9]{64})?(\\.[^- \\n]+)?(-[^ \\n]+)?( .+|)$/gm,\n replace: 'FROM$1 $2node:<%- version %>$3$5$6',\n },\n {\n id: 'Dockerfile-2',\n files: '**/Dockerfile*',\n test: /^FROM(.*) gcr.io\\/distroless\\/nodejs\\d+-debian(.+)$/gm,\n replace: 'FROM$1 gcr.io/distroless/nodejs<%- version %>-debian$2',\n },\n {\n id: 'serverless',\n files: '**/serverless*.y*ml',\n test: /nodejs\\d+.x/gm,\n replace: 'nodejs<%- version %>.x',\n },\n [\n {\n id: 'cdk-1',\n files: '**/infra/**/*.ts',\n test: /NODEJS_\\d+_X/g,\n replace: 'NODEJS_<%- version %>_X',\n },\n {\n id: 'cdk-2',\n files: '**/infra/**/*.ts',\n test: /(target:\\s*'node)(\\d+)(.+)$/gm,\n replace: '$1<%- version %>$3',\n },\n ],\n {\n id: 'buildkite',\n files: '**/.buildkite/*',\n test: /(image: )(public.ecr.aws\\/docker\\/library\\/)?(node:)[0-9.]+(\\.[^- \\n]+)?(-[^ \\n]+)?$/gm,\n replace: '$1$2$3<%- version %>$5',\n },\n {\n id: 'node-version',\n files: '.node-version*',\n test: /(v)?\\d+\\.\\d+\\.\\d+(.+)?/gm,\n replace: '$1<%- version %>$2',\n },\n [\n {\n id: 'package-json-1',\n files: '**/package.json',\n test: /(\\\\?\"@types\\/node\\\\?\": \\\\?\")(\\^)?[0-9.]+(\\\\?(\",?)\\\\?n?)/gm,\n replace: '$1$2<%- version %>$4',\n },\n {\n id: 'package-json-2',\n files: '**/package.json',\n test: /(\\\\?\"engines\\\\?\":\\s*{\\\\?n?[^}]*\\\\?\"node\\\\?\":\\s*\\\\?\">=)(\\d+)\\\\?(\"[^}]*})(?![^}]*\\\\?\"skuba\\\\?\":\\s*{\\\\?n?[^}]*\\\\?\"type\\\\?\":\\s*\\\\?\"package\\\\?\")/gm,\n replace: '$1<%- version %>$3',\n },\n ],\n {\n id: 'tsconfig',\n files: '**/tsconfig.json',\n test: /(\"target\":\\s*\")(ES?:[0-9]+|Next|[A-Za-z]+[0-9]*)\"/gim,\n replace: '$1<%- version %>\"',\n },\n {\n id: 'docker-compose',\n files: '**/docker-compose*.y*ml',\n test: /(image: )(public.ecr.aws\\/docker\\/library\\/)?(node:)[0-9.]+(\\.[^- \\n]+)?(-[^ \\n]+)?$/gm,\n replace: '$1$2$3<%- version %>$5',\n },\n];\n\nconst removeNodeShas = (content: string): string =>\n content.replace(SHA_REGEX, '');\n\ntype Versions = {\n nodeVersion: number;\n nodeTypesVersion: string;\n ECMAScriptVersion: string;\n};\n\nconst runSubPatch = async (\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion }: Versions,\n dir: string,\n patch: SubPatch,\n) => {\n if (Array.isArray(patch)) {\n for (const subPatch of patch) {\n await runSubPatch(\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion },\n dir,\n subPatch,\n );\n }\n return;\n }\n const readFile = createDestinationFileReader(dir);\n const paths = patch.file\n ? [patch.file]\n : await glob(patch.files ?? [], { cwd: dir });\n\n await Promise.all(\n paths.map(async (path) => {\n if (path.includes('node_modules')) {\n return;\n }\n const contents = await readFile(path);\n if (!contents) {\n return;\n }\n\n if (patch.test && !patch.test.test(contents)) {\n return;\n }\n\n const unPinnedContents = removeNodeShas(contents);\n\n if (patch.id === 'serverless') {\n await checkServerlessVersion();\n }\n\n if (patch.id === 'package-json-1') {\n await checkServerlessVersion();\n return await writePatchedContents({\n path,\n contents: unPinnedContents,\n templated: patch.replace.replaceAll(\n '<%- version %>',\n nodeTypesVersion,\n ),\n test: patch.test,\n });\n }\n if (patch.id === 'tsconfig') {\n await checkSkubaType();\n await checkServerlessVersion();\n return await writePatchedContents({\n path,\n contents: unPinnedContents,\n templated: patch.replace.replaceAll(\n '<%- version %>',\n ECMAScriptVersion,\n ),\n test: patch.test,\n });\n }\n\n if (patch.id === 'package-json-2') {\n await checkSkubaType();\n await checkServerlessVersion();\n }\n\n await writePatchedContents({\n path,\n contents: unPinnedContents,\n templated: patch.replace.replaceAll(\n '<%- version %>',\n nodeVersion.toString(),\n ),\n test: patch.test,\n });\n }),\n );\n};\n\nconst writePatchedContents = async ({\n path,\n contents,\n templated,\n test,\n}: {\n path: string;\n contents: string;\n templated: string;\n test?: RegExp;\n}) =>\n await fs.promises.writeFile(\n path,\n test ? contents.replaceAll(test, templated) : templated,\n );\n\nconst upgrade = async (\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion }: Versions,\n dir: string,\n) => {\n await Promise.all(\n subPatches.map((subPatch) =>\n runSubPatch(\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion },\n dir,\n subPatch,\n ),\n ),\n );\n};\n\nexport const nodeVersionMigration = async (\n {\n nodeVersion,\n ECMAScriptVersion,\n }: { nodeVersion: number; ECMAScriptVersion: string },\n dir = process.cwd(),\n) => {\n log.ok(`Upgrading to Node.js ${nodeVersion}`);\n try {\n const { version: nodeTypesVersion, err } = getNode22TypeVersion(\n nodeVersion,\n DEFAULT_NODE_TYPES,\n );\n if (err) {\n log.warn(err);\n }\n await upgrade({ nodeVersion, nodeTypesVersion, ECMAScriptVersion }, dir);\n log.ok('Upgraded to Node.js', nodeVersion);\n } catch (err) {\n log.err('Failed to upgrade');\n log.subtle(inspect(err));\n process.exitCode = 1;\n }\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { inspect } from 'util';\n\nimport { glob } from 'fast-glob';\nimport fs from 'fs-extra';\n\nimport { log } from '../../../utils/logging';\nimport { createDestinationFileReader } from '../../configure/analysis/project';\n\nimport { getNode22TypesVersion } from './getNode22TypesVersion';\nimport { validServerlessVersion, validSkubaType } from './packageJsonChecks';\n\nconst DEFAULT_NODE_TYPES = '22.9.0';\n\ntype SubPatch =\n | (({ files: string; file?: never } | { file: string; files?: never }) & {\n test?: RegExp;\n replace: string;\n id: string;\n })\n | Array<\n ({ files: string; file?: never } | { file: string; files?: never }) & {\n test?: RegExp;\n replace: string;\n id: string;\n }\n >;\n\nconst SHA_REGEX = /(?<=node.*)(@sha256:[a-f0-9]{64})/gm;\n\nconst subPatches: SubPatch[] = [\n { id: 'nvmrc', file: '.nvmrc', replace: '<%- version %>\\n' },\n {\n id: 'Dockerfile-1',\n files: '**/Dockerfile*',\n test: /^FROM(.*) (public.ecr.aws\\/docker\\/library\\/)?node:[0-9.]+(@sha256:[a-f0-9]{64})?(\\.[^- \\n]+)?(-[^ \\n]+)?( .+|)$/gm,\n replace: 'FROM$1 $2node:<%- version %>$3$5$6',\n },\n {\n id: 'Dockerfile-2',\n files: '**/Dockerfile*',\n test: /^FROM(.*) gcr.io\\/distroless\\/nodejs\\d+-debian(.+)$/gm,\n replace: 'FROM$1 gcr.io/distroless/nodejs<%- version %>-debian$2',\n },\n {\n id: 'serverless',\n files: '**/serverless*.y*ml',\n test: /nodejs\\d+.x/gm,\n replace: 'nodejs<%- version %>.x',\n },\n [\n {\n id: 'cdk-1',\n files: '**/infra/**/*.ts',\n test: /NODEJS_\\d+_X/g,\n replace: 'NODEJS_<%- version %>_X',\n },\n {\n id: 'cdk-2',\n files: '**/infra/**/*.ts',\n test: /(target:\\s*'node)(\\d+)(.+)$/gm,\n replace: '$1<%- version %>$3',\n },\n ],\n {\n id: 'buildkite',\n files: '**/.buildkite/*',\n test: /(image: )(public.ecr.aws\\/docker\\/library\\/)?(node:)[0-9.]+(\\.[^- \\n]+)?(-[^ \\n]+)?$/gm,\n replace: '$1$2$3<%- version %>$5',\n },\n {\n id: 'node-version',\n files: '.node-version*',\n test: /(v)?\\d+\\.\\d+\\.\\d+(.+)?/gm,\n replace: '$1<%- version %>$2',\n },\n [\n {\n id: 'package-json-1',\n files: '**/package.json',\n test: /(\\\\?\"@types\\/node\\\\?\": \\\\?\")(\\^)?[0-9.]+(\\\\?(\",?)\\\\?n?)/gm,\n replace: '$1$2<%- version %>$4',\n },\n {\n id: 'package-json-2',\n files: '**/package.json',\n test: /(\\\\?\"engines\\\\?\":\\s*{\\\\?n?[^}]*\\\\?\"node\\\\?\":\\s*\\\\?\">=)(\\d+)\\\\?(\"[^}]*})(?![^}]*\\\\?\"skuba\\\\?\":\\s*{\\\\?n?[^}]*\\\\?\"type\\\\?\":\\s*\\\\?\"package\\\\?\")/gm,\n replace: '$1<%- version %>$3',\n },\n ],\n [\n {\n id: 'tsconfig-target',\n files: '**/tsconfig.json',\n test: /(\"target\":\\s*\")(ES\\d+)\"/gim,\n replace: '$1<%- version %>\"',\n },\n {\n id: 'tsconfig-lib',\n files: '**/tsconfig.json',\n test: /(\"lib\":\\s*\\[)([\\S\\s]*?)(ES\\d+)([\\S\\s]*?)(\\])/gim,\n replace: '$1$2<%- version %>$4$5',\n },\n ],\n {\n id: 'docker-compose',\n files: '**/docker-compose*.y*ml',\n test: /(image: )(public.ecr.aws\\/docker\\/library\\/)?(node:)[0-9.]+(\\.[^- \\n]+)?(-[^ \\n]+)?$/gm,\n replace: '$1$2$3<%- version %>$5',\n },\n];\n\nconst removeNodeShas = (content: string): string =>\n content.replace(SHA_REGEX, '');\n\ntype Versions = {\n nodeVersion: number;\n nodeTypesVersion: string;\n ECMAScriptVersion: string;\n};\n\nconst runSubPatch = async (\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion }: Versions,\n dir: string,\n patch: SubPatch,\n) => {\n if (Array.isArray(patch)) {\n for (const subPatch of patch) {\n await runSubPatch(\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion },\n dir,\n subPatch,\n );\n }\n return;\n }\n const readFile = createDestinationFileReader(dir);\n const paths = patch.file\n ? [patch.file]\n : await glob(patch.files ?? [], { cwd: dir });\n\n await Promise.all(\n paths.map(async (path) => {\n if (path.includes('node_modules')) {\n return;\n }\n const contents = await readFile(path);\n if (!contents) {\n return;\n }\n\n if (patch.test && !patch.test.test(contents)) {\n return;\n }\n\n const unPinnedContents = removeNodeShas(contents);\n\n if (patch.id === 'serverless') {\n if (!(await validServerlessVersion())) {\n return;\n }\n }\n\n if (patch.id === 'package-json-1') {\n if (!(await validServerlessVersion())) {\n return;\n }\n return await writePatchedContents({\n path,\n contents: unPinnedContents,\n templated: patch.replace.replaceAll(\n '<%- version %>',\n nodeTypesVersion,\n ),\n test: patch.test,\n });\n }\n if (patch.id.includes('tsconfig')) {\n if (!(await validServerlessVersion()) || !(await validSkubaType())) {\n return;\n }\n return await writePatchedContents({\n path,\n contents: unPinnedContents,\n templated: patch.replace.replaceAll(\n '<%- version %>',\n ECMAScriptVersion,\n ),\n test: patch.test,\n });\n }\n\n if (patch.id === 'package-json-2') {\n if (!(await validServerlessVersion()) || !(await validSkubaType())) {\n return;\n }\n }\n\n await writePatchedContents({\n path,\n contents: unPinnedContents,\n templated: patch.replace.replaceAll(\n '<%- version %>',\n nodeVersion.toString(),\n ),\n test: patch.test,\n });\n }),\n );\n};\n\nconst writePatchedContents = async ({\n path,\n contents,\n templated,\n test,\n}: {\n path: string;\n contents: string;\n templated: string;\n test?: RegExp;\n}) =>\n await fs.promises.writeFile(\n path,\n test ? contents.replaceAll(test, templated) : templated,\n );\n\nconst upgrade = async (\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion }: Versions,\n dir: string,\n) => {\n await Promise.all(\n subPatches.map((subPatch) =>\n runSubPatch(\n { nodeVersion, nodeTypesVersion, ECMAScriptVersion },\n dir,\n subPatch,\n ),\n ),\n );\n};\n\nexport const nodeVersionMigration = async (\n {\n nodeVersion,\n ECMAScriptVersion,\n }: { nodeVersion: number; ECMAScriptVersion: string },\n dir = process.cwd(),\n) => {\n log.ok(`Upgrading to Node.js ${nodeVersion}`);\n try {\n const { version: nodeTypesVersion, err } = await getNode22TypesVersion(\n nodeVersion,\n DEFAULT_NODE_TYPES,\n );\n if (err) {\n log.warn(err);\n }\n await upgrade({ nodeVersion, nodeTypesVersion, ECMAScriptVersion }, dir);\n log.ok('Upgraded to Node.js', nodeVersion);\n } catch (err) {\n log.err('Failed to upgrade');\n log.subtle(inspect(err));\n process.exitCode = 1;\n }\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["fs"]
7
7
  }
@@ -1,2 +1,2 @@
1
- export declare const checkServerlessVersion: () => Promise<void>;
2
- export declare const checkSkubaType: () => Promise<void>;
1
+ export declare const validServerlessVersion: () => Promise<boolean>;
2
+ export declare const validSkubaType: () => Promise<boolean>;
@@ -28,12 +28,13 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var packageJsonChecks_exports = {};
30
30
  __export(packageJsonChecks_exports, {
31
- checkServerlessVersion: () => checkServerlessVersion,
32
- checkSkubaType: () => checkSkubaType
31
+ validServerlessVersion: () => validServerlessVersion,
32
+ validSkubaType: () => validSkubaType
33
33
  });
34
34
  module.exports = __toCommonJS(packageJsonChecks_exports);
35
35
  var import_find_up = __toESM(require("find-up"));
36
36
  var import_fs_extra = __toESM(require("fs-extra"));
37
+ var import_logging = require("../../../utils/logging");
37
38
  const getParentPackageJson = async () => {
38
39
  const packageJsonPath = await (0, import_find_up.default)("package.json", { cwd: process.cwd() });
39
40
  if (!packageJsonPath) {
@@ -43,47 +44,51 @@ const getParentPackageJson = async () => {
43
44
  };
44
45
  const isTypeError = (error) => error instanceof TypeError && error.message.includes("Cannot read properties of undefined");
45
46
  const isSyntaxError = (error) => error instanceof SyntaxError && error.message.includes("Unexpected token");
46
- const checkServerlessVersion = async () => {
47
+ const validServerlessVersion = async () => {
47
48
  const packageJson = await getParentPackageJson();
48
49
  try {
49
50
  const serverlessVersion = JSON.parse(packageJson.toString()).devDependencies.serverless;
50
51
  if (!serverlessVersion) {
51
- return;
52
+ return true;
52
53
  }
53
54
  if (!serverlessVersion.startsWith("4")) {
54
- throw new Error(
55
- "Serverless version not supported, please upgrade to 4.x"
55
+ import_logging.log.warn(
56
+ "Serverless version not supported, please upgrade to 4.x to automatically update serverless files"
56
57
  );
58
+ return false;
57
59
  }
58
60
  } catch (error) {
59
61
  if (isTypeError(error) || isSyntaxError(error)) {
60
- return;
62
+ return true;
61
63
  }
62
64
  throw error;
63
65
  }
66
+ return true;
64
67
  };
65
- const checkSkubaType = async () => {
68
+ const validSkubaType = async () => {
66
69
  const packageJson = await getParentPackageJson();
67
70
  try {
68
71
  const type = JSON.parse(packageJson.toString()).skuba.type;
69
72
  if (!type) {
70
- return;
73
+ return true;
71
74
  }
72
75
  if (type === "package") {
73
- throw new Error(
74
- "Skuba type package is not supported, packages should be updated manually to ensure major runtime depreciations are intended"
76
+ import_logging.log.warn(
77
+ "skuba type package is not supported, packages should be updated manually to ensure major runtime deprecations are intended"
75
78
  );
79
+ return false;
76
80
  }
77
81
  } catch (error) {
78
82
  if (isTypeError(error) || isSyntaxError(error)) {
79
- return;
83
+ return true;
80
84
  }
81
85
  throw error;
82
86
  }
87
+ return true;
83
88
  };
84
89
  // Annotate the CommonJS export names for ESM import in node:
85
90
  0 && (module.exports = {
86
- checkServerlessVersion,
87
- checkSkubaType
91
+ validServerlessVersion,
92
+ validSkubaType
88
93
  });
89
94
  //# sourceMappingURL=packageJsonChecks.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cli/migrate/nodeVersion/packageJsonChecks.ts"],
4
- "sourcesContent": ["import findUp from 'find-up';\nimport fs from 'fs-extra';\n\nconst getParentPackageJson = async () => {\n const packageJsonPath = await findUp('package.json', { cwd: process.cwd() });\n if (!packageJsonPath) {\n throw new Error('package.json not found');\n }\n return fs.readFile(packageJsonPath);\n};\n\nconst isTypeError = (error: unknown): error is TypeError =>\n error instanceof TypeError &&\n error.message.includes('Cannot read properties of undefined');\n\nconst isSyntaxError = (error: unknown): error is SyntaxError =>\n error instanceof SyntaxError && error.message.includes('Unexpected token');\n\nexport const checkServerlessVersion = async () => {\n const packageJson = await getParentPackageJson();\n\n try {\n const serverlessVersion = (\n JSON.parse(packageJson.toString()) as {\n devDependencies: Record<string, string>;\n }\n ).devDependencies.serverless;\n if (!serverlessVersion) {\n return;\n }\n\n if (!serverlessVersion.startsWith('4')) {\n throw new Error(\n 'Serverless version not supported, please upgrade to 4.x',\n );\n }\n } catch (error) {\n if (isTypeError(error) || isSyntaxError(error)) {\n return;\n }\n throw error;\n }\n};\n\nexport const checkSkubaType = async () => {\n const packageJson = await getParentPackageJson();\n\n try {\n const type = (\n JSON.parse(packageJson.toString()) as {\n skuba: Record<string, string>;\n }\n ).skuba.type;\n if (!type) {\n return;\n }\n\n if (type === 'package') {\n throw new Error(\n 'Skuba type package is not supported, packages should be updated manually to ensure major runtime depreciations are intended',\n );\n }\n } catch (error) {\n if (isTypeError(error) || isSyntaxError(error)) {\n return;\n }\n throw error;\n }\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,sBAAe;AAEf,MAAM,uBAAuB,YAAY;AACvC,QAAM,kBAAkB,UAAM,eAAAA,SAAO,gBAAgB,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC;AAC3E,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACA,SAAO,gBAAAC,QAAG,SAAS,eAAe;AACpC;AAEA,MAAM,cAAc,CAAC,UACnB,iBAAiB,aACjB,MAAM,QAAQ,SAAS,qCAAqC;AAE9D,MAAM,gBAAgB,CAAC,UACrB,iBAAiB,eAAe,MAAM,QAAQ,SAAS,kBAAkB;AAEpE,MAAM,yBAAyB,YAAY;AAChD,QAAM,cAAc,MAAM,qBAAqB;AAE/C,MAAI;AACF,UAAM,oBACJ,KAAK,MAAM,YAAY,SAAS,CAAC,EAGjC,gBAAgB;AAClB,QAAI,CAAC,mBAAmB;AACtB;AAAA,IACF;AAEA,QAAI,CAAC,kBAAkB,WAAW,GAAG,GAAG;AACtC,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,QAAI,YAAY,KAAK,KAAK,cAAc,KAAK,GAAG;AAC9C;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;AAEO,MAAM,iBAAiB,YAAY;AACxC,QAAM,cAAc,MAAM,qBAAqB;AAE/C,MAAI;AACF,UAAM,OACJ,KAAK,MAAM,YAAY,SAAS,CAAC,EAGjC,MAAM;AACR,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AAEA,QAAI,SAAS,WAAW;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd,QAAI,YAAY,KAAK,KAAK,cAAc,KAAK,GAAG;AAC9C;AAAA,IACF;AACA,UAAM;AAAA,EACR;AACF;",
4
+ "sourcesContent": ["import findUp from 'find-up';\nimport fs from 'fs-extra';\n\nimport { log } from '../../../utils/logging';\n\nconst getParentPackageJson = async () => {\n const packageJsonPath = await findUp('package.json', { cwd: process.cwd() });\n if (!packageJsonPath) {\n throw new Error('package.json not found');\n }\n return fs.readFile(packageJsonPath);\n};\n\nconst isTypeError = (error: unknown): error is TypeError =>\n error instanceof TypeError &&\n error.message.includes('Cannot read properties of undefined');\n\nconst isSyntaxError = (error: unknown): error is SyntaxError =>\n error instanceof SyntaxError && error.message.includes('Unexpected token');\n\nexport const validServerlessVersion = async (): Promise<boolean> => {\n const packageJson = await getParentPackageJson();\n\n try {\n const serverlessVersion = (\n JSON.parse(packageJson.toString()) as {\n devDependencies: Record<string, string>;\n }\n ).devDependencies.serverless;\n if (!serverlessVersion) {\n return true;\n }\n\n if (!serverlessVersion.startsWith('4')) {\n log.warn(\n 'Serverless version not supported, please upgrade to 4.x to automatically update serverless files',\n );\n return false;\n }\n } catch (error) {\n if (isTypeError(error) || isSyntaxError(error)) {\n return true;\n }\n throw error;\n }\n return true;\n};\n\nexport const validSkubaType = async () => {\n const packageJson = await getParentPackageJson();\n\n try {\n const type = (\n JSON.parse(packageJson.toString()) as {\n skuba: Record<string, string>;\n }\n ).skuba.type;\n if (!type) {\n return true;\n }\n\n if (type === 'package') {\n log.warn(\n 'skuba type package is not supported, packages should be updated manually to ensure major runtime deprecations are intended',\n );\n return false;\n }\n } catch (error) {\n if (isTypeError(error) || isSyntaxError(error)) {\n return true;\n }\n throw error;\n }\n return true;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAmB;AACnB,sBAAe;AAEf,qBAAoB;AAEpB,MAAM,uBAAuB,YAAY;AACvC,QAAM,kBAAkB,UAAM,eAAAA,SAAO,gBAAgB,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC;AAC3E,MAAI,CAAC,iBAAiB;AACpB,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACA,SAAO,gBAAAC,QAAG,SAAS,eAAe;AACpC;AAEA,MAAM,cAAc,CAAC,UACnB,iBAAiB,aACjB,MAAM,QAAQ,SAAS,qCAAqC;AAE9D,MAAM,gBAAgB,CAAC,UACrB,iBAAiB,eAAe,MAAM,QAAQ,SAAS,kBAAkB;AAEpE,MAAM,yBAAyB,YAA8B;AAClE,QAAM,cAAc,MAAM,qBAAqB;AAE/C,MAAI;AACF,UAAM,oBACJ,KAAK,MAAM,YAAY,SAAS,CAAC,EAGjC,gBAAgB;AAClB,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,IACT;AAEA,QAAI,CAAC,kBAAkB,WAAW,GAAG,GAAG;AACtC,yBAAI;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,SAAS,OAAO;AACd,QAAI,YAAY,KAAK,KAAK,cAAc,KAAK,GAAG;AAC9C,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAEO,MAAM,iBAAiB,YAAY;AACxC,QAAM,cAAc,MAAM,qBAAqB;AAE/C,MAAI;AACF,UAAM,OACJ,KAAK,MAAM,YAAY,SAAS,CAAC,EAGjC,MAAM;AACR,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,WAAW;AACtB,yBAAI;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF,SAAS,OAAO;AACd,QAAI,YAAY,KAAK,KAAK,cAAc,KAAK,GAAG;AAC9C,aAAO;AAAA,IACT;AACA,UAAM;AAAA,EACR;AACA,SAAO;AACT;",
6
6
  "names": ["findUp", "fs"]
7
7
  }
package/lib/index.js CHANGED
@@ -26,15 +26,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var src_exports = {};
30
- __export(src_exports, {
29
+ var index_exports = {};
30
+ __export(index_exports, {
31
31
  Buildkite: () => Buildkite,
32
32
  Git: () => Git,
33
33
  GitHub: () => GitHub,
34
34
  Jest: () => Jest,
35
35
  Net: () => Net
36
36
  });
37
- module.exports = __toCommonJS(src_exports);
37
+ module.exports = __toCommonJS(index_exports);
38
38
  var Buildkite = __toESM(require("./api/buildkite"));
39
39
  var Git = __toESM(require("./api/git"));
40
40
  var GitHub = __toESM(require("./api/github"));
@@ -1,7 +1,7 @@
1
1
  import { z } from 'zod';
2
- export declare const TEMPLATE_NAMES: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package"];
2
+ export declare const TEMPLATE_NAMES: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package"];
3
3
  export type TemplateName = (typeof TEMPLATE_NAMES)[number];
4
- export declare const TEMPLATE_NAMES_WITH_BYO: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package", "github →"];
4
+ export declare const TEMPLATE_NAMES_WITH_BYO: readonly ["express-rest-api", "greeter", "koa-rest-api", "lambda-sqs-worker-cdk", "oss-npm-package", "private-npm-package", "github →"];
5
5
  interface TemplateDocumentationConfig {
6
6
  /**
7
7
  * The semantic version in which the template was first added.
@@ -48,7 +48,6 @@ const TEMPLATE_NAMES = [
48
48
  "express-rest-api",
49
49
  "greeter",
50
50
  "koa-rest-api",
51
- "lambda-sqs-worker",
52
51
  "lambda-sqs-worker-cdk",
53
52
  "oss-npm-package",
54
53
  "private-npm-package"
@@ -67,10 +66,6 @@ const TEMPLATE_DOCUMENTATION_CONFIG = {
67
66
  added: "3.4.1",
68
67
  filename: "api.md"
69
68
  },
70
- "lambda-sqs-worker": {
71
- added: "3.4.1",
72
- filename: "worker.md"
73
- },
74
69
  "lambda-sqs-worker-cdk": {
75
70
  added: "3.13.0",
76
71
  filename: "worker.md"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/template.ts"],
4
- "sourcesContent": ["import path from 'path';\n\nimport fs from 'fs-extra';\nimport { z } from 'zod';\n\nimport { projectTypeSchema } from './manifest';\nimport { packageManagerSchema } from './packageManager';\n\nexport const TEMPLATE_NAMES = [\n 'express-rest-api',\n 'greeter',\n 'koa-rest-api',\n 'lambda-sqs-worker',\n 'lambda-sqs-worker-cdk',\n 'oss-npm-package',\n 'private-npm-package',\n] as const;\n\nexport type TemplateName = (typeof TEMPLATE_NAMES)[number];\n\nexport const TEMPLATE_NAMES_WITH_BYO = [...TEMPLATE_NAMES, 'github \u2192'] as const;\n\ninterface TemplateDocumentationConfig {\n /**\n * The semantic version in which the template was first added.\n *\n * This is used to filter out historical changelogs.\n */\n added: string;\n\n /**\n * The Markdown file for the template in our `/docs`.\n *\n * This is used to compile per-template changelogs for our documentation site.\n */\n filename: string;\n}\n\nexport const TEMPLATE_DOCUMENTATION_CONFIG: Record<\n TemplateName,\n TemplateDocumentationConfig\n> = {\n 'express-rest-api': {\n added: '3.8.0',\n filename: 'api.md',\n },\n greeter: {\n added: '3.4.1',\n filename: 'barebones.md',\n },\n 'koa-rest-api': {\n added: '3.4.1',\n filename: 'api.md',\n },\n 'lambda-sqs-worker': {\n added: '3.4.1',\n filename: 'worker.md',\n },\n 'lambda-sqs-worker-cdk': {\n added: '3.13.0',\n filename: 'worker.md',\n },\n 'oss-npm-package': {\n added: '3.7.0',\n filename: 'package.md',\n },\n 'private-npm-package': {\n added: '3.6.0',\n filename: 'package.md',\n },\n};\n\nexport type TemplateConfig = z.infer<typeof templateConfigSchema>;\n\nexport const templateConfigSchema = z.object({\n fields: z.array(\n z.object({\n name: z.string(),\n message: z.string(),\n initial: z.string(),\n validate: z\n .function()\n .args(z.string())\n .returns(z.union([z.boolean(), z.string()]))\n .optional(),\n }),\n ),\n entryPoint: z.string().optional(),\n noSkip: z.boolean().optional(),\n packageManager: packageManagerSchema,\n type: projectTypeSchema.optional(),\n});\n\nexport const TEMPLATE_CONFIG_FILENAME = 'skuba.template.js';\n\nexport const TEMPLATE_DIR = path.join(__dirname, '..', '..', 'template');\n\nexport const BASE_TEMPLATE_DIR = path.join(TEMPLATE_DIR, 'base');\n\nexport const ensureTemplateConfigDeletion = (dir: string): Promise<void> =>\n fs.promises.rm(path.join(dir, TEMPLATE_CONFIG_FILENAME));\n\nexport const readBaseTemplateFile = (src: string): Promise<string> =>\n fs.promises.readFile(path.join(BASE_TEMPLATE_DIR, src), 'utf8');\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAe;AACf,iBAAkB;AAElB,sBAAkC;AAClC,4BAAqC;AAE9B,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,MAAM,0BAA0B,CAAC,GAAG,gBAAgB,eAAU;AAkB9D,MAAM,gCAGT;AAAA,EACF,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,qBAAqB;AAAA,IACnB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAIO,MAAM,uBAAuB,aAAE,OAAO;AAAA,EAC3C,QAAQ,aAAE;AAAA,IACR,aAAE,OAAO;AAAA,MACP,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,OAAO;AAAA,MAClB,SAAS,aAAE,OAAO;AAAA,MAClB,UAAU,aACP,SAAS,EACT,KAAK,aAAE,OAAO,CAAC,EACf,QAAQ,aAAE,MAAM,CAAC,aAAE,QAAQ,GAAG,aAAE,OAAO,CAAC,CAAC,CAAC,EAC1C,SAAS;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,YAAY,aAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,gBAAgB;AAAA,EAChB,MAAM,kCAAkB,SAAS;AACnC,CAAC;AAEM,MAAM,2BAA2B;AAEjC,MAAM,eAAe,YAAAA,QAAK,KAAK,WAAW,MAAM,MAAM,UAAU;AAEhE,MAAM,oBAAoB,YAAAA,QAAK,KAAK,cAAc,MAAM;AAExD,MAAM,+BAA+B,CAAC,QAC3C,gBAAAC,QAAG,SAAS,GAAG,YAAAD,QAAK,KAAK,KAAK,wBAAwB,CAAC;AAElD,MAAM,uBAAuB,CAAC,QACnC,gBAAAC,QAAG,SAAS,SAAS,YAAAD,QAAK,KAAK,mBAAmB,GAAG,GAAG,MAAM;",
4
+ "sourcesContent": ["import path from 'path';\n\nimport fs from 'fs-extra';\nimport { z } from 'zod';\n\nimport { projectTypeSchema } from './manifest';\nimport { packageManagerSchema } from './packageManager';\n\nexport const TEMPLATE_NAMES = [\n 'express-rest-api',\n 'greeter',\n 'koa-rest-api',\n 'lambda-sqs-worker-cdk',\n 'oss-npm-package',\n 'private-npm-package',\n] as const;\n\nexport type TemplateName = (typeof TEMPLATE_NAMES)[number];\n\nexport const TEMPLATE_NAMES_WITH_BYO = [...TEMPLATE_NAMES, 'github \u2192'] as const;\n\ninterface TemplateDocumentationConfig {\n /**\n * The semantic version in which the template was first added.\n *\n * This is used to filter out historical changelogs.\n */\n added: string;\n\n /**\n * The Markdown file for the template in our `/docs`.\n *\n * This is used to compile per-template changelogs for our documentation site.\n */\n filename: string;\n}\n\nexport const TEMPLATE_DOCUMENTATION_CONFIG: Record<\n TemplateName,\n TemplateDocumentationConfig\n> = {\n 'express-rest-api': {\n added: '3.8.0',\n filename: 'api.md',\n },\n greeter: {\n added: '3.4.1',\n filename: 'barebones.md',\n },\n 'koa-rest-api': {\n added: '3.4.1',\n filename: 'api.md',\n },\n 'lambda-sqs-worker-cdk': {\n added: '3.13.0',\n filename: 'worker.md',\n },\n 'oss-npm-package': {\n added: '3.7.0',\n filename: 'package.md',\n },\n 'private-npm-package': {\n added: '3.6.0',\n filename: 'package.md',\n },\n};\n\nexport type TemplateConfig = z.infer<typeof templateConfigSchema>;\n\nexport const templateConfigSchema = z.object({\n fields: z.array(\n z.object({\n name: z.string(),\n message: z.string(),\n initial: z.string(),\n validate: z\n .function()\n .args(z.string())\n .returns(z.union([z.boolean(), z.string()]))\n .optional(),\n }),\n ),\n entryPoint: z.string().optional(),\n noSkip: z.boolean().optional(),\n packageManager: packageManagerSchema,\n type: projectTypeSchema.optional(),\n});\n\nexport const TEMPLATE_CONFIG_FILENAME = 'skuba.template.js';\n\nexport const TEMPLATE_DIR = path.join(__dirname, '..', '..', 'template');\n\nexport const BASE_TEMPLATE_DIR = path.join(TEMPLATE_DIR, 'base');\n\nexport const ensureTemplateConfigDeletion = (dir: string): Promise<void> =>\n fs.promises.rm(path.join(dir, TEMPLATE_CONFIG_FILENAME));\n\nexport const readBaseTemplateFile = (src: string): Promise<string> =>\n fs.promises.readFile(path.join(BASE_TEMPLATE_DIR, src), 'utf8');\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAe;AACf,iBAAkB;AAElB,sBAAkC;AAClC,4BAAqC;AAE9B,MAAM,iBAAiB;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,MAAM,0BAA0B,CAAC,GAAG,gBAAgB,eAAU;AAkB9D,MAAM,gCAGT;AAAA,EACF,oBAAoB;AAAA,IAClB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,gBAAgB;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,yBAAyB;AAAA,IACvB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,mBAAmB;AAAA,IACjB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AAAA,EACA,uBAAuB;AAAA,IACrB,OAAO;AAAA,IACP,UAAU;AAAA,EACZ;AACF;AAIO,MAAM,uBAAuB,aAAE,OAAO;AAAA,EAC3C,QAAQ,aAAE;AAAA,IACR,aAAE,OAAO;AAAA,MACP,MAAM,aAAE,OAAO;AAAA,MACf,SAAS,aAAE,OAAO;AAAA,MAClB,SAAS,aAAE,OAAO;AAAA,MAClB,UAAU,aACP,SAAS,EACT,KAAK,aAAE,OAAO,CAAC,EACf,QAAQ,aAAE,MAAM,CAAC,aAAE,QAAQ,GAAG,aAAE,OAAO,CAAC,CAAC,CAAC,EAC1C,SAAS;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EACA,YAAY,aAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,gBAAgB;AAAA,EAChB,MAAM,kCAAkB,SAAS;AACnC,CAAC;AAEM,MAAM,2BAA2B;AAEjC,MAAM,eAAe,YAAAA,QAAK,KAAK,WAAW,MAAM,MAAM,UAAU;AAEhE,MAAM,oBAAoB,YAAAA,QAAK,KAAK,cAAc,MAAM;AAExD,MAAM,+BAA+B,CAAC,QAC3C,gBAAAC,QAAG,SAAS,GAAG,YAAAD,QAAK,KAAK,KAAK,wBAAwB,CAAC;AAElD,MAAM,uBAAuB,CAAC,QACnC,gBAAAC,QAAG,SAAS,SAAS,YAAAD,QAAK,KAAK,mBAAmB,GAAG,GAAG,MAAM;",
6
6
  "names": ["path", "fs"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skuba",
3
- "version": "10.0.0-node-22-20250115223210",
3
+ "version": "10.0.0-node-22-20250213035014",
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",
@@ -64,7 +64,7 @@
64
64
  "dotenv": "^16.0.0",
65
65
  "ejs": "^3.1.6",
66
66
  "enquirer": "^2.3.6",
67
- "esbuild": "~0.24.0",
67
+ "esbuild": "~0.25.0",
68
68
  "eslint": "^9.11.1",
69
69
  "execa": "^5.0.0",
70
70
  "fast-glob": "^3.3.2",
@@ -85,7 +85,7 @@
85
85
  "npm-run-path": "^4.0.1",
86
86
  "npm-which": "^3.0.1",
87
87
  "picomatch": "^4.0.0",
88
- "prettier": "~3.4.0",
88
+ "prettier": "~3.5.0",
89
89
  "prettier-plugin-packagejson": "^2.4.10",
90
90
  "read-pkg-up": "^7.0.1",
91
91
  "semantic-release": "^22.0.12",
@@ -99,15 +99,15 @@
99
99
  "typescript": "~5.7.0",
100
100
  "validate-npm-package-name": "^6.0.0",
101
101
  "zod": "^3.22.4",
102
- "eslint-config-skuba": "5.1.0-node-22-20250115223210"
102
+ "eslint-config-skuba": "5.1.0-node-22-20250213035014"
103
103
  },
104
104
  "devDependencies": {
105
- "@changesets/cli": "2.27.11",
105
+ "@changesets/cli": "2.27.12",
106
106
  "@changesets/get-github-info": "0.6.0",
107
107
  "@jest/reporters": "29.7.0",
108
108
  "@jest/test-result": "29.7.0",
109
109
  "@types/ejs": "3.1.5",
110
- "@types/express": "4.17.21",
110
+ "@types/express": "5.0.0",
111
111
  "@types/fs-extra": "11.0.4",
112
112
  "@types/koa": "2.15.0",
113
113
  "@types/libnpmsearch": "2.0.7",
@@ -115,20 +115,20 @@
115
115
  "@types/minimist": "1.2.5",
116
116
  "@types/module-alias": "2.0.4",
117
117
  "@types/npm-which": "3.0.3",
118
- "@types/picomatch": "3.0.1",
118
+ "@types/picomatch": "3.0.2",
119
119
  "@types/semver": "7.5.8",
120
120
  "@types/supertest": "6.0.2",
121
121
  "@types/validate-npm-package-name": "4.0.2",
122
- "enhanced-resolve": "5.18.0",
123
- "express": "4.21.2",
124
- "fastify": "5.2.0",
122
+ "enhanced-resolve": "5.18.1",
123
+ "express": "5.0.1",
124
+ "fastify": "5.2.1",
125
125
  "jest-diff": "29.7.0",
126
126
  "jsonfile": "6.1.0",
127
- "koa": "2.15.3",
128
- "memfs": "4.15.1",
127
+ "koa": "2.15.4",
128
+ "memfs": "4.17.0",
129
129
  "remark-cli": "12.0.1",
130
- "remark-preset-lint-recommended": "7.0.0",
131
- "semver": "7.6.3",
130
+ "remark-preset-lint-recommended": "7.0.1",
131
+ "semver": "7.7.1",
132
132
  "supertest": "7.0.0",
133
133
  "type-fest": "2.19.0"
134
134
  },
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "compilerOptions": {
3
3
  "baseUrl": ".",
4
- "lib": ["ES2022"],
4
+ "lib": ["ES2024"],
5
5
  "outDir": "lib",
6
6
  "paths": {
7
7
  "src": ["src"]
8
8
  },
9
- "target": "ES2022"
9
+ "target": "ES2024"
10
10
  },
11
11
  "exclude": ["lib*/**/*"],
12
12
  "extends": "skuba/config/tsconfig.json"
@@ -57,7 +57,7 @@ steps:
57
57
  - *aws-sm
58
58
  - *private-npm
59
59
  - *docker-ecr-cache
60
- - docker-compose#v5.5.0:
60
+ - docker-compose#v5.6.0:
61
61
  run: app
62
62
  environment:
63
63
  - GITHUB_API_TOKEN
@@ -70,7 +70,7 @@ steps:
70
70
  - *aws-sm
71
71
  - *private-npm
72
72
  - *docker-ecr-cache
73
- - seek-jobs/gantry#v3.0.0:
73
+ - seek-jobs/gantry#v4.0.0:
74
74
  command: build
75
75
  file: gantry.build.yml
76
76
  region: <%- region %>
@@ -87,7 +87,7 @@ steps:
87
87
  concurrency_group: <%- teamName %>/deploy/gantry/<%- devGantryEnvironmentName %>
88
88
  key: deploy-dev
89
89
  plugins:
90
- - seek-jobs/gantry#v3.0.0:
90
+ - seek-jobs/gantry#v4.0.0:
91
91
  command: apply
92
92
  environment: <%- devGantryEnvironmentName %>
93
93
  file: gantry.apply.yml
@@ -102,7 +102,7 @@ steps:
102
102
  concurrency_group: <%- teamName %>/deploy/gantry/<%- prodGantryEnvironmentName %>
103
103
  depends_on: deploy-dev
104
104
  plugins:
105
- - seek-jobs/gantry#v3.0.0:
105
+ - seek-jobs/gantry#v4.0.0:
106
106
  command: apply
107
107
  environment: <%- prodGantryEnvironmentName %>
108
108
  file: gantry.apply.yml
@@ -9,6 +9,5 @@ image: '{{values "prodAccountId"}}.dkr.ecr.<%- region %>.amazonaws.com/{{values
9
9
  # datadogSecretId: arn:aws:secretsmanager:<%- region %>:<aws-account-id>:secret:<secret-name>
10
10
 
11
11
  tags:
12
- seek:source:sha: '{{.CommitSHA}}'
13
12
  seek:source:url: 'https://github.com/SEEK-Jobs/<%- repoName %>'
14
- # seek:system:name: 'TODO: https://rfc.skinfra.xyz/RFC019-AWS-Tagging-Standard.html#required-tags'
13
+ # seek:system:name: 'TODO: https://rfc.skinfra.xyz/RFC051-AWS-Tagging-Standard.html#tagging-schema'
@@ -1 +1 @@
1
- 20
1
+ 22
@@ -12,7 +12,7 @@ RUN pnpm install --offline --prod
12
12
 
13
13
  ###
14
14
 
15
- FROM gcr.io/distroless/nodejs20-debian12 AS runtime
15
+ FROM gcr.io/distroless/nodejs22-debian12 AS runtime
16
16
 
17
17
  WORKDIR /workdir
18
18