skuba 7.3.0 → 7.4.0-horrible-hacks-20240206023615

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 (212) hide show
  1. package/README.md +3 -3
  2. package/jest/transform.test.ts +3 -1
  3. package/lib/api/jest/index.d.ts +1 -1
  4. package/lib/api/jest/index.js.map +2 -2
  5. package/lib/cli/adapter/prettier.d.ts +1 -1
  6. package/lib/cli/adapter/prettier.js +11 -10
  7. package/lib/cli/adapter/prettier.js.map +2 -2
  8. package/lib/cli/build/index.js +0 -2
  9. package/lib/cli/build/index.js.map +2 -2
  10. package/lib/cli/buildPackage.js +0 -2
  11. package/lib/cli/buildPackage.js.map +2 -2
  12. package/lib/cli/configure/analyseConfiguration.d.ts +2 -0
  13. package/lib/cli/configure/analyseConfiguration.js.map +2 -2
  14. package/lib/cli/configure/getEntryPoint.js +1 -1
  15. package/lib/cli/configure/getEntryPoint.js.map +2 -2
  16. package/lib/cli/configure/getProjectType.js +1 -1
  17. package/lib/cli/configure/getProjectType.js.map +2 -2
  18. package/lib/cli/configure/index.js +11 -8
  19. package/lib/cli/configure/index.js.map +2 -2
  20. package/lib/cli/configure/modules/index.js +0 -2
  21. package/lib/cli/configure/modules/index.js.map +2 -2
  22. package/lib/cli/configure/modules/package.d.ts +1 -1
  23. package/lib/cli/configure/modules/package.js +2 -1
  24. package/lib/cli/configure/modules/package.js.map +2 -2
  25. package/lib/cli/configure/patchRenovateConfig.d.ts +2 -1
  26. package/lib/cli/configure/patchRenovateConfig.js +23 -10
  27. package/lib/cli/configure/patchRenovateConfig.js.map +2 -2
  28. package/lib/cli/configure/types.d.ts +2 -0
  29. package/lib/cli/configure/types.js.map +1 -1
  30. package/lib/cli/configure/upgrade/index.d.ts +15 -0
  31. package/lib/cli/configure/upgrade/index.js +130 -0
  32. package/lib/cli/configure/upgrade/index.js.map +7 -0
  33. package/lib/cli/configure/{addEmptyExports.d.ts → upgrade/patches/7.3.1/addEmptyExports.d.ts} +2 -2
  34. package/lib/cli/configure/{addEmptyExports.js → upgrade/patches/7.3.1/addEmptyExports.js} +15 -11
  35. package/lib/cli/configure/upgrade/patches/7.3.1/addEmptyExports.js.map +7 -0
  36. package/lib/cli/configure/upgrade/patches/7.3.1/index.d.ts +2 -0
  37. package/lib/cli/configure/upgrade/patches/7.3.1/index.js +55 -0
  38. package/lib/cli/configure/upgrade/patches/7.3.1/index.js.map +7 -0
  39. package/lib/cli/configure/upgrade/patches/7.3.1/moveNpmrcOutOfGitignoreManagedSection.d.ts +2 -0
  40. package/lib/cli/configure/upgrade/patches/7.3.1/moveNpmrcOutOfGitignoreManagedSection.js +94 -0
  41. package/lib/cli/configure/upgrade/patches/7.3.1/moveNpmrcOutOfGitignoreManagedSection.js.map +7 -0
  42. package/lib/cli/configure/upgrade/patches/7.3.1/patchDockerfile.d.ts +2 -0
  43. package/lib/cli/configure/{patchDockerfile.js → upgrade/patches/7.3.1/patchDockerfile.js} +18 -12
  44. package/lib/cli/configure/upgrade/patches/7.3.1/patchDockerfile.js.map +7 -0
  45. package/lib/cli/configure/upgrade/patches/7.3.1/patchServerListener.d.ts +2 -0
  46. package/lib/cli/configure/{patchServerListener.js → upgrade/patches/7.3.1/patchServerListener.js} +18 -14
  47. package/lib/cli/configure/upgrade/patches/7.3.1/patchServerListener.js.map +7 -0
  48. package/lib/cli/format.js +7 -14
  49. package/lib/cli/format.js.map +2 -2
  50. package/lib/cli/init/getConfig.d.ts +4 -2
  51. package/lib/cli/init/getConfig.js +53 -26
  52. package/lib/cli/init/getConfig.js.map +2 -2
  53. package/lib/cli/init/git.d.ts +2 -1
  54. package/lib/cli/init/git.js +2 -9
  55. package/lib/cli/init/git.js.map +2 -2
  56. package/lib/cli/init/index.d.ts +1 -1
  57. package/lib/cli/init/index.js +19 -9
  58. package/lib/cli/init/index.js.map +2 -2
  59. package/lib/cli/init/prompts.d.ts +26 -3
  60. package/lib/cli/init/prompts.js +10 -2
  61. package/lib/cli/init/prompts.js.map +2 -2
  62. package/lib/cli/init/types.d.ts +21 -0
  63. package/lib/cli/init/types.js +5 -1
  64. package/lib/cli/init/types.js.map +2 -2
  65. package/lib/cli/init/writePackageJson.d.ts +6 -0
  66. package/lib/cli/init/writePackageJson.js.map +2 -2
  67. package/lib/cli/lint/annotate/buildkite/index.d.ts +2 -1
  68. package/lib/cli/lint/annotate/buildkite/index.js +5 -3
  69. package/lib/cli/lint/annotate/buildkite/index.js.map +2 -2
  70. package/lib/cli/lint/annotate/buildkite/internal.d.ts +2 -0
  71. package/lib/cli/lint/annotate/buildkite/internal.js +45 -0
  72. package/lib/cli/lint/annotate/buildkite/internal.js.map +7 -0
  73. package/lib/cli/lint/annotate/github/index.d.ts +2 -1
  74. package/lib/cli/lint/annotate/github/index.js +4 -2
  75. package/lib/cli/lint/annotate/github/index.js.map +2 -2
  76. package/lib/cli/lint/annotate/github/internal.d.ts +3 -0
  77. package/lib/cli/lint/annotate/github/internal.js +36 -0
  78. package/lib/cli/lint/annotate/github/internal.js.map +7 -0
  79. package/lib/cli/lint/annotate/index.d.ts +4 -3
  80. package/lib/cli/lint/annotate/index.js +9 -3
  81. package/lib/cli/lint/annotate/index.js.map +2 -2
  82. package/lib/cli/lint/autofix.d.ts +3 -1
  83. package/lib/cli/lint/autofix.js +36 -59
  84. package/lib/cli/lint/autofix.js.map +3 -3
  85. package/lib/cli/lint/external.d.ts +6 -1
  86. package/lib/cli/lint/external.js +6 -29
  87. package/lib/cli/lint/external.js.map +2 -2
  88. package/lib/cli/lint/index.d.ts +2 -1
  89. package/lib/cli/lint/index.js +46 -14
  90. package/lib/cli/lint/index.js.map +2 -2
  91. package/lib/cli/lint/internal.d.ts +12 -1
  92. package/lib/cli/lint/internal.js +55 -19
  93. package/lib/cli/lint/internal.js.map +3 -3
  94. package/lib/cli/lint/internalLints/deleteFiles.d.ts +3 -0
  95. package/lib/cli/lint/internalLints/deleteFiles.js +102 -0
  96. package/lib/cli/lint/internalLints/deleteFiles.js.map +7 -0
  97. package/lib/cli/lint/internalLints/noSkubaTemplateJs.d.ts +3 -0
  98. package/lib/cli/lint/internalLints/noSkubaTemplateJs.js +75 -0
  99. package/lib/cli/lint/internalLints/noSkubaTemplateJs.js.map +7 -0
  100. package/lib/cli/lint/internalLints/refreshConfigFiles.d.ts +11 -0
  101. package/lib/cli/lint/internalLints/refreshConfigFiles.js +147 -0
  102. package/lib/cli/lint/internalLints/refreshConfigFiles.js.map +7 -0
  103. package/lib/cli/test/index.js +0 -2
  104. package/lib/cli/test/index.js.map +2 -2
  105. package/lib/skuba.d.ts +1 -1
  106. package/lib/skuba.js.map +1 -1
  107. package/lib/utils/exec.d.ts +2 -1
  108. package/lib/utils/exec.js +1 -0
  109. package/lib/utils/exec.js.map +2 -2
  110. package/lib/utils/logging.d.ts +2 -0
  111. package/lib/utils/logging.js +1 -0
  112. package/lib/utils/logging.js.map +2 -2
  113. package/lib/utils/logo.js +6 -10
  114. package/lib/utils/logo.js.map +3 -3
  115. package/lib/utils/manifest.d.ts +1 -1
  116. package/lib/utils/manifest.js +1 -1
  117. package/lib/utils/manifest.js.map +2 -2
  118. package/lib/utils/npmrc.d.ts +1 -0
  119. package/lib/utils/npmrc.js +29 -0
  120. package/lib/utils/npmrc.js.map +7 -0
  121. package/lib/utils/packageManager.d.ts +24 -0
  122. package/lib/utils/packageManager.js +97 -0
  123. package/lib/utils/packageManager.js.map +7 -0
  124. package/lib/utils/template.d.ts +8 -5
  125. package/lib/utils/template.js +3 -1
  126. package/lib/utils/template.js.map +2 -2
  127. package/lib/utils/worker.d.ts +1 -0
  128. package/lib/wrapper/http.d.ts +1 -0
  129. package/package.json +47 -44
  130. package/template/base/_.dockerignore +0 -1
  131. package/template/base/_.eslintignore +1 -0
  132. package/template/base/_.gitignore +1 -1
  133. package/template/base/_.npmrc +8 -0
  134. package/template/express-rest-api/.buildkite/pipeline.yml +13 -10
  135. package/template/express-rest-api/.gantry/dev.yml +3 -0
  136. package/template/express-rest-api/.nvmrc +1 -1
  137. package/template/express-rest-api/Dockerfile +6 -12
  138. package/template/express-rest-api/Dockerfile.dev-deps +8 -7
  139. package/template/express-rest-api/README.md +6 -6
  140. package/template/express-rest-api/docker-compose.yml +0 -10
  141. package/template/express-rest-api/gantry.apply.yml +5 -0
  142. package/template/express-rest-api/gantry.build.yml +1 -2
  143. package/template/express-rest-api/package.json +4 -4
  144. package/template/express-rest-api/skuba.template.js +1 -0
  145. package/template/greeter/.buildkite/pipeline.yml +12 -9
  146. package/template/greeter/.nvmrc +1 -1
  147. package/template/greeter/Dockerfile +8 -7
  148. package/template/greeter/README.md +6 -6
  149. package/template/greeter/docker-compose.yml +0 -10
  150. package/template/greeter/package.json +3 -3
  151. package/template/greeter/skuba.template.js +1 -0
  152. package/template/koa-rest-api/.buildkite/pipeline.yml +13 -10
  153. package/template/koa-rest-api/.gantry/dev.yml +3 -0
  154. package/template/koa-rest-api/.nvmrc +1 -1
  155. package/template/koa-rest-api/Dockerfile +6 -12
  156. package/template/koa-rest-api/Dockerfile.dev-deps +8 -7
  157. package/template/koa-rest-api/README.md +6 -6
  158. package/template/koa-rest-api/docker-compose.yml +0 -10
  159. package/template/koa-rest-api/gantry.apply.yml +5 -0
  160. package/template/koa-rest-api/gantry.build.yml +1 -2
  161. package/template/koa-rest-api/package.json +10 -8
  162. package/template/koa-rest-api/skuba.template.js +1 -0
  163. package/template/koa-rest-api/src/framework/validation.test.ts +48 -15
  164. package/template/koa-rest-api/src/framework/validation.ts +31 -8
  165. package/template/koa-rest-api/src/testing/types.ts +16 -4
  166. package/template/lambda-sqs-worker/.buildkite/pipeline.yml +21 -15
  167. package/template/lambda-sqs-worker/.nvmrc +1 -1
  168. package/template/lambda-sqs-worker/Dockerfile +8 -8
  169. package/template/lambda-sqs-worker/README.md +8 -8
  170. package/template/lambda-sqs-worker/_.npmrc +12 -0
  171. package/template/lambda-sqs-worker/docker-compose.yml +0 -15
  172. package/template/lambda-sqs-worker/package.json +6 -7
  173. package/template/lambda-sqs-worker/serverless.yml +5 -2
  174. package/template/lambda-sqs-worker/skuba.template.js +1 -0
  175. package/template/lambda-sqs-worker/src/hooks.ts +1 -2
  176. package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +42 -18
  177. package/template/lambda-sqs-worker-cdk/.nvmrc +1 -1
  178. package/template/lambda-sqs-worker-cdk/Dockerfile +11 -9
  179. package/template/lambda-sqs-worker-cdk/cdk.json +12 -6
  180. package/template/lambda-sqs-worker-cdk/docker-compose.yml +0 -15
  181. package/template/lambda-sqs-worker-cdk/infra/__snapshots__/appStack.test.ts.snap +1590 -228
  182. package/template/lambda-sqs-worker-cdk/infra/appStack.test.ts +23 -3
  183. package/template/lambda-sqs-worker-cdk/infra/appStack.ts +128 -15
  184. package/template/lambda-sqs-worker-cdk/package.json +9 -7
  185. package/template/lambda-sqs-worker-cdk/shared/context-types.ts +1 -0
  186. package/template/lambda-sqs-worker-cdk/skuba.template.js +1 -0
  187. package/template/lambda-sqs-worker-cdk/src/app.ts +14 -1
  188. package/template/lambda-sqs-worker-cdk/src/postHook.ts +154 -0
  189. package/template/lambda-sqs-worker-cdk/src/preHook.ts +95 -0
  190. package/template/oss-npm-package/.github/workflows/release.yml +10 -7
  191. package/template/oss-npm-package/.github/workflows/validate.yml +10 -7
  192. package/template/oss-npm-package/.nvmrc +1 -1
  193. package/template/oss-npm-package/.releaserc +16 -0
  194. package/template/oss-npm-package/README.md +17 -17
  195. package/template/oss-npm-package/_package.json +3 -2
  196. package/template/oss-npm-package/skuba.template.js +1 -0
  197. package/template/private-npm-package/.nvmrc +1 -1
  198. package/template/private-npm-package/.releaserc +16 -0
  199. package/template/private-npm-package/README.md +16 -16
  200. package/template/private-npm-package/_package.json +3 -3
  201. package/template/private-npm-package/skuba.template.js +1 -0
  202. package/lib/cli/configure/addEmptyExports.js.map +0 -7
  203. package/lib/cli/configure/modules/tsconfig.d.ts +0 -2
  204. package/lib/cli/configure/modules/tsconfig.js +0 -87
  205. package/lib/cli/configure/modules/tsconfig.js.map +0 -7
  206. package/lib/cli/configure/patchDockerfile.d.ts +0 -1
  207. package/lib/cli/configure/patchDockerfile.js.map +0 -7
  208. package/lib/cli/configure/patchServerListener.d.ts +0 -3
  209. package/lib/cli/configure/patchServerListener.js.map +0 -7
  210. package/lib/cli/configure/refreshIgnoreFiles.d.ts +0 -3
  211. package/lib/cli/configure/refreshIgnoreFiles.js +0 -78
  212. package/lib/cli/configure/refreshIgnoreFiles.js.map +0 -7
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/manifest.ts"],
4
- "sourcesContent": ["import readPkgUp, { type NormalizedPackageJson } from 'read-pkg-up';\nimport { z } from 'zod';\n\nimport { hasProp } from './validation';\n\nexport type ProjectType = z.infer<typeof projectTypeSchema>;\n\nexport const projectTypeSchema = z.union([\n z.literal('application'),\n z.literal('package'),\n]);\n\nexport const PROJECT_TYPES = ['application', 'package'] as const;\n\nconst DEFAULT_ENTRY_POINT = 'src/app.ts';\n\nlet skubaManifest: NormalizedPackageJson | undefined;\n\nexport const getSkubaManifest = async (): Promise<NormalizedPackageJson> => {\n if (skubaManifest !== undefined) {\n return skubaManifest;\n }\n\n const result = await readPkgUp({ cwd: __dirname });\n\n if (result === undefined) {\n throw Error('skuba could not find its own manifest');\n }\n\n return (skubaManifest = result.packageJson);\n};\n\nexport const getConsumerManifest = () => readPkgUp();\n\nexport const getPropFromConsumerManifest = async <\n T extends string,\n V = unknown,\n>(\n prop: T,\n): Promise<V | undefined> => {\n const result = await getConsumerManifest();\n\n return result !== undefined && hasProp<T, V>(result.packageJson.skuba, prop)\n ? result.packageJson.skuba[prop]\n : undefined;\n};\n\nexport const getStringPropFromConsumerManifest = async <T extends string>(\n prop: T,\n): Promise<string | undefined> => {\n const result = await getPropFromConsumerManifest(prop);\n\n return typeof result === 'string' ? result : undefined;\n};\n\nexport const getEntryPointFromManifest = async (): Promise<string> => {\n const entryPoint = await getStringPropFromConsumerManifest('entryPoint');\n\n return entryPoint ?? DEFAULT_ENTRY_POINT;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAsD;AACtD,iBAAkB;AAElB,wBAAwB;AAIjB,MAAM,oBAAoB,aAAE,MAAM;AAAA,EACvC,aAAE,QAAQ,aAAa;AAAA,EACvB,aAAE,QAAQ,SAAS;AACrB,CAAC;AAEM,MAAM,gBAAgB,CAAC,eAAe,SAAS;AAEtD,MAAM,sBAAsB;AAE5B,IAAI;AAEG,MAAM,mBAAmB,YAA4C;AAC1E,MAAI,kBAAkB,QAAW;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,UAAM,mBAAAA,SAAU,EAAE,KAAK,UAAU,CAAC;AAEjD,MAAI,WAAW,QAAW;AACxB,UAAM,MAAM,uCAAuC;AAAA,EACrD;AAEA,SAAQ,gBAAgB,OAAO;AACjC;AAEO,MAAM,sBAAsB,UAAM,mBAAAA,SAAU;AAE5C,MAAM,8BAA8B,OAIzC,SAC2B;AAC3B,QAAM,SAAS,MAAM,oBAAoB;AAEzC,SAAO,WAAW,cAAa,2BAAc,OAAO,YAAY,OAAO,IAAI,IACvE,OAAO,YAAY,MAAM,IAAI,IAC7B;AACN;AAEO,MAAM,oCAAoC,OAC/C,SACgC;AAChC,QAAM,SAAS,MAAM,4BAA4B,IAAI;AAErD,SAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;AAEO,MAAM,4BAA4B,YAA6B;AACpE,QAAM,aAAa,MAAM,kCAAkC,YAAY;AAEvE,SAAO,cAAc;AACvB;",
4
+ "sourcesContent": ["import readPkgUp, { type NormalizedPackageJson } from 'read-pkg-up';\nimport { z } from 'zod';\n\nimport { hasProp } from './validation';\n\nexport type ProjectType = z.infer<typeof projectTypeSchema>;\n\nexport const projectTypeSchema = z.union([\n z.literal('application'),\n z.literal('package'),\n]);\n\nexport const PROJECT_TYPES = ['application', 'package'] as const;\n\nconst DEFAULT_ENTRY_POINT = 'src/app.ts';\n\nlet skubaManifest: NormalizedPackageJson | undefined;\n\nexport const getSkubaManifest = async (): Promise<NormalizedPackageJson> => {\n if (skubaManifest !== undefined) {\n return skubaManifest;\n }\n\n const result = await readPkgUp({ cwd: __dirname });\n\n if (result === undefined) {\n throw Error('skuba could not find its own manifest');\n }\n\n return (skubaManifest = result.packageJson);\n};\n\nexport const getConsumerManifest = (cwd?: string) => readPkgUp({ cwd });\n\nexport const getPropFromConsumerManifest = async <\n T extends string,\n V = unknown,\n>(\n prop: T,\n): Promise<V | undefined> => {\n const result = await getConsumerManifest();\n\n return result !== undefined && hasProp<T, V>(result.packageJson.skuba, prop)\n ? result.packageJson.skuba[prop]\n : undefined;\n};\n\nexport const getStringPropFromConsumerManifest = async <T extends string>(\n prop: T,\n): Promise<string | undefined> => {\n const result = await getPropFromConsumerManifest(prop);\n\n return typeof result === 'string' ? result : undefined;\n};\n\nexport const getEntryPointFromManifest = async (): Promise<string> => {\n const entryPoint = await getStringPropFromConsumerManifest('entryPoint');\n\n return entryPoint ?? DEFAULT_ENTRY_POINT;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAsD;AACtD,iBAAkB;AAElB,wBAAwB;AAIjB,MAAM,oBAAoB,aAAE,MAAM;AAAA,EACvC,aAAE,QAAQ,aAAa;AAAA,EACvB,aAAE,QAAQ,SAAS;AACrB,CAAC;AAEM,MAAM,gBAAgB,CAAC,eAAe,SAAS;AAEtD,MAAM,sBAAsB;AAE5B,IAAI;AAEG,MAAM,mBAAmB,YAA4C;AAC1E,MAAI,kBAAkB,QAAW;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,UAAM,mBAAAA,SAAU,EAAE,KAAK,UAAU,CAAC;AAEjD,MAAI,WAAW,QAAW;AACxB,UAAM,MAAM,uCAAuC;AAAA,EACrD;AAEA,SAAQ,gBAAgB,OAAO;AACjC;AAEO,MAAM,sBAAsB,CAAC,YAAiB,mBAAAA,SAAU,EAAE,IAAI,CAAC;AAE/D,MAAM,8BAA8B,OAIzC,SAC2B;AAC3B,QAAM,SAAS,MAAM,oBAAoB;AAEzC,SAAO,WAAW,cAAa,2BAAc,OAAO,YAAY,OAAO,IAAI,IACvE,OAAO,YAAY,MAAM,IAAI,IAC7B;AACN;AAEO,MAAM,oCAAoC,OAC/C,SACgC;AAChC,QAAM,SAAS,MAAM,4BAA4B,IAAI;AAErD,SAAO,OAAO,WAAW,WAAW,SAAS;AAC/C;AAEO,MAAM,4BAA4B,YAA6B;AACpE,QAAM,aAAa,MAAM,kCAAkC,YAAY;AAEvE,SAAO,cAAc;AACvB;",
6
6
  "names": ["readPkgUp"]
7
7
  }
@@ -0,0 +1 @@
1
+ export declare const hasNpmrcSecret: (lineOrFullFileContents: string) => boolean;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var npmrc_exports = {};
20
+ __export(npmrc_exports, {
21
+ hasNpmrcSecret: () => hasNpmrcSecret
22
+ });
23
+ module.exports = __toCommonJS(npmrc_exports);
24
+ const hasNpmrcSecret = (lineOrFullFileContents) => lineOrFullFileContents.includes("_auth") || lineOrFullFileContents.includes("_password");
25
+ // Annotate the CommonJS export names for ESM import in node:
26
+ 0 && (module.exports = {
27
+ hasNpmrcSecret
28
+ });
29
+ //# sourceMappingURL=npmrc.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/npmrc.ts"],
4
+ "sourcesContent": ["// Preventing against _auth, _authToken, _password\n// https://docs.npmjs.com/cli/v10/configuring-npm/npmrc#auth-related-configuration\n\nexport const hasNpmrcSecret = (lineOrFullFileContents: string): boolean =>\n lineOrFullFileContents.includes('_auth') ||\n lineOrFullFileContents.includes('_password');\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGO,MAAM,iBAAiB,CAAC,2BAC7B,uBAAuB,SAAS,OAAO,KACvC,uBAAuB,SAAS,WAAW;",
6
+ "names": []
7
+ }
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export declare const DEFAULT_PACKAGE_MANAGER = "yarn";
3
+ export type PackageManagerConfig = (typeof PACKAGE_MANAGERS)[keyof typeof PACKAGE_MANAGERS] & {
4
+ command: PackageManager;
5
+ };
6
+ declare const PACKAGE_MANAGERS: {
7
+ pnpm: {
8
+ exec: string;
9
+ install: string;
10
+ runSilent: string;
11
+ update: string;
12
+ };
13
+ yarn: {
14
+ exec: string;
15
+ install: string;
16
+ runSilent: string;
17
+ update: string;
18
+ };
19
+ };
20
+ export declare const configForPackageManager: (packageManager: PackageManager) => PackageManagerConfig;
21
+ export declare const detectPackageManager: (cwd?: string) => Promise<PackageManagerConfig>;
22
+ export type PackageManager = z.infer<typeof packageManagerSchema>;
23
+ export declare const packageManagerSchema: z.ZodDefault<z.ZodEnum<["pnpm", "yarn"]>>;
24
+ export {};
@@ -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
+ }
@@ -23,28 +23,30 @@ export declare const templateConfigSchema: z.ZodObject<{
23
23
  name: z.ZodString;
24
24
  message: z.ZodString;
25
25
  initial: z.ZodString;
26
- validate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodString], null>, z.ZodBoolean>>;
26
+ validate: z.ZodOptional<z.ZodFunction<z.ZodTuple<[z.ZodString], z.ZodUnknown>, z.ZodUnion<[z.ZodBoolean, z.ZodString]>>>;
27
27
  }, "strip", z.ZodTypeAny, {
28
28
  message: string;
29
29
  name: string;
30
30
  initial: string;
31
- validate?: ((args_0: string) => boolean) | undefined;
31
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
32
32
  }, {
33
33
  message: string;
34
34
  name: string;
35
35
  initial: string;
36
- validate?: ((args_0: string) => boolean) | undefined;
36
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
37
37
  }>, "many">;
38
38
  entryPoint: z.ZodOptional<z.ZodString>;
39
39
  noSkip: z.ZodOptional<z.ZodBoolean>;
40
+ packageManager: z.ZodDefault<z.ZodEnum<["pnpm", "yarn"]>>;
40
41
  type: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"application">, z.ZodLiteral<"package">]>>;
41
42
  }, "strip", z.ZodTypeAny, {
42
43
  fields: {
43
44
  message: string;
44
45
  name: string;
45
46
  initial: string;
46
- validate?: ((args_0: string) => boolean) | undefined;
47
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
47
48
  }[];
49
+ packageManager: "yarn" | "pnpm";
48
50
  entryPoint?: string | undefined;
49
51
  noSkip?: boolean | undefined;
50
52
  type?: "package" | "application" | undefined;
@@ -53,10 +55,11 @@ export declare const templateConfigSchema: z.ZodObject<{
53
55
  message: string;
54
56
  name: string;
55
57
  initial: string;
56
- validate?: ((args_0: string) => boolean) | undefined;
58
+ validate?: ((args_0: string, ...args_1: unknown[]) => string | boolean) | undefined;
57
59
  }[];
58
60
  entryPoint?: string | undefined;
59
61
  noSkip?: boolean | undefined;
62
+ packageManager?: "yarn" | "pnpm" | undefined;
60
63
  type?: "package" | "application" | undefined;
61
64
  }>;
62
65
  export declare const TEMPLATE_CONFIG_FILENAME = "skuba.template.js";
@@ -43,6 +43,7 @@ var import_path = __toESM(require("path"));
43
43
  var import_fs_extra = __toESM(require("fs-extra"));
44
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",
@@ -89,11 +90,12 @@ const templateConfigSchema = import_zod.z.object({
89
90
  name: import_zod.z.string(),
90
91
  message: import_zod.z.string(),
91
92
  initial: import_zod.z.string(),
92
- validate: import_zod.z.function(import_zod.z.tuple([import_zod.z.string()]), import_zod.z.boolean()).optional()
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
96
  entryPoint: import_zod.z.string().optional(),
96
97
  noSkip: import_zod.z.boolean().optional(),
98
+ packageManager: import_packageManager.packageManagerSchema,
97
99
  type: import_manifest.projectTypeSchema.optional()
98
100
  });
99
101
  const TEMPLATE_CONFIG_FILENAME = "skuba.template.js";
@@ -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';\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.function(z.tuple([z.string()]), z.boolean()).optional(),\n }),\n ),\n entryPoint: z.string().optional(),\n noSkip: z.boolean().optional(),\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;AAE3B,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,aAAE,SAAS,aAAE,MAAM,CAAC,aAAE,OAAO,CAAC,CAAC,GAAG,aAAE,QAAQ,CAAC,EAAE,SAAS;AAAA,IACpE,CAAC;AAAA,EACH;AAAA,EACA,YAAY,aAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ,aAAE,QAAQ,EAAE,SAAS;AAAA,EAC7B,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',\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": "7.3.0",
3
+ "version": "7.4.0-horrible-hacks-20240206023615",
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 --selectProjects unit",
40
- "test:ci": "yarn skuba test --runInBand",
41
- "test:int": "yarn skuba test --selectProjects integration --runInBand",
42
- "test:template": "scripts/test-template.sh",
43
- "test:watch": "yarn skuba test --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,9 +84,9 @@
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
91
  "semantic-release": "^21.0.0",
109
92
  "serialize-error": "^8.0.1",
@@ -111,39 +94,41 @@
111
94
  "strip-ansi": "^6.0.1",
112
95
  "ts-dedent": "^2.2.0",
113
96
  "ts-jest": "^29.1.0",
114
- "ts-node": "^10.7.0",
97
+ "ts-node": "^10.9.2",
115
98
  "ts-node-dev": "^2.0.0",
116
99
  "tsconfig-paths": "^4.0.0",
117
100
  "tsconfig-seek": "2.0.0",
118
- "typescript": "~5.2.0",
101
+ "typescript": "~5.3.0",
119
102
  "validate-npm-package-name": "^5.0.0",
120
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.4",
127
- "@types/express": "4.17.20",
128
- "@types/fs-extra": "11.0.3",
129
- "@types/koa": "2.13.10",
130
- "@types/libnpmsearch": "2.0.5",
131
- "@types/lodash.mergewith": "4.6.8",
132
- "@types/module-alias": "2.0.3",
133
- "@types/npm-which": "3.0.2",
134
- "@types/picomatch": "2.3.2",
135
- "@types/supertest": "2.0.15",
136
- "@types/validate-npm-package-name": "4.0.1",
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.24.3",
123
+ "fastify": "4.25.2",
124
+ "jest-diff": "29.7.0",
140
125
  "jsonfile": "6.1.0",
141
- "koa": "2.14.2",
126
+ "koa": "2.15.0",
142
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,15 +4,13 @@ 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
15
  secrets: id=npm,src=tmp/.npmrc
18
16
 
@@ -37,16 +35,18 @@ steps:
37
35
  plugins:
38
36
  - *aws-sm
39
37
  - *private-npm
40
- - seek-oss/docker-ecr-cache#v2.1.0:
38
+ - seek-oss/docker-ecr-cache#v2.1.1:
41
39
  <<: *docker-ecr-cache-defaults
42
40
  skip-pull-from-cache: true
43
41
 
44
42
  - label: 🧪 Test & Lint
45
43
  commands:
46
- - echo '+++ yarn test:ci'
47
- - yarn test:ci
48
- - echo '--- yarn lint'
49
- - 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
50
50
  depends_on: warm-prod
51
51
  env:
52
52
  GET_GITHUB_TOKEN: please
@@ -56,6 +56,9 @@ steps:
56
56
  - *docker-ecr-cache
57
57
  - docker-compose#v4.16.0:
58
58
  run: app
59
+ environment:
60
+ - GITHUB_API_TOKEN
61
+ propagate-environment: true
59
62
  timeout_in_minutes: 10
60
63
 
61
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=/root/.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