create-typescript-app 1.76.0 → 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 (234) hide show
  1. package/README.md +1 -1
  2. package/lib/create/createWithOptions.js +12 -13
  3. package/lib/create/createWithOptions.js.map +1 -1
  4. package/lib/index.d.ts +45 -0
  5. package/lib/index.js +5 -0
  6. package/lib/index.js.map +1 -1
  7. package/lib/next/base.d.ts +101 -0
  8. package/lib/next/base.js +140 -0
  9. package/lib/next/base.js.map +1 -0
  10. package/lib/next/blocks/blockAllContributors.d.ts +48 -0
  11. package/lib/next/blocks/blockAllContributors.js +59 -0
  12. package/lib/next/blocks/blockAllContributors.js.map +1 -0
  13. package/lib/next/blocks/blockAreTheTypesWrong.d.ts +48 -0
  14. package/lib/next/blocks/blockAreTheTypesWrong.js +29 -0
  15. package/lib/next/blocks/blockAreTheTypesWrong.js.map +1 -0
  16. package/lib/next/blocks/blockCSpell.d.ts +51 -0
  17. package/lib/next/blocks/blockCSpell.js +77 -0
  18. package/lib/next/blocks/blockCSpell.js.map +1 -0
  19. package/lib/next/blocks/blockContributingDocs.d.ts +48 -0
  20. package/lib/next/blocks/blockContributingDocs.js +116 -0
  21. package/lib/next/blocks/blockContributingDocs.js.map +1 -0
  22. package/lib/next/blocks/blockContributorCovenant.d.ts +48 -0
  23. package/lib/next/blocks/blockContributorCovenant.js +151 -0
  24. package/lib/next/blocks/blockContributorCovenant.js.map +1 -0
  25. package/lib/next/blocks/blockDevelopmentDocs.d.ts +62 -0
  26. package/lib/next/blocks/blockDevelopmentDocs.js +86 -0
  27. package/lib/next/blocks/blockDevelopmentDocs.js.map +1 -0
  28. package/lib/next/blocks/blockESLint.d.ts +73 -0
  29. package/lib/next/blocks/blockESLint.js +225 -0
  30. package/lib/next/blocks/blockESLint.js.map +1 -0
  31. package/lib/next/blocks/blockESLintComments.d.ts +48 -0
  32. package/lib/next/blocks/blockESLintComments.js +26 -0
  33. package/lib/next/blocks/blockESLintComments.js.map +1 -0
  34. package/lib/next/blocks/blockESLintJSDoc.d.ts +48 -0
  35. package/lib/next/blocks/blockESLintJSDoc.js +25 -0
  36. package/lib/next/blocks/blockESLintJSDoc.js.map +1 -0
  37. package/lib/next/blocks/blockESLintJSONC.d.ts +48 -0
  38. package/lib/next/blocks/blockESLintJSONC.js +21 -0
  39. package/lib/next/blocks/blockESLintJSONC.js.map +1 -0
  40. package/lib/next/blocks/blockESLintMarkdown.d.ts +48 -0
  41. package/lib/next/blocks/blockESLintMarkdown.js +27 -0
  42. package/lib/next/blocks/blockESLintMarkdown.js.map +1 -0
  43. package/lib/next/blocks/blockESLintMoreStyling.d.ts +48 -0
  44. package/lib/next/blocks/blockESLintMoreStyling.js +34 -0
  45. package/lib/next/blocks/blockESLintMoreStyling.js.map +1 -0
  46. package/lib/next/blocks/blockESLintNode.d.ts +48 -0
  47. package/lib/next/blocks/blockESLintNode.js +33 -0
  48. package/lib/next/blocks/blockESLintNode.js.map +1 -0
  49. package/lib/next/blocks/blockESLintPackageJson.d.ts +48 -0
  50. package/lib/next/blocks/blockESLintPackageJson.js +26 -0
  51. package/lib/next/blocks/blockESLintPackageJson.js.map +1 -0
  52. package/lib/next/blocks/blockESLintPerfectionist.d.ts +48 -0
  53. package/lib/next/blocks/blockESLintPerfectionist.js +32 -0
  54. package/lib/next/blocks/blockESLintPerfectionist.js.map +1 -0
  55. package/lib/next/blocks/blockESLintRegexp.d.ts +48 -0
  56. package/lib/next/blocks/blockESLintRegexp.js +23 -0
  57. package/lib/next/blocks/blockESLintRegexp.js.map +1 -0
  58. package/lib/next/blocks/blockESLintYML.d.ts +48 -0
  59. package/lib/next/blocks/blockESLintYML.js +46 -0
  60. package/lib/next/blocks/blockESLintYML.js.map +1 -0
  61. package/lib/next/blocks/blockFunding.d.ts +48 -0
  62. package/lib/next/blocks/blockFunding.js +20 -0
  63. package/lib/next/blocks/blockFunding.js.map +1 -0
  64. package/lib/next/blocks/blockGitHubActionsCI.d.ts +60 -0
  65. package/lib/next/blocks/blockGitHubActionsCI.js +122 -0
  66. package/lib/next/blocks/blockGitHubActionsCI.js.map +1 -0
  67. package/lib/next/blocks/blockGitHubIssueTemplates.d.ts +48 -0
  68. package/lib/next/blocks/blockGitHubIssueTemplates.js +217 -0
  69. package/lib/next/blocks/blockGitHubIssueTemplates.js.map +1 -0
  70. package/lib/next/blocks/blockGitHubPRTemplate.d.ts +48 -0
  71. package/lib/next/blocks/blockGitHubPRTemplate.js +32 -0
  72. package/lib/next/blocks/blockGitHubPRTemplate.js.map +1 -0
  73. package/lib/next/blocks/blockGitignore.d.ts +50 -0
  74. package/lib/next/blocks/blockGitignore.js +23 -0
  75. package/lib/next/blocks/blockGitignore.js.map +1 -0
  76. package/lib/next/blocks/blockKnip.d.ts +48 -0
  77. package/lib/next/blocks/blockKnip.js +58 -0
  78. package/lib/next/blocks/blockKnip.js.map +1 -0
  79. package/lib/next/blocks/blockMITLicense.d.ts +48 -0
  80. package/lib/next/blocks/blockMITLicense.js +46 -0
  81. package/lib/next/blocks/blockMITLicense.js.map +1 -0
  82. package/lib/next/blocks/blockMarkdownlint.d.ts +50 -0
  83. package/lib/next/blocks/blockMarkdownlint.js +77 -0
  84. package/lib/next/blocks/blockMarkdownlint.js.map +1 -0
  85. package/lib/next/blocks/blockNvmrc.d.ts +48 -0
  86. package/lib/next/blocks/blockNvmrc.js +26 -0
  87. package/lib/next/blocks/blockNvmrc.js.map +1 -0
  88. package/lib/next/blocks/blockPRCompliance.d.ts +48 -0
  89. package/lib/next/blocks/blockPRCompliance.js +48 -0
  90. package/lib/next/blocks/blockPRCompliance.js.map +1 -0
  91. package/lib/next/blocks/blockPackageJson.d.ts +56 -0
  92. package/lib/next/blocks/blockPackageJson.js +81 -0
  93. package/lib/next/blocks/blockPackageJson.js.map +1 -0
  94. package/lib/next/blocks/blockPnpmDedupe.d.ts +48 -0
  95. package/lib/next/blocks/blockPnpmDedupe.js +51 -0
  96. package/lib/next/blocks/blockPnpmDedupe.js.map +1 -0
  97. package/lib/next/blocks/blockPrettier.d.ts +57 -0
  98. package/lib/next/blocks/blockPrettier.js +104 -0
  99. package/lib/next/blocks/blockPrettier.js.map +1 -0
  100. package/lib/next/blocks/blockPrettierPluginCurly.d.ts +48 -0
  101. package/lib/next/blocks/blockPrettierPluginCurly.js +20 -0
  102. package/lib/next/blocks/blockPrettierPluginCurly.js.map +1 -0
  103. package/lib/next/blocks/blockPrettierPluginPackageJson.d.ts +48 -0
  104. package/lib/next/blocks/blockPrettierPluginPackageJson.js +20 -0
  105. package/lib/next/blocks/blockPrettierPluginPackageJson.js.map +1 -0
  106. package/lib/next/blocks/blockPrettierPluginSh.d.ts +48 -0
  107. package/lib/next/blocks/blockPrettierPluginSh.js +20 -0
  108. package/lib/next/blocks/blockPrettierPluginSh.js.map +1 -0
  109. package/lib/next/blocks/blockREADME.d.ts +50 -0
  110. package/lib/next/blocks/blockREADME.js +63 -0
  111. package/lib/next/blocks/blockREADME.js.map +1 -0
  112. package/lib/next/blocks/blockReleaseIt.d.ts +48 -0
  113. package/lib/next/blocks/blockReleaseIt.js +126 -0
  114. package/lib/next/blocks/blockReleaseIt.js.map +1 -0
  115. package/lib/next/blocks/blockRenovate.d.ts +48 -0
  116. package/lib/next/blocks/blockRenovate.js +34 -0
  117. package/lib/next/blocks/blockRenovate.js.map +1 -0
  118. package/lib/next/blocks/blockSecurityDocs.d.ts +48 -0
  119. package/lib/next/blocks/blockSecurityDocs.js +28 -0
  120. package/lib/next/blocks/blockSecurityDocs.js.map +1 -0
  121. package/lib/next/blocks/blockTSup.d.ts +50 -0
  122. package/lib/next/blocks/blockTSup.js +78 -0
  123. package/lib/next/blocks/blockTSup.js.map +1 -0
  124. package/lib/next/blocks/blockTemplatedBy.d.ts +50 -0
  125. package/lib/next/blocks/blockTemplatedBy.js +34 -0
  126. package/lib/next/blocks/blockTemplatedBy.js.map +1 -0
  127. package/lib/next/blocks/blockTypeScript.d.ts +48 -0
  128. package/lib/next/blocks/blockTypeScript.js +109 -0
  129. package/lib/next/blocks/blockTypeScript.js.map +1 -0
  130. package/lib/next/blocks/blockVSCode.d.ts +57 -0
  131. package/lib/next/blocks/blockVSCode.js +87 -0
  132. package/lib/next/blocks/blockVSCode.js.map +1 -0
  133. package/lib/next/blocks/blockVitest.d.ts +55 -0
  134. package/lib/next/blocks/blockVitest.js +154 -0
  135. package/lib/next/blocks/blockVitest.js.map +1 -0
  136. package/lib/next/blocks/index.d.ts +43 -0
  137. package/lib/next/blocks/index.js +43 -0
  138. package/lib/next/blocks/index.js.map +1 -0
  139. package/lib/next/blocks/options.fakes.d.ts +13 -0
  140. package/lib/next/blocks/options.fakes.js +15 -0
  141. package/lib/next/blocks/options.fakes.js.map +1 -0
  142. package/lib/next/blocks/packageData.d.ts +5 -0
  143. package/lib/next/blocks/packageData.js +25 -0
  144. package/lib/next/blocks/packageData.js.map +1 -0
  145. package/lib/next/presetCommon.d.ts +99 -0
  146. package/lib/next/presetCommon.js +21 -0
  147. package/lib/next/presetCommon.js.map +1 -0
  148. package/lib/next/presetEverything.d.ts +99 -0
  149. package/lib/next/presetEverything.js +59 -0
  150. package/lib/next/presetEverything.js.map +1 -0
  151. package/lib/next/presetMinimal.d.ts +99 -0
  152. package/lib/next/presetMinimal.js +45 -0
  153. package/lib/next/presetMinimal.js.map +1 -0
  154. package/lib/next/template.d.ts +99 -0
  155. package/lib/next/template.js +21 -0
  156. package/lib/next/template.js.map +1 -0
  157. package/lib/next/utils/removeTrailingSlash.d.ts +3 -0
  158. package/lib/next/utils/removeTrailingSlash.js +7 -0
  159. package/lib/next/utils/removeTrailingSlash.js.map +1 -0
  160. package/lib/next/utils/sortObject.d.ts +5 -0
  161. package/lib/next/utils/sortObject.js +9 -0
  162. package/lib/next/utils/sortObject.js.map +1 -0
  163. package/lib/next/utils/swallowError.d.ts +3 -0
  164. package/lib/next/utils/swallowError.js +7 -0
  165. package/lib/next/utils/swallowError.js.map +1 -0
  166. package/lib/shared/isUsingCreateEngine.d.ts +3 -0
  167. package/lib/shared/isUsingCreateEngine.js +7 -0
  168. package/lib/shared/isUsingCreateEngine.js.map +1 -0
  169. package/lib/shared/options/createOptionDefaults/index.d.ts +2 -4
  170. package/lib/shared/options/createOptionDefaults/index.js +4 -13
  171. package/lib/shared/options/createOptionDefaults/index.js.map +1 -1
  172. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js +4 -1
  173. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js.map +1 -1
  174. package/lib/shared/options/createOptionDefaults/readEmails.d.ts +11 -0
  175. package/lib/shared/options/createOptionDefaults/readEmails.js +14 -0
  176. package/lib/shared/options/createOptionDefaults/readEmails.js.map +1 -0
  177. package/lib/shared/options/createOptionDefaults/readFunding.d.ts +3 -0
  178. package/lib/shared/options/createOptionDefaults/readFunding.js +11 -0
  179. package/lib/shared/options/createOptionDefaults/readFunding.js.map +1 -0
  180. package/lib/shared/options/createOptionDefaults/readGuide.d.ts +6 -0
  181. package/lib/shared/options/createOptionDefaults/readGuide.js +18 -0
  182. package/lib/shared/options/createOptionDefaults/readGuide.js.map +1 -0
  183. package/lib/shared/types.d.ts +7 -0
  184. package/lib/steps/addOwnerAsAllContributor.js.map +1 -1
  185. package/lib/steps/clearUnnecessaryFiles.js +0 -1
  186. package/lib/steps/clearUnnecessaryFiles.js.map +1 -1
  187. package/lib/steps/finalizeDependencies.js +47 -44
  188. package/lib/steps/finalizeDependencies.js.map +1 -1
  189. package/lib/steps/removeSetupScripts.js +9 -3
  190. package/lib/steps/removeSetupScripts.js.map +1 -1
  191. package/lib/steps/uninstallPackages.js +10 -3
  192. package/lib/steps/uninstallPackages.js.map +1 -1
  193. package/lib/steps/writing/creation/createCSpellConfig.d.ts +7 -0
  194. package/lib/steps/writing/creation/createCSpellConfig.js +27 -0
  195. package/lib/steps/writing/creation/createCSpellConfig.js.map +1 -0
  196. package/lib/steps/writing/creation/createDotGitignore.js +7 -5
  197. package/lib/steps/writing/creation/createDotGitignore.js.map +1 -1
  198. package/lib/steps/writing/creation/createESLintConfig.js +1 -3
  199. package/lib/steps/writing/creation/createESLintConfig.js.map +1 -1
  200. package/lib/steps/writing/creation/createTsupConfig.js +10 -10
  201. package/lib/steps/writing/creation/createTsupConfig.js.map +1 -1
  202. package/lib/steps/writing/creation/dotGitHub/createDevelopment/index.js +31 -16
  203. package/lib/steps/writing/creation/dotGitHub/createDevelopment/index.js.map +1 -1
  204. package/lib/steps/writing/creation/dotGitHub/createDevelopment/splitIntoSections.js +1 -1
  205. package/lib/steps/writing/creation/dotGitHub/createDevelopment/splitIntoSections.js.map +1 -1
  206. package/lib/steps/writing/creation/dotGitHub/createDotGitHubFiles.js +5 -5
  207. package/lib/steps/writing/creation/dotGitHub/createDotGitHubFiles.js.map +1 -1
  208. package/lib/steps/writing/creation/dotGitHub/createMultiWorkflowFile.d.ts +3 -1
  209. package/lib/steps/writing/creation/dotGitHub/createMultiWorkflowFile.js.map +1 -1
  210. package/lib/steps/writing/creation/dotGitHub/createWorkflows.js +5 -1
  211. package/lib/steps/writing/creation/dotGitHub/createWorkflows.js.map +1 -1
  212. package/lib/steps/writing/creation/formatters/formatIgnoreFile.d.ts +1 -1
  213. package/lib/steps/writing/creation/formatters/formatIgnoreFile.js +1 -1
  214. package/lib/steps/writing/creation/formatters/formatIgnoreFile.js.map +1 -1
  215. package/lib/steps/writing/creation/formatters/formatTypeScript.js +1 -1
  216. package/lib/steps/writing/creation/formatters/formatTypeScript.js.map +1 -1
  217. package/lib/steps/writing/creation/formatters/formatYaml.js +3 -1
  218. package/lib/steps/writing/creation/formatters/formatYaml.js.map +1 -1
  219. package/lib/steps/writing/creation/index.d.ts +1 -1
  220. package/lib/steps/writing/creation/index.js +49 -1
  221. package/lib/steps/writing/creation/index.js.map +1 -1
  222. package/lib/steps/writing/creation/rootFiles.js +4 -14
  223. package/lib/steps/writing/creation/rootFiles.js.map +1 -1
  224. package/lib/steps/writing/creation/writePackageJson.js +69 -62
  225. package/lib/steps/writing/creation/writePackageJson.js.map +1 -1
  226. package/lib/steps/writing/types.d.ts +1 -1
  227. package/lib/steps/writing/writeStructure.js +9 -1
  228. package/lib/steps/writing/writeStructure.js.map +1 -1
  229. package/lib/steps/writing/writeStructureWorker.js +1 -1
  230. package/lib/steps/writing/writeStructureWorker.js.map +1 -1
  231. package/package.json +13 -8
  232. package/lib/shared/options/createOptionDefaults/readDefaultsFromDevelopment.d.ts +0 -8
  233. package/lib/shared/options/createOptionDefaults/readDefaultsFromDevelopment.js +0 -22
  234. package/lib/shared/options/createOptionDefaults/readDefaultsFromDevelopment.js.map +0 -1
@@ -1,3 +1,4 @@
1
+ import { createCSpellConfig } from "./createCSpellConfig.js";
1
2
  import { createDotGitignore } from "./createDotGitignore.js";
2
3
  import { createESLintConfig } from "./createESLintConfig.js";
3
4
  import { createTsupConfig } from "./createTsupConfig.js";
@@ -42,8 +43,8 @@ async function createRootFiles(options) {
42
43
  ],
43
44
  plugins: [
44
45
  "prettier-plugin-curly",
45
- "prettier-plugin-sh",
46
- "prettier-plugin-packagejson"
46
+ "prettier-plugin-packagejson",
47
+ "prettier-plugin-sh"
47
48
  ],
48
49
  useTabs: true
49
50
  }),
@@ -91,18 +92,7 @@ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
91
92
  SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
92
93
  `,
93
94
  ...!options.excludeLintSpelling && {
94
- "cspell.json": await formatJson({
95
- dictionaries: ["typescript"],
96
- ignorePaths: [
97
- ...options.excludeAllContributors ? [] : [".all-contributorsrc"],
98
- ".github",
99
- "CHANGELOG.md",
100
- ...options.excludeTests ? [] : ["coverage"],
101
- "lib",
102
- "node_modules",
103
- "pnpm-lock.yaml"
104
- ]
105
- })
95
+ "cspell.json": await createCSpellConfig(options)
106
96
  },
107
97
  ...!options.excludeLintKnip && {
108
98
  "knip.json": await formatJson({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/steps/writing/creation/rootFiles.ts"],"sourcesContent":["import { Options } from \"../../../shared/types.js\";\nimport { createDotGitignore } from \"./createDotGitignore.js\";\nimport { createESLintConfig } from \"./createESLintConfig.js\";\nimport { createTsupConfig } from \"./createTsupConfig.js\";\nimport { formatIgnoreFile } from \"./formatters/formatIgnoreFile.js\";\nimport { formatJson } from \"./formatters/formatJson.js\";\nimport { writeAllContributorsRC } from \"./writeAllContributorsRC.js\";\nimport { writePackageJson } from \"./writePackageJson.js\";\n\nexport async function createRootFiles(options: Options) {\n\treturn {\n\t\t\".all-contributorsrc\": await writeAllContributorsRC(options),\n\t\t\".gitignore\": createDotGitignore(options),\n\t\t\"eslint.config.js\": await createESLintConfig(options),\n\t\t...(!options.excludeLintMd && {\n\t\t\t\".markdownlint.json\": await formatJson({\n\t\t\t\textends: \"markdownlint/style/prettier\",\n\t\t\t\t\"first-line-h1\": false,\n\t\t\t\t\"no-inline-html\": false,\n\t\t\t}),\n\t\t\t\".markdownlintignore\": formatIgnoreFile([\n\t\t\t\t\".github/CODE_OF_CONDUCT.md\",\n\t\t\t\t\"CHANGELOG.md\",\n\t\t\t\t\"lib/\",\n\t\t\t\t\"node_modules/\",\n\t\t\t]),\n\t\t}),\n\t\t\".nvmrc\": `20.18.0\\n`,\n\t\t\".prettierignore\": formatIgnoreFile([\n\t\t\t...(options.excludeAllContributors ? [] : [\"/.all-contributorsrc\"]),\n\t\t\t\"/.husky\",\n\t\t\t...(options.excludeTests ? [] : [\"/coverage\"]),\n\t\t\t\"/lib\",\n\t\t\t\"/pnpm-lock.yaml\",\n\t\t]),\n\t\t\".prettierrc.json\": await formatJson({\n\t\t\t$schema: \"http://json.schemastore.org/prettierrc\",\n\t\t\toverrides: [\n\t\t\t\t{\n\t\t\t\t\tfiles: \".nvmrc\",\n\t\t\t\t\toptions: { parser: \"yaml\" },\n\t\t\t\t},\n\t\t\t],\n\t\t\tplugins: [\n\t\t\t\t\"prettier-plugin-curly\",\n\t\t\t\t\"prettier-plugin-sh\",\n\t\t\t\t\"prettier-plugin-packagejson\",\n\t\t\t],\n\t\t\tuseTabs: true,\n\t\t}),\n\t\t...(!options.excludeReleases && {\n\t\t\t\".release-it.json\": await formatJson({\n\t\t\t\tgit: {\n\t\t\t\t\tcommitMessage: \"chore: release v${version}\",\n\t\t\t\t\trequireCommits: true,\n\t\t\t\t},\n\t\t\t\tgithub: {\n\t\t\t\t\tautoGenerate: true,\n\t\t\t\t\trelease: true,\n\t\t\t\t\treleaseName: \"v${version}\",\n\t\t\t\t},\n\t\t\t\tnpm: {\n\t\t\t\t\tpublishArgs: [`--access ${options.access}`, \"--provenance\"],\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\t\"@release-it/conventional-changelog\": {\n\t\t\t\t\t\tinfile: \"CHANGELOG.md\",\n\t\t\t\t\t\tpreset: \"angular\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t}),\n\t\t\"LICENSE.md\": `# MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n`,\n\t\t...(!options.excludeLintSpelling && {\n\t\t\t\"cspell.json\": await formatJson({\n\t\t\t\tdictionaries: [\"typescript\"],\n\t\t\t\tignorePaths: [\n\t\t\t\t\t...(options.excludeAllContributors ? [] : [\".all-contributorsrc\"]),\n\t\t\t\t\t\".github\",\n\t\t\t\t\t\"CHANGELOG.md\",\n\t\t\t\t\t...(options.excludeTests ? [] : [\"coverage\"]),\n\t\t\t\t\t\"lib\",\n\t\t\t\t\t\"node_modules\",\n\t\t\t\t\t\"pnpm-lock.yaml\",\n\t\t\t\t],\n\t\t\t}),\n\t\t}),\n\t\t...(!options.excludeLintKnip && {\n\t\t\t\"knip.json\": await formatJson({\n\t\t\t\t$schema: \"https://unpkg.com/knip@latest/schema.json\",\n\t\t\t\tentry: [\"src/index.ts!\"],\n\t\t\t\tignoreExportsUsedInFile: {\n\t\t\t\t\tinterface: true,\n\t\t\t\t\ttype: true,\n\t\t\t\t},\n\t\t\t\tproject: [\"src/**/*.ts!\"],\n\t\t\t}),\n\t\t}),\n\t\t\"package.json\": await writePackageJson(options),\n\t\t\"tsconfig.json\": await formatJson({\n\t\t\tcompilerOptions: {\n\t\t\t\tdeclaration: true,\n\t\t\t\tdeclarationMap: true,\n\t\t\t\tesModuleInterop: true,\n\t\t\t\tmodule: \"NodeNext\",\n\t\t\t\tmoduleResolution: \"NodeNext\",\n\t\t\t\tnoEmit: true,\n\t\t\t\tresolveJsonModule: true,\n\t\t\t\tskipLibCheck: true,\n\t\t\t\tsourceMap: true,\n\t\t\t\tstrict: true,\n\t\t\t\ttarget: \"ES2022\",\n\t\t\t},\n\t\t\tinclude: [\"src\"],\n\t\t}),\n\t\t\"tsup.config.ts\": await createTsupConfig(options),\n\t\t...(!options.excludeTests && {\n\t\t\t\"vitest.config.ts\": `import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n\ttest: {\n\t\tclearMocks: true,\n\t\tcoverage: {\n\t\t\tall: true,\n\t\t\texclude: [\"lib\"],\n\t\t\tinclude: [\"src\"],\n\t\t\treporter: [\"html\", \"lcov\"],\n\t\t},\n\t\texclude: [\"lib\", \"node_modules\"],\n\t\tsetupFiles: [\"console-fail-test/setup\"],\n\t},\n});\n`,\n\t\t}),\n\t};\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/steps/writing/creation/rootFiles.ts"],"sourcesContent":["import { Options } from \"../../../shared/types.js\";\nimport { createCSpellConfig } from \"./createCSpellConfig.js\";\nimport { createDotGitignore } from \"./createDotGitignore.js\";\nimport { createESLintConfig } from \"./createESLintConfig.js\";\nimport { createTsupConfig } from \"./createTsupConfig.js\";\nimport { formatIgnoreFile } from \"./formatters/formatIgnoreFile.js\";\nimport { formatJson } from \"./formatters/formatJson.js\";\nimport { writeAllContributorsRC } from \"./writeAllContributorsRC.js\";\nimport { writePackageJson } from \"./writePackageJson.js\";\n\nexport async function createRootFiles(options: Options) {\n\treturn {\n\t\t\".all-contributorsrc\": await writeAllContributorsRC(options),\n\t\t\".gitignore\": createDotGitignore(options),\n\t\t\"eslint.config.js\": await createESLintConfig(options),\n\t\t...(!options.excludeLintMd && {\n\t\t\t\".markdownlint.json\": await formatJson({\n\t\t\t\textends: \"markdownlint/style/prettier\",\n\t\t\t\t\"first-line-h1\": false,\n\t\t\t\t\"no-inline-html\": false,\n\t\t\t}),\n\t\t\t\".markdownlintignore\": formatIgnoreFile([\n\t\t\t\t\".github/CODE_OF_CONDUCT.md\",\n\t\t\t\t\"CHANGELOG.md\",\n\t\t\t\t\"lib/\",\n\t\t\t\t\"node_modules/\",\n\t\t\t]),\n\t\t}),\n\t\t\".nvmrc\": `20.18.0\\n`,\n\t\t\".prettierignore\": formatIgnoreFile([\n\t\t\t...(options.excludeAllContributors ? [] : [\"/.all-contributorsrc\"]),\n\t\t\t\"/.husky\",\n\t\t\t...(options.excludeTests ? [] : [\"/coverage\"]),\n\t\t\t\"/lib\",\n\t\t\t\"/pnpm-lock.yaml\",\n\t\t]),\n\t\t\".prettierrc.json\": await formatJson({\n\t\t\t$schema: \"http://json.schemastore.org/prettierrc\",\n\t\t\toverrides: [\n\t\t\t\t{\n\t\t\t\t\tfiles: \".nvmrc\",\n\t\t\t\t\toptions: { parser: \"yaml\" },\n\t\t\t\t},\n\t\t\t],\n\t\t\tplugins: [\n\t\t\t\t\"prettier-plugin-curly\",\n\t\t\t\t\"prettier-plugin-packagejson\",\n\t\t\t\t\"prettier-plugin-sh\",\n\t\t\t],\n\t\t\tuseTabs: true,\n\t\t}),\n\t\t...(!options.excludeReleases && {\n\t\t\t\".release-it.json\": await formatJson({\n\t\t\t\tgit: {\n\t\t\t\t\tcommitMessage: \"chore: release v${version}\",\n\t\t\t\t\trequireCommits: true,\n\t\t\t\t},\n\t\t\t\tgithub: {\n\t\t\t\t\tautoGenerate: true,\n\t\t\t\t\trelease: true,\n\t\t\t\t\treleaseName: \"v${version}\",\n\t\t\t\t},\n\t\t\t\tnpm: {\n\t\t\t\t\tpublishArgs: [`--access ${options.access}`, \"--provenance\"],\n\t\t\t\t},\n\t\t\t\tplugins: {\n\t\t\t\t\t\"@release-it/conventional-changelog\": {\n\t\t\t\t\t\tinfile: \"CHANGELOG.md\",\n\t\t\t\t\t\tpreset: \"angular\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}),\n\t\t}),\n\t\t\"LICENSE.md\": `# MIT License\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n`,\n\t\t...(!options.excludeLintSpelling && {\n\t\t\t\"cspell.json\": await createCSpellConfig(options),\n\t\t}),\n\t\t...(!options.excludeLintKnip && {\n\t\t\t\"knip.json\": await formatJson({\n\t\t\t\t$schema: \"https://unpkg.com/knip@latest/schema.json\",\n\t\t\t\tentry: [\"src/index.ts!\"],\n\t\t\t\tignoreExportsUsedInFile: {\n\t\t\t\t\tinterface: true,\n\t\t\t\t\ttype: true,\n\t\t\t\t},\n\t\t\t\tproject: [\"src/**/*.ts!\"],\n\t\t\t}),\n\t\t}),\n\t\t\"package.json\": await writePackageJson(options),\n\t\t\"tsconfig.json\": await formatJson({\n\t\t\tcompilerOptions: {\n\t\t\t\tdeclaration: true,\n\t\t\t\tdeclarationMap: true,\n\t\t\t\tesModuleInterop: true,\n\t\t\t\tmodule: \"NodeNext\",\n\t\t\t\tmoduleResolution: \"NodeNext\",\n\t\t\t\tnoEmit: true,\n\t\t\t\tresolveJsonModule: true,\n\t\t\t\tskipLibCheck: true,\n\t\t\t\tsourceMap: true,\n\t\t\t\tstrict: true,\n\t\t\t\ttarget: \"ES2022\",\n\t\t\t},\n\t\t\tinclude: [\"src\"],\n\t\t}),\n\t\t\"tsup.config.ts\": await createTsupConfig(options),\n\t\t...(!options.excludeTests && {\n\t\t\t\"vitest.config.ts\": `import { defineConfig } from \"vitest/config\";\n\nexport default defineConfig({\n\ttest: {\n\t\tclearMocks: true,\n\t\tcoverage: {\n\t\t\tall: true,\n\t\t\texclude: [\"lib\"],\n\t\t\tinclude: [\"src\"],\n\t\t\treporter: [\"html\", \"lcov\"],\n\t\t},\n\t\texclude: [\"lib\", \"node_modules\"],\n\t\tsetupFiles: [\"console-fail-test/setup\"],\n\t},\n});\n`,\n\t\t}),\n\t};\n}\n"],"mappings":"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","names":[]}
@@ -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.76.0",
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",
@@ -42,20 +42,26 @@
42
42
  },
43
43
  "dependencies": {
44
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",
48
+ "create": "0.1.0-alpha.1",
47
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",
60
+ "parse-package-name": "^1.0.0",
56
61
  "prettier": "^3.4.1",
57
62
  "replace-in-file": "^8.2.0",
58
63
  "rimraf": "^6.0.1",
64
+ "sort-package-json": "^2.12.0",
59
65
  "title-case": "^4.3.2",
60
66
  "zod": "^3.23.8",
61
67
  "zod-validation-error": "^3.4.0"
@@ -66,7 +72,6 @@
66
72
  "@octokit/request-error": "6.1.5",
67
73
  "@release-it/conventional-changelog": "9.0.3",
68
74
  "@types/eslint-plugin-markdown": "2.0.2",
69
- "@types/eslint__js": "8.42.3",
70
75
  "@types/git-url-parse": "9.0.3",
71
76
  "@types/js-yaml": "4.0.9",
72
77
  "@types/node": "22.10.1",
@@ -75,19 +80,19 @@
75
80
  "@vitest/eslint-plugin": "1.1.14",
76
81
  "c8": "10.1.2",
77
82
  "console-fail-test": "0.5.0",
83
+ "create-testers": "0.1.0-alpha.1",
78
84
  "cspell": "8.16.1",
79
85
  "eslint": "9.16.0",
80
86
  "eslint-plugin-jsdoc": "50.6.0",
81
87
  "eslint-plugin-jsonc": "2.18.2",
82
88
  "eslint-plugin-markdown": "5.1.0",
83
89
  "eslint-plugin-n": "17.14.0",
84
- "eslint-plugin-package-json": "0.17.0",
90
+ "eslint-plugin-package-json": "0.18.0",
85
91
  "eslint-plugin-perfectionist": "4.2.0",
86
92
  "eslint-plugin-regexp": "2.7.0",
87
93
  "eslint-plugin-yml": "1.16.0",
88
94
  "globby": "14.0.2",
89
95
  "husky": "9.1.7",
90
- "jsonc-eslint-parser": "2.4.0",
91
96
  "knip": "5.39.1",
92
97
  "lint-staged": "15.2.10",
93
98
  "markdownlint": "0.36.1",
@@ -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":[]}