skuba 0.0.0-master-20231002013336 → 0.0.0-master-20240206001217

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 (221) hide show
  1. package/README.md +3 -3
  2. package/jest/transform.test.ts +3 -1
  3. package/lib/api/jest/index.d.ts +3 -3
  4. package/lib/api/jest/index.js +19 -1
  5. package/lib/api/jest/index.js.map +2 -2
  6. package/lib/api/net/compose.js +2 -1
  7. package/lib/api/net/compose.js.map +2 -2
  8. package/lib/cli/adapter/prettier.d.ts +1 -1
  9. package/lib/cli/adapter/prettier.js +11 -10
  10. package/lib/cli/adapter/prettier.js.map +2 -2
  11. package/lib/cli/build/index.js +0 -2
  12. package/lib/cli/build/index.js.map +2 -2
  13. package/lib/cli/buildPackage.js +0 -2
  14. package/lib/cli/buildPackage.js.map +2 -2
  15. package/lib/cli/configure/analyseConfiguration.d.ts +2 -0
  16. package/lib/cli/configure/analyseConfiguration.js.map +2 -2
  17. package/lib/cli/configure/getEntryPoint.js +1 -1
  18. package/lib/cli/configure/getEntryPoint.js.map +2 -2
  19. package/lib/cli/configure/getProjectType.d.ts +1 -1
  20. package/lib/cli/configure/getProjectType.js +6 -3
  21. package/lib/cli/configure/getProjectType.js.map +2 -2
  22. package/lib/cli/configure/index.js +11 -12
  23. package/lib/cli/configure/index.js.map +2 -2
  24. package/lib/cli/configure/modules/index.js +0 -2
  25. package/lib/cli/configure/modules/index.js.map +2 -2
  26. package/lib/cli/configure/modules/package.d.ts +1 -1
  27. package/lib/cli/configure/modules/package.js +2 -1
  28. package/lib/cli/configure/modules/package.js.map +2 -2
  29. package/lib/cli/configure/patchRenovateConfig.d.ts +2 -1
  30. package/lib/cli/configure/patchRenovateConfig.js +36 -21
  31. package/lib/cli/configure/patchRenovateConfig.js.map +2 -2
  32. package/lib/cli/configure/types.d.ts +2 -0
  33. package/lib/cli/configure/types.js.map +1 -1
  34. package/lib/cli/configure/upgrade/index.d.ts +15 -0
  35. package/lib/cli/configure/upgrade/index.js +130 -0
  36. package/lib/cli/configure/upgrade/index.js.map +7 -0
  37. package/lib/cli/configure/{addEmptyExports.d.ts → upgrade/patches/7.3.1/addEmptyExports.d.ts} +2 -2
  38. package/lib/cli/configure/{addEmptyExports.js → upgrade/patches/7.3.1/addEmptyExports.js} +15 -11
  39. package/lib/cli/configure/upgrade/patches/7.3.1/addEmptyExports.js.map +7 -0
  40. package/lib/cli/configure/upgrade/patches/7.3.1/index.d.ts +2 -0
  41. package/lib/cli/configure/upgrade/patches/7.3.1/index.js +55 -0
  42. package/lib/cli/configure/upgrade/patches/7.3.1/index.js.map +7 -0
  43. package/lib/cli/configure/upgrade/patches/7.3.1/moveNpmrcOutOfGitignoreManagedSection.d.ts +2 -0
  44. package/lib/cli/configure/upgrade/patches/7.3.1/moveNpmrcOutOfGitignoreManagedSection.js +94 -0
  45. package/lib/cli/configure/upgrade/patches/7.3.1/moveNpmrcOutOfGitignoreManagedSection.js.map +7 -0
  46. package/lib/cli/configure/upgrade/patches/7.3.1/patchDockerfile.d.ts +2 -0
  47. package/lib/cli/configure/{patchDockerfile.js → upgrade/patches/7.3.1/patchDockerfile.js} +18 -12
  48. package/lib/cli/configure/upgrade/patches/7.3.1/patchDockerfile.js.map +7 -0
  49. package/lib/cli/configure/upgrade/patches/7.3.1/patchServerListener.d.ts +2 -0
  50. package/lib/cli/configure/{patchServerListener.js → upgrade/patches/7.3.1/patchServerListener.js} +18 -14
  51. package/lib/cli/configure/upgrade/patches/7.3.1/patchServerListener.js.map +7 -0
  52. package/lib/cli/format.js +7 -14
  53. package/lib/cli/format.js.map +2 -2
  54. package/lib/cli/init/getConfig.d.ts +7 -5
  55. package/lib/cli/init/getConfig.js +61 -34
  56. package/lib/cli/init/getConfig.js.map +2 -2
  57. package/lib/cli/init/git.d.ts +2 -1
  58. package/lib/cli/init/git.js +2 -9
  59. package/lib/cli/init/git.js.map +2 -2
  60. package/lib/cli/init/index.d.ts +1 -1
  61. package/lib/cli/init/index.js +19 -10
  62. package/lib/cli/init/index.js.map +2 -2
  63. package/lib/cli/init/prompts.d.ts +26 -3
  64. package/lib/cli/init/prompts.js +10 -2
  65. package/lib/cli/init/prompts.js.map +2 -2
  66. package/lib/cli/init/types.d.ts +120 -27
  67. package/lib/cli/init/types.js +30 -35
  68. package/lib/cli/init/types.js.map +2 -2
  69. package/lib/cli/init/writePackageJson.d.ts +6 -0
  70. package/lib/cli/init/writePackageJson.js.map +2 -2
  71. package/lib/cli/lint/annotate/buildkite/index.d.ts +2 -1
  72. package/lib/cli/lint/annotate/buildkite/index.js +5 -3
  73. package/lib/cli/lint/annotate/buildkite/index.js.map +2 -2
  74. package/lib/cli/lint/annotate/buildkite/internal.d.ts +2 -0
  75. package/lib/cli/lint/annotate/buildkite/internal.js +45 -0
  76. package/lib/cli/lint/annotate/buildkite/internal.js.map +7 -0
  77. package/lib/cli/lint/annotate/github/index.d.ts +2 -1
  78. package/lib/cli/lint/annotate/github/index.js +4 -2
  79. package/lib/cli/lint/annotate/github/index.js.map +2 -2
  80. package/lib/cli/lint/annotate/github/internal.d.ts +3 -0
  81. package/lib/cli/lint/annotate/github/internal.js +36 -0
  82. package/lib/cli/lint/annotate/github/internal.js.map +7 -0
  83. package/lib/cli/lint/annotate/index.d.ts +4 -3
  84. package/lib/cli/lint/annotate/index.js +9 -3
  85. package/lib/cli/lint/annotate/index.js.map +2 -2
  86. package/lib/cli/lint/autofix.d.ts +3 -1
  87. package/lib/cli/lint/autofix.js +36 -59
  88. package/lib/cli/lint/autofix.js.map +3 -3
  89. package/lib/cli/lint/external.d.ts +6 -1
  90. package/lib/cli/lint/external.js +6 -29
  91. package/lib/cli/lint/external.js.map +2 -2
  92. package/lib/cli/lint/index.d.ts +2 -1
  93. package/lib/cli/lint/index.js +46 -14
  94. package/lib/cli/lint/index.js.map +2 -2
  95. package/lib/cli/lint/internal.d.ts +12 -1
  96. package/lib/cli/lint/internal.js +55 -19
  97. package/lib/cli/lint/internal.js.map +3 -3
  98. package/lib/cli/lint/internalLints/deleteFiles.d.ts +3 -0
  99. package/lib/cli/lint/internalLints/deleteFiles.js +102 -0
  100. package/lib/cli/lint/internalLints/deleteFiles.js.map +7 -0
  101. package/lib/cli/lint/internalLints/noSkubaTemplateJs.d.ts +3 -0
  102. package/lib/cli/lint/internalLints/noSkubaTemplateJs.js +75 -0
  103. package/lib/cli/lint/internalLints/noSkubaTemplateJs.js.map +7 -0
  104. package/lib/cli/lint/internalLints/refreshConfigFiles.d.ts +11 -0
  105. package/lib/cli/lint/internalLints/refreshConfigFiles.js +147 -0
  106. package/lib/cli/lint/internalLints/refreshConfigFiles.js.map +7 -0
  107. package/lib/cli/test/index.js +0 -2
  108. package/lib/cli/test/index.js.map +2 -2
  109. package/lib/skuba.d.ts +1 -1
  110. package/lib/skuba.js.map +1 -1
  111. package/lib/utils/error.d.ts +30 -10
  112. package/lib/utils/error.js +10 -20
  113. package/lib/utils/error.js.map +2 -2
  114. package/lib/utils/exec.d.ts +2 -1
  115. package/lib/utils/exec.js +3 -2
  116. package/lib/utils/exec.js.map +2 -2
  117. package/lib/utils/logging.d.ts +2 -0
  118. package/lib/utils/logging.js +1 -0
  119. package/lib/utils/logging.js.map +2 -2
  120. package/lib/utils/logo.js +6 -10
  121. package/lib/utils/logo.js.map +3 -3
  122. package/lib/utils/manifest.d.ts +4 -4
  123. package/lib/utils/manifest.js +10 -10
  124. package/lib/utils/manifest.js.map +2 -2
  125. package/lib/utils/npmrc.d.ts +1 -0
  126. package/lib/utils/npmrc.js +29 -0
  127. package/lib/utils/npmrc.js.map +7 -0
  128. package/lib/utils/packageManager.d.ts +24 -0
  129. package/lib/utils/packageManager.js +97 -0
  130. package/lib/utils/packageManager.js.map +7 -0
  131. package/lib/utils/template.d.ts +46 -13
  132. package/lib/utils/template.js +17 -15
  133. package/lib/utils/template.js.map +2 -2
  134. package/lib/utils/worker.d.ts +1 -0
  135. package/lib/wrapper/http.d.ts +1 -0
  136. package/package.json +50 -47
  137. package/template/base/_.dockerignore +0 -1
  138. package/template/base/_.eslintignore +1 -0
  139. package/template/base/_.gitignore +1 -1
  140. package/template/base/_.npmrc +8 -0
  141. package/template/express-rest-api/.buildkite/pipeline.yml +16 -12
  142. package/template/express-rest-api/.gantry/dev.yml +3 -0
  143. package/template/express-rest-api/.nvmrc +1 -1
  144. package/template/express-rest-api/Dockerfile +6 -12
  145. package/template/express-rest-api/Dockerfile.dev-deps +8 -7
  146. package/template/express-rest-api/README.md +12 -12
  147. package/template/express-rest-api/docker-compose.yml +0 -10
  148. package/template/express-rest-api/gantry.apply.yml +5 -0
  149. package/template/express-rest-api/gantry.build.yml +1 -2
  150. package/template/express-rest-api/package.json +4 -4
  151. package/template/express-rest-api/skuba.template.js +1 -0
  152. package/template/greeter/.buildkite/pipeline.yml +15 -11
  153. package/template/greeter/.nvmrc +1 -1
  154. package/template/greeter/Dockerfile +8 -7
  155. package/template/greeter/README.md +9 -9
  156. package/template/greeter/docker-compose.yml +0 -10
  157. package/template/greeter/package.json +3 -3
  158. package/template/greeter/skuba.template.js +1 -0
  159. package/template/koa-rest-api/.buildkite/pipeline.yml +16 -12
  160. package/template/koa-rest-api/.gantry/dev.yml +3 -0
  161. package/template/koa-rest-api/.nvmrc +1 -1
  162. package/template/koa-rest-api/Dockerfile +6 -12
  163. package/template/koa-rest-api/Dockerfile.dev-deps +8 -7
  164. package/template/koa-rest-api/README.md +12 -12
  165. package/template/koa-rest-api/docker-compose.yml +0 -10
  166. package/template/koa-rest-api/gantry.apply.yml +5 -0
  167. package/template/koa-rest-api/gantry.build.yml +1 -2
  168. package/template/koa-rest-api/package.json +10 -8
  169. package/template/koa-rest-api/skuba.template.js +1 -0
  170. package/template/koa-rest-api/src/app.test.ts +8 -4
  171. package/template/koa-rest-api/src/framework/validation.test.ts +48 -15
  172. package/template/koa-rest-api/src/framework/validation.ts +31 -8
  173. package/template/koa-rest-api/src/testing/types.ts +16 -4
  174. package/template/lambda-sqs-worker/.buildkite/pipeline.yml +25 -18
  175. package/template/lambda-sqs-worker/.nvmrc +1 -1
  176. package/template/lambda-sqs-worker/Dockerfile +8 -8
  177. package/template/lambda-sqs-worker/README.md +14 -14
  178. package/template/lambda-sqs-worker/_.npmrc +12 -0
  179. package/template/lambda-sqs-worker/docker-compose.yml +0 -15
  180. package/template/lambda-sqs-worker/package.json +6 -7
  181. package/template/lambda-sqs-worker/serverless.yml +5 -2
  182. package/template/lambda-sqs-worker/skuba.template.js +1 -0
  183. package/template/lambda-sqs-worker/src/framework/validation.test.ts +1 -1
  184. package/template/lambda-sqs-worker/src/hooks.ts +1 -2
  185. package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +46 -21
  186. package/template/lambda-sqs-worker-cdk/.nvmrc +1 -1
  187. package/template/lambda-sqs-worker-cdk/Dockerfile +11 -9
  188. package/template/lambda-sqs-worker-cdk/cdk.json +12 -6
  189. package/template/lambda-sqs-worker-cdk/docker-compose.yml +0 -15
  190. package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +1590 -228
  191. package/template/lambda-sqs-worker-cdk/infra/appStack.test.ts +23 -3
  192. package/template/lambda-sqs-worker-cdk/infra/appStack.ts +128 -15
  193. package/template/lambda-sqs-worker-cdk/package.json +9 -7
  194. package/template/lambda-sqs-worker-cdk/shared/context-types.ts +1 -0
  195. package/template/lambda-sqs-worker-cdk/skuba.template.js +1 -0
  196. package/template/lambda-sqs-worker-cdk/src/app.ts +14 -1
  197. package/template/lambda-sqs-worker-cdk/src/postHook.ts +154 -0
  198. package/template/lambda-sqs-worker-cdk/src/preHook.ts +95 -0
  199. package/template/oss-npm-package/.github/workflows/release.yml +10 -7
  200. package/template/oss-npm-package/.github/workflows/validate.yml +10 -7
  201. package/template/oss-npm-package/.nvmrc +1 -1
  202. package/template/oss-npm-package/.releaserc +16 -0
  203. package/template/oss-npm-package/README.md +18 -18
  204. package/template/oss-npm-package/_package.json +3 -2
  205. package/template/oss-npm-package/skuba.template.js +1 -0
  206. package/template/private-npm-package/.nvmrc +1 -1
  207. package/template/private-npm-package/.releaserc +16 -0
  208. package/template/private-npm-package/README.md +18 -18
  209. package/template/private-npm-package/_package.json +3 -3
  210. package/template/private-npm-package/skuba.template.js +1 -0
  211. package/lib/cli/configure/addEmptyExports.js.map +0 -7
  212. package/lib/cli/configure/modules/tsconfig.d.ts +0 -2
  213. package/lib/cli/configure/modules/tsconfig.js +0 -87
  214. package/lib/cli/configure/modules/tsconfig.js.map +0 -7
  215. package/lib/cli/configure/patchDockerfile.d.ts +0 -1
  216. package/lib/cli/configure/patchDockerfile.js.map +0 -7
  217. package/lib/cli/configure/patchServerListener.d.ts +0 -3
  218. package/lib/cli/configure/patchServerListener.js.map +0 -7
  219. package/lib/cli/configure/refreshIgnoreFiles.d.ts +0 -3
  220. package/lib/cli/configure/refreshIgnoreFiles.js +0 -78
  221. package/lib/cli/configure/refreshIgnoreFiles.js.map +0 -7
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var packageManager_exports = {};
30
+ __export(packageManager_exports, {
31
+ DEFAULT_PACKAGE_MANAGER: () => DEFAULT_PACKAGE_MANAGER,
32
+ configForPackageManager: () => configForPackageManager,
33
+ detectPackageManager: () => detectPackageManager,
34
+ packageManagerSchema: () => packageManagerSchema
35
+ });
36
+ module.exports = __toCommonJS(packageManager_exports);
37
+ var import_detect_package_manager = require("detect-package-manager");
38
+ var import_is_installed_globally = __toESM(require("is-installed-globally"));
39
+ var import_zod = require("zod");
40
+ var import_logging = require("./logging");
41
+ const DEFAULT_PACKAGE_MANAGER = "yarn";
42
+ const PACKAGE_MANAGERS = {
43
+ pnpm: {
44
+ exec: "pnpm exec",
45
+ install: "pnpm install",
46
+ runSilent: "pnpm --silent run",
47
+ update: import_is_installed_globally.default ? "pnpm update --global" : "pnpm update"
48
+ },
49
+ yarn: {
50
+ exec: "yarn",
51
+ install: "yarn install",
52
+ runSilent: "yarn -s",
53
+ update: import_is_installed_globally.default ? "yarn global upgrade" : "yarn upgrade"
54
+ }
55
+ };
56
+ const configForPackageManager = (packageManager) => ({
57
+ ...PACKAGE_MANAGERS[packageManager],
58
+ command: packageManager
59
+ });
60
+ const detectPackageManager = async (cwd) => {
61
+ let packageManager = DEFAULT_PACKAGE_MANAGER;
62
+ let raw;
63
+ try {
64
+ raw = await (0, import_detect_package_manager.detect)({ cwd, includeGlobalBun: false });
65
+ packageManager = packageManagerSchema.parse(raw);
66
+ } catch (err) {
67
+ import_logging.log.warn(
68
+ `Failed to detect package manager; defaulting to ${import_logging.log.bold(
69
+ DEFAULT_PACKAGE_MANAGER
70
+ )}.`
71
+ );
72
+ import_logging.log.subtle(
73
+ (() => {
74
+ switch (true) {
75
+ case err instanceof import_zod.ZodError:
76
+ return `Expected ${Object.keys(PACKAGE_MANAGERS).join(
77
+ "|"
78
+ )}, received ${raw}`;
79
+ case err instanceof Error:
80
+ return err.message;
81
+ default:
82
+ return String(err);
83
+ }
84
+ })()
85
+ );
86
+ }
87
+ return configForPackageManager(packageManager);
88
+ };
89
+ const packageManagerSchema = import_zod.z.enum(["pnpm", "yarn"]).default(DEFAULT_PACKAGE_MANAGER);
90
+ // Annotate the CommonJS export names for ESM import in node:
91
+ 0 && (module.exports = {
92
+ DEFAULT_PACKAGE_MANAGER,
93
+ configForPackageManager,
94
+ detectPackageManager,
95
+ packageManagerSchema
96
+ });
97
+ //# sourceMappingURL=packageManager.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/packageManager.ts"],
4
+ "sourcesContent": ["import { detect } from 'detect-package-manager';\nimport isInstalledGlobally from 'is-installed-globally';\nimport { ZodError, z } from 'zod';\n\nimport { log } from './logging';\n\n// TODO: consider changing to this to `pnpm` in a future major version.\nexport const DEFAULT_PACKAGE_MANAGER = 'yarn';\n\nexport type PackageManagerConfig =\n (typeof PACKAGE_MANAGERS)[keyof typeof PACKAGE_MANAGERS] & {\n command: PackageManager;\n };\n\nconst PACKAGE_MANAGERS = {\n pnpm: {\n exec: 'pnpm exec',\n install: 'pnpm install',\n runSilent: 'pnpm --silent run',\n update: isInstalledGlobally ? 'pnpm update --global' : 'pnpm update',\n },\n yarn: {\n exec: 'yarn',\n install: 'yarn install',\n runSilent: 'yarn -s',\n update: isInstalledGlobally ? 'yarn global upgrade' : 'yarn upgrade',\n },\n};\n\nexport const configForPackageManager = (\n packageManager: PackageManager,\n): PackageManagerConfig => ({\n ...PACKAGE_MANAGERS[packageManager],\n command: packageManager,\n});\n\nexport const detectPackageManager = async (\n cwd?: string,\n): Promise<PackageManagerConfig> => {\n let packageManager: PackageManager = DEFAULT_PACKAGE_MANAGER;\n\n let raw: string | undefined;\n try {\n raw = await detect({ cwd, includeGlobalBun: false });\n\n packageManager = packageManagerSchema.parse(raw);\n } catch (err) {\n log.warn(\n `Failed to detect package manager; defaulting to ${log.bold(\n DEFAULT_PACKAGE_MANAGER,\n )}.`,\n );\n log.subtle(\n (() => {\n switch (true) {\n case err instanceof ZodError:\n return `Expected ${Object.keys(PACKAGE_MANAGERS).join(\n '|',\n )}, received ${raw}`;\n\n case err instanceof Error:\n return err.message;\n\n default:\n return String(err);\n }\n })(),\n );\n }\n\n return configForPackageManager(packageManager);\n};\n\nexport type PackageManager = z.infer<typeof packageManagerSchema>;\n\nexport const packageManagerSchema = z\n .enum(['pnpm', 'yarn'])\n .default(DEFAULT_PACKAGE_MANAGER);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAAuB;AACvB,mCAAgC;AAChC,iBAA4B;AAE5B,qBAAoB;AAGb,MAAM,0BAA0B;AAOvC,MAAM,mBAAmB;AAAA,EACvB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ,6BAAAA,UAAsB,yBAAyB;AAAA,EACzD;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,QAAQ,6BAAAA,UAAsB,wBAAwB;AAAA,EACxD;AACF;AAEO,MAAM,0BAA0B,CACrC,oBAC0B;AAAA,EAC1B,GAAG,iBAAiB,cAAc;AAAA,EAClC,SAAS;AACX;AAEO,MAAM,uBAAuB,OAClC,QACkC;AAClC,MAAI,iBAAiC;AAErC,MAAI;AACJ,MAAI;AACF,UAAM,UAAM,sCAAO,EAAE,KAAK,kBAAkB,MAAM,CAAC;AAEnD,qBAAiB,qBAAqB,MAAM,GAAG;AAAA,EACjD,SAAS,KAAK;AACZ,uBAAI;AAAA,MACF,mDAAmD,mBAAI;AAAA,QACrD;AAAA,MACF,CAAC;AAAA,IACH;AACA,uBAAI;AAAA,OACD,MAAM;AACL,gBAAQ,MAAM;AAAA,UACZ,KAAK,eAAe;AAClB,mBAAO,YAAY,OAAO,KAAK,gBAAgB,EAAE;AAAA,cAC/C;AAAA,YACF,CAAC,cAAc,GAAG;AAAA,UAEpB,KAAK,eAAe;AAClB,mBAAO,IAAI;AAAA,UAEb;AACE,mBAAO,OAAO,GAAG;AAAA,QACrB;AAAA,MACF,GAAG;AAAA,IACL;AAAA,EACF;AAEA,SAAO,wBAAwB,cAAc;AAC/C;AAIO,MAAM,uBAAuB,aACjC,KAAK,CAAC,QAAQ,MAAM,CAAC,EACrB,QAAQ,uBAAuB;",
6
+ "names": ["isInstalledGlobally"]
7
+ }
@@ -1,4 +1,4 @@
1
- import * as t from 'runtypes';
1
+ import { z } from 'zod';
2
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"];
3
3
  export type TemplateName = (typeof TEMPLATE_NAMES)[number];
4
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 →"];
@@ -17,18 +17,51 @@ interface TemplateDocumentationConfig {
17
17
  filename: string;
18
18
  }
19
19
  export declare const TEMPLATE_DOCUMENTATION_CONFIG: Record<TemplateName, TemplateDocumentationConfig>;
20
- export type TemplateConfig = t.Static<typeof TemplateConfig>;
21
- export declare const TemplateConfig: t.Record<{
22
- fields: t.Array<t.Record<{
23
- name: t.String;
24
- message: t.String;
25
- initial: t.String;
26
- validate: t.Optional<t.Function>;
27
- }, false>, false>;
28
- entryPoint: t.Optional<t.String>;
29
- noSkip: t.Optional<t.Boolean>;
30
- type: t.Optional<t.Union<[t.Literal<"application">, t.Literal<"package">]>>;
31
- }, false>;
20
+ export type TemplateConfig = z.infer<typeof templateConfigSchema>;
21
+ export declare const templateConfigSchema: z.ZodObject<{
22
+ fields: z.ZodArray<z.ZodObject<{
23
+ name: z.ZodString;
24
+ message: z.ZodString;
25
+ initial: z.ZodString;
26
+ validate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodString], z.ZodUnknown>, z.ZodUnion<[z.ZodBoolean, z.ZodString]>>>;
27
+ }, "strip", z.ZodTypeAny, {
28
+ message: string;
29
+ name: string;
30
+ initial: string;
31
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
32
+ }, {
33
+ message: string;
34
+ name: string;
35
+ initial: string;
36
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
37
+ }>, "many">;
38
+ entryPoint: z.ZodOptional<z.ZodString>;
39
+ noSkip: z.ZodOptional<z.ZodBoolean>;
40
+ packageManager: z.ZodDefault<z.ZodEnum<["pnpm", "yarn"]>>;
41
+ type: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"application">, z.ZodLiteral<"package">]>>;
42
+ }, "strip", z.ZodTypeAny, {
43
+ fields: {
44
+ message: string;
45
+ name: string;
46
+ initial: string;
47
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
48
+ }[];
49
+ packageManager: "yarn" | "pnpm";
50
+ entryPoint?: string | undefined;
51
+ noSkip?: boolean | undefined;
52
+ type?: "package" | "application" | undefined;
53
+ }, {
54
+ fields: {
55
+ message: string;
56
+ name: string;
57
+ initial: string;
58
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
59
+ }[];
60
+ entryPoint?: string | undefined;
61
+ noSkip?: boolean | undefined;
62
+ packageManager?: "yarn" | "pnpm" | undefined;
63
+ type?: "package" | "application" | undefined;
64
+ }>;
32
65
  export declare const TEMPLATE_CONFIG_FILENAME = "skuba.template.js";
33
66
  export declare const TEMPLATE_DIR: string;
34
67
  export declare const BASE_TEMPLATE_DIR: string;
@@ -34,15 +34,16 @@ __export(template_exports, {
34
34
  TEMPLATE_DOCUMENTATION_CONFIG: () => TEMPLATE_DOCUMENTATION_CONFIG,
35
35
  TEMPLATE_NAMES: () => TEMPLATE_NAMES,
36
36
  TEMPLATE_NAMES_WITH_BYO: () => TEMPLATE_NAMES_WITH_BYO,
37
- TemplateConfig: () => TemplateConfig,
38
37
  ensureTemplateConfigDeletion: () => ensureTemplateConfigDeletion,
39
- readBaseTemplateFile: () => readBaseTemplateFile
38
+ readBaseTemplateFile: () => readBaseTemplateFile,
39
+ templateConfigSchema: () => templateConfigSchema
40
40
  });
41
41
  module.exports = __toCommonJS(template_exports);
42
42
  var import_path = __toESM(require("path"));
43
43
  var import_fs_extra = __toESM(require("fs-extra"));
44
- var t = __toESM(require("runtypes"));
44
+ var import_zod = require("zod");
45
45
  var import_manifest = require("./manifest");
46
+ var import_packageManager = require("./packageManager");
46
47
  const TEMPLATE_NAMES = [
47
48
  "express-rest-api",
48
49
  "greeter",
@@ -83,18 +84,19 @@ const TEMPLATE_DOCUMENTATION_CONFIG = {
83
84
  filename: "package.md"
84
85
  }
85
86
  };
86
- const TemplateConfig = t.Record({
87
- fields: t.Array(
88
- t.Record({
89
- name: t.String,
90
- message: t.String,
91
- initial: t.String,
92
- validate: t.Function.optional()
87
+ const templateConfigSchema = import_zod.z.object({
88
+ fields: import_zod.z.array(
89
+ import_zod.z.object({
90
+ name: import_zod.z.string(),
91
+ message: import_zod.z.string(),
92
+ initial: import_zod.z.string(),
93
+ validate: import_zod.z.function().args(import_zod.z.string()).returns(import_zod.z.union([import_zod.z.boolean(), import_zod.z.string()])).optional()
93
94
  })
94
95
  ),
95
- entryPoint: t.String.optional(),
96
- noSkip: t.Boolean.optional(),
97
- type: import_manifest.ProjectType.optional()
96
+ entryPoint: import_zod.z.string().optional(),
97
+ noSkip: import_zod.z.boolean().optional(),
98
+ packageManager: import_packageManager.packageManagerSchema,
99
+ type: import_manifest.projectTypeSchema.optional()
98
100
  });
99
101
  const TEMPLATE_CONFIG_FILENAME = "skuba.template.js";
100
102
  const TEMPLATE_DIR = import_path.default.join(__dirname, "..", "..", "template");
@@ -109,8 +111,8 @@ const readBaseTemplateFile = (src) => import_fs_extra.default.promises.readFile(
109
111
  TEMPLATE_DOCUMENTATION_CONFIG,
110
112
  TEMPLATE_NAMES,
111
113
  TEMPLATE_NAMES_WITH_BYO,
112
- TemplateConfig,
113
114
  ensureTemplateConfigDeletion,
114
- readBaseTemplateFile
115
+ readBaseTemplateFile,
116
+ templateConfigSchema
115
117
  });
116
118
  //# sourceMappingURL=template.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/template.ts"],
4
- "sourcesContent": ["/* eslint-disable new-cap */\n\nimport path from 'path';\n\nimport fs from 'fs-extra';\nimport * as t from 'runtypes';\n\nimport { ProjectType } from './manifest';\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 = t.Static<typeof TemplateConfig>;\n\nexport const TemplateConfig = t.Record({\n fields: t.Array(\n t.Record({\n name: t.String,\n message: t.String,\n initial: t.String,\n validate: t.Function.optional(),\n }),\n ),\n entryPoint: t.String.optional(),\n noSkip: t.Boolean.optional(),\n type: ProjectType.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;AAEA,kBAAiB;AAEjB,sBAAe;AACf,QAAmB;AAEnB,sBAA4B;AAErB,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,iBAAiB,EAAE,OAAO;AAAA,EACrC,QAAQ,EAAE;AAAA,IACR,EAAE,OAAO;AAAA,MACP,MAAM,EAAE;AAAA,MACR,SAAS,EAAE;AAAA,MACX,SAAS,EAAE;AAAA,MACX,UAAU,EAAE,SAAS,SAAS;AAAA,IAChC,CAAC;AAAA,EACH;AAAA,EACA,YAAY,EAAE,OAAO,SAAS;AAAA,EAC9B,QAAQ,EAAE,QAAQ,SAAS;AAAA,EAC3B,MAAM,4BAAY,SAAS;AAC7B,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',\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;",
6
6
  "names": ["path", "fs"]
7
7
  }
@@ -8,6 +8,7 @@ export declare const execWorkerThread: <Input, Output>(filepath: string, input:
8
8
  */
9
9
  export declare const postWorkerOutput: <Input, Output>(fn: (input: Input) => Promise<Output>, logger?: {
10
10
  bold: import("chalk").Chalk;
11
+ dim: import("chalk").Chalk;
11
12
  formatSubtle: import("chalk").Chalk;
12
13
  timing: (start: bigint, end: bigint) => string;
13
14
  debug: (...message: unknown[]) => void;
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import http from 'http';
2
3
  /**
3
4
  * Create an HTTP request listener based on the supplied function.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skuba",
3
- "version": "0.0.0-master-20231002013336",
3
+ "version": "0.0.0-master-20240206001217",
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",
@@ -27,21 +27,6 @@
27
27
  "template/**/*",
28
28
  "jest-preset.js"
29
29
  ],
30
- "scripts": {
31
- "build": "scripts/build.sh",
32
- "deploy": "scripts/deploy.sh",
33
- "format": "yarn skuba format",
34
- "lint": "yarn skuba lint && yarn lint:md",
35
- "lint:md": "remark --frail --quiet .",
36
- "release": "yarn build && changeset publish",
37
- "skuba": "yarn build && node lib/skuba",
38
- "stage": "changeset version && yarn format",
39
- "test": "yarn skuba test",
40
- "test:ci": "yarn skuba test --config jest.config.int.ts --runInBand",
41
- "test:int": "yarn skuba test --config jest.config.int.ts --runInBand",
42
- "test:template": "scripts/test-template.sh",
43
- "test:watch": "yarn skuba test --config jest.config.int.ts --runInBand --watch"
44
- },
45
30
  "remarkConfig": {
46
31
  "plugins": [
47
32
  "remark-preset-lint-recommended",
@@ -64,9 +49,6 @@
64
49
  ]
65
50
  ]
66
51
  },
67
- "resolutions": {
68
- "**/@types/node": ">=18.12"
69
- },
70
52
  "dependencies": {
71
53
  "@esbuild-plugins/tsconfig-paths": "^0.1.0",
72
54
  "@jest/types": "^29.0.0",
@@ -78,12 +60,13 @@
78
60
  "@types/node": ">=18.12",
79
61
  "chalk": "^4.1.0",
80
62
  "concurrently": "^8.0.0",
63
+ "detect-package-manager": "^3.0.1",
81
64
  "dotenv": "^16.0.0",
82
65
  "ejs": "^3.1.6",
83
66
  "enquirer": "^2.3.6",
84
- "esbuild": "~0.19.0",
67
+ "esbuild": "~0.20.0",
85
68
  "eslint": "^8.11.0",
86
- "eslint-config-skuba": "3.0.3",
69
+ "eslint-config-skuba": "3.1.0",
87
70
  "execa": "^5.0.0",
88
71
  "fdir": "^6.0.0",
89
72
  "fs-extra": "^11.0.0",
@@ -101,49 +84,51 @@
101
84
  "normalize-package-data": "^6.0.0",
102
85
  "npm-run-path": "^4.0.1",
103
86
  "npm-which": "^3.0.1",
104
- "picomatch": "^2.2.2",
105
- "prettier": "~3.0.3",
106
- "prettier-plugin-packagejson": "^2.4.6",
87
+ "picomatch": "^3.0.0",
88
+ "prettier": "~3.2.5",
89
+ "prettier-plugin-packagejson": "^2.4.10",
107
90
  "read-pkg-up": "^7.0.1",
108
- "runtypes": "^6.0.0",
109
91
  "semantic-release": "^21.0.0",
110
92
  "serialize-error": "^8.0.1",
111
93
  "simple-git": "^3.5.0",
112
94
  "strip-ansi": "^6.0.1",
113
95
  "ts-dedent": "^2.2.0",
114
96
  "ts-jest": "^29.1.0",
115
- "ts-node": "^10.7.0",
97
+ "ts-node": "^10.9.2",
116
98
  "ts-node-dev": "^2.0.0",
117
99
  "tsconfig-paths": "^4.0.0",
118
100
  "tsconfig-seek": "2.0.0",
119
- "typescript": "~5.2.0",
120
- "validate-npm-package-name": "^5.0.0"
101
+ "typescript": "~5.3.0",
102
+ "validate-npm-package-name": "^5.0.0",
103
+ "zod": "^3.22.4"
121
104
  },
122
105
  "devDependencies": {
123
- "@changesets/cli": "2.26.2",
124
- "@changesets/get-github-info": "0.5.2",
106
+ "@changesets/cli": "2.27.1",
107
+ "@changesets/get-github-info": "0.6.0",
125
108
  "@jest/reporters": "29.7.0",
126
- "@types/ejs": "3.1.3",
127
- "@types/express": "4.17.18",
128
- "@types/fs-extra": "11.0.2",
129
- "@types/koa": "2.13.9",
130
- "@types/libnpmsearch": "2.0.4",
131
- "@types/lodash.mergewith": "4.6.7",
132
- "@types/module-alias": "2.0.2",
133
- "@types/npm-which": "3.0.1",
134
- "@types/picomatch": "2.3.1",
135
- "@types/supertest": "2.0.12",
136
- "@types/validate-npm-package-name": "4.0.0",
109
+ "@jest/test-result": "29.7.0",
110
+ "@types/ejs": "3.1.5",
111
+ "@types/express": "4.17.21",
112
+ "@types/fs-extra": "11.0.4",
113
+ "@types/koa": "2.14.0",
114
+ "@types/libnpmsearch": "2.0.7",
115
+ "@types/lodash.mergewith": "4.6.9",
116
+ "@types/module-alias": "2.0.4",
117
+ "@types/npm-which": "3.0.3",
118
+ "@types/picomatch": "2.3.3",
119
+ "@types/supertest": "6.0.2",
120
+ "@types/validate-npm-package-name": "4.0.2",
137
121
  "enhanced-resolve": "5.15.0",
138
122
  "express": "4.18.2",
139
- "fastify": "4.23.2",
123
+ "fastify": "4.25.2",
124
+ "jest-diff": "29.7.0",
140
125
  "jsonfile": "6.1.0",
141
- "koa": "2.14.2",
142
- "memfs": "4.4.0",
126
+ "koa": "2.15.0",
127
+ "memfs": "4.6.0",
143
128
  "remark-cli": "12.0.0",
144
129
  "remark-preset-lint-recommended": "6.1.3",
145
130
  "semver": "7.5.4",
146
- "supertest": "6.3.3",
131
+ "supertest": "6.3.4",
147
132
  "type-fest": "2.19.0"
148
133
  },
149
134
  "peerDependencies": {
@@ -154,6 +139,7 @@
154
139
  "optional": true
155
140
  }
156
141
  },
142
+ "packageManager": "pnpm@8.15.1",
157
143
  "engines": {
158
144
  "node": ">=18.12"
159
145
  },
@@ -165,6 +151,23 @@
165
151
  "entryPoint": "src/index.ts",
166
152
  "template": null,
167
153
  "type": "package",
168
- "version": "4.0.0"
154
+ "version": "7.3.1"
155
+ },
156
+ "scripts": {
157
+ "build": "scripts/build.sh",
158
+ "changeset": "changeset",
159
+ "deploy": "scripts/deploy.sh",
160
+ "format": "pnpm run --silent skuba format",
161
+ "lint": "pnpm run --silent skuba lint && pnpm run --silent lint:md",
162
+ "lint:md": "remark --frail --quiet .",
163
+ "release": "pnpm run --silent build && changeset publish",
164
+ "skuba": "pnpm run --silent build && pnpm run --silent skuba:exec",
165
+ "skuba:exec": "node --env-file=.env lib/skuba",
166
+ "stage": "changeset version && node ./.changeset/inject.js && pnpm run format",
167
+ "test": "pnpm run --silent skuba test --selectProjects unit",
168
+ "test:ci": "pnpm run --silent skuba test --runInBand",
169
+ "test:int": "pnpm run --silent skuba test --runInBand --selectProjects integration",
170
+ "test:template": "scripts/test-template.sh",
171
+ "test:watch": "pnpm run --silent skuba test --runInBand --watch"
169
172
  }
170
- }
173
+ }
@@ -12,7 +12,6 @@ node_modules*/
12
12
  /tmp*/
13
13
 
14
14
  .DS_Store
15
- .npmrc
16
15
  npm-debug.log
17
16
  yarn-error.log
18
17
  # end managed by skuba
@@ -3,6 +3,7 @@
3
3
  .vscode/*
4
4
 
5
5
  .cdk.staging/
6
+ .pnpm-store/
6
7
  .serverless/
7
8
  cdk.out/
8
9
  node_modules*/
@@ -14,7 +14,7 @@ node_modules*/
14
14
 
15
15
  .DS_Store
16
16
  .eslintcache
17
- .npmrc
17
+ .pnpm-debug.log
18
18
  *.tgz
19
19
  *.tsbuildinfo
20
20
  npm-debug.log
@@ -0,0 +1,8 @@
1
+ # managed by skuba
2
+ public-hoist-pattern[]="@types*"
3
+ public-hoist-pattern[]="*eslint*"
4
+ public-hoist-pattern[]="*prettier*"
5
+ public-hoist-pattern[]="esbuild"
6
+ public-hoist-pattern[]="jest"
7
+ public-hoist-pattern[]="tsconfig-seek"
8
+ # end managed by skuba
@@ -4,21 +4,20 @@ agents:
4
4
  configs:
5
5
  plugins:
6
6
  - &aws-sm
7
- seek-oss/aws-sm#v2.3.1:
7
+ seek-oss/aws-sm#v2.3.2:
8
8
  env:
9
9
  NPM_READ_TOKEN: arn:aws:secretsmanager:ap-southeast-2:987872074697:secret:npm/npm-read-token
10
10
 
11
11
  - &docker-ecr-cache
12
- seek-oss/docker-ecr-cache#v2.1.0: &docker-ecr-cache-defaults
13
- cache-on:
14
- - package.json
15
- - yarn.lock
12
+ seek-oss/docker-ecr-cache#v2.1.1: &docker-ecr-cache-defaults
13
+ cache-on: pnpm-lock.yaml
16
14
  dockerfile: Dockerfile.dev-deps
17
- secrets: id=npm,src=.npmrc
15
+ secrets: id=npm,src=tmp/.npmrc
18
16
 
19
17
  - &private-npm
20
18
  seek-oss/private-npm#v1.2.0:
21
19
  env: NPM_READ_TOKEN
20
+ output-path: tmp/
22
21
 
23
22
  base-steps:
24
23
  - &deploy
@@ -36,16 +35,18 @@ steps:
36
35
  plugins:
37
36
  - *aws-sm
38
37
  - *private-npm
39
- - seek-oss/docker-ecr-cache#v2.1.0:
38
+ - seek-oss/docker-ecr-cache#v2.1.1:
40
39
  <<: *docker-ecr-cache-defaults
41
40
  skip-pull-from-cache: true
42
41
 
43
42
  - label: 🧪 Test & Lint
44
43
  commands:
45
- - echo '+++ yarn test:ci'
46
- - yarn test:ci
47
- - echo '--- yarn lint'
48
- - yarn lint
44
+ - echo '--- pnpm install --offline'
45
+ - pnpm install --offline
46
+ - echo '+++ pnpm run test:ci'
47
+ - pnpm run test:ci
48
+ - echo '--- pnpm run lint'
49
+ - pnpm run lint
49
50
  depends_on: warm-prod
50
51
  env:
51
52
  GET_GITHUB_TOKEN: please
@@ -53,8 +54,11 @@ steps:
53
54
  - *aws-sm
54
55
  - *private-npm
55
56
  - *docker-ecr-cache
56
- - docker-compose#v4.14.0:
57
+ - docker-compose#v4.16.0:
57
58
  run: app
59
+ environment:
60
+ - GITHUB_API_TOKEN
61
+ propagate-environment: true
58
62
  timeout_in_minutes: 10
59
63
 
60
64
  - label: 📦 Build & Package
@@ -6,3 +6,6 @@ isProduction: false
6
6
 
7
7
  maxInstanceCount: 1
8
8
  minInstanceCount: 1
9
+
10
+ # Disable dashboard for cost savings
11
+ cloudwatchDashboardDisabled: true
@@ -1 +1 @@
1
- 18
1
+ 20
@@ -1,29 +1,23 @@
1
1
  ARG BASE_IMAGE
2
- ARG BASE_TAG
3
2
 
4
3
  ###
5
4
 
6
- FROM ${BASE_IMAGE}:${BASE_TAG} AS deps
7
-
8
- RUN yarn install --ignore-optional --ignore-scripts --non-interactive --offline --production
9
-
10
- ###
11
-
12
- FROM ${BASE_IMAGE}:${BASE_TAG} AS build
5
+ FROM ${BASE_IMAGE} AS build
13
6
 
14
7
  COPY . .
15
8
 
16
- RUN yarn build
9
+ RUN pnpm install --offline
10
+ RUN pnpm run build
11
+ RUN pnpm install --offline --prod
17
12
 
18
13
  ###
19
14
 
20
- FROM --platform=${BUILDPLATFORM:-<%- platformName %>} gcr.io/distroless/nodejs18-debian11 AS runtime
15
+ FROM --platform=${BUILDPLATFORM:-<%- platformName %>} gcr.io/distroless/nodejs20-debian12 AS runtime
21
16
 
22
17
  WORKDIR /workdir
23
18
 
24
19
  COPY --from=build /workdir/lib lib
25
-
26
- COPY --from=deps /workdir/node_modules node_modules
20
+ COPY --from=build /workdir/node_modules node_modules
27
21
 
28
22
  ENV NODE_ENV=production
29
23
 
@@ -1,11 +1,12 @@
1
- # syntax=docker/dockerfile:1.2
1
+ # syntax=docker/dockerfile:1.6
2
2
 
3
- FROM --platform=${BUILDPLATFORM:-<%- platformName %>} node:18-alpine AS dev-deps
3
+ FROM --platform=${BUILDPLATFORM:-<%- platformName %>} node:20-alpine AS dev-deps
4
4
 
5
- WORKDIR /workdir
5
+ RUN corepack enable pnpm
6
+ RUN pnpm config set store-dir /root/.pnpm-store
6
7
 
7
- COPY package.json yarn.lock ./
8
+ WORKDIR /workdir
8
9
 
9
- RUN \
10
- --mount=type=secret,id=npm,dst=/workdir/.npmrc \
11
- yarn install --frozen-lockfile --ignore-optional --non-interactive
10
+ RUN --mount=type=bind,source=pnpm-lock.yaml,target=pnpm-lock.yaml \
11
+ --mount=type=secret,id=npm,dst=/root/.npmrc,required=true \
12
+ pnpm fetch