skuba 9.0.0-renovate-eslint-9.x-20240811060718 → 9.0.0-renovate-eslint-9.x-20240923103202

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 (56) hide show
  1. package/lib/api/buildkite/annotate.d.ts +2 -0
  2. package/lib/api/buildkite/annotate.js +14 -1
  3. package/lib/api/buildkite/annotate.js.map +2 -2
  4. package/lib/cli/adapter/eslint.js +12 -6
  5. package/lib/cli/adapter/eslint.js.map +2 -2
  6. package/lib/cli/build/index.js +1 -0
  7. package/lib/cli/build/index.js.map +1 -1
  8. package/lib/cli/configure/analyseDependencies.js +0 -2
  9. package/lib/cli/configure/analyseDependencies.js.map +2 -2
  10. package/lib/cli/configure/analysis/package.d.ts +1 -2
  11. package/lib/cli/configure/analysis/package.js +0 -27
  12. package/lib/cli/configure/analysis/package.js.map +2 -2
  13. package/lib/cli/configure/dependencies/skubaDeps.js +4 -3
  14. package/lib/cli/configure/dependencies/skubaDeps.js.map +2 -2
  15. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/collapseDuplicateMergeKeys.js +2 -5
  16. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/collapseDuplicateMergeKeys.js.map +2 -2
  17. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/index.js +5 -0
  18. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/index.js.map +2 -2
  19. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/patchDockerCompose.d.ts +2 -0
  20. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/patchDockerCompose.js +99 -0
  21. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/patchDockerCompose.js.map +7 -0
  22. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/upgradeESLint.js +19 -15
  23. package/lib/cli/lint/internalLints/upgrade/patches/8.2.1/upgradeESLint.js.map +2 -2
  24. package/lib/cli/node.d.ts +2 -1
  25. package/lib/cli/node.js +23 -18
  26. package/lib/cli/node.js.map +3 -3
  27. package/lib/cli/start.js +3 -3
  28. package/lib/cli/start.js.map +2 -2
  29. package/lib/utils/template.d.ts +4 -4
  30. package/package.json +11 -10
  31. package/template/express-rest-api/.buildkite/pipeline.yml +1 -1
  32. package/template/express-rest-api/Dockerfile.dev-deps +1 -1
  33. package/template/express-rest-api/package.json +2 -2
  34. package/template/greeter/.buildkite/pipeline.yml +1 -1
  35. package/template/greeter/Dockerfile +1 -1
  36. package/template/greeter/package.json +2 -2
  37. package/template/koa-rest-api/.buildkite/pipeline.yml +1 -1
  38. package/template/koa-rest-api/Dockerfile.dev-deps +1 -1
  39. package/template/koa-rest-api/package.json +6 -6
  40. package/template/koa-rest-api/src/framework/server.ts +3 -5
  41. package/template/lambda-sqs-worker/.buildkite/pipeline.yml +2 -2
  42. package/template/lambda-sqs-worker/Dockerfile +1 -1
  43. package/template/lambda-sqs-worker/package.json +2 -2
  44. package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +2 -2
  45. package/template/lambda-sqs-worker-cdk/Dockerfile +1 -1
  46. package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +447 -891
  47. package/template/lambda-sqs-worker-cdk/infra/appStack.test.ts +4 -1
  48. package/template/lambda-sqs-worker-cdk/infra/appStack.ts +5 -84
  49. package/template/lambda-sqs-worker-cdk/infra/config.ts +1 -1
  50. package/template/lambda-sqs-worker-cdk/infra/index.ts +20 -3
  51. package/template/lambda-sqs-worker-cdk/package.json +4 -3
  52. package/template/oss-npm-package/.github/workflows/release.yml +1 -1
  53. package/template/oss-npm-package/_package.json +1 -1
  54. package/template/private-npm-package/_package.json +1 -1
  55. package/template/lambda-sqs-worker-cdk/src/postHook.ts +0 -154
  56. package/template/lambda-sqs-worker-cdk/src/preHook.ts +0 -95
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/cli/lint/internalLints/upgrade/patches/8.2.1/upgradeESLint.ts"],
4
- "sourcesContent": ["// eslint-disable-next-line no-restricted-imports -- fs-extra is mocked\nimport * as fsp from 'fs/promises';\nimport path from 'path';\nimport { inspect } from 'util';\n\nimport { promises as fsExtra } from 'fs-extra';\n\nimport type { PatchFunction, PatchReturnType } from '../..';\nimport { createExec } from '../../../../../../utils/exec';\nimport { log } from '../../../../../../utils/logging';\nimport { createDestinationFileReader } from '../../../../../configure/analysis/project';\nimport { mergeWithConfigFile } from '../../../../../configure/processing/configFile';\nimport { formatPrettier } from '../../../../../configure/processing/prettier';\n\nconst upgradeESLint: PatchFunction = async ({\n mode,\n dir: cwd = process.cwd(),\n}): Promise<PatchReturnType> => {\n const readFile = createDestinationFileReader(cwd);\n const [originalIgnoreContents, eslintConfig] = await Promise.all([\n readFile('.eslintignore'),\n readFile('.eslintrc.js'),\n ]);\n\n if (eslintConfig === undefined) {\n return {\n result: 'skip',\n reason: 'no .eslintrc.js - have you already migrated?',\n };\n }\n\n if (mode === 'lint') {\n return { result: 'apply' };\n }\n\n const mergedIgnoreContent = mergeWithConfigFile(\n '',\n 'ignore',\n )(originalIgnoreContents);\n\n const exec = createExec({\n cwd: process.cwd(),\n stdio: 'ignore',\n });\n\n // eslint-migrate-config require()s the file, so for testability, put it in a temporary location\n const dir = await writeTemporaryFiles({\n '.eslintrc.js': eslintConfig,\n ...(mergedIgnoreContent.trim().length > 0\n ? { '.eslintignore': mergedIgnoreContent }\n : {}),\n });\n try {\n await exec(\n 'eslint-migrate-config',\n path.join(dir, '.eslintrc.js'),\n '--commonjs',\n );\n\n const output = fiddleWithOutput(\n await fsp.readFile(path.join(dir, 'eslint.config.cjs'), 'utf-8'),\n );\n await fsExtra.writeFile(\n 'eslint.config.js',\n await formatPrettier(output, { filepath: 'eslint.config.js' }),\n );\n\n await Promise.all([\n originalIgnoreContents === undefined\n ? Promise.resolve()\n : fsExtra.rm('.eslintignore'),\n fsExtra.rm('.eslintrc.js'),\n ]);\n\n return { result: 'apply' };\n } finally {\n await fsp.rm(dir, { recursive: true });\n }\n};\n\nconst writeTemporaryFiles = async (contents: Record<string, string>) => {\n const dir = await fsp.mkdtemp('eslint-migrate-config');\n\n for (const [file, content] of Object.entries(contents)) {\n await fsp.writeFile(path.join(dir, file), content);\n }\n\n return dir;\n};\n\nconst fiddleWithOutput = (input: string) => {\n let output = input.replace(/compat.extends\\([\"']skuba[\"']\\)/, 'skuba');\n\n if (!output.includes('eslint-config-skuba')) {\n output = `const skuba = require('eslint-config-skuba');\\n\\n${output}`;\n }\n\n if (!output.includes('compat.')) {\n output = output.replace(/const compat = new FlatCompat\\(\\{[^}]+\\}\\);/m, '');\n output = output.replace(\n /const \\{\\s*FlatCompat,?\\s*\\}\\s*=\\s*require\\([\"']@eslint\\/eslintrc[\"']\\);/m,\n '',\n );\n }\n\n if (!output.includes('js.')) {\n output = output.replace(/const js = require\\(['\"]@eslint\\/js['\"]\\);/, '');\n }\n\n output = output.replace(\n /^const skuba = require\\('eslint-config-skuba'\\);\\s*module.exports = \\[...skuba\\];$/m,\n \"module.exports = require('eslint-config-skuba');\",\n );\n\n return output;\n};\n\nexport const tryUpgradeESLint: PatchFunction = async (config) => {\n try {\n return await upgradeESLint(config);\n } catch (err) {\n log.warn('Failed to upgrade ESLint to flat config.');\n log.subtle(inspect(err));\n return { result: 'skip', reason: 'due to an error' };\n }\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// eslint-disable-next-line no-restricted-imports -- fs-extra is mocked\nimport * as fsp from 'fs/promises';\nimport path from 'path';\nimport { inspect } from 'util';\n\nimport { promises as fsExtra } from 'fs-extra';\n\nimport type { PatchFunction, PatchReturnType } from '../..';\nimport { createExec } from '../../../../../../utils/exec';\nimport { log } from '../../../../../../utils/logging';\nimport { createDestinationFileReader } from '../../../../../configure/analysis/project';\nimport { mergeWithConfigFile } from '../../../../../configure/processing/configFile';\nimport { formatPrettier } from '../../../../../configure/processing/prettier';\n\nconst IGNORE_FILE = '.eslintignore';\nconst OLD_CONFIG_FILE = '.eslintrc.js';\nconst NEW_CONFIG_FILE_CJS = 'eslint.config.cjs';\nconst NEW_CONFIG_FILE_JS = 'eslint.config.js';\n\nconst upgradeESLint: PatchFunction = async ({\n mode,\n dir: cwd = process.cwd(),\n}): Promise<PatchReturnType> => {\n const readFile = createDestinationFileReader(cwd);\n const [ignoreFileContents, oldConfig] = await Promise.all([\n readFile(IGNORE_FILE),\n readFile(OLD_CONFIG_FILE),\n ]);\n\n if (oldConfig === undefined) {\n return {\n result: 'skip',\n reason: `no ${OLD_CONFIG_FILE} - have you already migrated?`,\n };\n }\n\n if (mode === 'lint') {\n return { result: 'apply' };\n }\n\n const ignoreContentsWithoutSkubaManaged = mergeWithConfigFile(\n '',\n 'ignore',\n )(ignoreFileContents);\n\n const exec = createExec({\n cwd: process.cwd(),\n stdio: 'ignore',\n });\n\n // eslint-migrate-config require()s the file, so for testability, put it in a temporary location\n const dir = await writeTemporaryFiles({\n [OLD_CONFIG_FILE]: oldConfig,\n ...(ignoreContentsWithoutSkubaManaged.trim().length > 0\n ? { [IGNORE_FILE]: ignoreContentsWithoutSkubaManaged }\n : {}),\n });\n try {\n await exec(\n 'eslint-migrate-config',\n path.join(dir, OLD_CONFIG_FILE),\n '--commonjs',\n );\n\n const output = fiddleWithOutput(\n await fsp.readFile(path.join(dir, NEW_CONFIG_FILE_CJS), 'utf-8'),\n );\n await fsExtra.writeFile(\n NEW_CONFIG_FILE_JS,\n await formatPrettier(output, { filepath: NEW_CONFIG_FILE_JS }),\n );\n\n await Promise.all([\n ignoreFileContents === undefined\n ? Promise.resolve()\n : fsExtra.rm(IGNORE_FILE),\n fsExtra.rm(OLD_CONFIG_FILE),\n ]);\n\n return { result: 'apply' };\n } finally {\n await fsp.rm(dir, { recursive: true });\n }\n};\n\nconst writeTemporaryFiles = async (contents: Record<string, string>) => {\n const dir = await fsp.mkdtemp('eslint-migrate-config');\n\n for (const [file, content] of Object.entries(contents)) {\n await fsp.writeFile(path.join(dir, file), content);\n }\n\n return dir;\n};\n\nconst fiddleWithOutput = (input: string) => {\n let output = input.replace(/compat.extends\\([\"']skuba[\"']\\)/, 'skuba');\n\n if (!output.includes('eslint-config-skuba')) {\n output = `const skuba = require('eslint-config-skuba');\\n\\n${output}`;\n }\n\n if (!output.includes('compat.')) {\n output = output.replace(/const compat = new FlatCompat\\(\\{[^}]+\\}\\);/m, '');\n output = output.replace(\n /const \\{\\s*FlatCompat,?\\s*\\}\\s*=\\s*require\\([\"']@eslint\\/eslintrc[\"']\\);/m,\n '',\n );\n }\n\n if (!output.includes('js.')) {\n output = output.replace(/const js = require\\(['\"]@eslint\\/js['\"]\\);/, '');\n }\n\n output = output.replace(\n /^const skuba = require\\('eslint-config-skuba'\\);\\s*module.exports = \\[...skuba\\];$/m,\n \"module.exports = require('eslint-config-skuba');\",\n );\n\n return output;\n};\n\nexport const tryUpgradeESLint: PatchFunction = async (config) => {\n try {\n return await upgradeESLint(config);\n } catch (err) {\n log.warn('Failed to upgrade ESLint to flat config.');\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": ["path", "fsExtra"]
7
7
  }
package/lib/cli/node.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ import execa from 'execa';
1
2
  export declare const longRunning = true;
2
- export declare const node: () => Promise<void | import("execa").ExecaReturnValue<string>>;
3
+ export declare const node: () => Promise<execa.ExecaReturnValue<string>>;
package/lib/cli/node.js CHANGED
@@ -33,8 +33,8 @@ __export(node_exports, {
33
33
  });
34
34
  module.exports = __toCommonJS(node_exports);
35
35
  var import_path = __toESM(require("path"));
36
+ var import_execa = __toESM(require("execa"));
36
37
  var import_get_port = __toESM(require("get-port"));
37
- var tsNode = __toESM(require("ts-node"));
38
38
  var import_args = require("../utils/args");
39
39
  var import_exec = require("../utils/exec");
40
40
  var import_validation = require("../utils/validation");
@@ -42,6 +42,13 @@ const longRunning = true;
42
42
  const node = async () => {
43
43
  const args = (0, import_args.parseRunArgs)(process.argv.slice(2));
44
44
  const availablePort = await (0, import_get_port.default)();
45
+ const commonArgs = [
46
+ ...args.node,
47
+ "--require",
48
+ require.resolve("dotenv/config"),
49
+ "--require",
50
+ require.resolve("tsconfig-paths/register")
51
+ ];
45
52
  if (args.entryPoint) {
46
53
  const exec = (0, import_exec.createExec)({
47
54
  env: {
@@ -50,27 +57,25 @@ const node = async () => {
50
57
  }
51
58
  });
52
59
  return exec(
53
- "node",
54
- ...args.node,
55
- "--require",
56
- "dotenv/config",
57
- "--require",
58
- "tsconfig-paths/register",
59
- "--require",
60
- "ts-node/register/transpile-only",
61
- // Override dangerously warn-only default on Node.js <15 so that we
62
- // predictably return a non-zero exit code on an unhandled rejection.
63
- "--unhandled-rejections=throw",
60
+ "tsx",
61
+ ...commonArgs,
64
62
  import_path.default.join(__dirname, "..", "wrapper"),
65
63
  ...args.script
66
64
  );
67
65
  }
68
- return tsNode.createRepl({
69
- service: tsNode.register({
70
- require: ["dotenv/config", "tsconfig-paths/register"],
71
- transpileOnly: true
72
- })
73
- }).start();
66
+ return (0, import_execa.default)(
67
+ require.resolve("tsx/cli"),
68
+ [
69
+ ...commonArgs,
70
+ "--require",
71
+ // Unsure if bug or feature that this is needed, but tsx appears to not do anything typescript in the REPL without this!
72
+ // Doesn't occur when just running the tsx binary directly 🧐
73
+ require.resolve("tsx/patch-repl")
74
+ ],
75
+ {
76
+ stdio: "inherit"
77
+ }
78
+ );
74
79
  };
75
80
  // Annotate the CommonJS export names for ESM import in node:
76
81
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cli/node.ts"],
4
- "sourcesContent": ["import path from 'path';\n\nimport getPort from 'get-port';\nimport * as tsNode from 'ts-node';\n\nimport { parseRunArgs } from '../utils/args';\nimport { createExec } from '../utils/exec';\nimport { isIpPort } from '../utils/validation';\n\nexport const longRunning = true;\n\nexport const node = async () => {\n const args = parseRunArgs(process.argv.slice(2));\n\n const availablePort = await getPort();\n\n if (args.entryPoint) {\n const exec = createExec({\n env: {\n __SKUBA_ENTRY_POINT: args.entryPoint,\n __SKUBA_PORT: String(isIpPort(args.port) ? args.port : availablePort),\n },\n });\n\n // Run a script with plain `node` to support inspector options.\n // https://github.com/TypeStrong/ts-node#programmatic\n return exec(\n 'node',\n ...args.node,\n '--require',\n 'dotenv/config',\n '--require',\n 'tsconfig-paths/register',\n '--require',\n 'ts-node/register/transpile-only',\n // Override dangerously warn-only default on Node.js <15 so that we\n // predictably return a non-zero exit code on an unhandled rejection.\n '--unhandled-rejections=throw',\n path.join(__dirname, '..', 'wrapper'),\n ...args.script,\n );\n }\n\n // REPL with `ts-node` to support import statements.\n return tsNode\n .createRepl({\n service: tsNode.register({\n require: ['dotenv/config', 'tsconfig-paths/register'],\n transpileOnly: true,\n }),\n })\n .start();\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAoB;AACpB,aAAwB;AAExB,kBAA6B;AAC7B,kBAA2B;AAC3B,wBAAyB;AAElB,MAAM,cAAc;AAEpB,MAAM,OAAO,YAAY;AAC9B,QAAM,WAAO,0BAAa,QAAQ,KAAK,MAAM,CAAC,CAAC;AAE/C,QAAM,gBAAgB,UAAM,gBAAAA,SAAQ;AAEpC,MAAI,KAAK,YAAY;AACnB,UAAM,WAAO,wBAAW;AAAA,MACtB,KAAK;AAAA,QACH,qBAAqB,KAAK;AAAA,QAC1B,cAAc,WAAO,4BAAS,KAAK,IAAI,IAAI,KAAK,OAAO,aAAa;AAAA,MACtE;AAAA,IACF,CAAC;AAID,WAAO;AAAA,MACL;AAAA,MACA,GAAG,KAAK;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA;AAAA,MAGA;AAAA,MACA,YAAAC,QAAK,KAAK,WAAW,MAAM,SAAS;AAAA,MACpC,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAGA,SAAO,OACJ,WAAW;AAAA,IACV,SAAS,OAAO,SAAS;AAAA,MACvB,SAAS,CAAC,iBAAiB,yBAAyB;AAAA,MACpD,eAAe;AAAA,IACjB,CAAC;AAAA,EACH,CAAC,EACA,MAAM;AACX;",
6
- "names": ["getPort", "path"]
4
+ "sourcesContent": ["import path from 'path';\n\nimport execa from 'execa';\nimport getPort from 'get-port';\n\nimport { parseRunArgs } from '../utils/args';\nimport { createExec } from '../utils/exec';\nimport { isIpPort } from '../utils/validation';\n\nexport const longRunning = true;\n\nexport const node = async () => {\n const args = parseRunArgs(process.argv.slice(2));\n\n const availablePort = await getPort();\n\n const commonArgs = [\n ...args.node,\n '--require',\n require.resolve('dotenv/config'),\n '--require',\n require.resolve('tsconfig-paths/register'),\n ];\n\n if (args.entryPoint) {\n const exec = createExec({\n env: {\n __SKUBA_ENTRY_POINT: args.entryPoint,\n __SKUBA_PORT: String(isIpPort(args.port) ? args.port : availablePort),\n },\n });\n\n return exec(\n 'tsx',\n ...commonArgs,\n path.join(__dirname, '..', 'wrapper'),\n ...args.script,\n );\n }\n\n return execa(\n require.resolve('tsx/cli'),\n [\n ...commonArgs,\n '--require',\n // Unsure if bug or feature that this is needed, but tsx appears to not do anything typescript in the REPL without this!\n // Doesn't occur when just running the tsx binary directly \uD83E\uDDD0\n require.resolve('tsx/patch-repl'),\n ],\n {\n stdio: 'inherit',\n },\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,mBAAkB;AAClB,sBAAoB;AAEpB,kBAA6B;AAC7B,kBAA2B;AAC3B,wBAAyB;AAElB,MAAM,cAAc;AAEpB,MAAM,OAAO,YAAY;AAC9B,QAAM,WAAO,0BAAa,QAAQ,KAAK,MAAM,CAAC,CAAC;AAE/C,QAAM,gBAAgB,UAAM,gBAAAA,SAAQ;AAEpC,QAAM,aAAa;AAAA,IACjB,GAAG,KAAK;AAAA,IACR;AAAA,IACA,gBAAgB,eAAe;AAAA,IAC/B;AAAA,IACA,gBAAgB,yBAAyB;AAAA,EAC3C;AAEA,MAAI,KAAK,YAAY;AACnB,UAAM,WAAO,wBAAW;AAAA,MACtB,KAAK;AAAA,QACH,qBAAqB,KAAK;AAAA,QAC1B,cAAc,WAAO,4BAAS,KAAK,IAAI,IAAI,KAAK,OAAO,aAAa;AAAA,MACtE;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,GAAG;AAAA,MACH,YAAAC,QAAK,KAAK,WAAW,MAAM,SAAS;AAAA,MACpC,GAAG,KAAK;AAAA,IACV;AAAA,EACF;AAEA,aAAO,aAAAC;AAAA,IACL,gBAAgB,SAAS;AAAA,IACzB;AAAA,MACE,GAAG;AAAA,MACH;AAAA;AAAA;AAAA,MAGA,gBAAgB,gBAAgB;AAAA,IAClC;AAAA,IACA;AAAA,MACE,OAAO;AAAA,IACT;AAAA,EACF;AACF;",
6
+ "names": ["getPort", "path", "execa"]
7
7
  }
package/lib/cli/start.js CHANGED
@@ -50,14 +50,14 @@ const start = async () => {
50
50
  }
51
51
  });
52
52
  return execProcess(
53
- "ts-node-dev",
53
+ "tsx",
54
+ "watch",
55
+ "--clear-screen=false",
54
56
  ...args.node,
55
57
  "--require",
56
58
  "dotenv/config",
57
59
  "--require",
58
60
  "tsconfig-paths/register",
59
- "--respawn",
60
- "--transpile-only",
61
61
  import_path.default.join(__dirname, "..", "wrapper"),
62
62
  ...args.script
63
63
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/cli/start.ts"],
4
- "sourcesContent": ["import path from 'path';\n\nimport getPort from 'get-port';\n\nimport { parseRunArgs } from '../utils/args';\nimport { createExec } from '../utils/exec';\nimport { getEntryPointFromManifest } from '../utils/manifest';\nimport { isIpPort } from '../utils/validation';\n\nexport const start = async () => {\n const [args, availablePort] = await Promise.all([\n parseRunArgs(process.argv.slice(2)),\n getPort(),\n ]);\n\n args.entryPoint ??= await getEntryPointFromManifest();\n\n const execProcess = createExec({\n env: {\n __SKUBA_ENTRY_POINT: args.entryPoint,\n __SKUBA_PORT: String(isIpPort(args.port) ? args.port : availablePort),\n },\n });\n\n return execProcess(\n 'ts-node-dev',\n ...args.node,\n '--require',\n 'dotenv/config',\n '--require',\n 'tsconfig-paths/register',\n '--respawn',\n '--transpile-only',\n path.join(__dirname, '..', 'wrapper'),\n ...args.script,\n );\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAoB;AAEpB,kBAA6B;AAC7B,kBAA2B;AAC3B,sBAA0C;AAC1C,wBAAyB;AAElB,MAAM,QAAQ,YAAY;AAC/B,QAAM,CAAC,MAAM,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC9C,0BAAa,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,QAClC,gBAAAA,SAAQ;AAAA,EACV,CAAC;AAED,OAAK,eAAe,UAAM,2CAA0B;AAEpD,QAAM,kBAAc,wBAAW;AAAA,IAC7B,KAAK;AAAA,MACH,qBAAqB,KAAK;AAAA,MAC1B,cAAc,WAAO,4BAAS,KAAK,IAAI,IAAI,KAAK,OAAO,aAAa;AAAA,IACtE;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,GAAG,KAAK;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAAC,QAAK,KAAK,WAAW,MAAM,SAAS;AAAA,IACpC,GAAG,KAAK;AAAA,EACV;AACF;",
4
+ "sourcesContent": ["import path from 'path';\n\nimport getPort from 'get-port';\n\nimport { parseRunArgs } from '../utils/args';\nimport { createExec } from '../utils/exec';\nimport { getEntryPointFromManifest } from '../utils/manifest';\nimport { isIpPort } from '../utils/validation';\n\nexport const start = async () => {\n const [args, availablePort] = await Promise.all([\n parseRunArgs(process.argv.slice(2)),\n getPort(),\n ]);\n\n args.entryPoint ??= await getEntryPointFromManifest();\n\n const execProcess = createExec({\n env: {\n __SKUBA_ENTRY_POINT: args.entryPoint,\n __SKUBA_PORT: String(isIpPort(args.port) ? args.port : availablePort),\n },\n });\n\n return execProcess(\n 'tsx',\n 'watch',\n '--clear-screen=false',\n ...args.node,\n '--require',\n 'dotenv/config',\n '--require',\n 'tsconfig-paths/register',\n path.join(__dirname, '..', 'wrapper'),\n ...args.script,\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiB;AAEjB,sBAAoB;AAEpB,kBAA6B;AAC7B,kBAA2B;AAC3B,sBAA0C;AAC1C,wBAAyB;AAElB,MAAM,QAAQ,YAAY;AAC/B,QAAM,CAAC,MAAM,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC9C,0BAAa,QAAQ,KAAK,MAAM,CAAC,CAAC;AAAA,QAClC,gBAAAA,SAAQ;AAAA,EACV,CAAC;AAED,OAAK,eAAe,UAAM,2CAA0B;AAEpD,QAAM,kBAAc,wBAAW;AAAA,IAC7B,KAAK;AAAA,MACH,qBAAqB,KAAK;AAAA,MAC1B,cAAc,WAAO,4BAAS,KAAK,IAAI,IAAI,KAAK,OAAO,aAAa;AAAA,IACtE;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG,KAAK;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAAC,QAAK,KAAK,WAAW,MAAM,SAAS;AAAA,IACpC,GAAG,KAAK;AAAA,EACV;AACF;",
6
6
  "names": ["getPort", "path"]
7
7
  }
@@ -28,12 +28,12 @@ export declare const templateConfigSchema: z.ZodObject<{
28
28
  message: string;
29
29
  name: string;
30
30
  initial: string;
31
- validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
31
+ validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
32
32
  }, {
33
33
  message: string;
34
34
  name: string;
35
35
  initial: string;
36
- validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
36
+ validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
37
37
  }>, "many">;
38
38
  entryPoint: z.ZodOptional<z.ZodString>;
39
39
  noSkip: z.ZodOptional<z.ZodBoolean>;
@@ -44,7 +44,7 @@ export declare const templateConfigSchema: z.ZodObject<{
44
44
  message: string;
45
45
  name: string;
46
46
  initial: string;
47
- validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
47
+ validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
48
48
  }[];
49
49
  packageManager: "yarn" | "pnpm";
50
50
  type?: "package" | "application" | undefined;
@@ -55,7 +55,7 @@ export declare const templateConfigSchema: z.ZodObject<{
55
55
  message: string;
56
56
  name: string;
57
57
  initial: string;
58
- validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
58
+ validate?: ((args_0: string, ...args: unknown[]) => string | boolean) | undefined;
59
59
  }[];
60
60
  type?: "package" | "application" | undefined;
61
61
  entryPoint?: string | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skuba",
3
- "version": "9.0.0-renovate-eslint-9.x-20240811060718",
3
+ "version": "9.0.0-renovate-eslint-9.x-20240923103202",
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",
@@ -58,13 +58,13 @@
58
58
  "@octokit/rest": "^21.0.0",
59
59
  "@octokit/types": "^13.0.0",
60
60
  "@types/jest": "^29.0.0",
61
- "@types/node": ">=18.12",
61
+ "@types/node": "^20.16.5",
62
62
  "chalk": "^4.1.0",
63
- "concurrently": "^8.0.0",
63
+ "concurrently": "^9.0.0",
64
64
  "dotenv": "^16.0.0",
65
65
  "ejs": "^3.1.6",
66
66
  "enquirer": "^2.3.6",
67
- "esbuild": "~0.23.0",
67
+ "esbuild": "~0.24.0",
68
68
  "eslint": "^9.0.0",
69
69
  "execa": "^5.0.0",
70
70
  "fast-glob": "^3.3.2",
@@ -95,16 +95,16 @@
95
95
  "ts-dedent": "^2.2.0",
96
96
  "ts-jest": "^29.1.0",
97
97
  "ts-node": "^10.9.2",
98
- "ts-node-dev": "^2.0.0",
99
98
  "tsconfig-paths": "^4.0.0",
100
99
  "tsconfig-seek": "2.0.0",
101
- "typescript": "~5.5.4",
100
+ "tsx": "^4.16.2",
101
+ "typescript": "~5.6.0",
102
102
  "validate-npm-package-name": "^5.0.0",
103
103
  "zod": "^3.22.4",
104
- "eslint-config-skuba": "5.0.0-renovate-eslint-9.x-20240811060718"
104
+ "eslint-config-skuba": "5.0.0-renovate-eslint-9.x-20240923103202"
105
105
  },
106
106
  "devDependencies": {
107
- "@changesets/cli": "2.27.7",
107
+ "@changesets/cli": "2.27.8",
108
108
  "@changesets/get-github-info": "0.6.0",
109
109
  "@jest/reporters": "29.7.0",
110
110
  "@jest/test-result": "29.7.0",
@@ -117,11 +117,11 @@
117
117
  "@types/minimist": "1.2.5",
118
118
  "@types/module-alias": "2.0.4",
119
119
  "@types/npm-which": "3.0.3",
120
- "@types/picomatch": "2.3.4",
120
+ "@types/picomatch": "3.0.1",
121
121
  "@types/supertest": "6.0.2",
122
122
  "@types/validate-npm-package-name": "4.0.2",
123
123
  "enhanced-resolve": "5.17.1",
124
- "express": "4.19.2",
124
+ "express": "4.20.0",
125
125
  "fastify": "4.28.1",
126
126
  "jest-diff": "29.7.0",
127
127
  "jsonfile": "6.1.0",
@@ -169,6 +169,7 @@
169
169
  "test:ci": "pnpm --silent skuba test --runInBand",
170
170
  "test:int": "pnpm --silent skuba test --selectProjects integration --runInBand",
171
171
  "test:template": "scripts/test-template.sh",
172
+ "test:template:updateSnapshot": "scripts/test-template.sh -u",
172
173
  "test:watch": "pnpm --silent skuba test --runInBand --watch"
173
174
  }
174
175
  }
@@ -57,7 +57,7 @@ steps:
57
57
  - *aws-sm
58
58
  - *private-npm
59
59
  - *docker-ecr-cache
60
- - docker-compose#v5.3.0:
60
+ - docker-compose#v5.4.0:
61
61
  run: app
62
62
  environment:
63
63
  - GITHUB_API_TOKEN
@@ -1,4 +1,4 @@
1
- # syntax=docker/dockerfile:1.9
1
+ # syntax=docker/dockerfile:1.10
2
2
 
3
3
  FROM --platform=<%- platformName %> node:20-alpine AS dev-deps
4
4
 
@@ -21,14 +21,14 @@
21
21
  },
22
22
  "devDependencies": {
23
23
  "@types/express": "^4.17.13",
24
- "@types/node": "^20.9.0",
24
+ "@types/node": "^20.16.5",
25
25
  "@types/supertest": "^6.0.0",
26
26
  "mime": "^4.0.1",
27
27
  "pino-pretty": "^11.0.0",
28
28
  "skuba": "*",
29
29
  "supertest": "^7.0.0"
30
30
  },
31
- "packageManager": "pnpm@9.6.0",
31
+ "packageManager": "pnpm@9.11.0",
32
32
  "engines": {
33
33
  "node": ">=20"
34
34
  }
@@ -38,7 +38,7 @@ steps:
38
38
  - *aws-sm
39
39
  - *private-npm
40
40
  - *docker-ecr-cache
41
- - docker-compose#v5.3.0:
41
+ - docker-compose#v5.4.0:
42
42
  run: app
43
43
  environment:
44
44
  - GITHUB_API_TOKEN
@@ -1,4 +1,4 @@
1
- # syntax=docker/dockerfile:1.9
1
+ # syntax=docker/dockerfile:1.10
2
2
 
3
3
  FROM --platform=<%- platformName %> node:20-alpine AS dev-deps
4
4
 
@@ -17,9 +17,9 @@
17
17
  },
18
18
  "devDependencies": {
19
19
  "@types/node": "^20.9.0",
20
- "skuba": "9.0.0-renovate-eslint-9.x-20240811060718"
20
+ "skuba": "9.0.0-renovate-eslint-9.x-20240923103202"
21
21
  },
22
- "packageManager": "pnpm@9.6.0",
22
+ "packageManager": "pnpm@9.11.0",
23
23
  "engines": {
24
24
  "node": ">=20"
25
25
  }
@@ -57,7 +57,7 @@ steps:
57
57
  - *aws-sm
58
58
  - *private-npm
59
59
  - *docker-ecr-cache
60
- - docker-compose#v5.3.0:
60
+ - docker-compose#v5.4.0:
61
61
  run: app
62
62
  environment:
63
63
  - GITHUB_API_TOKEN
@@ -1,4 +1,4 @@
1
- # syntax=docker/dockerfile:1.9
1
+ # syntax=docker/dockerfile:1.10
2
2
 
3
3
  FROM --platform=<%- platformName %> node:20-alpine AS dev-deps
4
4
 
@@ -16,11 +16,11 @@
16
16
  "@koa/router": "^12.0.0",
17
17
  "@opentelemetry/api": "^1.9.0",
18
18
  "@opentelemetry/core": "^1.25.0",
19
- "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.0",
20
- "@opentelemetry/instrumentation-aws-sdk": "^0.43.0",
21
- "@opentelemetry/instrumentation-http": "^0.52.0",
19
+ "@opentelemetry/exporter-trace-otlp-grpc": "^0.53.0",
20
+ "@opentelemetry/instrumentation-aws-sdk": "^0.44.0",
21
+ "@opentelemetry/instrumentation-http": "^0.53.0",
22
22
  "@opentelemetry/propagator-b3": "^1.25.0",
23
- "@opentelemetry/sdk-node": "^0.52.0",
23
+ "@opentelemetry/sdk-node": "^0.53.0",
24
24
  "@seek/logger": "^6.0.0",
25
25
  "hot-shots": "^10.0.0",
26
26
  "koa": "^2.13.4",
@@ -36,7 +36,7 @@
36
36
  "@types/koa": "^2.13.4",
37
37
  "@types/koa-bodyparser": "^5.0.2",
38
38
  "@types/koa__router": "^12.0.0",
39
- "@types/node": "^20.9.0",
39
+ "@types/node": "^20.16.5",
40
40
  "@types/supertest": "^6.0.0",
41
41
  "chance": "^1.1.8",
42
42
  "mime": "^4.0.1",
@@ -44,7 +44,7 @@
44
44
  "skuba": "*",
45
45
  "supertest": "^7.0.0"
46
46
  },
47
- "packageManager": "pnpm@9.6.0",
47
+ "packageManager": "pnpm@9.11.0",
48
48
  "engines": {
49
49
  "node": ">=20"
50
50
  }
@@ -4,7 +4,7 @@ import {
4
4
  ErrorMiddleware,
5
5
  MetricsMiddleware,
6
6
  RequestLogging,
7
- // SecureHeaders,
7
+ SecureHeaders,
8
8
  VersionMiddleware,
9
9
  } from 'seek-koala';
10
10
 
@@ -39,10 +39,8 @@ export const createApp = <State, Context>(
39
39
  ...middleware: Array<Koa.Middleware<State, Context>>
40
40
  ) =>
41
41
  new Koa()
42
- // TODO: consider using a middleware that adds secure HTTP headers.
43
- // https://github.com/seek-oss/koala/tree/master/src/secureHeaders
44
- // https://github.com/venables/koa-helmet
45
- // .use(SecureHeaders.middleware)
42
+ // Read: https://github.com/seek-oss/koala/tree/master/src/secureHeaders
43
+ .use(SecureHeaders.middleware)
46
44
  .use(contextMiddleware)
47
45
  .use(requestLogging)
48
46
  .use(metrics)
@@ -36,7 +36,7 @@ configs:
36
36
  - *aws-sm
37
37
  - *private-npm
38
38
  - *docker-ecr-cache
39
- - docker-compose#v5.3.0:
39
+ - docker-compose#v5.4.0:
40
40
  dependencies: false
41
41
  run: app
42
42
  propagate-environment: true
@@ -67,7 +67,7 @@ steps:
67
67
  - *aws-sm
68
68
  - *private-npm
69
69
  - *docker-ecr-cache
70
- - docker-compose#v5.3.0:
70
+ - docker-compose#v5.4.0:
71
71
  run: app
72
72
  environment:
73
73
  - GITHUB_API_TOKEN
@@ -1,4 +1,4 @@
1
- # syntax=docker/dockerfile:1.9
1
+ # syntax=docker/dockerfile:1.10
2
2
 
3
3
  FROM --platform=<%- platformName %> node:20-alpine AS dev-deps
4
4
 
@@ -27,7 +27,7 @@
27
27
  "devDependencies": {
28
28
  "@types/aws-lambda": "^8.10.84",
29
29
  "@types/chance": "^1.1.3",
30
- "@types/node": "^20.9.0",
30
+ "@types/node": "^20.16.5",
31
31
  "aws-sdk-client-mock": "^4.0.0",
32
32
  "aws-sdk-client-mock-jest": "^4.0.0",
33
33
  "chance": "^1.1.8",
@@ -38,7 +38,7 @@
38
38
  "serverless-prune-plugin": "^2.0.0",
39
39
  "skuba": "*"
40
40
  },
41
- "packageManager": "pnpm@9.6.0",
41
+ "packageManager": "pnpm@9.11.0",
42
42
  "engines": {
43
43
  "node": ">=20"
44
44
  }
@@ -33,7 +33,7 @@ configs:
33
33
  - *aws-sm
34
34
  - *private-npm
35
35
  - *docker-ecr-cache
36
- - docker-compose#v5.3.0:
36
+ - docker-compose#v5.4.0:
37
37
  dependencies: false
38
38
  run: app
39
39
  environment:
@@ -63,7 +63,7 @@ steps:
63
63
  - *aws-sm
64
64
  - *private-npm
65
65
  - *docker-ecr-cache
66
- - docker-compose#v5.3.0:
66
+ - docker-compose#v5.4.0:
67
67
  run: app
68
68
  environment:
69
69
  - GITHUB_API_TOKEN
@@ -1,4 +1,4 @@
1
- # syntax=docker/dockerfile:1.9
1
+ # syntax=docker/dockerfile:1.10
2
2
 
3
3
  FROM --platform=<%- platformName %> node:20-alpine AS dev-deps
4
4