create-typescript-app 1.80.0 → 1.81.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 (99) hide show
  1. package/README.md +3 -2
  2. package/lib/next/base.d.ts +2 -1
  3. package/lib/next/base.js +10 -6
  4. package/lib/next/base.js.map +1 -1
  5. package/lib/next/blocks/blockAllContributors.d.ts +2 -1
  6. package/lib/next/blocks/blockAllContributors.js +1 -5
  7. package/lib/next/blocks/blockAllContributors.js.map +1 -1
  8. package/lib/next/blocks/blockAreTheTypesWrong.d.ts +2 -1
  9. package/lib/next/blocks/blockCSpell.d.ts +2 -1
  10. package/lib/next/blocks/blockContributingDocs.d.ts +2 -1
  11. package/lib/next/blocks/blockContributorCovenant.d.ts +2 -1
  12. package/lib/next/blocks/blockDevelopmentDocs.d.ts +2 -1
  13. package/lib/next/blocks/blockESLint.d.ts +2 -1
  14. package/lib/next/blocks/blockESLint.js +4 -2
  15. package/lib/next/blocks/blockESLint.js.map +1 -1
  16. package/lib/next/blocks/blockESLintComments.d.ts +2 -1
  17. package/lib/next/blocks/blockESLintJSDoc.d.ts +2 -1
  18. package/lib/next/blocks/blockESLintJSONC.d.ts +2 -1
  19. package/lib/next/blocks/blockESLintMarkdown.d.ts +2 -1
  20. package/lib/next/blocks/blockESLintMoreStyling.d.ts +2 -1
  21. package/lib/next/blocks/blockESLintNode.d.ts +2 -1
  22. package/lib/next/blocks/blockESLintPackageJson.d.ts +2 -1
  23. package/lib/next/blocks/blockESLintPerfectionist.d.ts +2 -1
  24. package/lib/next/blocks/blockESLintRegexp.d.ts +2 -1
  25. package/lib/next/blocks/blockESLintYML.d.ts +2 -1
  26. package/lib/next/blocks/blockExampleFiles.d.ts +2 -1
  27. package/lib/next/blocks/blockFunding.d.ts +2 -1
  28. package/lib/next/blocks/blockGitHubActionsCI.d.ts +3 -1
  29. package/lib/next/blocks/blockGitHubActionsCI.js +1 -0
  30. package/lib/next/blocks/blockGitHubActionsCI.js.map +1 -1
  31. package/lib/next/blocks/blockGitHubApps.d.ts +2 -1
  32. package/lib/next/blocks/blockGitHubIssueTemplates.d.ts +2 -1
  33. package/lib/next/blocks/blockGitHubPRTemplate.d.ts +2 -1
  34. package/lib/next/blocks/blockGitignore.d.ts +2 -1
  35. package/lib/next/blocks/blockKnip.d.ts +2 -1
  36. package/lib/next/blocks/blockKnip.js +11 -0
  37. package/lib/next/blocks/blockKnip.js.map +1 -1
  38. package/lib/next/blocks/blockMITLicense.d.ts +2 -1
  39. package/lib/next/blocks/blockMarkdownlint.d.ts +2 -1
  40. package/lib/next/blocks/blockNvmrc.d.ts +2 -1
  41. package/lib/next/blocks/blockPRCompliance.d.ts +2 -1
  42. package/lib/next/blocks/blockPackageJson.d.ts +2 -1
  43. package/lib/next/blocks/blockPackageJson.js +3 -1
  44. package/lib/next/blocks/blockPackageJson.js.map +1 -1
  45. package/lib/next/blocks/blockPnpmDedupe.d.ts +2 -1
  46. package/lib/next/blocks/blockPrettier.d.ts +2 -1
  47. package/lib/next/blocks/blockPrettier.js +2 -2
  48. package/lib/next/blocks/blockPrettier.js.map +1 -1
  49. package/lib/next/blocks/blockPrettierPluginCurly.d.ts +2 -1
  50. package/lib/next/blocks/blockPrettierPluginPackageJson.d.ts +2 -1
  51. package/lib/next/blocks/blockPrettierPluginSh.d.ts +2 -1
  52. package/lib/next/blocks/blockREADME.d.ts +2 -1
  53. package/lib/next/blocks/blockREADME.js +1 -8
  54. package/lib/next/blocks/blockREADME.js.map +1 -1
  55. package/lib/next/blocks/blockReleaseIt.d.ts +2 -1
  56. package/lib/next/blocks/blockReleaseIt.js +13 -1
  57. package/lib/next/blocks/blockReleaseIt.js.map +1 -1
  58. package/lib/next/blocks/blockRenovate.d.ts +2 -1
  59. package/lib/next/blocks/blockRepositoryBranchRuleset.d.ts +2 -1
  60. package/lib/next/blocks/blockRepositoryLabels.d.ts +2 -1
  61. package/lib/next/blocks/blockRepositorySecrets.d.ts +2 -1
  62. package/lib/next/blocks/blockRepositorySettings.d.ts +2 -1
  63. package/lib/next/blocks/blockRepositorySettings.js +3 -1
  64. package/lib/next/blocks/blockRepositorySettings.js.map +1 -1
  65. package/lib/next/blocks/blockSecurityDocs.d.ts +2 -1
  66. package/lib/next/blocks/blockTSup.d.ts +2 -1
  67. package/lib/next/blocks/blockTemplatedBy.d.ts +2 -1
  68. package/lib/next/blocks/blockTypeScript.d.ts +2 -1
  69. package/lib/next/blocks/blockTypeScript.js +1 -4
  70. package/lib/next/blocks/blockTypeScript.js.map +1 -1
  71. package/lib/next/blocks/blockVSCode.d.ts +2 -1
  72. package/lib/next/blocks/blockVitest.d.ts +8 -4
  73. package/lib/next/blocks/blockVitest.js +18 -14
  74. package/lib/next/blocks/blockVitest.js.map +1 -1
  75. package/lib/next/blocks/sourcePackageJson.d.ts +3 -1
  76. package/lib/next/presets/presetCommon.d.ts +2 -1
  77. package/lib/next/presets/presetEverything.d.ts +2 -1
  78. package/lib/next/presets/presetMinimal.d.ts +2 -1
  79. package/lib/next/readDescription.d.ts +1 -1
  80. package/lib/next/readDescription.js +9 -1
  81. package/lib/next/readDescription.js.map +1 -1
  82. package/lib/next/readDescriptionFromReadme.d.ts +3 -0
  83. package/lib/next/readDescriptionFromReadme.js +18 -0
  84. package/lib/next/readDescriptionFromReadme.js.map +1 -0
  85. package/lib/next/template.d.ts +2 -1
  86. package/lib/shared/options/createOptionDefaults/getUsageFromReadme.d.ts +3 -0
  87. package/lib/shared/options/createOptionDefaults/getUsageFromReadme.js +21 -0
  88. package/lib/shared/options/createOptionDefaults/getUsageFromReadme.js.map +1 -0
  89. package/lib/shared/options/createOptionDefaults/index.d.ts +1 -0
  90. package/lib/shared/options/createOptionDefaults/index.js +4 -2
  91. package/lib/shared/options/createOptionDefaults/index.js.map +1 -1
  92. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.d.ts +2 -1
  93. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js +12 -3
  94. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js.map +1 -1
  95. package/lib/steps/uninstallPackages.js +2 -0
  96. package/lib/steps/uninstallPackages.js.map +1 -1
  97. package/lib/steps/writing/creation/rootFiles.js +13 -3
  98. package/lib/steps/writing/creation/rootFiles.js.map +1 -1
  99. package/package.json +3 -1
@@ -19,18 +19,21 @@ const blockVitest = base.createBlock({
19
19
  },
20
20
  addons: {
21
21
  coverage: z.object({
22
- directory: z.string(),
23
- flags: z.string().optional()
24
- }).default({ directory: "coverage" }),
22
+ directory: z.string().optional(),
23
+ exclude: z.array(z.string()).optional(),
24
+ flags: z.string().optional(),
25
+ include: z.array(z.string()).optional()
26
+ }).default({}),
27
+ env: z.record(z.string(), z.string()).default({}),
25
28
  exclude: z.array(z.string()).default([]),
26
- include: z.array(z.string()).default([])
29
+ flags: z.array(z.string()).default([])
27
30
  },
28
31
  migrate() {
29
32
  return {
30
33
  scripts: [
31
34
  {
32
35
  commands: [
33
- "rm .github/codecov.yml .mocha* codecov.yml jest.config.*"
36
+ "rm .github/codecov.yml .mocha* codecov.yml jest.config.* vitest.config.*"
34
37
  ],
35
38
  phase: CommandPhase.Migrations
36
39
  }
@@ -38,13 +41,13 @@ const blockVitest = base.createBlock({
38
41
  };
39
42
  },
40
43
  produce({ addons }) {
41
- const { coverage, exclude = [], include = [] } = addons;
44
+ const { coverage, env, exclude = [], flags } = addons;
45
+ const coverageDirectory = coverage.directory ?? "coverage";
42
46
  const excludeText = JSON.stringify(exclude);
43
- const includeText = JSON.stringify(include);
44
47
  return {
45
48
  addons: [
46
49
  blockCSpell({
47
- ignores: [coverage.directory]
50
+ ignores: [coverageDirectory]
48
51
  }),
49
52
  blockDevelopmentDocs({
50
53
  sections: {
@@ -85,7 +88,7 @@ Calls to \`console.log\`, \`console.warn\`, and other console methods will cause
85
88
  ]
86
89
  }
87
90
  ],
88
- ignores: [coverage.directory, "**/*.snap"],
91
+ ignores: [coverageDirectory, "**/*.snap"],
89
92
  imports: [{ source: "@vitest/eslint-plugin", specifier: "vitest" }]
90
93
  }),
91
94
  blockExampleFiles({
@@ -138,7 +141,7 @@ describe("greet", () => {
138
141
  }
139
142
  }),
140
143
  blockGitignore({
141
- ignores: [`/${coverage.directory}`]
144
+ ignores: [`/${coverageDirectory}`]
142
145
  }),
143
146
  blockGitHubActionsCI({
144
147
  jobs: [
@@ -147,6 +150,7 @@ describe("greet", () => {
147
150
  steps: [
148
151
  { run: "pnpm run test --coverage" },
149
152
  {
153
+ ...Object.keys(env).length && { env },
150
154
  if: "always()",
151
155
  uses: "codecov/codecov-action@v3",
152
156
  ...coverage.flags && { with: { flags: coverage.flags } }
@@ -172,12 +176,12 @@ describe("greet", () => {
172
176
  "vitest"
173
177
  ),
174
178
  scripts: {
175
- test: "vitest"
179
+ test: `vitest ${flags.join(" ")}`.trim()
176
180
  }
177
181
  }
178
182
  }),
179
183
  blockPrettier({
180
- ignores: [`/${coverage.directory}`]
184
+ ignores: [`/${coverageDirectory}`]
181
185
  }),
182
186
  blockTSup({
183
187
  entry: ["!src/**/*.test.*"]
@@ -207,8 +211,8 @@ export default defineConfig({
207
211
  clearMocks: true,
208
212
  coverage: {
209
213
  all: true,
210
- exclude: ${excludeText},
211
- include: ${includeText},
214
+ ${coverage.exclude?.length ? `exclude: ${JSON.stringify(coverage.exclude)},
215
+ ` : ""}include: ${JSON.stringify(coverage.include)},
212
216
  reporter: ["html", "lcov"],
213
217
  },
214
218
  exclude: [${excludeText.slice(1, excludeText.length - 1)}, "node_modules"],
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/next/blocks/blockVitest.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { base } from \"../base.js\";\nimport { blockCSpell } from \"./blockCSpell.js\";\nimport { blockDevelopmentDocs } from \"./blockDevelopmentDocs.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { blockExampleFiles } from \"./blockExampleFiles.js\";\nimport { blockGitHubActionsCI } from \"./blockGitHubActionsCI.js\";\nimport { blockGitHubApps } from \"./blockGitHubApps.js\";\nimport { blockGitignore } from \"./blockGitignore.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockPrettier } from \"./blockPrettier.js\";\nimport { blockTSup } from \"./blockTSup.js\";\nimport { blockVSCode } from \"./blockVSCode.js\";\nimport { getPackageDependencies } from \"./packageData.js\";\nimport { CommandPhase } from \"./phases.js\";\n\nexport const blockVitest = base.createBlock({\n\tabout: {\n\t\tname: \"Vitest\",\n\t},\n\taddons: {\n\t\tcoverage: z\n\t\t\t.object({\n\t\t\t\tdirectory: z.string(),\n\t\t\t\tflags: z.string().optional(),\n\t\t\t})\n\t\t\t.default({ directory: \"coverage\" }),\n\t\texclude: z.array(z.string()).default([]),\n\t\tinclude: z.array(z.string()).default([]),\n\t},\n\tmigrate() {\n\t\treturn {\n\t\t\tscripts: [\n\t\t\t\t{\n\t\t\t\t\tcommands: [\n\t\t\t\t\t\t\"rm .github/codecov.yml .mocha* codecov.yml jest.config.*\",\n\t\t\t\t\t],\n\t\t\t\t\tphase: CommandPhase.Migrations,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\tproduce({ addons }) {\n\t\tconst { coverage, exclude = [], include = [] } = addons;\n\t\tconst excludeText = JSON.stringify(exclude);\n\t\tconst includeText = JSON.stringify(include);\n\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockCSpell({\n\t\t\t\t\tignores: [coverage.directory],\n\t\t\t\t}),\n\t\t\t\tblockDevelopmentDocs({\n\t\t\t\t\tsections: {\n\t\t\t\t\t\tTesting: {\n\t\t\t\t\t\t\tcontents: `\n[Vitest](https://vitest.dev) is used for tests.\nYou can run it locally on the command-line:\n\n\\`\\`\\`shell\npnpm run test\n\\`\\`\\`\n\nAdd the \\`--coverage\\` flag to compute test coverage and place reports in the \\`coverage/\\` directory:\n\n\\`\\`\\`shell\npnpm run test --coverage\n\\`\\`\\`\n\nNote that [console-fail-test](https://github.com/JoshuaKGoldberg/console-fail-test) is enabled for all test runs.\nCalls to \\`console.log\\`, \\`console.warn\\`, and other console methods will cause a test to fail.\n\n\n\t\t`,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockESLint({\n\t\t\t\t\textensions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\textends: [\"vitest.configs.recommended\"],\n\t\t\t\t\t\t\tfiles: [\"**/*.test.*\"],\n\t\t\t\t\t\t\trules: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tentries: {\n\t\t\t\t\t\t\t\t\t\t\"@typescript-eslint/no-unsafe-assignment\": \"off\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tignores: [coverage.directory, \"**/*.snap\"],\n\t\t\t\t\timports: [{ source: \"@vitest/eslint-plugin\", specifier: \"vitest\" }],\n\t\t\t\t}),\n\t\t\t\tblockExampleFiles({\n\t\t\t\t\tfiles: {\n\t\t\t\t\t\t\"greet.test.ts\": `import { describe, expect, it, vi } from \"vitest\";\n\nimport { greet } from \"./greet.js\";\n\nconst message = \"Yay, testing!\";\n\ndescribe(\"greet\", () => {\n\tit(\"logs to the console once when message is provided as a string\", () => {\n\t\tconst logger = vi.spyOn(console, \"log\").mockImplementation(() => undefined);\n\n\t\tgreet(message);\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(1);\n\t});\n\n\tit(\"logs to the console once when message is provided as an object\", () => {\n\t\tconst logger = vi.spyOn(console, \"log\").mockImplementation(() => undefined);\n\n\t\tgreet({ message });\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(1);\n\t});\n\n\tit(\"logs once when times is not provided in an object\", () => {\n\t\tconst logger = vi.fn();\n\n\t\tgreet({ logger, message });\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(1);\n\t});\n\n\tit(\"logs a specified number of times when times is provided\", () => {\n\t\tconst logger = vi.fn();\n\t\tconst times = 7;\n\n\t\tgreet({ logger, message, times });\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(7);\n\t});\n});\n`,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockGitignore({\n\t\t\t\t\tignores: [`/${coverage.directory}`],\n\t\t\t\t}),\n\t\t\t\tblockGitHubActionsCI({\n\t\t\t\t\tjobs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"Test\",\n\t\t\t\t\t\t\tsteps: [\n\t\t\t\t\t\t\t\t{ run: \"pnpm run test --coverage\" },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif: \"always()\",\n\t\t\t\t\t\t\t\t\tuses: \"codecov/codecov-action@v3\",\n\t\t\t\t\t\t\t\t\t...(coverage.flags && { with: { flags: coverage.flags } }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t\tblockGitHubApps({\n\t\t\t\t\tapps: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"Codecov\",\n\t\t\t\t\t\t\turl: \"https://github.com/apps/codecov\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t\tblockPackageJson({\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdevDependencies: getPackageDependencies(\n\t\t\t\t\t\t\t\"@vitest/coverage-v8\",\n\t\t\t\t\t\t\t\"@vitest/eslint-plugin\",\n\t\t\t\t\t\t\t\"console-fail-test\",\n\t\t\t\t\t\t\t\"vitest\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\ttest: \"vitest\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockPrettier({\n\t\t\t\t\tignores: [`/${coverage.directory}`],\n\t\t\t\t}),\n\t\t\t\tblockTSup({\n\t\t\t\t\tentry: [\"!src/**/*.test.*\"],\n\t\t\t\t}),\n\t\t\t\tblockVSCode({\n\t\t\t\t\tdebuggers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\targs: [\"run\", \"${relativeFile}\"],\n\t\t\t\t\t\t\tautoAttachChildProcesses: true,\n\t\t\t\t\t\t\tconsole: \"integratedTerminal\",\n\t\t\t\t\t\t\tname: \"Debug Current Test File\",\n\t\t\t\t\t\t\tprogram: \"${workspaceRoot}/node_modules/vitest/vitest.mjs\",\n\t\t\t\t\t\t\trequest: \"launch\",\n\t\t\t\t\t\t\tskipFiles: [\"<node_internals>/**\", \"**/node_modules/**\"],\n\t\t\t\t\t\t\tsmartStep: true,\n\t\t\t\t\t\t\ttype: \"node\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\textensions: [\"vitest.explorer\"],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tfiles: {\n\t\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: ${excludeText},\n\t\t\tinclude: ${includeText},\n\t\t\treporter: [\"html\", \"lcov\"],\n\t\t},\n\t\texclude: [${excludeText.slice(1, excludeText.length - 1)}, \"node_modules\"],\n\t\tsetupFiles: [\"console-fail-test/setup\"],\n\t},\n});\n\t`,\n\t\t\t},\n\t\t};\n\t},\n});\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/next/blocks/blockVitest.ts"],"sourcesContent":["import { z } from \"zod\";\n\nimport { base } from \"../base.js\";\nimport { blockCSpell } from \"./blockCSpell.js\";\nimport { blockDevelopmentDocs } from \"./blockDevelopmentDocs.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { blockExampleFiles } from \"./blockExampleFiles.js\";\nimport { blockGitHubActionsCI } from \"./blockGitHubActionsCI.js\";\nimport { blockGitHubApps } from \"./blockGitHubApps.js\";\nimport { blockGitignore } from \"./blockGitignore.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockPrettier } from \"./blockPrettier.js\";\nimport { blockTSup } from \"./blockTSup.js\";\nimport { blockVSCode } from \"./blockVSCode.js\";\nimport { getPackageDependencies } from \"./packageData.js\";\nimport { CommandPhase } from \"./phases.js\";\n\nexport const blockVitest = base.createBlock({\n\tabout: {\n\t\tname: \"Vitest\",\n\t},\n\taddons: {\n\t\tcoverage: z\n\t\t\t.object({\n\t\t\t\tdirectory: z.string().optional(),\n\t\t\t\texclude: z.array(z.string()).optional(),\n\t\t\t\tflags: z.string().optional(),\n\t\t\t\tinclude: z.array(z.string()).optional(),\n\t\t\t})\n\t\t\t.default({}),\n\t\tenv: z.record(z.string(), z.string()).default({}),\n\t\texclude: z.array(z.string()).default([]),\n\t\tflags: z.array(z.string()).default([]),\n\t},\n\tmigrate() {\n\t\treturn {\n\t\t\tscripts: [\n\t\t\t\t{\n\t\t\t\t\tcommands: [\n\t\t\t\t\t\t\"rm .github/codecov.yml .mocha* codecov.yml jest.config.* vitest.config.*\",\n\t\t\t\t\t],\n\t\t\t\t\tphase: CommandPhase.Migrations,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\tproduce({ addons }) {\n\t\tconst { coverage, env, exclude = [], flags } = addons;\n\t\tconst coverageDirectory = coverage.directory ?? \"coverage\";\n\t\tconst excludeText = JSON.stringify(exclude);\n\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockCSpell({\n\t\t\t\t\tignores: [coverageDirectory],\n\t\t\t\t}),\n\t\t\t\tblockDevelopmentDocs({\n\t\t\t\t\tsections: {\n\t\t\t\t\t\tTesting: {\n\t\t\t\t\t\t\tcontents: `\n[Vitest](https://vitest.dev) is used for tests.\nYou can run it locally on the command-line:\n\n\\`\\`\\`shell\npnpm run test\n\\`\\`\\`\n\nAdd the \\`--coverage\\` flag to compute test coverage and place reports in the \\`coverage/\\` directory:\n\n\\`\\`\\`shell\npnpm run test --coverage\n\\`\\`\\`\n\nNote that [console-fail-test](https://github.com/JoshuaKGoldberg/console-fail-test) is enabled for all test runs.\nCalls to \\`console.log\\`, \\`console.warn\\`, and other console methods will cause a test to fail.\n\n\n\t\t`,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockESLint({\n\t\t\t\t\textensions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\textends: [\"vitest.configs.recommended\"],\n\t\t\t\t\t\t\tfiles: [\"**/*.test.*\"],\n\t\t\t\t\t\t\trules: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tentries: {\n\t\t\t\t\t\t\t\t\t\t\"@typescript-eslint/no-unsafe-assignment\": \"off\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tignores: [coverageDirectory, \"**/*.snap\"],\n\t\t\t\t\timports: [{ source: \"@vitest/eslint-plugin\", specifier: \"vitest\" }],\n\t\t\t\t}),\n\t\t\t\tblockExampleFiles({\n\t\t\t\t\tfiles: {\n\t\t\t\t\t\t\"greet.test.ts\": `import { describe, expect, it, vi } from \"vitest\";\n\nimport { greet } from \"./greet.js\";\n\nconst message = \"Yay, testing!\";\n\ndescribe(\"greet\", () => {\n\tit(\"logs to the console once when message is provided as a string\", () => {\n\t\tconst logger = vi.spyOn(console, \"log\").mockImplementation(() => undefined);\n\n\t\tgreet(message);\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(1);\n\t});\n\n\tit(\"logs to the console once when message is provided as an object\", () => {\n\t\tconst logger = vi.spyOn(console, \"log\").mockImplementation(() => undefined);\n\n\t\tgreet({ message });\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(1);\n\t});\n\n\tit(\"logs once when times is not provided in an object\", () => {\n\t\tconst logger = vi.fn();\n\n\t\tgreet({ logger, message });\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(1);\n\t});\n\n\tit(\"logs a specified number of times when times is provided\", () => {\n\t\tconst logger = vi.fn();\n\t\tconst times = 7;\n\n\t\tgreet({ logger, message, times });\n\n\t\texpect(logger).toHaveBeenCalledWith(message);\n\t\texpect(logger).toHaveBeenCalledTimes(7);\n\t});\n});\n`,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockGitignore({\n\t\t\t\t\tignores: [`/${coverageDirectory}`],\n\t\t\t\t}),\n\t\t\t\tblockGitHubActionsCI({\n\t\t\t\t\tjobs: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"Test\",\n\t\t\t\t\t\t\tsteps: [\n\t\t\t\t\t\t\t\t{ run: \"pnpm run test --coverage\" },\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...(Object.keys(env).length && { env }),\n\t\t\t\t\t\t\t\t\tif: \"always()\",\n\t\t\t\t\t\t\t\t\tuses: \"codecov/codecov-action@v3\",\n\t\t\t\t\t\t\t\t\t...(coverage.flags && { with: { flags: coverage.flags } }),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t\tblockGitHubApps({\n\t\t\t\t\tapps: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"Codecov\",\n\t\t\t\t\t\t\turl: \"https://github.com/apps/codecov\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t\tblockPackageJson({\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdevDependencies: getPackageDependencies(\n\t\t\t\t\t\t\t\"@vitest/coverage-v8\",\n\t\t\t\t\t\t\t\"@vitest/eslint-plugin\",\n\t\t\t\t\t\t\t\"console-fail-test\",\n\t\t\t\t\t\t\t\"vitest\",\n\t\t\t\t\t\t),\n\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\ttest: `vitest ${flags.join(\" \")}`.trim(),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockPrettier({\n\t\t\t\t\tignores: [`/${coverageDirectory}`],\n\t\t\t\t}),\n\t\t\t\tblockTSup({\n\t\t\t\t\tentry: [\"!src/**/*.test.*\"],\n\t\t\t\t}),\n\t\t\t\tblockVSCode({\n\t\t\t\t\tdebuggers: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\targs: [\"run\", \"${relativeFile}\"],\n\t\t\t\t\t\t\tautoAttachChildProcesses: true,\n\t\t\t\t\t\t\tconsole: \"integratedTerminal\",\n\t\t\t\t\t\t\tname: \"Debug Current Test File\",\n\t\t\t\t\t\t\tprogram: \"${workspaceRoot}/node_modules/vitest/vitest.mjs\",\n\t\t\t\t\t\t\trequest: \"launch\",\n\t\t\t\t\t\t\tskipFiles: [\"<node_internals>/**\", \"**/node_modules/**\"],\n\t\t\t\t\t\t\tsmartStep: true,\n\t\t\t\t\t\t\ttype: \"node\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\textensions: [\"vitest.explorer\"],\n\t\t\t\t}),\n\t\t\t],\n\t\t\tfiles: {\n\t\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\t${\n\t\t\t\tcoverage.exclude?.length\n\t\t\t\t\t? `exclude: ${JSON.stringify(coverage.exclude)},\n\t\t\t`\n\t\t\t\t\t: \"\"\n\t\t\t}include: ${JSON.stringify(coverage.include)},\n\t\t\treporter: [\"html\", \"lcov\"],\n\t\t},\n\t\texclude: [${excludeText.slice(1, excludeText.length - 1)}, \"node_modules\"],\n\t\tsetupFiles: [\"console-fail-test/setup\"],\n\t},\n});\n\t`,\n\t\t\t},\n\t\t};\n\t},\n});\n"],"mappings":"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","names":[]}
@@ -1,5 +1,5 @@
1
1
  var name = "create-typescript-app";
2
- var version = "1.79.0";
2
+ var version = "1.80.0";
3
3
  var description = "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. ❤️‍🔥";
4
4
  var repository = {
5
5
  type: "git",
@@ -45,6 +45,7 @@ var dependencies = {
45
45
  execa: "^9.5.2",
46
46
  "git-remote-origin-url": "^4.0.0",
47
47
  "git-url-parse": "^16.0.0",
48
+ "html-to-text": "^9.0.5",
48
49
  "image-size": "^1.2.0",
49
50
  "input-from-file": "0.1.0-alpha.4",
50
51
  "input-from-file-json": "0.1.0-alpha.4",
@@ -75,6 +76,7 @@ var devDependencies = {
75
76
  "@release-it/conventional-changelog": "9.0.3",
76
77
  "@types/eslint-plugin-markdown": "2.0.2",
77
78
  "@types/git-url-parse": "9.0.3",
79
+ "@types/html-to-text": "^9.0.4",
78
80
  "@types/js-yaml": "4.0.9",
79
81
  "@types/node": "22.10.2",
80
82
  "@types/parse-author": "2.0.3",
@@ -2,7 +2,7 @@ import * as create from 'create';
2
2
  import * as zod from 'zod';
3
3
 
4
4
  declare const presetCommon: create.Preset<{
5
- access: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>>;
5
+ access: zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>;
6
6
  author: zod.ZodOptional<zod.ZodString>;
7
7
  bin: zod.ZodOptional<zod.ZodString>;
8
8
  contributors: zod.ZodOptional<zod.ZodArray<zod.ZodObject<{
@@ -98,6 +98,7 @@ declare const presetCommon: create.Preset<{
98
98
  }>>;
99
99
  repository: zod.ZodString;
100
100
  title: zod.ZodString;
101
+ usage: zod.ZodOptional<zod.ZodString>;
101
102
  version: zod.ZodOptional<zod.ZodString>;
102
103
  }>;
103
104
 
@@ -2,7 +2,7 @@ import * as create from 'create';
2
2
  import * as zod from 'zod';
3
3
 
4
4
  declare const presetEverything: create.Preset<{
5
- access: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>>;
5
+ access: zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>;
6
6
  author: zod.ZodOptional<zod.ZodString>;
7
7
  bin: zod.ZodOptional<zod.ZodString>;
8
8
  contributors: zod.ZodOptional<zod.ZodArray<zod.ZodObject<{
@@ -98,6 +98,7 @@ declare const presetEverything: create.Preset<{
98
98
  }>>;
99
99
  repository: zod.ZodString;
100
100
  title: zod.ZodString;
101
+ usage: zod.ZodOptional<zod.ZodString>;
101
102
  version: zod.ZodOptional<zod.ZodString>;
102
103
  }>;
103
104
 
@@ -2,7 +2,7 @@ import * as create from 'create';
2
2
  import * as zod from 'zod';
3
3
 
4
4
  declare const presetMinimal: create.Preset<{
5
- access: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>>;
5
+ access: zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>;
6
6
  author: zod.ZodOptional<zod.ZodString>;
7
7
  bin: zod.ZodOptional<zod.ZodString>;
8
8
  contributors: zod.ZodOptional<zod.ZodArray<zod.ZodObject<{
@@ -98,6 +98,7 @@ declare const presetMinimal: create.Preset<{
98
98
  }>>;
99
99
  repository: zod.ZodString;
100
100
  title: zod.ZodString;
101
+ usage: zod.ZodOptional<zod.ZodString>;
101
102
  version: zod.ZodOptional<zod.ZodString>;
102
103
  }>;
103
104
 
@@ -2,6 +2,6 @@ import { PartialPackageData } from '../shared/types.js';
2
2
  import 'zod';
3
3
  import '../shared/codes.js';
4
4
 
5
- declare function readDescription(getPackageData: () => Promise<PartialPackageData>): Promise<string | undefined>;
5
+ declare function readDescription(getPackageData: () => Promise<PartialPackageData>, getReadme: () => Promise<string>): Promise<string | undefined>;
6
6
 
7
7
  export { readDescription };
@@ -1,7 +1,15 @@
1
1
  import { sourcePackageJson } from "./blocks/sourcePackageJson.js";
2
- async function readDescription(getPackageData) {
2
+ import { readDescriptionFromReadme } from "./readDescriptionFromReadme.js";
3
+ async function readDescription(getPackageData, getReadme) {
3
4
  const { description: inferred } = await getPackageData();
5
+ if (!inferred) {
6
+ return void 0;
7
+ }
4
8
  const { description: existing } = sourcePackageJson;
9
+ const fromReadme = await readDescriptionFromReadme(getReadme);
10
+ if (fromReadme?.replaceAll(/<\s*(?:\/\s*)?\w+\s*>/gu, "") === inferred) {
11
+ return fromReadme;
12
+ }
5
13
  return existing === inferred ? void 0 : inferred;
6
14
  }
7
15
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/readDescription.ts"],"sourcesContent":["import { PartialPackageData } from \"../shared/types.js\";\nimport { sourcePackageJson } from \"./blocks/sourcePackageJson.js\";\n\nexport async function readDescription(\n\tgetPackageData: () => Promise<PartialPackageData>,\n) {\n\tconst { description: inferred } = await getPackageData();\n\tconst { description: existing } = sourcePackageJson;\n\n\treturn existing === inferred ? undefined : inferred;\n}\n"],"mappings":"AACA,SAAS,yBAAyB;AAElC,eAAsB,gBACrB,gBACC;AACD,QAAM,EAAE,aAAa,SAAS,IAAI,MAAM,eAAe;AACvD,QAAM,EAAE,aAAa,SAAS,IAAI;AAElC,SAAO,aAAa,WAAW,SAAY;AAC5C;","names":[]}
1
+ {"version":3,"sources":["../../src/next/readDescription.ts"],"sourcesContent":["import { PartialPackageData } from \"../shared/types.js\";\nimport { sourcePackageJson } from \"./blocks/sourcePackageJson.js\";\nimport { readDescriptionFromReadme } from \"./readDescriptionFromReadme.js\";\n\nexport async function readDescription(\n\tgetPackageData: () => Promise<PartialPackageData>,\n\tgetReadme: () => Promise<string>,\n) {\n\tconst { description: inferred } = await getPackageData();\n\tif (!inferred) {\n\t\treturn undefined;\n\t}\n\n\tconst { description: existing } = sourcePackageJson;\n\tconst fromReadme = await readDescriptionFromReadme(getReadme);\n\n\tif (fromReadme?.replaceAll(/<\\s*(?:\\/\\s*)?\\w+\\s*>/gu, \"\") === inferred) {\n\t\treturn fromReadme;\n\t}\n\n\treturn existing === inferred ? undefined : inferred;\n}\n"],"mappings":"AACA,SAAS,yBAAyB;AAClC,SAAS,iCAAiC;AAE1C,eAAsB,gBACrB,gBACA,WACC;AACD,QAAM,EAAE,aAAa,SAAS,IAAI,MAAM,eAAe;AACvD,MAAI,CAAC,UAAU;AACd,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,aAAa,SAAS,IAAI;AAClC,QAAM,aAAa,MAAM,0BAA0B,SAAS;AAE5D,MAAI,YAAY,WAAW,2BAA2B,EAAE,MAAM,UAAU;AACvE,WAAO;AAAA,EACR;AAEA,SAAO,aAAa,WAAW,SAAY;AAC5C;","names":[]}
@@ -0,0 +1,3 @@
1
+ declare function readDescriptionFromReadme(getReadme: () => Promise<string>): Promise<string | undefined>;
2
+
3
+ export { readDescriptionFromReadme };
@@ -0,0 +1,18 @@
1
+ const paragraphCloser = "</p>";
2
+ const paragraphStarter = `<p align="center">`;
3
+ async function readDescriptionFromReadme(getReadme) {
4
+ const readme = await getReadme();
5
+ const paragraphStart = readme.indexOf(paragraphStarter);
6
+ if (paragraphStart === -1) {
7
+ return void 0;
8
+ }
9
+ const paragraphEnd = readme.indexOf(paragraphCloser);
10
+ if (paragraphEnd < paragraphStart + paragraphStarter.length + 2) {
11
+ return void 0;
12
+ }
13
+ return readme.slice(paragraphStart + paragraphStarter.length, paragraphEnd).replaceAll(/\s+/gu, " ").trim();
14
+ }
15
+ export {
16
+ readDescriptionFromReadme
17
+ };
18
+ //# sourceMappingURL=readDescriptionFromReadme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/next/readDescriptionFromReadme.ts"],"sourcesContent":["const paragraphCloser = \"</p>\";\nconst paragraphStarter = `<p align=\"center\">`;\n\nexport async function readDescriptionFromReadme(\n\tgetReadme: () => Promise<string>,\n) {\n\tconst readme = await getReadme();\n\n\tconst paragraphStart = readme.indexOf(paragraphStarter);\n\tif (paragraphStart === -1) {\n\t\treturn undefined;\n\t}\n\n\tconst paragraphEnd = readme.indexOf(paragraphCloser);\n\tif (paragraphEnd < paragraphStart + paragraphStarter.length + 2) {\n\t\treturn undefined;\n\t}\n\n\treturn readme\n\t\t.slice(paragraphStart + paragraphStarter.length, paragraphEnd)\n\t\t.replaceAll(/\\s+/gu, \" \")\n\t\t.trim();\n}\n"],"mappings":"AAAA,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AAEzB,eAAsB,0BACrB,WACC;AACD,QAAM,SAAS,MAAM,UAAU;AAE/B,QAAM,iBAAiB,OAAO,QAAQ,gBAAgB;AACtD,MAAI,mBAAmB,IAAI;AAC1B,WAAO;AAAA,EACR;AAEA,QAAM,eAAe,OAAO,QAAQ,eAAe;AACnD,MAAI,eAAe,iBAAiB,iBAAiB,SAAS,GAAG;AAChE,WAAO;AAAA,EACR;AAEA,SAAO,OACL,MAAM,iBAAiB,iBAAiB,QAAQ,YAAY,EAC5D,WAAW,SAAS,GAAG,EACvB,KAAK;AACR;","names":[]}
@@ -2,7 +2,7 @@ import * as create from 'create';
2
2
  import * as zod from 'zod';
3
3
 
4
4
  declare const template: create.Template<{
5
- access: zod.ZodOptional<zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>>;
5
+ access: zod.ZodUnion<[zod.ZodLiteral<"public">, zod.ZodLiteral<"restricted">]>;
6
6
  author: zod.ZodOptional<zod.ZodString>;
7
7
  bin: zod.ZodOptional<zod.ZodString>;
8
8
  contributors: zod.ZodOptional<zod.ZodArray<zod.ZodObject<{
@@ -98,6 +98,7 @@ declare const template: create.Template<{
98
98
  }>>;
99
99
  repository: zod.ZodString;
100
100
  title: zod.ZodString;
101
+ usage: zod.ZodOptional<zod.ZodString>;
101
102
  version: zod.ZodOptional<zod.ZodString>;
102
103
  }>;
103
104
 
@@ -0,0 +1,3 @@
1
+ declare function getUsageFromReadme(readme: string): string | undefined;
2
+
3
+ export { getUsageFromReadme };
@@ -0,0 +1,21 @@
1
+ const startDevelopment = "## Development";
2
+ const startUsage = "## Usage";
3
+ function getUsageFromReadme(readme) {
4
+ const indexOfUsage = readme.indexOf(startUsage);
5
+ if (indexOfUsage === -1) {
6
+ return void 0;
7
+ }
8
+ const indexOfDevelopment = readme.indexOf(
9
+ startDevelopment,
10
+ indexOfUsage + startUsage.length
11
+ );
12
+ if (indexOfDevelopment === -1) {
13
+ return void 0;
14
+ }
15
+ const usage = readme.slice(indexOfUsage + startUsage.length, indexOfDevelopment).trim();
16
+ return usage ? usage : void 0;
17
+ }
18
+ export {
19
+ getUsageFromReadme
20
+ };
21
+ //# sourceMappingURL=getUsageFromReadme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/shared/options/createOptionDefaults/getUsageFromReadme.ts"],"sourcesContent":["const startDevelopment = \"## Development\";\nconst startUsage = \"## Usage\";\n\nexport function getUsageFromReadme(readme: string) {\n\tconst indexOfUsage = readme.indexOf(startUsage);\n\tif (indexOfUsage === -1) {\n\t\treturn undefined;\n\t}\n\n\tconst indexOfDevelopment = readme.indexOf(\n\t\tstartDevelopment,\n\t\tindexOfUsage + startUsage.length,\n\t);\n\tif (indexOfDevelopment === -1) {\n\t\treturn undefined;\n\t}\n\n\tconst usage = readme\n\t\t.slice(indexOfUsage + startUsage.length, indexOfDevelopment)\n\t\t.trim();\n\n\treturn usage ? usage : undefined;\n}\n"],"mappings":"AAAA,MAAM,mBAAmB;AACzB,MAAM,aAAa;AAEZ,SAAS,mBAAmB,QAAgB;AAClD,QAAM,eAAe,OAAO,QAAQ,UAAU;AAC9C,MAAI,iBAAiB,IAAI;AACxB,WAAO;AAAA,EACR;AAEA,QAAM,qBAAqB,OAAO;AAAA,IACjC;AAAA,IACA,eAAe,WAAW;AAAA,EAC3B;AACA,MAAI,uBAAuB,IAAI;AAC9B,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ,OACZ,MAAM,eAAe,WAAW,QAAQ,kBAAkB,EAC1D,KAAK;AAEP,SAAO,QAAQ,QAAQ;AACxB;","names":[]}
@@ -11,6 +11,7 @@ declare function createOptionDefaults(promptedOptions?: PromptedOptions): {
11
11
  src: string;
12
12
  } | undefined>;
13
13
  title: () => Promise<string | undefined>;
14
+ usage: () => Promise<string>;
14
15
  author: () => Promise<string | undefined>;
15
16
  bin: () => Promise<string | undefined>;
16
17
  description: () => Promise<string | undefined>;
@@ -6,6 +6,7 @@ import * as fs from "node:fs/promises";
6
6
  import npmUser from "npm-user";
7
7
  import { readDescription } from "../../../next/readDescription.js";
8
8
  import { readPackageData } from "../../packages.js";
9
+ import { readFileSafe } from "../../readFileSafe.js";
9
10
  import { tryCatchAsync } from "../../tryCatchAsync.js";
10
11
  import { tryCatchLazyValueAsync } from "../../tryCatchLazyValueAsync.js";
11
12
  import { parsePackageAuthor } from "./parsePackageAuthor.js";
@@ -24,10 +25,11 @@ function createOptionDefaults(promptedOptions) {
24
25
  const packageAuthor = lazyValue(
25
26
  async () => parsePackageAuthor(await packageData())
26
27
  );
28
+ const readme = lazyValue(async () => await readFileSafe("README.md", ""));
27
29
  return {
28
30
  author: async () => (await packageAuthor()).author ?? (await npmDefaults())?.name,
29
31
  bin: async () => (await packageData()).bin,
30
- description: async () => await readDescription(packageData),
32
+ description: async () => await readDescription(packageData, readme),
31
33
  email: async () => readEmails(npmDefaults, packageAuthor),
32
34
  funding: async () => await tryCatchAsync(
33
35
  async () => (await fs.readFile(".github/FUNDING.yml")).toString().split(":")[1]?.trim()
@@ -35,7 +37,7 @@ function createOptionDefaults(promptedOptions) {
35
37
  guide: readGuide,
36
38
  owner: async () => (await gitDefaults())?.organization ?? (await packageAuthor()).author,
37
39
  repository: async () => promptedOptions?.repository ?? (await gitDefaults())?.name ?? (await packageData()).name,
38
- ...readDefaultsFromReadme()
40
+ ...readDefaultsFromReadme(readme, promptedOptions?.repository)
39
41
  };
40
42
  }
41
43
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/shared/options/createOptionDefaults/index.ts"],"sourcesContent":["import { $ } from \"execa\";\nimport gitRemoteOriginUrl from \"git-remote-origin-url\";\nimport gitUrlParse from \"git-url-parse\";\nimport lazyValue from \"lazy-value\";\nimport * as fs from \"node:fs/promises\";\nimport npmUser from \"npm-user\";\n\nimport { readDescription } from \"../../../next/readDescription.js\";\nimport { readPackageData } from \"../../packages.js\";\nimport { tryCatchAsync } from \"../../tryCatchAsync.js\";\nimport { tryCatchLazyValueAsync } from \"../../tryCatchLazyValueAsync.js\";\nimport { PromptedOptions } from \"../../types.js\";\nimport { parsePackageAuthor } from \"./parsePackageAuthor.js\";\nimport { readDefaultsFromReadme } from \"./readDefaultsFromReadme.js\";\nimport { readEmails } from \"./readEmails.js\";\nimport { readGuide } from \"./readGuide.js\";\n\nexport function createOptionDefaults(promptedOptions?: PromptedOptions) {\n\tconst gitDefaults = tryCatchLazyValueAsync(async () =>\n\t\tgitUrlParse(await gitRemoteOriginUrl()),\n\t);\n\n\tconst npmDefaults = tryCatchLazyValueAsync(async () => {\n\t\tconst whoami = (await $`npm whoami`).stdout;\n\t\treturn whoami ? await npmUser(whoami) : undefined;\n\t});\n\n\tconst packageData = lazyValue(readPackageData);\n\tconst packageAuthor = lazyValue(async () =>\n\t\tparsePackageAuthor(await packageData()),\n\t);\n\n\treturn {\n\t\tauthor: async () =>\n\t\t\t(await packageAuthor()).author ?? (await npmDefaults())?.name,\n\t\tbin: async () => (await packageData()).bin,\n\t\tdescription: async () => await readDescription(packageData),\n\t\temail: async () => readEmails(npmDefaults, packageAuthor),\n\t\tfunding: async () =>\n\t\t\tawait tryCatchAsync(async () =>\n\t\t\t\t(await fs.readFile(\".github/FUNDING.yml\"))\n\t\t\t\t\t.toString()\n\t\t\t\t\t.split(\":\")[1]\n\t\t\t\t\t?.trim(),\n\t\t\t),\n\t\tguide: readGuide,\n\t\towner: async () =>\n\t\t\t(await gitDefaults())?.organization ?? (await packageAuthor()).author,\n\t\trepository: async () =>\n\t\t\tpromptedOptions?.repository ??\n\t\t\t(await gitDefaults())?.name ??\n\t\t\t(await packageData()).name,\n\t\t...readDefaultsFromReadme(),\n\t};\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAClB,OAAO,wBAAwB;AAC/B,OAAO,iBAAiB;AACxB,OAAO,eAAe;AACtB,YAAY,QAAQ;AACpB,OAAO,aAAa;AAEpB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,8BAA8B;AAEvC,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAEnB,SAAS,qBAAqB,iBAAmC;AACvE,QAAM,cAAc;AAAA,IAAuB,YAC1C,YAAY,MAAM,mBAAmB,CAAC;AAAA,EACvC;AAEA,QAAM,cAAc,uBAAuB,YAAY;AACtD,UAAM,UAAU,MAAM,eAAe;AACrC,WAAO,SAAS,MAAM,QAAQ,MAAM,IAAI;AAAA,EACzC,CAAC;AAED,QAAM,cAAc,UAAU,eAAe;AAC7C,QAAM,gBAAgB;AAAA,IAAU,YAC/B,mBAAmB,MAAM,YAAY,CAAC;AAAA,EACvC;AAEA,SAAO;AAAA,IACN,QAAQ,aACN,MAAM,cAAc,GAAG,WAAW,MAAM,YAAY,IAAI;AAAA,IAC1D,KAAK,aAAa,MAAM,YAAY,GAAG;AAAA,IACvC,aAAa,YAAY,MAAM,gBAAgB,WAAW;AAAA,IAC1D,OAAO,YAAY,WAAW,aAAa,aAAa;AAAA,IACxD,SAAS,YACR,MAAM;AAAA,MAAc,aAClB,MAAM,GAAG,SAAS,qBAAqB,GACtC,SAAS,EACT,MAAM,GAAG,EAAE,CAAC,GACX,KAAK;AAAA,IACT;AAAA,IACD,OAAO;AAAA,IACP,OAAO,aACL,MAAM,YAAY,IAAI,iBAAiB,MAAM,cAAc,GAAG;AAAA,IAChE,YAAY,YACX,iBAAiB,eAChB,MAAM,YAAY,IAAI,SACtB,MAAM,YAAY,GAAG;AAAA,IACvB,GAAG,uBAAuB;AAAA,EAC3B;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../../src/shared/options/createOptionDefaults/index.ts"],"sourcesContent":["import { $ } from \"execa\";\nimport gitRemoteOriginUrl from \"git-remote-origin-url\";\nimport gitUrlParse from \"git-url-parse\";\nimport lazyValue from \"lazy-value\";\nimport * as fs from \"node:fs/promises\";\nimport npmUser from \"npm-user\";\n\nimport { readDescription } from \"../../../next/readDescription.js\";\nimport { readPackageData } from \"../../packages.js\";\nimport { readFileSafe } from \"../../readFileSafe.js\";\nimport { tryCatchAsync } from \"../../tryCatchAsync.js\";\nimport { tryCatchLazyValueAsync } from \"../../tryCatchLazyValueAsync.js\";\nimport { PromptedOptions } from \"../../types.js\";\nimport { parsePackageAuthor } from \"./parsePackageAuthor.js\";\nimport { readDefaultsFromReadme } from \"./readDefaultsFromReadme.js\";\nimport { readEmails } from \"./readEmails.js\";\nimport { readGuide } from \"./readGuide.js\";\n\nexport function createOptionDefaults(promptedOptions?: PromptedOptions) {\n\tconst gitDefaults = tryCatchLazyValueAsync(async () =>\n\t\tgitUrlParse(await gitRemoteOriginUrl()),\n\t);\n\n\tconst npmDefaults = tryCatchLazyValueAsync(async () => {\n\t\tconst whoami = (await $`npm whoami`).stdout;\n\t\treturn whoami ? await npmUser(whoami) : undefined;\n\t});\n\n\tconst packageData = lazyValue(readPackageData);\n\tconst packageAuthor = lazyValue(async () =>\n\t\tparsePackageAuthor(await packageData()),\n\t);\n\n\tconst readme = lazyValue(async () => await readFileSafe(\"README.md\", \"\"));\n\n\treturn {\n\t\tauthor: async () =>\n\t\t\t(await packageAuthor()).author ?? (await npmDefaults())?.name,\n\t\tbin: async () => (await packageData()).bin,\n\t\tdescription: async () => await readDescription(packageData, readme),\n\t\temail: async () => readEmails(npmDefaults, packageAuthor),\n\t\tfunding: async () =>\n\t\t\tawait tryCatchAsync(async () =>\n\t\t\t\t(await fs.readFile(\".github/FUNDING.yml\"))\n\t\t\t\t\t.toString()\n\t\t\t\t\t.split(\":\")[1]\n\t\t\t\t\t?.trim(),\n\t\t\t),\n\t\tguide: readGuide,\n\t\towner: async () =>\n\t\t\t(await gitDefaults())?.organization ?? (await packageAuthor()).author,\n\t\trepository: async () =>\n\t\t\tpromptedOptions?.repository ??\n\t\t\t(await gitDefaults())?.name ??\n\t\t\t(await packageData()).name,\n\t\t...readDefaultsFromReadme(readme, promptedOptions?.repository),\n\t};\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAClB,OAAO,wBAAwB;AAC/B,OAAO,iBAAiB;AACxB,OAAO,eAAe;AACtB,YAAY,QAAQ;AACpB,OAAO,aAAa;AAEpB,SAAS,uBAAuB;AAChC,SAAS,uBAAuB;AAChC,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,8BAA8B;AAEvC,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,iBAAiB;AAEnB,SAAS,qBAAqB,iBAAmC;AACvE,QAAM,cAAc;AAAA,IAAuB,YAC1C,YAAY,MAAM,mBAAmB,CAAC;AAAA,EACvC;AAEA,QAAM,cAAc,uBAAuB,YAAY;AACtD,UAAM,UAAU,MAAM,eAAe;AACrC,WAAO,SAAS,MAAM,QAAQ,MAAM,IAAI;AAAA,EACzC,CAAC;AAED,QAAM,cAAc,UAAU,eAAe;AAC7C,QAAM,gBAAgB;AAAA,IAAU,YAC/B,mBAAmB,MAAM,YAAY,CAAC;AAAA,EACvC;AAEA,QAAM,SAAS,UAAU,YAAY,MAAM,aAAa,aAAa,EAAE,CAAC;AAExE,SAAO;AAAA,IACN,QAAQ,aACN,MAAM,cAAc,GAAG,WAAW,MAAM,YAAY,IAAI;AAAA,IAC1D,KAAK,aAAa,MAAM,YAAY,GAAG;AAAA,IACvC,aAAa,YAAY,MAAM,gBAAgB,aAAa,MAAM;AAAA,IAClE,OAAO,YAAY,WAAW,aAAa,aAAa;AAAA,IACxD,SAAS,YACR,MAAM;AAAA,MAAc,aAClB,MAAM,GAAG,SAAS,qBAAqB,GACtC,SAAS,EACT,MAAM,GAAG,EAAE,CAAC,GACX,KAAK;AAAA,IACT;AAAA,IACD,OAAO;AAAA,IACP,OAAO,aACL,MAAM,YAAY,IAAI,iBAAiB,MAAM,cAAc,GAAG;AAAA,IAChE,YAAY,YACX,iBAAiB,eAChB,MAAM,YAAY,IAAI,SACtB,MAAM,YAAY,GAAG;AAAA,IACvB,GAAG,uBAAuB,QAAQ,iBAAiB,UAAU;AAAA,EAC9D;AACD;","names":[]}
@@ -1,4 +1,4 @@
1
- declare function readDefaultsFromReadme(): {
1
+ declare function readDefaultsFromReadme(readme: () => Promise<string>, repository: string | undefined): {
2
2
  logo: () => Promise<{
3
3
  height?: number;
4
4
  width?: number;
@@ -6,6 +6,7 @@ declare function readDefaultsFromReadme(): {
6
6
  src: string;
7
7
  } | undefined>;
8
8
  title: () => Promise<string | undefined>;
9
+ usage: () => Promise<string>;
9
10
  };
10
11
 
11
12
  export { readDefaultsFromReadme };
@@ -1,8 +1,7 @@
1
1
  import lazyValue from "lazy-value";
2
- import { readFileSafe } from "../../readFileSafe.js";
3
2
  import { readLogoSizing } from "../readLogoSizing.js";
4
- function readDefaultsFromReadme() {
5
- const readme = lazyValue(async () => await readFileSafe("README.md", ""));
3
+ import { getUsageFromReadme } from "./getUsageFromReadme.js";
4
+ function readDefaultsFromReadme(readme, repository) {
6
5
  const imageTag = lazyValue(
7
6
  async () => /\n<img.+src=.+>/.exec(await readme())?.[0]
8
7
  );
@@ -25,6 +24,16 @@ function readDefaultsFromReadme() {
25
24
  title: async () => {
26
25
  const text = await readme();
27
26
  return (/^<h1\s+align="center">(.+)<\/h1>/.exec(text) ?? /^# (.+)/.exec(text))?.[1];
27
+ },
28
+ usage: async () => {
29
+ return getUsageFromReadme(await readme()) ?? `\`\`\`shell
30
+ npm i ${repository}
31
+ \`\`\`
32
+ \`\`\`ts
33
+ import { greet } from "${repository}";
34
+
35
+ greet("Hello, world! \u{1F496}");
36
+ \`\`\``;
28
37
  }
29
38
  };
30
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/shared/options/createOptionDefaults/readDefaultsFromReadme.ts"],"sourcesContent":["import lazyValue from \"lazy-value\";\n\nimport { readFileSafe } from \"../../readFileSafe.js\";\nimport { readLogoSizing } from \"../readLogoSizing.js\";\n\nexport function readDefaultsFromReadme() {\n\tconst readme = lazyValue(async () => await readFileSafe(\"README.md\", \"\"));\n\n\tconst imageTag = lazyValue(\n\t\tasync () => /\\n<img.+src=.+>/.exec(await readme())?.[0],\n\t);\n\n\treturn {\n\t\tlogo: async () => {\n\t\t\tconst tag = await imageTag();\n\n\t\t\tif (!tag) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst src = /src\\s*=(.+)['\"/]>/\n\t\t\t\t.exec(tag)?.[1]\n\t\t\t\t?.replaceAll(/^['\"]|['\"]$/g, \"\");\n\n\t\t\tif (!src) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\talt: /alt=['\"](.+)['\"]\\s*src=/.exec(tag)?.[1] ?? \"Project logo\",\n\t\t\t\tsrc,\n\t\t\t\t...readLogoSizing(src),\n\t\t\t};\n\t\t},\n\t\ttitle: async () => {\n\t\t\tconst text = await readme();\n\t\t\treturn (/^<h1\\s+align=\"center\">(.+)<\\/h1>/.exec(text) ??\n\t\t\t\t/^# (.+)/.exec(text))?.[1];\n\t\t},\n\t};\n}\n"],"mappings":"AAAA,OAAO,eAAe;AAEtB,SAAS,oBAAoB;AAC7B,SAAS,sBAAsB;AAExB,SAAS,yBAAyB;AACxC,QAAM,SAAS,UAAU,YAAY,MAAM,aAAa,aAAa,EAAE,CAAC;AAExE,QAAM,WAAW;AAAA,IAChB,YAAY,kBAAkB,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC;AAAA,EACvD;AAEA,SAAO;AAAA,IACN,MAAM,YAAY;AACjB,YAAM,MAAM,MAAM,SAAS;AAE3B,UAAI,CAAC,KAAK;AACT,eAAO;AAAA,MACR;AAEA,YAAM,MAAM,oBACV,KAAK,GAAG,IAAI,CAAC,GACZ,WAAW,gBAAgB,EAAE;AAEhC,UAAI,CAAC,KAAK;AACT,eAAO;AAAA,MACR;AAEA,aAAO;AAAA,QACN,KAAK,0BAA0B,KAAK,GAAG,IAAI,CAAC,KAAK;AAAA,QACjD;AAAA,QACA,GAAG,eAAe,GAAG;AAAA,MACtB;AAAA,IACD;AAAA,IACA,OAAO,YAAY;AAClB,YAAM,OAAO,MAAM,OAAO;AAC1B,cAAQ,mCAAmC,KAAK,IAAI,KACnD,UAAU,KAAK,IAAI,KAAK,CAAC;AAAA,IAC3B;AAAA,EACD;AACD;","names":[]}
1
+ {"version":3,"sources":["../../../../src/shared/options/createOptionDefaults/readDefaultsFromReadme.ts"],"sourcesContent":["import lazyValue from \"lazy-value\";\n\nimport { readLogoSizing } from \"../readLogoSizing.js\";\nimport { getUsageFromReadme } from \"./getUsageFromReadme.js\";\n\nexport function readDefaultsFromReadme(\n\treadme: () => Promise<string>,\n\trepository: string | undefined,\n) {\n\tconst imageTag = lazyValue(\n\t\tasync () => /\\n<img.+src=.+>/.exec(await readme())?.[0],\n\t);\n\n\treturn {\n\t\tlogo: async () => {\n\t\t\tconst tag = await imageTag();\n\n\t\t\tif (!tag) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\tconst src = /src\\s*=(.+)['\"/]>/\n\t\t\t\t.exec(tag)?.[1]\n\t\t\t\t?.replaceAll(/^['\"]|['\"]$/g, \"\");\n\n\t\t\tif (!src) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\talt: /alt=['\"](.+)['\"]\\s*src=/.exec(tag)?.[1] ?? \"Project logo\",\n\t\t\t\tsrc,\n\t\t\t\t...readLogoSizing(src),\n\t\t\t};\n\t\t},\n\t\ttitle: async () => {\n\t\t\tconst text = await readme();\n\t\t\treturn (/^<h1\\s+align=\"center\">(.+)<\\/h1>/.exec(text) ??\n\t\t\t\t/^# (.+)/.exec(text))?.[1];\n\t\t},\n\n\t\tusage: async () => {\n\t\t\treturn (\n\t\t\t\tgetUsageFromReadme(await readme()) ??\n\t\t\t\t`\\`\\`\\`shell\nnpm i ${repository}\n\\`\\`\\`\n\\`\\`\\`ts\nimport { greet } from \"${repository}\";\n\ngreet(\"Hello, world! 💖\");\n\\`\\`\\``\n\t\t\t);\n\t\t},\n\t};\n}\n"],"mappings":"AAAA,OAAO,eAAe;AAEtB,SAAS,sBAAsB;AAC/B,SAAS,0BAA0B;AAE5B,SAAS,uBACf,QACA,YACC;AACD,QAAM,WAAW;AAAA,IAChB,YAAY,kBAAkB,KAAK,MAAM,OAAO,CAAC,IAAI,CAAC;AAAA,EACvD;AAEA,SAAO;AAAA,IACN,MAAM,YAAY;AACjB,YAAM,MAAM,MAAM,SAAS;AAE3B,UAAI,CAAC,KAAK;AACT,eAAO;AAAA,MACR;AAEA,YAAM,MAAM,oBACV,KAAK,GAAG,IAAI,CAAC,GACZ,WAAW,gBAAgB,EAAE;AAEhC,UAAI,CAAC,KAAK;AACT,eAAO;AAAA,MACR;AAEA,aAAO;AAAA,QACN,KAAK,0BAA0B,KAAK,GAAG,IAAI,CAAC,KAAK;AAAA,QACjD;AAAA,QACA,GAAG,eAAe,GAAG;AAAA,MACtB;AAAA,IACD;AAAA,IACA,OAAO,YAAY;AAClB,YAAM,OAAO,MAAM,OAAO;AAC1B,cAAQ,mCAAmC,KAAK,IAAI,KACnD,UAAU,KAAK,IAAI,KAAK,CAAC;AAAA,IAC3B;AAAA,IAEA,OAAO,YAAY;AAClB,aACC,mBAAmB,MAAM,OAAO,CAAC,KACjC;AAAA,QACI,UAAU;AAAA;AAAA;AAAA,yBAGO,UAAU;AAAA;AAAA;AAAA;AAAA,IAKjC;AAAA,EACD;AACD;","names":[]}
@@ -13,6 +13,7 @@ async function uninstallPackages(offline) {
13
13
  "execa",
14
14
  "git-remote-origin-url",
15
15
  "git-url-parse",
16
+ "html-to-text",
16
17
  "image-size",
17
18
  "input-from-file",
18
19
  "input-from-file-json",
@@ -42,6 +43,7 @@ async function uninstallPackages(offline) {
42
43
  [
43
44
  "@octokit/request-error",
44
45
  "@types/git-url-parse",
46
+ "@types/html-to-text",
45
47
  "@types/js-yaml",
46
48
  "@types/parse-author",
47
49
  "all-contributors-cli",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/steps/uninstallPackages.ts"],"sourcesContent":["import { $ } from \"execa\";\n\nimport { readPackageData, removeDependencies } from \"../shared/packages.js\";\n\nexport async function uninstallPackages(offline: boolean | undefined) {\n\tconst packageData = await readPackageData();\n\n\tawait removeDependencies(\n\t\t[\n\t\t\t\"@clack/prompts\",\n\t\t\t\"@prettier/sync\",\n\t\t\t\"all-contributors-cli\",\n\t\t\t\"chalk\",\n\t\t\t\"create\",\n\t\t\t\"cspell-populate-words\",\n\t\t\t\"execa\",\n\t\t\t\"git-remote-origin-url\",\n\t\t\t\"git-url-parse\",\n\t\t\t\"image-size\",\n\t\t\t\"input-from-file\",\n\t\t\t\"input-from-file-json\",\n\t\t\t\"input-from-script\",\n\t\t\t\"js-yaml\",\n\t\t\t\"lazy-value\",\n\t\t\t\"npm-user\",\n\t\t\t\"object-strings-deep\",\n\t\t\t\"octokit\",\n\t\t\t\"octokit-from-auth\",\n\t\t\t\"parse-author\",\n\t\t\t\"parse-package-name\",\n\t\t\t\"populate-all-contributors-for-repository\",\n\t\t\t\"prettier\",\n\t\t\t\"remove-undefined-objects\",\n\t\t\t\"replace-in-file\",\n\t\t\t\"rimraf\",\n\t\t\t\"set-github-repository-labels\",\n\t\t\t\"sort-package-json\",\n\t\t\t\"title-case\",\n\t\t\t\"zod\",\n\t\t\t\"zod-validation-error\",\n\t\t],\n\t\tpackageData.dependencies,\n\t);\n\n\tawait removeDependencies(\n\t\t[\n\t\t\t\"@octokit/request-error\",\n\t\t\t\"@types/git-url-parse\",\n\t\t\t\"@types/js-yaml\",\n\t\t\t\"@types/parse-author\",\n\t\t\t\"all-contributors-cli\",\n\t\t\t\"c8\",\n\t\t\t\"create-testers\",\n\t\t\t\"eslint-config-prettier\",\n\t\t\t\"globby\",\n\t\t\t\"tsx\",\n\t\t],\n\t\tpackageData.devDependencies,\n\t\t\"-D\",\n\t);\n\n\tawait $`pnpm add prettier -D${offline ? \" --offline\" : \"\"}`;\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,0BAA0B;AAEpD,eAAsB,kBAAkB,SAA8B;AACrE,QAAM,cAAc,MAAM,gBAAgB;AAE1C,QAAM;AAAA,IACL;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,YAAY;AAAA,EACb;AAEA,QAAM;AAAA,IACL;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EACD;AAEA,QAAM,wBAAwB,UAAU,eAAe,EAAE;AAC1D;","names":[]}
1
+ {"version":3,"sources":["../../src/steps/uninstallPackages.ts"],"sourcesContent":["import { $ } from \"execa\";\n\nimport { readPackageData, removeDependencies } from \"../shared/packages.js\";\n\nexport async function uninstallPackages(offline: boolean | undefined) {\n\tconst packageData = await readPackageData();\n\n\tawait removeDependencies(\n\t\t[\n\t\t\t\"@clack/prompts\",\n\t\t\t\"@prettier/sync\",\n\t\t\t\"all-contributors-cli\",\n\t\t\t\"chalk\",\n\t\t\t\"create\",\n\t\t\t\"cspell-populate-words\",\n\t\t\t\"execa\",\n\t\t\t\"git-remote-origin-url\",\n\t\t\t\"git-url-parse\",\n\t\t\t\"html-to-text\",\n\t\t\t\"image-size\",\n\t\t\t\"input-from-file\",\n\t\t\t\"input-from-file-json\",\n\t\t\t\"input-from-script\",\n\t\t\t\"js-yaml\",\n\t\t\t\"lazy-value\",\n\t\t\t\"npm-user\",\n\t\t\t\"object-strings-deep\",\n\t\t\t\"octokit\",\n\t\t\t\"octokit-from-auth\",\n\t\t\t\"parse-author\",\n\t\t\t\"parse-package-name\",\n\t\t\t\"populate-all-contributors-for-repository\",\n\t\t\t\"prettier\",\n\t\t\t\"remove-undefined-objects\",\n\t\t\t\"replace-in-file\",\n\t\t\t\"rimraf\",\n\t\t\t\"set-github-repository-labels\",\n\t\t\t\"sort-package-json\",\n\t\t\t\"title-case\",\n\t\t\t\"zod\",\n\t\t\t\"zod-validation-error\",\n\t\t],\n\t\tpackageData.dependencies,\n\t);\n\n\tawait removeDependencies(\n\t\t[\n\t\t\t\"@octokit/request-error\",\n\t\t\t\"@types/git-url-parse\",\n\t\t\t\"@types/html-to-text\",\n\t\t\t\"@types/js-yaml\",\n\t\t\t\"@types/parse-author\",\n\t\t\t\"all-contributors-cli\",\n\t\t\t\"c8\",\n\t\t\t\"create-testers\",\n\t\t\t\"eslint-config-prettier\",\n\t\t\t\"globby\",\n\t\t\t\"tsx\",\n\t\t],\n\t\tpackageData.devDependencies,\n\t\t\"-D\",\n\t);\n\n\tawait $`pnpm add prettier -D${offline ? \" --offline\" : \"\"}`;\n}\n"],"mappings":"AAAA,SAAS,SAAS;AAElB,SAAS,iBAAiB,0BAA0B;AAEpD,eAAsB,kBAAkB,SAA8B;AACrE,QAAM,cAAc,MAAM,gBAAgB;AAE1C,QAAM;AAAA,IACL;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,YAAY;AAAA,EACb;AAEA,QAAM;AAAA,IACL;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,EACD;AAEA,QAAM,wBAAwB,UAAU,eAAe,EAAE;AAC1D;","names":[]}
@@ -28,7 +28,6 @@ async function createRootFiles(options) {
28
28
  ".nvmrc": `20.18.0
29
29
  `,
30
30
  ".prettierignore": formatIgnoreFile([
31
- ...options.excludeAllContributors ? [] : ["/.all-contributorsrc"],
32
31
  "/.husky",
33
32
  ...options.excludeTests ? [] : ["/coverage"],
34
33
  "/lib",
@@ -66,7 +65,19 @@ async function createRootFiles(options) {
66
65
  plugins: {
67
66
  "@release-it/conventional-changelog": {
68
67
  infile: "CHANGELOG.md",
69
- preset: "angular"
68
+ preset: "angular",
69
+ types: [
70
+ { section: "Features", type: "feat" },
71
+ { section: "Bug Fixes", type: "fix" },
72
+ { section: "Performance Improvements", type: "perf" },
73
+ { hidden: true, type: "build" },
74
+ { hidden: true, type: "chore" },
75
+ { hidden: true, type: "ci" },
76
+ { hidden: true, type: "docs" },
77
+ { hidden: true, type: "refactor" },
78
+ { hidden: true, type: "style" },
79
+ { hidden: true, type: "test" }
80
+ ]
70
81
  }
71
82
  }
72
83
  })
@@ -124,7 +135,6 @@ export default defineConfig({
124
135
  clearMocks: true,
125
136
  coverage: {
126
137
  all: true,
127
- exclude: ["lib"],
128
138
  include: ["src"],
129
139
  reporter: ["html", "lcov"],
130
140
  },
@@ -1 +1 @@
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 { createKnipConfig } from \"./createKnipConfig.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 createKnipConfig(),\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 { createKnipConfig } from \"./createKnipConfig.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\"/.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\ttypes: [\n\t\t\t\t\t\t\t{ section: \"Features\", type: \"feat\" },\n\t\t\t\t\t\t\t{ section: \"Bug Fixes\", type: \"fix\" },\n\t\t\t\t\t\t\t{ section: \"Performance Improvements\", type: \"perf\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"build\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"chore\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"ci\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"docs\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"refactor\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"style\" },\n\t\t\t\t\t\t\t{ hidden: true, type: \"test\" },\n\t\t\t\t\t\t],\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 createKnipConfig(),\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\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":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-typescript-app",
3
- "version": "1.80.0",
3
+ "version": "1.81.0",
4
4
  "description": "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. ❤️‍🔥",
5
5
  "repository": {
6
6
  "type": "git",
@@ -49,6 +49,7 @@
49
49
  "execa": "^9.5.2",
50
50
  "git-remote-origin-url": "^4.0.0",
51
51
  "git-url-parse": "^16.0.0",
52
+ "html-to-text": "^9.0.5",
52
53
  "image-size": "^1.2.0",
53
54
  "input-from-file": "0.1.0-alpha.4",
54
55
  "input-from-file-json": "0.1.0-alpha.4",
@@ -79,6 +80,7 @@
79
80
  "@release-it/conventional-changelog": "9.0.3",
80
81
  "@types/eslint-plugin-markdown": "2.0.2",
81
82
  "@types/git-url-parse": "9.0.3",
83
+ "@types/html-to-text": "^9.0.4",
82
84
  "@types/js-yaml": "4.0.9",
83
85
  "@types/node": "22.10.2",
84
86
  "@types/parse-author": "2.0.3",