create-typescript-app 1.75.1 → 1.77.0

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 (266) hide show
  1. package/README.md +1 -1
  2. package/lib/bin/help.js +35 -35
  3. package/lib/bin/help.js.map +1 -1
  4. package/lib/bin/promptForMode.js +6 -6
  5. package/lib/bin/promptForMode.js.map +1 -1
  6. package/lib/create/createWithOptions.js +12 -13
  7. package/lib/create/createWithOptions.js.map +1 -1
  8. package/lib/index.d.ts +45 -0
  9. package/lib/index.js +5 -0
  10. package/lib/index.js.map +1 -1
  11. package/lib/next/base.d.ts +101 -0
  12. package/lib/next/base.js +140 -0
  13. package/lib/next/base.js.map +1 -0
  14. package/lib/next/blocks/blockAllContributors.d.ts +48 -0
  15. package/lib/next/blocks/blockAllContributors.js +59 -0
  16. package/lib/next/blocks/blockAllContributors.js.map +1 -0
  17. package/lib/next/blocks/blockAreTheTypesWrong.d.ts +48 -0
  18. package/lib/next/blocks/blockAreTheTypesWrong.js +29 -0
  19. package/lib/next/blocks/blockAreTheTypesWrong.js.map +1 -0
  20. package/lib/next/blocks/blockCSpell.d.ts +51 -0
  21. package/lib/next/blocks/blockCSpell.js +77 -0
  22. package/lib/next/blocks/blockCSpell.js.map +1 -0
  23. package/lib/next/blocks/blockContributingDocs.d.ts +48 -0
  24. package/lib/next/blocks/blockContributingDocs.js +116 -0
  25. package/lib/next/blocks/blockContributingDocs.js.map +1 -0
  26. package/lib/next/blocks/blockContributorCovenant.d.ts +48 -0
  27. package/lib/next/blocks/blockContributorCovenant.js +151 -0
  28. package/lib/next/blocks/blockContributorCovenant.js.map +1 -0
  29. package/lib/next/blocks/blockDevelopmentDocs.d.ts +62 -0
  30. package/lib/next/blocks/blockDevelopmentDocs.js +86 -0
  31. package/lib/next/blocks/blockDevelopmentDocs.js.map +1 -0
  32. package/lib/next/blocks/blockESLint.d.ts +73 -0
  33. package/lib/next/blocks/blockESLint.js +225 -0
  34. package/lib/next/blocks/blockESLint.js.map +1 -0
  35. package/lib/next/blocks/blockESLintComments.d.ts +48 -0
  36. package/lib/next/blocks/blockESLintComments.js +26 -0
  37. package/lib/next/blocks/blockESLintComments.js.map +1 -0
  38. package/lib/next/blocks/blockESLintJSDoc.d.ts +48 -0
  39. package/lib/next/blocks/blockESLintJSDoc.js +25 -0
  40. package/lib/next/blocks/blockESLintJSDoc.js.map +1 -0
  41. package/lib/next/blocks/blockESLintJSONC.d.ts +48 -0
  42. package/lib/next/blocks/blockESLintJSONC.js +21 -0
  43. package/lib/next/blocks/blockESLintJSONC.js.map +1 -0
  44. package/lib/next/blocks/blockESLintMarkdown.d.ts +48 -0
  45. package/lib/next/blocks/blockESLintMarkdown.js +27 -0
  46. package/lib/next/blocks/blockESLintMarkdown.js.map +1 -0
  47. package/lib/next/blocks/blockESLintMoreStyling.d.ts +48 -0
  48. package/lib/next/blocks/blockESLintMoreStyling.js +34 -0
  49. package/lib/next/blocks/blockESLintMoreStyling.js.map +1 -0
  50. package/lib/next/blocks/blockESLintNode.d.ts +48 -0
  51. package/lib/next/blocks/blockESLintNode.js +33 -0
  52. package/lib/next/blocks/blockESLintNode.js.map +1 -0
  53. package/lib/next/blocks/blockESLintPackageJson.d.ts +48 -0
  54. package/lib/next/blocks/blockESLintPackageJson.js +26 -0
  55. package/lib/next/blocks/blockESLintPackageJson.js.map +1 -0
  56. package/lib/next/blocks/blockESLintPerfectionist.d.ts +48 -0
  57. package/lib/next/blocks/blockESLintPerfectionist.js +32 -0
  58. package/lib/next/blocks/blockESLintPerfectionist.js.map +1 -0
  59. package/lib/next/blocks/blockESLintRegexp.d.ts +48 -0
  60. package/lib/next/blocks/blockESLintRegexp.js +23 -0
  61. package/lib/next/blocks/blockESLintRegexp.js.map +1 -0
  62. package/lib/next/blocks/blockESLintYML.d.ts +48 -0
  63. package/lib/next/blocks/blockESLintYML.js +46 -0
  64. package/lib/next/blocks/blockESLintYML.js.map +1 -0
  65. package/lib/next/blocks/blockFunding.d.ts +48 -0
  66. package/lib/next/blocks/blockFunding.js +20 -0
  67. package/lib/next/blocks/blockFunding.js.map +1 -0
  68. package/lib/next/blocks/blockGitHubActionsCI.d.ts +60 -0
  69. package/lib/next/blocks/blockGitHubActionsCI.js +122 -0
  70. package/lib/next/blocks/blockGitHubActionsCI.js.map +1 -0
  71. package/lib/next/blocks/blockGitHubIssueTemplates.d.ts +48 -0
  72. package/lib/next/blocks/blockGitHubIssueTemplates.js +217 -0
  73. package/lib/next/blocks/blockGitHubIssueTemplates.js.map +1 -0
  74. package/lib/next/blocks/blockGitHubPRTemplate.d.ts +48 -0
  75. package/lib/next/blocks/blockGitHubPRTemplate.js +32 -0
  76. package/lib/next/blocks/blockGitHubPRTemplate.js.map +1 -0
  77. package/lib/next/blocks/blockGitignore.d.ts +50 -0
  78. package/lib/next/blocks/blockGitignore.js +23 -0
  79. package/lib/next/blocks/blockGitignore.js.map +1 -0
  80. package/lib/next/blocks/blockKnip.d.ts +48 -0
  81. package/lib/next/blocks/blockKnip.js +58 -0
  82. package/lib/next/blocks/blockKnip.js.map +1 -0
  83. package/lib/next/blocks/blockMITLicense.d.ts +48 -0
  84. package/lib/next/blocks/blockMITLicense.js +46 -0
  85. package/lib/next/blocks/blockMITLicense.js.map +1 -0
  86. package/lib/next/blocks/blockMarkdownlint.d.ts +50 -0
  87. package/lib/next/blocks/blockMarkdownlint.js +77 -0
  88. package/lib/next/blocks/blockMarkdownlint.js.map +1 -0
  89. package/lib/next/blocks/blockNvmrc.d.ts +48 -0
  90. package/lib/next/blocks/blockNvmrc.js +26 -0
  91. package/lib/next/blocks/blockNvmrc.js.map +1 -0
  92. package/lib/next/blocks/blockPRCompliance.d.ts +48 -0
  93. package/lib/next/blocks/blockPRCompliance.js +48 -0
  94. package/lib/next/blocks/blockPRCompliance.js.map +1 -0
  95. package/lib/next/blocks/blockPackageJson.d.ts +56 -0
  96. package/lib/next/blocks/blockPackageJson.js +81 -0
  97. package/lib/next/blocks/blockPackageJson.js.map +1 -0
  98. package/lib/next/blocks/blockPnpmDedupe.d.ts +48 -0
  99. package/lib/next/blocks/blockPnpmDedupe.js +51 -0
  100. package/lib/next/blocks/blockPnpmDedupe.js.map +1 -0
  101. package/lib/next/blocks/blockPrettier.d.ts +57 -0
  102. package/lib/next/blocks/blockPrettier.js +104 -0
  103. package/lib/next/blocks/blockPrettier.js.map +1 -0
  104. package/lib/next/blocks/blockPrettierPluginCurly.d.ts +48 -0
  105. package/lib/next/blocks/blockPrettierPluginCurly.js +20 -0
  106. package/lib/next/blocks/blockPrettierPluginCurly.js.map +1 -0
  107. package/lib/next/blocks/blockPrettierPluginPackageJson.d.ts +48 -0
  108. package/lib/next/blocks/blockPrettierPluginPackageJson.js +20 -0
  109. package/lib/next/blocks/blockPrettierPluginPackageJson.js.map +1 -0
  110. package/lib/next/blocks/blockPrettierPluginSh.d.ts +48 -0
  111. package/lib/next/blocks/blockPrettierPluginSh.js +20 -0
  112. package/lib/next/blocks/blockPrettierPluginSh.js.map +1 -0
  113. package/lib/next/blocks/blockREADME.d.ts +50 -0
  114. package/lib/next/blocks/blockREADME.js +63 -0
  115. package/lib/next/blocks/blockREADME.js.map +1 -0
  116. package/lib/next/blocks/blockReleaseIt.d.ts +48 -0
  117. package/lib/next/blocks/blockReleaseIt.js +126 -0
  118. package/lib/next/blocks/blockReleaseIt.js.map +1 -0
  119. package/lib/next/blocks/blockRenovate.d.ts +48 -0
  120. package/lib/next/blocks/blockRenovate.js +34 -0
  121. package/lib/next/blocks/blockRenovate.js.map +1 -0
  122. package/lib/next/blocks/blockSecurityDocs.d.ts +48 -0
  123. package/lib/next/blocks/blockSecurityDocs.js +28 -0
  124. package/lib/next/blocks/blockSecurityDocs.js.map +1 -0
  125. package/lib/next/blocks/blockTSup.d.ts +50 -0
  126. package/lib/next/blocks/blockTSup.js +78 -0
  127. package/lib/next/blocks/blockTSup.js.map +1 -0
  128. package/lib/next/blocks/blockTemplatedBy.d.ts +50 -0
  129. package/lib/next/blocks/blockTemplatedBy.js +34 -0
  130. package/lib/next/blocks/blockTemplatedBy.js.map +1 -0
  131. package/lib/next/blocks/blockTypeScript.d.ts +48 -0
  132. package/lib/next/blocks/blockTypeScript.js +109 -0
  133. package/lib/next/blocks/blockTypeScript.js.map +1 -0
  134. package/lib/next/blocks/blockVSCode.d.ts +57 -0
  135. package/lib/next/blocks/blockVSCode.js +87 -0
  136. package/lib/next/blocks/blockVSCode.js.map +1 -0
  137. package/lib/next/blocks/blockVitest.d.ts +55 -0
  138. package/lib/next/blocks/blockVitest.js +154 -0
  139. package/lib/next/blocks/blockVitest.js.map +1 -0
  140. package/lib/next/blocks/index.d.ts +43 -0
  141. package/lib/next/blocks/index.js +43 -0
  142. package/lib/next/blocks/index.js.map +1 -0
  143. package/lib/next/blocks/options.fakes.d.ts +13 -0
  144. package/lib/next/blocks/options.fakes.js +15 -0
  145. package/lib/next/blocks/options.fakes.js.map +1 -0
  146. package/lib/next/blocks/packageData.d.ts +5 -0
  147. package/lib/next/blocks/packageData.js +25 -0
  148. package/lib/next/blocks/packageData.js.map +1 -0
  149. package/lib/next/presetCommon.d.ts +99 -0
  150. package/lib/next/presetCommon.js +21 -0
  151. package/lib/next/presetCommon.js.map +1 -0
  152. package/lib/next/presetEverything.d.ts +99 -0
  153. package/lib/next/presetEverything.js +59 -0
  154. package/lib/next/presetEverything.js.map +1 -0
  155. package/lib/next/presetMinimal.d.ts +99 -0
  156. package/lib/next/presetMinimal.js +45 -0
  157. package/lib/next/presetMinimal.js.map +1 -0
  158. package/lib/next/template.d.ts +99 -0
  159. package/lib/next/template.js +21 -0
  160. package/lib/next/template.js.map +1 -0
  161. package/lib/next/utils/removeTrailingSlash.d.ts +3 -0
  162. package/lib/next/utils/removeTrailingSlash.js +7 -0
  163. package/lib/next/utils/removeTrailingSlash.js.map +1 -0
  164. package/lib/next/utils/sortObject.d.ts +5 -0
  165. package/lib/next/utils/sortObject.js +9 -0
  166. package/lib/next/utils/sortObject.js.map +1 -0
  167. package/lib/next/utils/swallowError.d.ts +3 -0
  168. package/lib/next/utils/swallowError.js +7 -0
  169. package/lib/next/utils/swallowError.js.map +1 -0
  170. package/lib/shared/cli/spinners.d.ts +1 -1
  171. package/lib/shared/cli/spinners.js.map +1 -1
  172. package/lib/shared/isUsingCreateEngine.d.ts +3 -0
  173. package/lib/shared/isUsingCreateEngine.js +7 -0
  174. package/lib/shared/isUsingCreateEngine.js.map +1 -0
  175. package/lib/shared/options/args.d.ts +39 -13
  176. package/lib/shared/options/args.js +5 -0
  177. package/lib/shared/options/args.js.map +1 -1
  178. package/lib/shared/options/augmentOptionsWithExcludes.js +2 -2
  179. package/lib/shared/options/augmentOptionsWithExcludes.js.map +1 -1
  180. package/lib/shared/options/createOptionDefaults/index.d.ts +2 -4
  181. package/lib/shared/options/createOptionDefaults/index.js +4 -13
  182. package/lib/shared/options/createOptionDefaults/index.js.map +1 -1
  183. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js +4 -1
  184. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js.map +1 -1
  185. package/lib/shared/options/createOptionDefaults/readEmails.d.ts +11 -0
  186. package/lib/shared/options/createOptionDefaults/readEmails.js +14 -0
  187. package/lib/shared/options/createOptionDefaults/readEmails.js.map +1 -0
  188. package/lib/shared/options/createOptionDefaults/readFunding.d.ts +3 -0
  189. package/lib/shared/options/createOptionDefaults/readFunding.js +11 -0
  190. package/lib/shared/options/createOptionDefaults/readFunding.js.map +1 -0
  191. package/lib/shared/options/createOptionDefaults/readGuide.d.ts +6 -0
  192. package/lib/shared/options/createOptionDefaults/readGuide.js +18 -0
  193. package/lib/shared/options/createOptionDefaults/readGuide.js.map +1 -0
  194. package/lib/shared/options/ensureRepositoryExists.js +1 -1
  195. package/lib/shared/options/ensureRepositoryExists.js.map +1 -1
  196. package/lib/shared/options/exclusionKeys.d.ts +1 -1
  197. package/lib/shared/options/exclusionKeys.js +6 -0
  198. package/lib/shared/options/exclusionKeys.js.map +1 -1
  199. package/lib/shared/options/optionsSchema.d.ts +6 -2
  200. package/lib/shared/options/optionsSchema.js +1 -0
  201. package/lib/shared/options/optionsSchema.js.map +1 -1
  202. package/lib/shared/options/readOptions.d.ts +1 -1
  203. package/lib/shared/options/readOptions.js +1 -0
  204. package/lib/shared/options/readOptions.js.map +1 -1
  205. package/lib/shared/types.d.ts +32 -24
  206. package/lib/steps/addOwnerAsAllContributor.js +2 -2
  207. package/lib/steps/addOwnerAsAllContributor.js.map +1 -1
  208. package/lib/steps/clearUnnecessaryFiles.js +3 -4
  209. package/lib/steps/clearUnnecessaryFiles.js.map +1 -1
  210. package/lib/steps/finalizeDependencies.js +47 -44
  211. package/lib/steps/finalizeDependencies.js.map +1 -1
  212. package/lib/steps/populateCSpellDictionary.js +7 -7
  213. package/lib/steps/populateCSpellDictionary.js.map +1 -1
  214. package/lib/steps/removeSetupScripts.js +9 -3
  215. package/lib/steps/removeSetupScripts.js.map +1 -1
  216. package/lib/steps/uninstallPackages.js +10 -3
  217. package/lib/steps/uninstallPackages.js.map +1 -1
  218. package/lib/steps/updateReadme.d.ts +1 -1
  219. package/lib/steps/updateReadme.js +1 -1
  220. package/lib/steps/updateReadme.js.map +1 -1
  221. package/lib/steps/writeReadme/index.js +19 -19
  222. package/lib/steps/writeReadme/index.js.map +1 -1
  223. package/lib/steps/writing/creation/createCSpellConfig.d.ts +7 -0
  224. package/lib/steps/writing/creation/createCSpellConfig.js +27 -0
  225. package/lib/steps/writing/creation/createCSpellConfig.js.map +1 -0
  226. package/lib/steps/writing/creation/createDotGitignore.js +7 -5
  227. package/lib/steps/writing/creation/createDotGitignore.js.map +1 -1
  228. package/lib/steps/writing/creation/createESLintConfig.js +22 -46
  229. package/lib/steps/writing/creation/createESLintConfig.js.map +1 -1
  230. package/lib/steps/writing/creation/createTsupConfig.js +10 -10
  231. package/lib/steps/writing/creation/createTsupConfig.js.map +1 -1
  232. package/lib/steps/writing/creation/dotGitHub/createDevelopment/index.js +57 -41
  233. package/lib/steps/writing/creation/dotGitHub/createDevelopment/index.js.map +1 -1
  234. package/lib/steps/writing/creation/dotGitHub/createDevelopment/splitIntoSections.js +1 -1
  235. package/lib/steps/writing/creation/dotGitHub/createDevelopment/splitIntoSections.js.map +1 -1
  236. package/lib/steps/writing/creation/dotGitHub/createDotGitHubFiles.js +5 -5
  237. package/lib/steps/writing/creation/dotGitHub/createDotGitHubFiles.js.map +1 -1
  238. package/lib/steps/writing/creation/dotGitHub/createMultiWorkflowFile.d.ts +11 -9
  239. package/lib/steps/writing/creation/dotGitHub/createMultiWorkflowFile.js.map +1 -1
  240. package/lib/steps/writing/creation/dotGitHub/createSoloWorkflowFile.d.ts +16 -16
  241. package/lib/steps/writing/creation/dotGitHub/createSoloWorkflowFile.js.map +1 -1
  242. package/lib/steps/writing/creation/dotGitHub/createWorkflows.js +5 -1
  243. package/lib/steps/writing/creation/dotGitHub/createWorkflows.js.map +1 -1
  244. package/lib/steps/writing/creation/formatters/formatIgnoreFile.d.ts +1 -1
  245. package/lib/steps/writing/creation/formatters/formatIgnoreFile.js +1 -1
  246. package/lib/steps/writing/creation/formatters/formatIgnoreFile.js.map +1 -1
  247. package/lib/steps/writing/creation/formatters/formatTypeScript.js +1 -1
  248. package/lib/steps/writing/creation/formatters/formatTypeScript.js.map +1 -1
  249. package/lib/steps/writing/creation/formatters/formatYaml.js +3 -1
  250. package/lib/steps/writing/creation/formatters/formatYaml.js.map +1 -1
  251. package/lib/steps/writing/creation/index.d.ts +1 -1
  252. package/lib/steps/writing/creation/index.js +49 -1
  253. package/lib/steps/writing/creation/index.js.map +1 -1
  254. package/lib/steps/writing/creation/rootFiles.js +5 -15
  255. package/lib/steps/writing/creation/rootFiles.js.map +1 -1
  256. package/lib/steps/writing/creation/writePackageJson.js +69 -62
  257. package/lib/steps/writing/creation/writePackageJson.js.map +1 -1
  258. package/lib/steps/writing/types.d.ts +1 -1
  259. package/lib/steps/writing/writeStructure.js +9 -1
  260. package/lib/steps/writing/writeStructure.js.map +1 -1
  261. package/lib/steps/writing/writeStructureWorker.js +1 -1
  262. package/lib/steps/writing/writeStructureWorker.js.map +1 -1
  263. package/package.json +57 -52
  264. package/lib/shared/options/createOptionDefaults/readDefaultsFromDevelopment.d.ts +0 -8
  265. package/lib/shared/options/createOptionDefaults/readDefaultsFromDevelopment.js +0 -22
  266. package/lib/shared/options/createOptionDefaults/readDefaultsFromDevelopment.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { sortPackageJson } from "sort-package-json";
1
2
  import { readFileSafeAsJson } from "../../../shared/readFileSafeAsJson.js";
2
3
  import { formatJson } from "./formatters/formatJson.js";
3
4
  const devDependenciesToRemove = [
@@ -30,73 +31,79 @@ async function writePackageJson(options) {
30
31
  const existingPackageJson = await readFileSafeAsJson(
31
32
  "./package.json"
32
33
  ) ?? {};
33
- return await formatJson({
34
- // If we didn't already have a version, set it to 0.0.0
35
- version: "0.0.0",
36
- // To start, copy over all existing package fields (e.g. "dependencies")
37
- ...existingPackageJson,
38
- author: { email: options.email.npm, name: options.author },
39
- bin: options.bin,
40
- description: options.description,
41
- keywords: options.keywords?.length ? options.keywords.flatMap((keyword) => keyword.split(/ /)) : void 0,
42
- // We copy all existing dev dependencies except those we know are not used anymore
43
- devDependencies: copyDevDependencies(existingPackageJson),
44
- // Remove fields we know we don't want, such as old or redundant configs
45
- eslintConfig: void 0,
46
- husky: void 0,
47
- jest: void 0,
48
- mocha: void 0,
49
- prettierConfig: void 0,
50
- types: void 0,
51
- // The rest of the fields are ones we know from our template
52
- engines: {
53
- node: ">=18.3.0"
54
- },
55
- files: [
56
- options.bin?.replace(/^\.\//, ""),
57
- "lib/",
58
- "package.json",
59
- "LICENSE.md",
60
- "README.md"
61
- ].filter(Boolean),
62
- license: "MIT",
63
- "lint-staged": {
64
- "*": "prettier --ignore-unknown --write"
65
- },
66
- main: "./lib/index.js",
67
- name: options.repository,
68
- publishConfig: {
69
- provenance: true
70
- },
71
- repository: {
72
- type: "git",
73
- url: `https://github.com/${options.owner}/${options.repository}`
74
- },
75
- scripts: {
76
- ...existingPackageJson.scripts,
77
- ...!options.excludeBuild && {
78
- build: "tsup"
34
+ return sortPackageJson(
35
+ await formatJson({
36
+ // If we didn't already have a version, set it to 0.0.0
37
+ version: "0.0.0",
38
+ // To start, copy over all existing package fields (e.g. "dependencies")
39
+ ...existingPackageJson,
40
+ author: { email: options.email.npm, name: options.author },
41
+ bin: options.bin,
42
+ description: options.description,
43
+ keywords: options.keywords?.length ? options.keywords.flatMap((keyword) => keyword.split(/ /)) : void 0,
44
+ // We copy all existing dev dependencies except those we know are not used anymore
45
+ devDependencies: {
46
+ ...copyDevDependencies(existingPackageJson),
47
+ // prettier is a special case of being switched to a devDependency
48
+ prettier: existingPackageJson.dependencies?.prettier
79
49
  },
80
- format: "prettier .",
81
- lint: "eslint . --max-warnings 0",
82
- ...!options.excludeLintKnip && {
83
- "lint:knip": "knip"
50
+ // Remove fields we know we don't want, such as old or redundant configs
51
+ eslintConfig: void 0,
52
+ husky: void 0,
53
+ jest: void 0,
54
+ mocha: void 0,
55
+ prettierConfig: void 0,
56
+ types: void 0,
57
+ // The rest of the fields are ones we know from our template
58
+ engines: {
59
+ node: ">=18.3.0"
84
60
  },
85
- ...!options.excludeLintMd && {
86
- "lint:md": 'markdownlint "**/*.md" ".github/**/*.md" --rules sentences-per-line'
61
+ files: [
62
+ options.bin?.replace(/^\.\//, ""),
63
+ "lib/",
64
+ "package.json",
65
+ "LICENSE.md",
66
+ "README.md"
67
+ ].filter(Boolean).sort(),
68
+ license: "MIT",
69
+ "lint-staged": {
70
+ "*": "prettier --ignore-unknown --write"
87
71
  },
88
- ...!options.excludeLintPackages && {
89
- "lint:packages": "pnpm dedupe --check"
72
+ main: "./lib/index.js",
73
+ name: options.repository,
74
+ publishConfig: {
75
+ provenance: true
90
76
  },
91
- ...!options.excludeLintSpelling && {
92
- "lint:spelling": 'cspell "**" ".github/**/*"'
77
+ repository: {
78
+ type: "git",
79
+ url: `https://github.com/${options.owner}/${options.repository}`
93
80
  },
94
- prepare: "husky",
95
- ...!options.excludeReleases && { test: "vitest" },
96
- tsc: "tsc"
97
- },
98
- type: "module"
99
- });
81
+ scripts: {
82
+ ...existingPackageJson.scripts,
83
+ ...!options.excludeBuild && {
84
+ build: "tsup"
85
+ },
86
+ format: "prettier .",
87
+ lint: "eslint . --max-warnings 0",
88
+ ...!options.excludeLintKnip && {
89
+ "lint:knip": "knip"
90
+ },
91
+ ...!options.excludeLintMd && {
92
+ "lint:md": 'markdownlint "**/*.md" ".github/**/*.md" --rules sentences-per-line'
93
+ },
94
+ ...!options.excludeLintPackages && {
95
+ "lint:packages": "pnpm dedupe --check"
96
+ },
97
+ ...!options.excludeLintSpelling && {
98
+ "lint:spelling": 'cspell "**" ".github/**/*"'
99
+ },
100
+ prepare: "husky",
101
+ ...!options.excludeTests && { test: "vitest" },
102
+ tsc: "tsc"
103
+ },
104
+ type: "module"
105
+ })
106
+ );
100
107
  }
101
108
  function copyDevDependencies(existingPackageJson) {
102
109
  const devDependencies = "devDependencies" in existingPackageJson ? existingPackageJson.devDependencies : {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/steps/writing/creation/writePackageJson.ts"],"sourcesContent":["import { readFileSafeAsJson } from \"../../../shared/readFileSafeAsJson.js\";\nimport { Options, PartialPackageData } from \"../../../shared/types.js\";\nimport { formatJson } from \"./formatters/formatJson.js\";\n\nconst devDependenciesToRemove = [\n\t\"@babel/core\",\n\t\"@babel/preset-env\",\n\t\"@babel/preset-react\",\n\t\"@babel/preset-typescript\",\n\t\"@swc/jest\",\n\t\"@vitest/coverage-istanbul\",\n\t\"ava\",\n\t\"babel-jest\",\n\t\"commitlint\",\n\t\"cson-parser\",\n\t\"esbuild\",\n\t\"eslint-config-prettier\",\n\t\"eslint-plugin-import\",\n\t\"eslint-plugin-jest\",\n\t\"eslint-plugin-prettier\",\n\t\"eslint-plugin-simple-import-sort\",\n\t\"eslint-plugin-typescript-sort-keys\",\n\t\"jasmine\",\n\t\"jest\",\n\t\"mocha\",\n\t\"npm-run-all\",\n\t\"pnpm-deduplicate\",\n\t\"pretty-quick\",\n\t\"ts-jest\",\n];\n\nexport async function writePackageJson(options: Options) {\n\tconst existingPackageJson =\n\t\t((await readFileSafeAsJson(\n\t\t\t\"./package.json\",\n\t\t)) as null | PartialPackageData) ?? {};\n\n\treturn await formatJson({\n\t\t// If we didn't already have a version, set it to 0.0.0\n\t\tversion: \"0.0.0\",\n\n\t\t// To start, copy over all existing package fields (e.g. \"dependencies\")\n\t\t...existingPackageJson,\n\n\t\tauthor: { email: options.email.npm, name: options.author },\n\t\tbin: options.bin,\n\t\tdescription: options.description,\n\t\tkeywords: options.keywords?.length\n\t\t\t? options.keywords.flatMap((keyword) => keyword.split(/ /))\n\t\t\t: undefined,\n\n\t\t// We copy all existing dev dependencies except those we know are not used anymore\n\t\tdevDependencies: copyDevDependencies(existingPackageJson),\n\n\t\t// Remove fields we know we don't want, such as old or redundant configs\n\t\teslintConfig: undefined,\n\t\thusky: undefined,\n\t\tjest: undefined,\n\t\tmocha: undefined,\n\t\tprettierConfig: undefined,\n\t\ttypes: undefined,\n\n\t\t// The rest of the fields are ones we know from our template\n\t\tengines: {\n\t\t\tnode: \">=18.3.0\",\n\t\t},\n\t\tfiles: [\n\t\t\toptions.bin?.replace(/^\\.\\//, \"\"),\n\t\t\t\"lib/\",\n\t\t\t\"package.json\",\n\t\t\t\"LICENSE.md\",\n\t\t\t\"README.md\",\n\t\t].filter(Boolean),\n\t\tlicense: \"MIT\",\n\t\t\"lint-staged\": {\n\t\t\t\"*\": \"prettier --ignore-unknown --write\",\n\t\t},\n\t\tmain: \"./lib/index.js\",\n\t\tname: options.repository,\n\t\tpublishConfig: {\n\t\t\tprovenance: true,\n\t\t},\n\t\trepository: {\n\t\t\ttype: \"git\",\n\t\t\turl: `https://github.com/${options.owner}/${options.repository}`,\n\t\t},\n\t\tscripts: {\n\t\t\t...existingPackageJson.scripts,\n\t\t\t...(!options.excludeBuild && {\n\t\t\t\tbuild: \"tsup\",\n\t\t\t}),\n\t\t\tformat: \"prettier .\",\n\t\t\tlint: \"eslint . --max-warnings 0\",\n\t\t\t...(!options.excludeLintKnip && {\n\t\t\t\t\"lint:knip\": \"knip\",\n\t\t\t}),\n\t\t\t...(!options.excludeLintMd && {\n\t\t\t\t\"lint:md\":\n\t\t\t\t\t'markdownlint \"**/*.md\" \".github/**/*.md\" --rules sentences-per-line',\n\t\t\t}),\n\t\t\t...(!options.excludeLintPackages && {\n\t\t\t\t\"lint:packages\": \"pnpm dedupe --check\",\n\t\t\t}),\n\t\t\t...(!options.excludeLintSpelling && {\n\t\t\t\t\"lint:spelling\": 'cspell \"**\" \".github/**/*\"',\n\t\t\t}),\n\t\t\tprepare: \"husky\",\n\t\t\t...(!options.excludeReleases && { test: \"vitest\" }),\n\t\t\ttsc: \"tsc\",\n\t\t},\n\t\ttype: \"module\",\n\t});\n}\n\nfunction copyDevDependencies(existingPackageJson: object) {\n\tconst devDependencies =\n\t\t\"devDependencies\" in existingPackageJson\n\t\t\t? (existingPackageJson.devDependencies as Record<string, string>)\n\t\t\t: {};\n\n\tfor (const devDependencyToRemove of devDependenciesToRemove) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete devDependencies[devDependencyToRemove];\n\t}\n\n\treturn devDependencies;\n}\n"],"mappings":"AAAA,SAAS,0BAA0B;AAEnC,SAAS,kBAAkB;AAE3B,MAAM,0BAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,eAAsB,iBAAiB,SAAkB;AACxD,QAAM,sBACH,MAAM;AAAA,IACP;AAAA,EACD,KAAoC,CAAC;AAEtC,SAAO,MAAM,WAAW;AAAA;AAAA,IAEvB,SAAS;AAAA;AAAA,IAGT,GAAG;AAAA,IAEH,QAAQ,EAAE,OAAO,QAAQ,MAAM,KAAK,MAAM,QAAQ,OAAO;AAAA,IACzD,KAAK,QAAQ;AAAA,IACb,aAAa,QAAQ;AAAA,IACrB,UAAU,QAAQ,UAAU,SACzB,QAAQ,SAAS,QAAQ,CAAC,YAAY,QAAQ,MAAM,GAAG,CAAC,IACxD;AAAA;AAAA,IAGH,iBAAiB,oBAAoB,mBAAmB;AAAA;AAAA,IAGxD,cAAc;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,gBAAgB;AAAA,IAChB,OAAO;AAAA;AAAA,IAGP,SAAS;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACA,OAAO;AAAA,MACN,QAAQ,KAAK,QAAQ,SAAS,EAAE;AAAA,MAChC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,OAAO,OAAO;AAAA,IAChB,SAAS;AAAA,IACT,eAAe;AAAA,MACd,KAAK;AAAA,IACN;AAAA,IACA,MAAM;AAAA,IACN,MAAM,QAAQ;AAAA,IACd,eAAe;AAAA,MACd,YAAY;AAAA,IACb;AAAA,IACA,YAAY;AAAA,MACX,MAAM;AAAA,MACN,KAAK,sBAAsB,QAAQ,KAAK,IAAI,QAAQ,UAAU;AAAA,IAC/D;AAAA,IACA,SAAS;AAAA,MACR,GAAG,oBAAoB;AAAA,MACvB,GAAI,CAAC,QAAQ,gBAAgB;AAAA,QAC5B,OAAO;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,GAAI,CAAC,QAAQ,mBAAmB;AAAA,QAC/B,aAAa;AAAA,MACd;AAAA,MACA,GAAI,CAAC,QAAQ,iBAAiB;AAAA,QAC7B,WACC;AAAA,MACF;AAAA,MACA,GAAI,CAAC,QAAQ,uBAAuB;AAAA,QACnC,iBAAiB;AAAA,MAClB;AAAA,MACA,GAAI,CAAC,QAAQ,uBAAuB;AAAA,QACnC,iBAAiB;AAAA,MAClB;AAAA,MACA,SAAS;AAAA,MACT,GAAI,CAAC,QAAQ,mBAAmB,EAAE,MAAM,SAAS;AAAA,MACjD,KAAK;AAAA,IACN;AAAA,IACA,MAAM;AAAA,EACP,CAAC;AACF;AAEA,SAAS,oBAAoB,qBAA6B;AACzD,QAAM,kBACL,qBAAqB,sBACjB,oBAAoB,kBACrB,CAAC;AAEL,aAAW,yBAAyB,yBAAyB;AAE5D,WAAO,gBAAgB,qBAAqB;AAAA,EAC7C;AAEA,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../../src/steps/writing/creation/writePackageJson.ts"],"sourcesContent":["import { sortPackageJson } from \"sort-package-json\";\n\nimport { readFileSafeAsJson } from \"../../../shared/readFileSafeAsJson.js\";\nimport { Options, PartialPackageData } from \"../../../shared/types.js\";\nimport { formatJson } from \"./formatters/formatJson.js\";\n\nconst devDependenciesToRemove = [\n\t\"@babel/core\",\n\t\"@babel/preset-env\",\n\t\"@babel/preset-react\",\n\t\"@babel/preset-typescript\",\n\t\"@swc/jest\",\n\t\"@vitest/coverage-istanbul\",\n\t\"ava\",\n\t\"babel-jest\",\n\t\"commitlint\",\n\t\"cson-parser\",\n\t\"esbuild\",\n\t\"eslint-config-prettier\",\n\t\"eslint-plugin-import\",\n\t\"eslint-plugin-jest\",\n\t\"eslint-plugin-prettier\",\n\t\"eslint-plugin-simple-import-sort\",\n\t\"eslint-plugin-typescript-sort-keys\",\n\t\"jasmine\",\n\t\"jest\",\n\t\"mocha\",\n\t\"npm-run-all\",\n\t\"pnpm-deduplicate\",\n\t\"pretty-quick\",\n\t\"ts-jest\",\n];\n\nexport async function writePackageJson(options: Options) {\n\tconst existingPackageJson =\n\t\t((await readFileSafeAsJson(\n\t\t\t\"./package.json\",\n\t\t)) as null | PartialPackageData) ?? {};\n\n\treturn sortPackageJson(\n\t\tawait formatJson({\n\t\t\t// If we didn't already have a version, set it to 0.0.0\n\t\t\tversion: \"0.0.0\",\n\n\t\t\t// To start, copy over all existing package fields (e.g. \"dependencies\")\n\t\t\t...existingPackageJson,\n\n\t\t\tauthor: { email: options.email.npm, name: options.author },\n\t\t\tbin: options.bin,\n\t\t\tdescription: options.description,\n\t\t\tkeywords: options.keywords?.length\n\t\t\t\t? options.keywords.flatMap((keyword) => keyword.split(/ /))\n\t\t\t\t: undefined,\n\n\t\t\t// We copy all existing dev dependencies except those we know are not used anymore\n\t\t\tdevDependencies: {\n\t\t\t\t...copyDevDependencies(existingPackageJson),\n\t\t\t\t// prettier is a special case of being switched to a devDependency\n\t\t\t\tprettier: existingPackageJson.dependencies?.prettier,\n\t\t\t},\n\n\t\t\t// Remove fields we know we don't want, such as old or redundant configs\n\t\t\teslintConfig: undefined,\n\t\t\thusky: undefined,\n\t\t\tjest: undefined,\n\t\t\tmocha: undefined,\n\t\t\tprettierConfig: undefined,\n\t\t\ttypes: undefined,\n\n\t\t\t// The rest of the fields are ones we know from our template\n\t\t\tengines: {\n\t\t\t\tnode: \">=18.3.0\",\n\t\t\t},\n\t\t\tfiles: [\n\t\t\t\toptions.bin?.replace(/^\\.\\//, \"\"),\n\t\t\t\t\"lib/\",\n\t\t\t\t\"package.json\",\n\t\t\t\t\"LICENSE.md\",\n\t\t\t\t\"README.md\",\n\t\t\t]\n\t\t\t\t.filter(Boolean)\n\t\t\t\t.sort(),\n\t\t\tlicense: \"MIT\",\n\t\t\t\"lint-staged\": {\n\t\t\t\t\"*\": \"prettier --ignore-unknown --write\",\n\t\t\t},\n\t\t\tmain: \"./lib/index.js\",\n\t\t\tname: options.repository,\n\t\t\tpublishConfig: {\n\t\t\t\tprovenance: true,\n\t\t\t},\n\t\t\trepository: {\n\t\t\t\ttype: \"git\",\n\t\t\t\turl: `https://github.com/${options.owner}/${options.repository}`,\n\t\t\t},\n\t\t\tscripts: {\n\t\t\t\t...existingPackageJson.scripts,\n\t\t\t\t...(!options.excludeBuild && {\n\t\t\t\t\tbuild: \"tsup\",\n\t\t\t\t}),\n\t\t\t\tformat: \"prettier .\",\n\t\t\t\tlint: \"eslint . --max-warnings 0\",\n\t\t\t\t...(!options.excludeLintKnip && {\n\t\t\t\t\t\"lint:knip\": \"knip\",\n\t\t\t\t}),\n\t\t\t\t...(!options.excludeLintMd && {\n\t\t\t\t\t\"lint:md\":\n\t\t\t\t\t\t'markdownlint \"**/*.md\" \".github/**/*.md\" --rules sentences-per-line',\n\t\t\t\t}),\n\t\t\t\t...(!options.excludeLintPackages && {\n\t\t\t\t\t\"lint:packages\": \"pnpm dedupe --check\",\n\t\t\t\t}),\n\t\t\t\t...(!options.excludeLintSpelling && {\n\t\t\t\t\t\"lint:spelling\": 'cspell \"**\" \".github/**/*\"',\n\t\t\t\t}),\n\t\t\t\tprepare: \"husky\",\n\t\t\t\t...(!options.excludeTests && { test: \"vitest\" }),\n\t\t\t\ttsc: \"tsc\",\n\t\t\t},\n\t\t\ttype: \"module\",\n\t\t}),\n\t);\n}\n\nfunction copyDevDependencies(existingPackageJson: object) {\n\tconst devDependencies =\n\t\t\"devDependencies\" in existingPackageJson\n\t\t\t? (existingPackageJson.devDependencies as Record<string, string>)\n\t\t\t: {};\n\n\tfor (const devDependencyToRemove of devDependenciesToRemove) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete devDependencies[devDependencyToRemove];\n\t}\n\n\treturn devDependencies;\n}\n"],"mappings":"AAAA,SAAS,uBAAuB;AAEhC,SAAS,0BAA0B;AAEnC,SAAS,kBAAkB;AAE3B,MAAM,0BAA0B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;AAEA,eAAsB,iBAAiB,SAAkB;AACxD,QAAM,sBACH,MAAM;AAAA,IACP;AAAA,EACD,KAAoC,CAAC;AAEtC,SAAO;AAAA,IACN,MAAM,WAAW;AAAA;AAAA,MAEhB,SAAS;AAAA;AAAA,MAGT,GAAG;AAAA,MAEH,QAAQ,EAAE,OAAO,QAAQ,MAAM,KAAK,MAAM,QAAQ,OAAO;AAAA,MACzD,KAAK,QAAQ;AAAA,MACb,aAAa,QAAQ;AAAA,MACrB,UAAU,QAAQ,UAAU,SACzB,QAAQ,SAAS,QAAQ,CAAC,YAAY,QAAQ,MAAM,GAAG,CAAC,IACxD;AAAA;AAAA,MAGH,iBAAiB;AAAA,QAChB,GAAG,oBAAoB,mBAAmB;AAAA;AAAA,QAE1C,UAAU,oBAAoB,cAAc;AAAA,MAC7C;AAAA;AAAA,MAGA,cAAc;AAAA,MACd,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO;AAAA,MACP,gBAAgB;AAAA,MAChB,OAAO;AAAA;AAAA,MAGP,SAAS;AAAA,QACR,MAAM;AAAA,MACP;AAAA,MACA,OAAO;AAAA,QACN,QAAQ,KAAK,QAAQ,SAAS,EAAE;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,EACE,OAAO,OAAO,EACd,KAAK;AAAA,MACP,SAAS;AAAA,MACT,eAAe;AAAA,QACd,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,MACN,MAAM,QAAQ;AAAA,MACd,eAAe;AAAA,QACd,YAAY;AAAA,MACb;AAAA,MACA,YAAY;AAAA,QACX,MAAM;AAAA,QACN,KAAK,sBAAsB,QAAQ,KAAK,IAAI,QAAQ,UAAU;AAAA,MAC/D;AAAA,MACA,SAAS;AAAA,QACR,GAAG,oBAAoB;AAAA,QACvB,GAAI,CAAC,QAAQ,gBAAgB;AAAA,UAC5B,OAAO;AAAA,QACR;AAAA,QACA,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,GAAI,CAAC,QAAQ,mBAAmB;AAAA,UAC/B,aAAa;AAAA,QACd;AAAA,QACA,GAAI,CAAC,QAAQ,iBAAiB;AAAA,UAC7B,WACC;AAAA,QACF;AAAA,QACA,GAAI,CAAC,QAAQ,uBAAuB;AAAA,UACnC,iBAAiB;AAAA,QAClB;AAAA,QACA,GAAI,CAAC,QAAQ,uBAAuB;AAAA,UACnC,iBAAiB;AAAA,QAClB;AAAA,QACA,SAAS;AAAA,QACT,GAAI,CAAC,QAAQ,gBAAgB,EAAE,MAAM,SAAS;AAAA,QAC9C,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,IACP,CAAC;AAAA,EACF;AACD;AAEA,SAAS,oBAAoB,qBAA6B;AACzD,QAAM,kBACL,qBAAqB,sBACjB,oBAAoB,kBACrB,CAAC;AAEL,aAAW,yBAAyB,yBAAyB;AAE5D,WAAO,gBAAgB,qBAAqB;AAAA,EAC7C;AAEA,SAAO;AACR;","names":[]}
@@ -1,5 +1,5 @@
1
1
  interface Structure {
2
- [i: string]: string | Structure;
2
+ [i: string]: false | string | Structure | undefined;
3
3
  }
4
4
 
5
5
  export type { Structure };
@@ -1,8 +1,16 @@
1
+ import { applyFilesToSystem, createWritingFileSystem } from "create";
1
2
  import { $ } from "execa";
3
+ import { isUsingCreateEngine } from "../../shared/isUsingCreateEngine.js";
2
4
  import { createStructure } from "./creation/index.js";
3
5
  import { writeStructureWorker } from "./writeStructureWorker.js";
4
6
  async function writeStructure(options) {
5
- await writeStructureWorker(await createStructure(options), ".");
7
+ const usingCreateEngine = isUsingCreateEngine();
8
+ const structure = await createStructure(options, usingCreateEngine);
9
+ if (usingCreateEngine) {
10
+ await applyFilesToSystem(structure, createWritingFileSystem(), ".");
11
+ return;
12
+ }
13
+ await writeStructureWorker(structure, ".");
6
14
  try {
7
15
  await $`chmod ug+x .husky/pre-commit`;
8
16
  } catch {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/steps/writing/writeStructure.ts"],"sourcesContent":["import { $ } from \"execa\";\n\nimport { Options } from \"../../shared/types.js\";\nimport { createStructure } from \"./creation/index.js\";\nimport { writeStructureWorker } from \"./writeStructureWorker.js\";\n\nexport async function writeStructure(options: Options) {\n\tawait writeStructureWorker(await createStructure(options), \".\");\n\n\ttry {\n\t\t// https://github.com/JoshuaKGoldberg/create-typescript-app/issues/718\n\t\tawait $`chmod ug+x .husky/pre-commit`;\n\t} catch {\n\t\t// https://github.com/JoshuaKGoldberg/create-typescript-app/issues/1195\n\t}\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAGlB,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AAErC,eAAsB,eAAe,SAAkB;AACtD,QAAM,qBAAqB,MAAM,gBAAgB,OAAO,GAAG,GAAG;AAE9D,MAAI;AAEH,UAAM;AAAA,EACP,QAAQ;AAAA,EAER;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../src/steps/writing/writeStructure.ts"],"sourcesContent":["import { applyFilesToSystem, createWritingFileSystem } from \"create\";\nimport { $ } from \"execa\";\n\nimport { isUsingCreateEngine } from \"../../shared/isUsingCreateEngine.js\";\nimport { Options } from \"../../shared/types.js\";\nimport { createStructure } from \"./creation/index.js\";\nimport { writeStructureWorker } from \"./writeStructureWorker.js\";\n\nexport async function writeStructure(options: Options) {\n\tconst usingCreateEngine = isUsingCreateEngine();\n\tconst structure = await createStructure(options, usingCreateEngine);\n\n\tif (usingCreateEngine) {\n\t\tawait applyFilesToSystem(structure, createWritingFileSystem(), \".\");\n\t\treturn;\n\t}\n\n\tawait writeStructureWorker(structure, \".\");\n\n\ttry {\n\t\t// https://github.com/JoshuaKGoldberg/create-typescript-app/issues/718\n\t\tawait $`chmod ug+x .husky/pre-commit`;\n\t} catch {\n\t\t// https://github.com/JoshuaKGoldberg/create-typescript-app/issues/1195\n\t}\n}\n"],"mappings":"AAAA,SAAS,oBAAoB,+BAA+B;AAC5D,SAAS,SAAS;AAElB,SAAS,2BAA2B;AAEpC,SAAS,uBAAuB;AAChC,SAAS,4BAA4B;AAErC,eAAsB,eAAe,SAAkB;AACtD,QAAM,oBAAoB,oBAAoB;AAC9C,QAAM,YAAY,MAAM,gBAAgB,SAAS,iBAAiB;AAElE,MAAI,mBAAmB;AACtB,UAAM,mBAAmB,WAAW,wBAAwB,GAAG,GAAG;AAClE;AAAA,EACD;AAEA,QAAM,qBAAqB,WAAW,GAAG;AAEzC,MAAI;AAEH,UAAM;AAAA,EACP,QAAQ;AAAA,EAER;AACD;","names":[]}
@@ -9,7 +9,7 @@ async function writeStructureWorker(structure, basePath) {
9
9
  path.join(basePath, fileName),
10
10
  await format(fileName, contents)
11
11
  );
12
- } else {
12
+ } else if (contents) {
13
13
  await writeStructureWorker(contents, path.join(basePath, fileName));
14
14
  }
15
15
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/steps/writing/writeStructureWorker.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"path\";\nimport prettier from \"prettier\";\n\nimport { Structure } from \"./types.js\";\n\nexport async function writeStructureWorker(\n\tstructure: Structure,\n\tbasePath: string,\n) {\n\tawait fs.mkdir(basePath, { recursive: true });\n\n\tfor (const [fileName, contents] of Object.entries(structure)) {\n\t\tif (typeof contents === \"string\") {\n\t\t\tawait fs.writeFile(\n\t\t\t\tpath.join(basePath, fileName),\n\t\t\t\tawait format(fileName, contents),\n\t\t\t);\n\t\t} else {\n\t\t\tawait writeStructureWorker(contents, path.join(basePath, fileName));\n\t\t}\n\t}\n}\n\nasync function format(fileName: string, text: string) {\n\tconst parser = inferParser(fileName, text);\n\tif (!parser) {\n\t\treturn text;\n\t}\n\n\treturn await prettier.format(text, {\n\t\tparser,\n\t\tuseTabs: true,\n\t});\n}\n\nfunction inferParser(fileName: string, text: string) {\n\tif (text.startsWith(\"{\")) {\n\t\treturn \"json\";\n\t}\n\n\tswitch (fileName.split(\".\").at(-1)) {\n\t\tcase \"cjs\":\n\t\tcase \"js\":\n\t\t\treturn \"babel\";\n\t\tcase \"json\":\n\t\t\treturn \"json\";\n\t\tcase \"md\":\n\t\t\treturn \"markdown\";\n\t\tcase \"yml\":\n\t\t\treturn \"yaml\";\n\t}\n\n\treturn undefined;\n}\n"],"mappings":"AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,OAAO,cAAc;AAIrB,eAAsB,qBACrB,WACA,UACC;AACD,QAAM,GAAG,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAE5C,aAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC7D,QAAI,OAAO,aAAa,UAAU;AACjC,YAAM,GAAG;AAAA,QACR,KAAK,KAAK,UAAU,QAAQ;AAAA,QAC5B,MAAM,OAAO,UAAU,QAAQ;AAAA,MAChC;AAAA,IACD,OAAO;AACN,YAAM,qBAAqB,UAAU,KAAK,KAAK,UAAU,QAAQ,CAAC;AAAA,IACnE;AAAA,EACD;AACD;AAEA,eAAe,OAAO,UAAkB,MAAc;AACrD,QAAM,SAAS,YAAY,UAAU,IAAI;AACzC,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AAEA,SAAO,MAAM,SAAS,OAAO,MAAM;AAAA,IAClC;AAAA,IACA,SAAS;AAAA,EACV,CAAC;AACF;AAEA,SAAS,YAAY,UAAkB,MAAc;AACpD,MAAI,KAAK,WAAW,GAAG,GAAG;AACzB,WAAO;AAAA,EACR;AAEA,UAAQ,SAAS,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG;AAAA,IACnC,KAAK;AAAA,IACL,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,EACT;AAEA,SAAO;AACR;","names":[]}
1
+ {"version":3,"sources":["../../../src/steps/writing/writeStructureWorker.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"path\";\nimport prettier from \"prettier\";\n\nimport { Structure } from \"./types.js\";\n\nexport async function writeStructureWorker(\n\tstructure: Structure,\n\tbasePath: string,\n) {\n\tawait fs.mkdir(basePath, { recursive: true });\n\n\tfor (const [fileName, contents] of Object.entries(structure)) {\n\t\tif (typeof contents === \"string\") {\n\t\t\tawait fs.writeFile(\n\t\t\t\tpath.join(basePath, fileName),\n\t\t\t\tawait format(fileName, contents),\n\t\t\t);\n\t\t} else if (contents) {\n\t\t\tawait writeStructureWorker(contents, path.join(basePath, fileName));\n\t\t}\n\t}\n}\n\nasync function format(fileName: string, text: string) {\n\tconst parser = inferParser(fileName, text);\n\tif (!parser) {\n\t\treturn text;\n\t}\n\n\treturn await prettier.format(text, {\n\t\tparser,\n\t\tuseTabs: true,\n\t});\n}\n\nfunction inferParser(fileName: string, text: string) {\n\tif (text.startsWith(\"{\")) {\n\t\treturn \"json\";\n\t}\n\n\tswitch (fileName.split(\".\").at(-1)) {\n\t\tcase \"cjs\":\n\t\tcase \"js\":\n\t\t\treturn \"babel\";\n\t\tcase \"json\":\n\t\t\treturn \"json\";\n\t\tcase \"md\":\n\t\t\treturn \"markdown\";\n\t\tcase \"yml\":\n\t\t\treturn \"yaml\";\n\t}\n\n\treturn undefined;\n}\n"],"mappings":"AAAA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,OAAO,cAAc;AAIrB,eAAsB,qBACrB,WACA,UACC;AACD,QAAM,GAAG,MAAM,UAAU,EAAE,WAAW,KAAK,CAAC;AAE5C,aAAW,CAAC,UAAU,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;AAC7D,QAAI,OAAO,aAAa,UAAU;AACjC,YAAM,GAAG;AAAA,QACR,KAAK,KAAK,UAAU,QAAQ;AAAA,QAC5B,MAAM,OAAO,UAAU,QAAQ;AAAA,MAChC;AAAA,IACD,WAAW,UAAU;AACpB,YAAM,qBAAqB,UAAU,KAAK,KAAK,UAAU,QAAQ,CAAC;AAAA,IACnE;AAAA,EACD;AACD;AAEA,eAAe,OAAO,UAAkB,MAAc;AACrD,QAAM,SAAS,YAAY,UAAU,IAAI;AACzC,MAAI,CAAC,QAAQ;AACZ,WAAO;AAAA,EACR;AAEA,SAAO,MAAM,SAAS,OAAO,MAAM;AAAA,IAClC;AAAA,IACA,SAAS;AAAA,EACV,CAAC;AACF;AAEA,SAAS,YAAY,UAAkB,MAAc;AACpD,MAAI,KAAK,WAAW,GAAG,GAAG;AACzB,WAAO;AAAA,EACR;AAEA,UAAQ,SAAS,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG;AAAA,IACnC,KAAK;AAAA,IACL,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,IACR,KAAK;AACJ,aAAO;AAAA,EACT;AAEA,SAAO;AACR;","names":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "create-typescript-app",
3
- "version": "1.75.1",
4
- "description": "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. 💝",
3
+ "version": "1.77.0",
4
+ "description": "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. ❤️‍🔥",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/JoshuaKGoldberg/create-typescript-app"
@@ -15,11 +15,11 @@
15
15
  "main": "./lib/index.js",
16
16
  "bin": "./bin/index.js",
17
17
  "files": [
18
+ "LICENSE.md",
19
+ "README.md",
18
20
  "bin/index.js",
19
21
  "lib/",
20
- "package.json",
21
- "LICENSE.md",
22
- "README.md"
22
+ "package.json"
23
23
  ],
24
24
  "scripts": {
25
25
  "build": "tsup",
@@ -41,67 +41,72 @@
41
41
  "*": "prettier --ignore-unknown --write"
42
42
  },
43
43
  "dependencies": {
44
- "@clack/prompts": "^0.8.0",
44
+ "@clack/prompts": "^0.8.2",
45
+ "@prettier/sync": "^0.5.2",
45
46
  "all-contributors-for-repository": "^0.3.0",
46
47
  "chalk": "^5.3.0",
47
- "execa": "^9.3.1",
48
+ "create": "0.1.0-alpha.1",
49
+ "execa": "^9.5.1",
48
50
  "get-github-auth-token": "^0.1.0",
49
51
  "git-remote-origin-url": "^4.0.0",
50
52
  "git-url-parse": "^16.0.0",
53
+ "input-from-file": "0.1.0-alpha.0",
54
+ "input-from-file-json": "0.1.0-alpha.1",
51
55
  "js-yaml": "^4.1.0",
52
56
  "lazy-value": "^3.0.0",
53
57
  "npm-user": "^6.1.1",
54
58
  "octokit": "^4.0.2",
55
59
  "parse-author": "^2.0.0",
56
- "prettier": "^3.3.3",
57
- "replace-in-file": "^8.1.0",
60
+ "parse-package-name": "^1.0.0",
61
+ "prettier": "^3.4.1",
62
+ "replace-in-file": "^8.2.0",
58
63
  "rimraf": "^6.0.1",
59
- "title-case": "^4.3.1",
64
+ "sort-package-json": "^2.12.0",
65
+ "title-case": "^4.3.2",
60
66
  "zod": "^3.23.8",
61
- "zod-validation-error": "^3.3.1"
67
+ "zod-validation-error": "^3.4.0"
62
68
  },
63
69
  "devDependencies": {
64
- "@eslint-community/eslint-plugin-eslint-comments": "^4.4.0",
65
- "@eslint/js": "^9.9.0",
66
- "@octokit/request-error": "^6.1.4",
67
- "@release-it/conventional-changelog": "^9.0.0",
68
- "@types/eslint-plugin-markdown": "^2.0.2",
69
- "@types/eslint__js": "^8.42.3",
70
- "@types/git-url-parse": "^9.0.3",
71
- "@types/js-yaml": "^4.0.9",
72
- "@types/node": "^22.3.0",
73
- "@types/parse-author": "^2.0.3",
74
- "@vitest/coverage-v8": "^2.1.0",
75
- "@vitest/eslint-plugin": "^1.1.0",
76
- "c8": "^10.1.2",
77
- "console-fail-test": "^0.5.0",
78
- "cspell": "^8.14.2",
79
- "eslint": "^9.9.0",
80
- "eslint-plugin-jsdoc": "^50.6.0",
81
- "eslint-plugin-jsonc": "^2.16.0",
82
- "eslint-plugin-markdown": "^5.1.0",
83
- "eslint-plugin-n": "^17.12.0",
84
- "eslint-plugin-package-json": "^0.15.2",
85
- "eslint-plugin-perfectionist": "^3.2.0",
86
- "eslint-plugin-regexp": "^2.6.0",
87
- "eslint-plugin-yml": "^1.14.0",
88
- "globby": "^14.0.2",
89
- "husky": "^9.1.4",
90
- "jsonc-eslint-parser": "^2.4.0",
91
- "knip": "5.37.0",
92
- "lint-staged": "^15.2.9",
93
- "markdownlint": "^0.36.0",
94
- "markdownlint-cli": "^0.42.0",
95
- "prettier-plugin-curly": "^0.3.0",
96
- "prettier-plugin-packagejson": "^2.5.1",
97
- "prettier-plugin-sh": "^0.14.0",
98
- "release-it": "^17.6.0",
99
- "sentences-per-line": "^0.2.1",
100
- "tsup": "^8.3.0",
101
- "tsx": "^4.17.0",
102
- "typescript": "^5.6.2",
103
- "typescript-eslint": "^8.15.0",
104
- "vitest": "^2.1.0"
70
+ "@eslint-community/eslint-plugin-eslint-comments": "4.4.1",
71
+ "@eslint/js": "9.16.0",
72
+ "@octokit/request-error": "6.1.5",
73
+ "@release-it/conventional-changelog": "9.0.3",
74
+ "@types/eslint-plugin-markdown": "2.0.2",
75
+ "@types/git-url-parse": "9.0.3",
76
+ "@types/js-yaml": "4.0.9",
77
+ "@types/node": "22.10.1",
78
+ "@types/parse-author": "2.0.3",
79
+ "@vitest/coverage-v8": "2.1.8",
80
+ "@vitest/eslint-plugin": "1.1.14",
81
+ "c8": "10.1.2",
82
+ "console-fail-test": "0.5.0",
83
+ "create-testers": "0.1.0-alpha.1",
84
+ "cspell": "8.16.1",
85
+ "eslint": "9.16.0",
86
+ "eslint-plugin-jsdoc": "50.6.0",
87
+ "eslint-plugin-jsonc": "2.18.2",
88
+ "eslint-plugin-markdown": "5.1.0",
89
+ "eslint-plugin-n": "17.14.0",
90
+ "eslint-plugin-package-json": "0.18.0",
91
+ "eslint-plugin-perfectionist": "4.2.0",
92
+ "eslint-plugin-regexp": "2.7.0",
93
+ "eslint-plugin-yml": "1.16.0",
94
+ "globby": "14.0.2",
95
+ "husky": "9.1.7",
96
+ "knip": "5.39.1",
97
+ "lint-staged": "15.2.10",
98
+ "markdownlint": "0.36.1",
99
+ "markdownlint-cli": "0.43.0",
100
+ "prettier-plugin-curly": "0.3.1",
101
+ "prettier-plugin-packagejson": "2.5.6",
102
+ "prettier-plugin-sh": "0.14.0",
103
+ "release-it": "17.10.0",
104
+ "sentences-per-line": "0.2.1",
105
+ "tsup": "8.3.5",
106
+ "tsx": "4.19.2",
107
+ "typescript": "5.7.2",
108
+ "typescript-eslint": "8.17.0",
109
+ "vitest": "2.1.8"
105
110
  },
106
111
  "engines": {
107
112
  "node": ">=18.3.0"
@@ -1,8 +0,0 @@
1
- declare function readDefaultsFromDevelopment(): {
2
- guide: () => Promise<{
3
- href: string;
4
- title: string;
5
- } | undefined>;
6
- };
7
-
8
- export { readDefaultsFromDevelopment };
@@ -1,22 +0,0 @@
1
- import lazyValue from "lazy-value";
2
- import { readFileSafe } from "../../readFileSafe.js";
3
- function readDefaultsFromDevelopment() {
4
- return {
5
- guide: lazyValue(async () => {
6
- const tag = /> .*guided walkthrough, see \[((?!\[).+)\]\((.+)\)/i.exec(
7
- await readFileSafe(".github/DEVELOPMENT.md", "")
8
- );
9
- if (!tag) {
10
- return void 0;
11
- }
12
- return {
13
- href: tag[2],
14
- title: tag[1]
15
- };
16
- })
17
- };
18
- }
19
- export {
20
- readDefaultsFromDevelopment
21
- };
22
- //# sourceMappingURL=readDefaultsFromDevelopment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/shared/options/createOptionDefaults/readDefaultsFromDevelopment.ts"],"sourcesContent":["import lazyValue from \"lazy-value\";\n\nimport { readFileSafe } from \"../../readFileSafe.js\";\n\nexport function readDefaultsFromDevelopment() {\n\treturn {\n\t\tguide: lazyValue(async () => {\n\t\t\tconst tag = /> .*guided walkthrough, see \\[((?!\\[).+)\\]\\((.+)\\)/i.exec(\n\t\t\t\tawait readFileSafe(\".github/DEVELOPMENT.md\", \"\"),\n\t\t\t);\n\n\t\t\tif (!tag) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\thref: tag[2],\n\t\t\t\ttitle: tag[1],\n\t\t\t};\n\t\t}),\n\t};\n}\n"],"mappings":"AAAA,OAAO,eAAe;AAEtB,SAAS,oBAAoB;AAEtB,SAAS,8BAA8B;AAC7C,SAAO;AAAA,IACN,OAAO,UAAU,YAAY;AAC5B,YAAM,MAAM,sDAAsD;AAAA,QACjE,MAAM,aAAa,0BAA0B,EAAE;AAAA,MAChD;AAEA,UAAI,CAAC,KAAK;AACT,eAAO;AAAA,MACR;AAEA,aAAO;AAAA,QACN,MAAM,IAAI,CAAC;AAAA,QACX,OAAO,IAAI,CAAC;AAAA,MACb;AAAA,IACD,CAAC;AAAA,EACF;AACD;","names":[]}