create-typescript-app 1.80.0 → 1.82.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 (109) hide show
  1. package/README.md +4 -3
  2. package/lib/next/base.d.ts +3 -2
  3. package/lib/next/base.js +17 -10
  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/blockMarkdownlint.js +8 -1
  41. package/lib/next/blocks/blockMarkdownlint.js.map +1 -1
  42. package/lib/next/blocks/blockNvmrc.d.ts +2 -1
  43. package/lib/next/blocks/blockPRCompliance.d.ts +2 -1
  44. package/lib/next/blocks/blockPackageJson.d.ts +2 -1
  45. package/lib/next/blocks/blockPackageJson.js +9 -4
  46. package/lib/next/blocks/blockPackageJson.js.map +1 -1
  47. package/lib/next/blocks/blockPnpmDedupe.d.ts +2 -1
  48. package/lib/next/blocks/blockPrettier.d.ts +2 -1
  49. package/lib/next/blocks/blockPrettier.js +2 -2
  50. package/lib/next/blocks/blockPrettier.js.map +1 -1
  51. package/lib/next/blocks/blockPrettierPluginCurly.d.ts +2 -1
  52. package/lib/next/blocks/blockPrettierPluginPackageJson.d.ts +2 -1
  53. package/lib/next/blocks/blockPrettierPluginSh.d.ts +2 -1
  54. package/lib/next/blocks/blockREADME.d.ts +2 -1
  55. package/lib/next/blocks/blockREADME.js +11 -12
  56. package/lib/next/blocks/blockREADME.js.map +1 -1
  57. package/lib/next/blocks/blockReleaseIt.d.ts +2 -1
  58. package/lib/next/blocks/blockReleaseIt.js +13 -1
  59. package/lib/next/blocks/blockReleaseIt.js.map +1 -1
  60. package/lib/next/blocks/blockRenovate.d.ts +2 -1
  61. package/lib/next/blocks/blockRepositoryBranchRuleset.d.ts +2 -1
  62. package/lib/next/blocks/blockRepositoryLabels.d.ts +2 -1
  63. package/lib/next/blocks/blockRepositorySecrets.d.ts +2 -1
  64. package/lib/next/blocks/blockRepositorySettings.d.ts +2 -1
  65. package/lib/next/blocks/blockRepositorySettings.js +3 -1
  66. package/lib/next/blocks/blockRepositorySettings.js.map +1 -1
  67. package/lib/next/blocks/blockSecurityDocs.d.ts +2 -1
  68. package/lib/next/blocks/blockTSup.d.ts +2 -1
  69. package/lib/next/blocks/blockTemplatedBy.d.ts +2 -1
  70. package/lib/next/blocks/blockTemplatedBy.js +1 -1
  71. package/lib/next/blocks/blockTemplatedBy.js.map +1 -1
  72. package/lib/next/blocks/blockTypeScript.d.ts +2 -1
  73. package/lib/next/blocks/blockTypeScript.js +1 -4
  74. package/lib/next/blocks/blockTypeScript.js.map +1 -1
  75. package/lib/next/blocks/blockVSCode.d.ts +2 -1
  76. package/lib/next/blocks/blockVitest.d.ts +8 -4
  77. package/lib/next/blocks/blockVitest.js +18 -14
  78. package/lib/next/blocks/blockVitest.js.map +1 -1
  79. package/lib/next/blocks/sourcePackageJson.d.ts +7 -5
  80. package/lib/next/presets/presetCommon.d.ts +3 -2
  81. package/lib/next/presets/presetEverything.d.ts +3 -2
  82. package/lib/next/presets/presetMinimal.d.ts +3 -2
  83. package/lib/next/readDescription.d.ts +1 -1
  84. package/lib/next/readDescription.js +9 -1
  85. package/lib/next/readDescription.js.map +1 -1
  86. package/lib/next/readDescriptionFromReadme.d.ts +3 -0
  87. package/lib/next/readDescriptionFromReadme.js +18 -0
  88. package/lib/next/readDescriptionFromReadme.js.map +1 -0
  89. package/lib/next/template.d.ts +3 -2
  90. package/lib/next/template.js +2 -2
  91. package/lib/next/template.js.map +1 -1
  92. package/lib/shared/options/createOptionDefaults/getUsageFromReadme.d.ts +3 -0
  93. package/lib/shared/options/createOptionDefaults/getUsageFromReadme.js +21 -0
  94. package/lib/shared/options/createOptionDefaults/getUsageFromReadme.js.map +1 -0
  95. package/lib/shared/options/createOptionDefaults/index.d.ts +1 -0
  96. package/lib/shared/options/createOptionDefaults/index.js +8 -3
  97. package/lib/shared/options/createOptionDefaults/index.js.map +1 -1
  98. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.d.ts +2 -1
  99. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js +19 -4
  100. package/lib/shared/options/createOptionDefaults/readDefaultsFromReadme.js.map +1 -1
  101. package/lib/shared/options/readOptions.js +1 -1
  102. package/lib/shared/options/readOptions.js.map +1 -1
  103. package/lib/steps/uninstallPackages.js +2 -0
  104. package/lib/steps/uninstallPackages.js.map +1 -1
  105. package/lib/steps/writing/creation/rootFiles.js +13 -3
  106. package/lib/steps/writing/creation/rootFiles.js.map +1 -1
  107. package/lib/steps/writing/creation/writePackageJson.js +1 -1
  108. package/lib/steps/writing/creation/writePackageJson.js.map +1 -1
  109. package/package.json +7 -5
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/next/blocks/blockTypeScript.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockDevelopmentDocs } from \"./blockDevelopmentDocs.js\";\nimport { blockExampleFiles } from \"./blockExampleFiles.js\";\nimport { blockGitHubActionsCI } from \"./blockGitHubActionsCI.js\";\nimport { blockGitignore } from \"./blockGitignore.js\";\nimport { blockMarkdownlint } from \"./blockMarkdownlint.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockVitest } from \"./blockVitest.js\";\nimport { blockVSCode } from \"./blockVSCode.js\";\nimport { getPackageDependencies } from \"./packageData.js\";\n\nexport const blockTypeScript = base.createBlock({\n\tabout: {\n\t\tname: \"TypeScript\",\n\t},\n\tproduce({ options }) {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockDevelopmentDocs({\n\t\t\t\t\tsections: {\n\t\t\t\t\t\t\"Type Checking\": {\n\t\t\t\t\t\t\tcontents: `\nYou should be able to see suggestions from [TypeScript](https://typescriptlang.org) in your editor for all open files.\n\nHowever, it can be useful to run the TypeScript command-line (\\`tsc\\`) to type check all files in \\`src/\\`:\n\n\\`\\`\\`shell\npnpm tsc\n\\`\\`\\`\n\nAdd \\`--watch\\` to keep the type checker running in a watch mode that updates the display as you save files:\n\n\\`\\`\\`shell\npnpm tsc --watch\n\\`\\`\\`\n`,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockExampleFiles({\n\t\t\t\t\tfiles: {\n\t\t\t\t\t\t\"greet.ts\": `import { GreetOptions } from \"./types.js\";\n\t\n\texport function greet(options: GreetOptions | string) {\n\t\tconst {\n\t\t\tlogger = console.log.bind(console),\n\t\t\tmessage,\n\t\t\ttimes = 1,\n\t\t} = typeof options === \"string\" ? { message: options } : options;\n\t\n\t\tfor (let i = 0; i < times; i += 1) {\n\t\t\tlogger(message);\n\t\t}\n\t}\n\t`,\n\t\t\t\t\t\t\"index.ts\": `export * from \"./greet.js\";\nexport * from \"./types.js\";\n`,\n\t\t\t\t\t\t\"types.ts\": `export interface GreetOptions {\n\t\tlogger?: (message: string) => void;\n\t\tmessage: string;\n\t\ttimes?: number;\n\t}\n\t`,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockGitignore({\n\t\t\t\t\tignores: [\"/lib\"],\n\t\t\t\t}),\n\t\t\t\tblockGitHubActionsCI({\n\t\t\t\t\tjobs: [{ name: \"Type Check\", steps: [{ run: \"pnpm tsc\" }] }],\n\t\t\t\t}),\n\t\t\t\tblockMarkdownlint({\n\t\t\t\t\tignores: [\"lib/\"],\n\t\t\t\t}),\n\t\t\t\tblockPackageJson({\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdevDependencies: getPackageDependencies(\"typescript\"),\n\t\t\t\t\t\tfiles: [\"lib/\"],\n\t\t\t\t\t\tmain: \"./lib/index.js\",\n\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\ttsc: \"tsc\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockVitest({\n\t\t\t\t\texclude: [\"lib\"],\n\t\t\t\t\tinclude: [\"src\"],\n\t\t\t\t}),\n\t\t\t\tblockVSCode({\n\t\t\t\t\tdebuggers: options.bin\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: \"Debug Program\",\n\t\t\t\t\t\t\t\t\tpreLaunchTask: \"build\",\n\t\t\t\t\t\t\t\t\tprogram: options.bin,\n\t\t\t\t\t\t\t\t\trequest: \"launch\",\n\t\t\t\t\t\t\t\t\tskipFiles: [\"<node_internals>/**\"],\n\t\t\t\t\t\t\t\t\ttype: \"node\",\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\tsettings: {\n\t\t\t\t\t\t\"typescript.tsdk\": \"node_modules/typescript/lib\",\n\t\t\t\t\t},\n\t\t\t\t\ttasks: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdetail: \"Build the project\",\n\t\t\t\t\t\t\tlabel: \"build\",\n\t\t\t\t\t\t\tscript: \"build\",\n\t\t\t\t\t\t\ttype: \"npm\",\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\tfiles: {\n\t\t\t\t\"tsconfig.json\": JSON.stringify({\n\t\t\t\t\tcompilerOptions: {\n\t\t\t\t\t\tdeclaration: true,\n\t\t\t\t\t\tdeclarationMap: true,\n\t\t\t\t\t\tesModuleInterop: true,\n\t\t\t\t\t\tmodule: \"NodeNext\",\n\t\t\t\t\t\tmoduleResolution: \"NodeNext\",\n\t\t\t\t\t\tnoEmit: true,\n\t\t\t\t\t\tresolveJsonModule: true,\n\t\t\t\t\t\tskipLibCheck: true,\n\t\t\t\t\t\tsourceMap: true,\n\t\t\t\t\t\tstrict: true,\n\t\t\t\t\t\ttarget: \"ES2022\",\n\t\t\t\t\t},\n\t\t\t\t\tinclude: [\"src\"],\n\t\t\t\t}),\n\t\t\t},\n\t\t};\n\t},\n});\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,4BAA4B;AACrC,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AACrC,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AAEhC,MAAM,kBAAkB,KAAK,YAAY;AAAA,EAC/C,OAAO;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACA,QAAQ,EAAE,QAAQ,GAAG;AACpB,WAAO;AAAA,MACN,QAAQ;AAAA,QACP,qBAAqB;AAAA,UACpB,UAAU;AAAA,YACT,iBAAiB;AAAA,cAChB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAeX;AAAA,UACD;AAAA,QACD,CAAC;AAAA,QACD,kBAAkB;AAAA,UACjB,OAAO;AAAA,YACN,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAcZ,YAAY;AAAA;AAAA;AAAA,YAGZ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMb;AAAA,QACD,CAAC;AAAA,QACD,eAAe;AAAA,UACd,SAAS,CAAC,MAAM;AAAA,QACjB,CAAC;AAAA,QACD,qBAAqB;AAAA,UACpB,MAAM,CAAC,EAAE,MAAM,cAAc,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC;AAAA,QAC5D,CAAC;AAAA,QACD,kBAAkB;AAAA,UACjB,SAAS,CAAC,MAAM;AAAA,QACjB,CAAC;AAAA,QACD,iBAAiB;AAAA,UAChB,YAAY;AAAA,YACX,iBAAiB,uBAAuB,YAAY;AAAA,YACpD,OAAO,CAAC,MAAM;AAAA,YACd,MAAM;AAAA,YACN,SAAS;AAAA,cACR,KAAK;AAAA,YACN;AAAA,UACD;AAAA,QACD,CAAC;AAAA,QACD,YAAY;AAAA,UACX,SAAS,CAAC,KAAK;AAAA,UACf,SAAS,CAAC,KAAK;AAAA,QAChB,CAAC;AAAA,QACD,YAAY;AAAA,UACX,WAAW,QAAQ,MAChB;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,eAAe;AAAA,cACf,SAAS,QAAQ;AAAA,cACjB,SAAS;AAAA,cACT,WAAW,CAAC,qBAAqB;AAAA,cACjC,MAAM;AAAA,YACP;AAAA,UACD,IACC,CAAC;AAAA,UACJ,UAAU;AAAA,YACT,mBAAmB;AAAA,UACpB;AAAA,UACA,OAAO;AAAA,YACN;AAAA,cACC,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,MAAM;AAAA,YACP;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACN,iBAAiB,KAAK,UAAU;AAAA,UAC/B,iBAAiB;AAAA,YAChB,aAAa;AAAA,YACb,gBAAgB;AAAA,YAChB,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,kBAAkB;AAAA,YAClB,QAAQ;AAAA,YACR,mBAAmB;AAAA,YACnB,cAAc;AAAA,YACd,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,QAAQ;AAAA,UACT;AAAA,UACA,SAAS,CAAC,KAAK;AAAA,QAChB,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../../src/next/blocks/blockTypeScript.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockDevelopmentDocs } from \"./blockDevelopmentDocs.js\";\nimport { blockExampleFiles } from \"./blockExampleFiles.js\";\nimport { blockGitHubActionsCI } from \"./blockGitHubActionsCI.js\";\nimport { blockGitignore } from \"./blockGitignore.js\";\nimport { blockMarkdownlint } from \"./blockMarkdownlint.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockVitest } from \"./blockVitest.js\";\nimport { blockVSCode } from \"./blockVSCode.js\";\nimport { getPackageDependencies } from \"./packageData.js\";\n\nexport const blockTypeScript = base.createBlock({\n\tabout: {\n\t\tname: \"TypeScript\",\n\t},\n\tproduce({ options }) {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockDevelopmentDocs({\n\t\t\t\t\tsections: {\n\t\t\t\t\t\t\"Type Checking\": {\n\t\t\t\t\t\t\tcontents: `\nYou should be able to see suggestions from [TypeScript](https://typescriptlang.org) in your editor for all open files.\n\nHowever, it can be useful to run the TypeScript command-line (\\`tsc\\`) to type check all files in \\`src/\\`:\n\n\\`\\`\\`shell\npnpm tsc\n\\`\\`\\`\n\nAdd \\`--watch\\` to keep the type checker running in a watch mode that updates the display as you save files:\n\n\\`\\`\\`shell\npnpm tsc --watch\n\\`\\`\\`\n`,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockExampleFiles({\n\t\t\t\t\tfiles: {\n\t\t\t\t\t\t\"greet.ts\": `import { GreetOptions } from \"./types.js\";\n\t\n\texport function greet(options: GreetOptions | string) {\n\t\tconst {\n\t\t\tlogger = console.log.bind(console),\n\t\t\tmessage,\n\t\t\ttimes = 1,\n\t\t} = typeof options === \"string\" ? { message: options } : options;\n\t\n\t\tfor (let i = 0; i < times; i += 1) {\n\t\t\tlogger(message);\n\t\t}\n\t}\n\t`,\n\t\t\t\t\t\t\"index.ts\": `export * from \"./greet.js\";\nexport * from \"./types.js\";\n`,\n\t\t\t\t\t\t\"types.ts\": `export interface GreetOptions {\n\t\tlogger?: (message: string) => void;\n\t\tmessage: string;\n\t\ttimes?: number;\n\t}\n\t`,\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockGitignore({\n\t\t\t\t\tignores: [\"/lib\"],\n\t\t\t\t}),\n\t\t\t\tblockGitHubActionsCI({\n\t\t\t\t\tjobs: [{ name: \"Type Check\", steps: [{ run: \"pnpm tsc\" }] }],\n\t\t\t\t}),\n\t\t\t\tblockMarkdownlint({\n\t\t\t\t\tignores: [\"lib/\"],\n\t\t\t\t}),\n\t\t\t\tblockPackageJson({\n\t\t\t\t\tproperties: {\n\t\t\t\t\t\tdevDependencies: getPackageDependencies(\"typescript\"),\n\t\t\t\t\t\tfiles: [\"lib/\"],\n\t\t\t\t\t\tmain: \"./lib/index.js\",\n\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\ttsc: \"tsc\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t\tblockVitest({ coverage: { include: [\"src\"] }, exclude: [\"lib\"] }),\n\t\t\t\tblockVSCode({\n\t\t\t\t\tdebuggers: options.bin\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: \"Debug Program\",\n\t\t\t\t\t\t\t\t\tpreLaunchTask: \"build\",\n\t\t\t\t\t\t\t\t\tprogram: options.bin,\n\t\t\t\t\t\t\t\t\trequest: \"launch\",\n\t\t\t\t\t\t\t\t\tskipFiles: [\"<node_internals>/**\"],\n\t\t\t\t\t\t\t\t\ttype: \"node\",\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\tsettings: {\n\t\t\t\t\t\t\"typescript.tsdk\": \"node_modules/typescript/lib\",\n\t\t\t\t\t},\n\t\t\t\t\ttasks: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tdetail: \"Build the project\",\n\t\t\t\t\t\t\tlabel: \"build\",\n\t\t\t\t\t\t\tscript: \"build\",\n\t\t\t\t\t\t\ttype: \"npm\",\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\tfiles: {\n\t\t\t\t\"tsconfig.json\": JSON.stringify({\n\t\t\t\t\tcompilerOptions: {\n\t\t\t\t\t\tdeclaration: true,\n\t\t\t\t\t\tdeclarationMap: true,\n\t\t\t\t\t\tesModuleInterop: true,\n\t\t\t\t\t\tmodule: \"NodeNext\",\n\t\t\t\t\t\tmoduleResolution: \"NodeNext\",\n\t\t\t\t\t\tnoEmit: true,\n\t\t\t\t\t\tresolveJsonModule: true,\n\t\t\t\t\t\tskipLibCheck: true,\n\t\t\t\t\t\tsourceMap: true,\n\t\t\t\t\t\tstrict: true,\n\t\t\t\t\t\ttarget: \"ES2022\",\n\t\t\t\t\t},\n\t\t\t\t\tinclude: [\"src\"],\n\t\t\t\t}),\n\t\t\t},\n\t\t};\n\t},\n});\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,4BAA4B;AACrC,SAAS,yBAAyB;AAClC,SAAS,4BAA4B;AACrC,SAAS,sBAAsB;AAC/B,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AAEhC,MAAM,kBAAkB,KAAK,YAAY;AAAA,EAC/C,OAAO;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACA,QAAQ,EAAE,QAAQ,GAAG;AACpB,WAAO;AAAA,MACN,QAAQ;AAAA,QACP,qBAAqB;AAAA,UACpB,UAAU;AAAA,YACT,iBAAiB;AAAA,cAChB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAeX;AAAA,UACD;AAAA,QACD,CAAC;AAAA,QACD,kBAAkB;AAAA,UACjB,OAAO;AAAA,YACN,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAcZ,YAAY;AAAA;AAAA;AAAA,YAGZ,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAMb;AAAA,QACD,CAAC;AAAA,QACD,eAAe;AAAA,UACd,SAAS,CAAC,MAAM;AAAA,QACjB,CAAC;AAAA,QACD,qBAAqB;AAAA,UACpB,MAAM,CAAC,EAAE,MAAM,cAAc,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC;AAAA,QAC5D,CAAC;AAAA,QACD,kBAAkB;AAAA,UACjB,SAAS,CAAC,MAAM;AAAA,QACjB,CAAC;AAAA,QACD,iBAAiB;AAAA,UAChB,YAAY;AAAA,YACX,iBAAiB,uBAAuB,YAAY;AAAA,YACpD,OAAO,CAAC,MAAM;AAAA,YACd,MAAM;AAAA,YACN,SAAS;AAAA,cACR,KAAK;AAAA,YACN;AAAA,UACD;AAAA,QACD,CAAC;AAAA,QACD,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;AAAA,QAChE,YAAY;AAAA,UACX,WAAW,QAAQ,MAChB;AAAA,YACA;AAAA,cACC,MAAM;AAAA,cACN,eAAe;AAAA,cACf,SAAS,QAAQ;AAAA,cACjB,SAAS;AAAA,cACT,WAAW,CAAC,qBAAqB;AAAA,cACjC,MAAM;AAAA,YACP;AAAA,UACD,IACC,CAAC;AAAA,UACJ,UAAU;AAAA,YACT,mBAAmB;AAAA,UACpB;AAAA,UACA,OAAO;AAAA,YACN;AAAA,cACC,QAAQ;AAAA,cACR,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,MAAM;AAAA,YACP;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACN,iBAAiB,KAAK,UAAU;AAAA,UAC/B,iBAAiB;AAAA,YAChB,aAAa;AAAA,YACb,gBAAgB;AAAA,YAChB,iBAAiB;AAAA,YACjB,QAAQ;AAAA,YACR,kBAAkB;AAAA,YAClB,QAAQ;AAAA,YACR,mBAAmB;AAAA,YACnB,cAAc;AAAA,YACd,WAAW;AAAA,YACX,QAAQ;AAAA,YACR,QAAQ;AAAA,UACT;AAAA,UACA,SAAS,CAAC,KAAK;AAAA,QAChB,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD,CAAC;","names":[]}
@@ -11,6 +11,7 @@ declare const blockVSCode: create.BlockWithAddons<{
11
11
  } & Record<string, unknown>)[] | undefined;
12
12
  }, {
13
13
  description: string;
14
+ access: "public" | "restricted";
14
15
  directory: string;
15
16
  email: {
16
17
  github: string;
@@ -19,7 +20,6 @@ declare const blockVSCode: create.BlockWithAddons<{
19
20
  title: string;
20
21
  owner: string;
21
22
  repository: string;
22
- access?: "public" | "restricted" | undefined;
23
23
  author?: string | undefined;
24
24
  bin?: string | undefined;
25
25
  contributors?: {
@@ -52,6 +52,7 @@ declare const blockVSCode: create.BlockWithAddons<{
52
52
  devDependencies?: Record<string, string> | undefined;
53
53
  scripts?: Record<string, string> | undefined;
54
54
  } | undefined;
55
+ usage?: string | undefined;
55
56
  version?: string | undefined;
56
57
  }>;
57
58
 
@@ -1,14 +1,18 @@
1
1
  import * as create from 'create';
2
2
 
3
3
  declare const blockVitest: create.BlockWithAddons<{
4
+ env: Record<string, string>;
5
+ exclude: string[];
6
+ flags: string[];
4
7
  coverage: {
5
- directory: string;
8
+ directory?: string | undefined;
9
+ exclude?: string[] | undefined;
6
10
  flags?: string | undefined;
11
+ include?: string[] | undefined;
7
12
  };
8
- exclude: string[];
9
- include: string[];
10
13
  }, {
11
14
  description: string;
15
+ access: "public" | "restricted";
12
16
  directory: string;
13
17
  email: {
14
18
  github: string;
@@ -17,7 +21,6 @@ declare const blockVitest: create.BlockWithAddons<{
17
21
  title: string;
18
22
  owner: string;
19
23
  repository: string;
20
- access?: "public" | "restricted" | undefined;
21
24
  author?: string | undefined;
22
25
  bin?: string | undefined;
23
26
  contributors?: {
@@ -50,6 +53,7 @@ declare const blockVitest: create.BlockWithAddons<{
50
53
  devDependencies?: Record<string, string> | undefined;
51
54
  scripts?: Record<string, string> | undefined;
52
55
  } | undefined;
56
+ usage?: string | undefined;
53
57
  version?: string | undefined;
54
58
  }>;
55
59
 
@@ -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,9 +1,9 @@
1
1
  var name = "create-typescript-app";
2
- var version = "1.79.0";
3
- var description = "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. ❤️‍🔥";
2
+ var version = "1.81.0";
3
+ var description = "Quickstart-friendly TypeScript template with comprehensive, configurable, opinionated tooling. 🎁";
4
4
  var repository = {
5
5
  type: "git",
6
- url: "https://github.com/JoshuaKGoldberg/create-typescript-app"
6
+ url: "git+https://github.com/JoshuaKGoldberg/create-typescript-app.git"
7
7
  };
8
8
  var license = "MIT";
9
9
  var author = {
@@ -40,11 +40,12 @@ var dependencies = {
40
40
  "@clack/prompts": "^0.9.0",
41
41
  "@prettier/sync": "^0.5.2",
42
42
  chalk: "^5.4.1",
43
- create: "0.1.0-alpha.8",
43
+ create: "0.1.0-alpha.11",
44
44
  "cspell-populate-words": "^0.3.0",
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",
@@ -83,7 +85,7 @@ var devDependencies = {
83
85
  "all-contributors-cli": "6.26.1",
84
86
  c8: "10.1.3",
85
87
  "console-fail-test": "0.5.0",
86
- "create-testers": "0.1.0-alpha.8",
88
+ "create-testers": "0.1.0-alpha.11",
87
89
  cspell: "8.17.1",
88
90
  eslint: "9.17.0",
89
91
  "eslint-plugin-jsdoc": "50.6.1",
@@ -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<{
@@ -24,7 +24,7 @@ declare const presetCommon: create.Preset<{
24
24
  login: string;
25
25
  profile: string;
26
26
  }>, "many">>;
27
- description: zod.ZodString;
27
+ description: zod.ZodDefault<zod.ZodString>;
28
28
  directory: zod.ZodString;
29
29
  documentation: zod.ZodOptional<zod.ZodString>;
30
30
  email: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, 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<{
@@ -24,7 +24,7 @@ declare const presetEverything: create.Preset<{
24
24
  login: string;
25
25
  profile: string;
26
26
  }>, "many">>;
27
- description: zod.ZodString;
27
+ description: zod.ZodDefault<zod.ZodString>;
28
28
  directory: zod.ZodString;
29
29
  documentation: zod.ZodOptional<zod.ZodString>;
30
30
  email: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, 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<{
@@ -24,7 +24,7 @@ declare const presetMinimal: create.Preset<{
24
24
  login: string;
25
25
  profile: string;
26
26
  }>, "many">>;
27
- description: zod.ZodString;
27
+ description: zod.ZodDefault<zod.ZodString>;
28
28
  directory: zod.ZodString;
29
29
  documentation: zod.ZodOptional<zod.ZodString>;
30
30
  email: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, 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<{
@@ -24,7 +24,7 @@ declare const template: create.Template<{
24
24
  login: string;
25
25
  profile: string;
26
26
  }>, "many">>;
27
- description: zod.ZodString;
27
+ description: zod.ZodDefault<zod.ZodString>;
28
28
  directory: zod.ZodString;
29
29
  documentation: zod.ZodOptional<zod.ZodString>;
30
30
  email: zod.ZodEffects<zod.ZodUnion<[zod.ZodString, 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
 
@@ -1,8 +1,8 @@
1
- import { createTemplate } from "create";
1
+ import { base } from "./base.js";
2
2
  import { presetCommon } from "./presets/presetCommon.js";
3
3
  import { presetEverything } from "./presets/presetEverything.js";
4
4
  import { presetMinimal } from "./presets/presetMinimal.js";
5
- const template = createTemplate({
5
+ const template = base.createTemplate({
6
6
  about: {
7
7
  name: "TypeScript App"
8
8
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/template.ts"],"sourcesContent":["import { createTemplate } from \"create\";\n\nimport { presetCommon } from \"./presets/presetCommon.js\";\nimport { presetEverything } from \"./presets/presetEverything.js\";\nimport { presetMinimal } from \"./presets/presetMinimal.js\";\n\nexport const template = createTemplate({\n\tabout: {\n\t\tname: \"TypeScript App\",\n\t},\n\tpresets: [presetMinimal, presetCommon, presetEverything],\n\tsuggested: presetCommon,\n});\n\nexport default template;\n"],"mappings":"AAAA,SAAS,sBAAsB;AAE/B,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAEvB,MAAM,WAAW,eAAe;AAAA,EACtC,OAAO;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACA,SAAS,CAAC,eAAe,cAAc,gBAAgB;AAAA,EACvD,WAAW;AACZ,CAAC;AAED,IAAO,mBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/next/template.ts"],"sourcesContent":["import { base } from \"./base.js\";\nimport { presetCommon } from \"./presets/presetCommon.js\";\nimport { presetEverything } from \"./presets/presetEverything.js\";\nimport { presetMinimal } from \"./presets/presetMinimal.js\";\n\nexport const template = base.createTemplate({\n\tabout: {\n\t\tname: \"TypeScript App\",\n\t},\n\tpresets: [presetMinimal, presetCommon, presetEverything],\n\tsuggested: presetCommon,\n});\n\nexport default template;\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAEvB,MAAM,WAAW,KAAK,eAAe;AAAA,EAC3C,OAAO;AAAA,IACN,MAAM;AAAA,EACP;AAAA,EACA,SAAS,CAAC,eAAe,cAAc,gBAAgB;AAAA,EACvD,WAAW;AACZ,CAAC;AAED,IAAO,mBAAQ;","names":[]}
@@ -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,18 +25,22 @@ 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()
34
36
  ),
35
37
  guide: readGuide,
36
38
  owner: async () => (await gitDefaults())?.organization ?? (await packageAuthor()).author,
37
- repository: async () => promptedOptions?.repository ?? (await gitDefaults())?.name ?? (await packageData()).name,
38
- ...readDefaultsFromReadme()
39
+ repository: async () => promptedOptions?.repository ?? (await gitDefaults())?.name ?? (await packageData()).name ?? promptedOptions?.directory,
40
+ ...readDefaultsFromReadme(
41
+ readme,
42
+ () => Promise.resolve(promptedOptions?.repository)
43
+ )
39
44
  };
40
45
  }
41
46
  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\tpromptedOptions?.directory,\n\t\t...readDefaultsFromReadme(readme, () =>\n\t\t\tPromise.resolve(promptedOptions?.repository),\n\t\t),\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,QACtB,iBAAiB;AAAA,IAClB,GAAG;AAAA,MAAuB;AAAA,MAAQ,MACjC,QAAQ,QAAQ,iBAAiB,UAAU;AAAA,IAC5C;AAAA,EACD;AACD;","names":[]}
@@ -1,4 +1,4 @@
1
- declare function readDefaultsFromReadme(): {
1
+ declare function readDefaultsFromReadme(readme: () => Promise<string>, repository: () => Promise<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,8 @@
1
1
  import lazyValue from "lazy-value";
2
- import { readFileSafe } from "../../readFileSafe.js";
2
+ import { titleCase } from "title-case";
3
3
  import { readLogoSizing } from "../readLogoSizing.js";
4
- function readDefaultsFromReadme() {
5
- const readme = lazyValue(async () => await readFileSafe("README.md", ""));
4
+ import { getUsageFromReadme } from "./getUsageFromReadme.js";
5
+ function readDefaultsFromReadme(readme, repository) {
6
6
  const imageTag = lazyValue(
7
7
  async () => /\n<img.+src=.+>/.exec(await readme())?.[0]
8
8
  );
@@ -24,7 +24,22 @@ function readDefaultsFromReadme() {
24
24
  },
25
25
  title: async () => {
26
26
  const text = await readme();
27
- return (/^<h1\s+align="center">(.+)<\/h1>/.exec(text) ?? /^# (.+)/.exec(text))?.[1];
27
+ const fromText = (/^<h1\s+align="center">(.+)<\/h1>/.exec(text) ?? /^# (.+)/.exec(text))?.[1];
28
+ if (fromText) {
29
+ return fromText;
30
+ }
31
+ const repositoryValue = await repository();
32
+ return repositoryValue && titleCase(repositoryValue).replaceAll("Typescript", "TypeScript").replaceAll("-", " ");
33
+ },
34
+ usage: async () => {
35
+ return getUsageFromReadme(await readme()) ?? `\`\`\`shell
36
+ npm i ${await repository()}
37
+ \`\`\`
38
+ \`\`\`ts
39
+ import { greet } from "${await repository()}";
40
+
41
+ greet("Hello, world! \u{1F496}");
42
+ \`\`\``;
28
43
  }
29
44
  };
30
45
  }