create-typescript-app 2.51.0 → 2.52.1

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 (149) hide show
  1. package/lib/blocks/blockAllContributors.d.ts +2 -2
  2. package/lib/blocks/blockAreTheTypesWrong.d.ts +2 -2
  3. package/lib/blocks/blockCSpell.d.ts +2 -2
  4. package/lib/blocks/blockCSpell.d.ts.map +1 -1
  5. package/lib/blocks/blockCTATransitions.d.ts +2 -2
  6. package/lib/blocks/blockCTATransitions.d.ts.map +1 -1
  7. package/lib/blocks/blockCodecov.d.ts +2 -2
  8. package/lib/blocks/blockContributingDocs.d.ts +2 -2
  9. package/lib/blocks/blockContributorCovenant.d.ts +2 -2
  10. package/lib/blocks/blockContributorCovenant.d.ts.map +1 -1
  11. package/lib/blocks/blockDevelopmentDocs.d.ts +3 -3
  12. package/lib/blocks/blockESLint.d.ts +14 -19
  13. package/lib/blocks/blockESLint.d.ts.map +1 -1
  14. package/lib/blocks/blockESLint.js +23 -27
  15. package/lib/blocks/blockESLint.js.map +1 -1
  16. package/lib/blocks/blockESLintComments.d.ts.map +1 -1
  17. package/lib/blocks/blockESLintComments.js +6 -2
  18. package/lib/blocks/blockESLintComments.js.map +1 -1
  19. package/lib/blocks/blockESLintJSDoc.d.ts +2 -2
  20. package/lib/blocks/blockESLintJSDoc.d.ts.map +1 -1
  21. package/lib/blocks/blockESLintJSDoc.js +10 -6
  22. package/lib/blocks/blockESLintJSDoc.js.map +1 -1
  23. package/lib/blocks/blockESLintJSONC.d.ts +2 -2
  24. package/lib/blocks/blockESLintJSONC.d.ts.map +1 -1
  25. package/lib/blocks/blockESLintJSONC.js +4 -1
  26. package/lib/blocks/blockESLintJSONC.js.map +1 -1
  27. package/lib/blocks/blockESLintMarkdown.d.ts +2 -2
  28. package/lib/blocks/blockESLintMarkdown.d.ts.map +1 -1
  29. package/lib/blocks/blockESLintMarkdown.js +4 -1
  30. package/lib/blocks/blockESLintMarkdown.js.map +1 -1
  31. package/lib/blocks/blockESLintMoreStyling.d.ts +2 -2
  32. package/lib/blocks/blockESLintMoreStyling.d.ts.map +1 -1
  33. package/lib/blocks/blockESLintMoreStyling.js +17 -13
  34. package/lib/blocks/blockESLintMoreStyling.js.map +1 -1
  35. package/lib/blocks/blockESLintNode.d.ts +2 -2
  36. package/lib/blocks/blockESLintNode.d.ts.map +1 -1
  37. package/lib/blocks/blockESLintNode.js +10 -2
  38. package/lib/blocks/blockESLintNode.js.map +1 -1
  39. package/lib/blocks/blockESLintPackageJson.d.ts +2 -2
  40. package/lib/blocks/blockESLintPackageJson.d.ts.map +1 -1
  41. package/lib/blocks/blockESLintPackageJson.js +4 -1
  42. package/lib/blocks/blockESLintPackageJson.js.map +1 -1
  43. package/lib/blocks/blockESLintPerfectionist.d.ts +2 -2
  44. package/lib/blocks/blockESLintPerfectionist.d.ts.map +1 -1
  45. package/lib/blocks/blockESLintPerfectionist.js +11 -7
  46. package/lib/blocks/blockESLintPerfectionist.js.map +1 -1
  47. package/lib/blocks/blockESLintPlugin.d.ts +2 -2
  48. package/lib/blocks/blockESLintPlugin.d.ts.map +1 -1
  49. package/lib/blocks/blockESLintPlugin.js +5 -1
  50. package/lib/blocks/blockESLintPlugin.js.map +1 -1
  51. package/lib/blocks/blockESLintRegexp.d.ts +2 -2
  52. package/lib/blocks/blockESLintRegexp.d.ts.map +1 -1
  53. package/lib/blocks/blockESLintRegexp.js +6 -2
  54. package/lib/blocks/blockESLintRegexp.js.map +1 -1
  55. package/lib/blocks/blockESLintYML.d.ts +2 -2
  56. package/lib/blocks/blockExampleFiles.d.ts +2 -2
  57. package/lib/blocks/blockFunding.d.ts +2 -2
  58. package/lib/blocks/blockGitHubActionsCI.d.ts +2 -2
  59. package/lib/blocks/blockGitHubApps.d.ts +2 -2
  60. package/lib/blocks/blockGitHubApps.d.ts.map +1 -1
  61. package/lib/blocks/blockGitHubIssueTemplates.d.ts +2 -2
  62. package/lib/blocks/blockGitHubIssueTemplates.d.ts.map +1 -1
  63. package/lib/blocks/blockGitHubPRTemplate.d.ts +2 -2
  64. package/lib/blocks/blockGitHubPRTemplate.d.ts.map +1 -1
  65. package/lib/blocks/blockGitignore.d.ts +2 -2
  66. package/lib/blocks/blockKnip.d.ts +2 -2
  67. package/lib/blocks/blockKnip.d.ts.map +1 -1
  68. package/lib/blocks/blockMITLicense.d.ts +2 -2
  69. package/lib/blocks/blockMITLicense.d.ts.map +1 -1
  70. package/lib/blocks/blockMain.d.ts +2 -2
  71. package/lib/blocks/blockMain.d.ts.map +1 -1
  72. package/lib/blocks/blockMarkdownlint.d.ts +2 -2
  73. package/lib/blocks/blockMarkdownlint.d.ts.map +1 -1
  74. package/lib/blocks/blockNcc.d.ts +2 -2
  75. package/lib/blocks/blockNcc.d.ts.map +1 -1
  76. package/lib/blocks/blockNvmrc.d.ts +2 -2
  77. package/lib/blocks/blockNvmrc.d.ts.map +1 -1
  78. package/lib/blocks/blockOctoGuide.d.ts +2 -2
  79. package/lib/blocks/blockOctoGuide.d.ts.map +1 -1
  80. package/lib/blocks/blockOctoGuideStrict.d.ts +2 -2
  81. package/lib/blocks/blockOctoGuideStrict.d.ts.map +1 -1
  82. package/lib/blocks/blockPackageJson.d.ts +2 -2
  83. package/lib/blocks/blockPackageJson.d.ts.map +1 -1
  84. package/lib/blocks/blockPackageJson.js +2 -5
  85. package/lib/blocks/blockPackageJson.js.map +1 -1
  86. package/lib/blocks/blockPnpmDedupe.d.ts +2 -2
  87. package/lib/blocks/blockPnpmDedupe.d.ts.map +1 -1
  88. package/lib/blocks/blockPrettier.d.ts +2 -2
  89. package/lib/blocks/blockPrettier.d.ts.map +1 -1
  90. package/lib/blocks/blockPrettierPluginCurly.d.ts +2 -2
  91. package/lib/blocks/blockPrettierPluginCurly.d.ts.map +1 -1
  92. package/lib/blocks/blockPrettierPluginPackageJson.d.ts +2 -2
  93. package/lib/blocks/blockPrettierPluginSentencesPerLine.d.ts +2 -2
  94. package/lib/blocks/blockPrettierPluginSh.d.ts +2 -2
  95. package/lib/blocks/blockPrettierPluginSh.d.ts.map +1 -1
  96. package/lib/blocks/blockREADME.d.ts +3 -3
  97. package/lib/blocks/blockReleaseIt.d.ts +2 -2
  98. package/lib/blocks/blockRemoveDependencies.d.ts +2 -2
  99. package/lib/blocks/blockRemoveFiles.d.ts +2 -2
  100. package/lib/blocks/blockRemoveWorkflows.d.ts +2 -2
  101. package/lib/blocks/blockRemoveWorkflows.d.ts.map +1 -1
  102. package/lib/blocks/blockRenovate.d.ts +2 -2
  103. package/lib/blocks/blockRenovate.d.ts.map +1 -1
  104. package/lib/blocks/blockRepositoryBranchRuleset.d.ts +2 -2
  105. package/lib/blocks/blockRepositoryBranchRuleset.d.ts.map +1 -1
  106. package/lib/blocks/blockRepositoryLabels.d.ts +2 -2
  107. package/lib/blocks/blockRepositoryLabels.d.ts.map +1 -1
  108. package/lib/blocks/blockRepositorySecrets.d.ts +2 -2
  109. package/lib/blocks/blockRepositorySecrets.d.ts.map +1 -1
  110. package/lib/blocks/blockRepositorySettings.d.ts +2 -2
  111. package/lib/blocks/blockRepositorySettings.d.ts.map +1 -1
  112. package/lib/blocks/blockSecurityDocs.d.ts +2 -2
  113. package/lib/blocks/blockTSDown.d.ts +2 -2
  114. package/lib/blocks/blockTSDown.d.ts.map +1 -1
  115. package/lib/blocks/blockTemplatedWith.d.ts +2 -2
  116. package/lib/blocks/blockTemplatedWith.d.ts.map +1 -1
  117. package/lib/blocks/blockTypeScript.d.ts +2 -2
  118. package/lib/blocks/blockTypeScript.d.ts.map +1 -1
  119. package/lib/blocks/blockVSCode.d.ts +2 -2
  120. package/lib/blocks/blockVSCode.d.ts.map +1 -1
  121. package/lib/blocks/blockVitest.d.ts +2 -2
  122. package/lib/blocks/blockVitest.d.ts.map +1 -1
  123. package/lib/blocks/blockVitest.js +3 -3
  124. package/lib/blocks/blockVitest.js.map +1 -1
  125. package/lib/blocks/blockWebExt.d.ts +2 -2
  126. package/lib/blocks/blockWebExt.d.ts.map +1 -1
  127. package/lib/blocks/eslint/getScriptFileExtension.d.ts +8 -0
  128. package/lib/blocks/eslint/getScriptFileExtension.d.ts.map +1 -0
  129. package/lib/blocks/eslint/getScriptFileExtension.js +8 -0
  130. package/lib/blocks/eslint/getScriptFileExtension.js.map +1 -0
  131. package/lib/blocks/eslint/mergeAllExtensions.d.ts +18 -0
  132. package/lib/blocks/eslint/mergeAllExtensions.d.ts.map +1 -0
  133. package/lib/blocks/eslint/mergeAllExtensions.js +48 -0
  134. package/lib/blocks/eslint/mergeAllExtensions.js.map +1 -0
  135. package/lib/blocks/eslint/schemas.d.ts +23 -10
  136. package/lib/blocks/eslint/schemas.d.ts.map +1 -1
  137. package/lib/blocks/eslint/schemas.js +5 -3
  138. package/lib/blocks/eslint/schemas.js.map +1 -1
  139. package/lib/blocks/index.d.ts +64 -69
  140. package/lib/presets/common.d.ts +69 -69
  141. package/lib/presets/common.d.ts.map +1 -1
  142. package/lib/presets/everything.d.ts +69 -69
  143. package/lib/presets/everything.d.ts.map +1 -1
  144. package/lib/presets/index.d.ts +203 -203
  145. package/lib/presets/minimal.d.ts +69 -69
  146. package/lib/presets/minimal.d.ts.map +1 -1
  147. package/lib/schemas.d.ts.map +1 -1
  148. package/lib/template.d.ts +67 -67
  149. package/package.json +2 -3
@@ -1,12 +1,20 @@
1
1
  import { base } from "../base.js";
2
+ import { getScriptFileExtension } from "./eslint/getScriptFileExtension.js";
2
3
  import { blockESLint } from "./blockESLint.js";
3
4
 
4
5
  //#region src/blocks/blockESLintNode.ts
5
6
  const blockESLintNode = base.createBlock({
6
7
  about: { name: "ESLint Node Plugin" },
7
- produce() {
8
+ produce({ options }) {
8
9
  return { addons: [blockESLint({
9
- extensions: ["n.configs[\"flat/recommended\"]", {
10
+ extensions: [{
11
+ extends: ["n.configs[\"flat/recommended\"]"],
12
+ files: [getScriptFileExtension(options)],
13
+ rules: [{
14
+ comment: "https://github.com/eslint-community/eslint-plugin-n/issues/472",
15
+ entries: { "n/no-unpublished-bin": "off" }
16
+ }]
17
+ }, {
10
18
  extends: ["tseslint.configs.disableTypeChecked"],
11
19
  files: ["**/*.md/*.ts"],
12
20
  rules: { "n/no-missing-import": "off" }
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintNode.js","names":[],"sources":["../../src/blocks/blockESLintNode.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\n\nexport const blockESLintNode = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Node Plugin\",\n\t},\n\tproduce() {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockESLint({\n\t\t\t\t\textensions: [\n\t\t\t\t\t\t'n.configs[\"flat/recommended\"]',\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\textends: [\"tseslint.configs.disableTypeChecked\"],\n\t\t\t\t\t\t\tfiles: [\"**/*.md/*.ts\"],\n\t\t\t\t\t\t\trules: { \"n/no-missing-import\": \"off\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\timports: [{ source: \"eslint-plugin-n\", specifier: \"n\" }],\n\t\t\t\t}),\n\t\t\t],\n\t\t};\n\t},\n});\n"],"mappings":";;;;AAGA,MAAa,kBAAkB,KAAK,YAAY;CAC/C,OAAO,EACN,MAAM,sBACN;CACD,UAAU;AACT,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CACX,mCACA;IACC,SAAS,CAAC,sCAAsC;IAChD,OAAO,CAAC,eAAe;IACvB,OAAO,EAAE,uBAAuB,OAAO;IACvC,CACD;GACD,SAAS,CAAC;IAAE,QAAQ;IAAmB,WAAW;IAAK,CAAC;GACxD,CAAC,CACF,EACD;;CAEF,CAAC"}
1
+ {"version":3,"file":"blockESLintNode.js","names":[],"sources":["../../src/blocks/blockESLintNode.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { getScriptFileExtension } from \"./eslint/getScriptFileExtension.js\";\n\nexport const blockESLintNode = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Node Plugin\",\n\t},\n\tproduce({ options }) {\n\t\treturn {\n\t\t\taddons: [\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: ['n.configs[\"flat/recommended\"]'],\n\t\t\t\t\t\t\tfiles: [getScriptFileExtension(options)],\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\tcomment:\n\t\t\t\t\t\t\t\t\t\t\"https://github.com/eslint-community/eslint-plugin-n/issues/472\",\n\t\t\t\t\t\t\t\t\tentries: {\n\t\t\t\t\t\t\t\t\t\t\"n/no-unpublished-bin\": \"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\t{\n\t\t\t\t\t\t\textends: [\"tseslint.configs.disableTypeChecked\"],\n\t\t\t\t\t\t\tfiles: [\"**/*.md/*.ts\"],\n\t\t\t\t\t\t\trules: { \"n/no-missing-import\": \"off\" },\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\timports: [{ source: \"eslint-plugin-n\", specifier: \"n\" }],\n\t\t\t\t}),\n\t\t\t],\n\t\t};\n\t},\n});\n"],"mappings":";;;;;AAIA,MAAa,kBAAkB,KAAK,YAAY;CAC/C,OAAO,EACN,MAAM,sBACN;CACD,QAAQ,EAAE,WAAW;AACpB,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CACX;IACC,SAAS,CAAC,kCAAgC;IAC1C,OAAO,CAAC,uBAAuB,QAAQ,CAAC;IACxC,OAAO,CACN;KACC,SACC;KACD,SAAS,EACR,wBAAwB,OACxB;KACD,CACD;IACD,EACD;IACC,SAAS,CAAC,sCAAsC;IAChD,OAAO,CAAC,eAAe;IACvB,OAAO,EAAE,uBAAuB,OAAO;IACvC,CACD;GACD,SAAS,CAAC;IAAE,QAAQ;IAAmB,WAAW;IAAK,CAAC;GACxD,CAAC,CACF,EACD;;CAEF,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum113 from "bingo-stratum";
1
+ import * as bingo_stratum13 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockESLintPackageJson.d.ts
4
- declare const blockESLintPackageJson: bingo_stratum113.BlockWithoutAddons<{
4
+ declare const blockESLintPackageJson: bingo_stratum13.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintPackageJson.d.ts","names":[],"sources":["../../src/blocks/blockESLintPackageJson.ts"],"sourcesContent":[],"mappings":";;;cAOa,yCAAsB;;;EAAtB,SAAA,EAAA,MAAA;;;;;;;;;;EAAsB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockESLintPackageJson.d.ts","names":[],"sources":["../../src/blocks/blockESLintPackageJson.ts"],"sourcesContent":[],"mappings":";;;cAOa,wCAAsB;;;EAAtB,SAAA,EAAA,MAAA;;;;;;;;;;EAAsB,KAAA,EAAA"}
@@ -10,7 +10,10 @@ const blockESLintPackageJson = base.createBlock({
10
10
  about: { name: "ESLint package.json Plugin" },
11
11
  produce() {
12
12
  return { addons: [blockESLint({
13
- extensions: ["packageJson.configs.recommended"],
13
+ extensions: [{
14
+ extends: ["packageJson.configs.recommended"],
15
+ files: ["package.json"]
16
+ }],
14
17
  imports: [{
15
18
  source: "eslint-plugin-package-json",
16
19
  specifier: "packageJson"
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintPackageJson.js","names":[],"sources":["../../src/blocks/blockESLintPackageJson.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockRemoveDependencies } from \"./blockRemoveDependencies.js\";\nimport { blockRemoveFiles } from \"./blockRemoveFiles.js\";\nimport { blockRemoveWorkflows } from \"./blockRemoveWorkflows.js\";\n\nexport const blockESLintPackageJson = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint package.json Plugin\",\n\t},\n\tproduce() {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockESLint({\n\t\t\t\t\textensions: [\"packageJson.configs.recommended\"],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsource: \"eslint-plugin-package-json\",\n\t\t\t\t\t\t\tspecifier: \"packageJson\",\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\tscripts: {\n\t\t\t\t\t\t\t\"lint:package-json\": undefined,\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},\n\ttransition() {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockRemoveFiles({\n\t\t\t\t\tfiles: [\".npmpackagejsonlintrc*\"],\n\t\t\t\t}),\n\t\t\t\tblockRemoveDependencies({\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t\"npm-package-json-lint\",\n\t\t\t\t\t\t\"npm-package-json-lint-config-default\",\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t\tblockRemoveWorkflows({\n\t\t\t\t\tworkflows: [\"lint-package-json\"],\n\t\t\t\t}),\n\t\t\t],\n\t\t};\n\t},\n});\n"],"mappings":";;;;;;;;AAOA,MAAa,yBAAyB,KAAK,YAAY;CACtD,OAAO,EACN,MAAM,8BACN;CACD,UAAU;AACT,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CAAC,kCAAkC;GAC/C,SAAS,CACR;IACC,QAAQ;IACR,WAAW;IACX,CACD;GACD,CAAC,EACF,iBAAiB,EAChB,YAAY,EACX,SAAS,EACR,qBAAqB,QACrB,EACD,EACD,CAAC,CACF,EACD;;CAEF,aAAa;AACZ,SAAO,EACN,QAAQ;GACP,iBAAiB,EAChB,OAAO,CAAC,yBAAyB,EACjC,CAAC;GACF,wBAAwB,EACvB,cAAc,CACb,yBACA,uCACA,EACD,CAAC;GACF,qBAAqB,EACpB,WAAW,CAAC,oBAAoB,EAChC,CAAC;GACF,EACD;;CAEF,CAAC"}
1
+ {"version":3,"file":"blockESLintPackageJson.js","names":[],"sources":["../../src/blocks/blockESLintPackageJson.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockRemoveDependencies } from \"./blockRemoveDependencies.js\";\nimport { blockRemoveFiles } from \"./blockRemoveFiles.js\";\nimport { blockRemoveWorkflows } from \"./blockRemoveWorkflows.js\";\n\nexport const blockESLintPackageJson = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint package.json Plugin\",\n\t},\n\tproduce() {\n\t\treturn {\n\t\t\taddons: [\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: [\"packageJson.configs.recommended\"],\n\t\t\t\t\t\t\tfiles: [\"package.json\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsource: \"eslint-plugin-package-json\",\n\t\t\t\t\t\t\tspecifier: \"packageJson\",\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\tscripts: {\n\t\t\t\t\t\t\t\"lint:package-json\": undefined,\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},\n\ttransition() {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockRemoveFiles({\n\t\t\t\t\tfiles: [\".npmpackagejsonlintrc*\"],\n\t\t\t\t}),\n\t\t\t\tblockRemoveDependencies({\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t\"npm-package-json-lint\",\n\t\t\t\t\t\t\"npm-package-json-lint-config-default\",\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t\tblockRemoveWorkflows({\n\t\t\t\t\tworkflows: [\"lint-package-json\"],\n\t\t\t\t}),\n\t\t\t],\n\t\t};\n\t},\n});\n"],"mappings":";;;;;;;;AAOA,MAAa,yBAAyB,KAAK,YAAY;CACtD,OAAO,EACN,MAAM,8BACN;CACD,UAAU;AACT,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CACX;IACC,SAAS,CAAC,kCAAkC;IAC5C,OAAO,CAAC,eAAe;IACvB,CACD;GACD,SAAS,CACR;IACC,QAAQ;IACR,WAAW;IACX,CACD;GACD,CAAC,EACF,iBAAiB,EAChB,YAAY,EACX,SAAS,EACR,qBAAqB,QACrB,EACD,EACD,CAAC,CACF,EACD;;CAEF,aAAa;AACZ,SAAO,EACN,QAAQ;GACP,iBAAiB,EAChB,OAAO,CAAC,yBAAyB,EACjC,CAAC;GACF,wBAAwB,EACvB,cAAc,CACb,yBACA,uCACA,EACD,CAAC;GACF,qBAAqB,EACpB,WAAW,CAAC,oBAAoB,EAChC,CAAC;GACF,EACD;;CAEF,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum93 from "bingo-stratum";
1
+ import * as bingo_stratum15 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockESLintPerfectionist.d.ts
4
- declare const blockESLintPerfectionist: bingo_stratum93.BlockWithoutAddons<{
4
+ declare const blockESLintPerfectionist: bingo_stratum15.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintPerfectionist.d.ts","names":[],"sources":["../../src/blocks/blockESLintPerfectionist.ts"],"sourcesContent":[],"mappings":";;;cAGa,0CAAwB;;;EAAxB,SAAA,EAAA,MAAA;;;;;;;;;;EAAwB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockESLintPerfectionist.d.ts","names":[],"sources":["../../src/blocks/blockESLintPerfectionist.ts"],"sourcesContent":[],"mappings":";;;cAIa,0CAAwB;;;EAAxB,SAAA,EAAA,MAAA;;;;;;;;;;EAAwB,KAAA,EAAA"}
@@ -1,20 +1,24 @@
1
1
  import { base } from "../base.js";
2
+ import { getScriptFileExtension } from "./eslint/getScriptFileExtension.js";
2
3
  import { blockESLint } from "./blockESLint.js";
3
4
 
4
5
  //#region src/blocks/blockESLintPerfectionist.ts
5
6
  const blockESLintPerfectionist = base.createBlock({
6
7
  about: { name: "ESLint Perfectionist Plugin" },
7
- produce() {
8
+ produce({ options }) {
8
9
  return { addons: [blockESLint({
9
- extensions: [`perfectionist.configs["recommended-natural"]`],
10
+ extensions: [{
11
+ extends: [`perfectionist.configs["recommended-natural"]`],
12
+ files: [getScriptFileExtension(options)],
13
+ settings: { perfectionist: {
14
+ partitionByComment: true,
15
+ type: "natural"
16
+ } }
17
+ }],
10
18
  imports: [{
11
19
  source: "eslint-plugin-perfectionist",
12
20
  specifier: "perfectionist"
13
- }],
14
- settings: { perfectionist: {
15
- partitionByComment: true,
16
- type: "natural"
17
- } }
21
+ }]
18
22
  })] };
19
23
  }
20
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintPerfectionist.js","names":[],"sources":["../../src/blocks/blockESLintPerfectionist.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\n\nexport const blockESLintPerfectionist = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Perfectionist Plugin\",\n\t},\n\tproduce() {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockESLint({\n\t\t\t\t\textensions: [`perfectionist.configs[\"recommended-natural\"]`],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsource: \"eslint-plugin-perfectionist\",\n\t\t\t\t\t\t\tspecifier: \"perfectionist\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tperfectionist: {\n\t\t\t\t\t\t\tpartitionByComment: true,\n\t\t\t\t\t\t\ttype: \"natural\",\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},\n});\n"],"mappings":";;;;AAGA,MAAa,2BAA2B,KAAK,YAAY;CACxD,OAAO,EACN,MAAM,+BACN;CACD,UAAU;AACT,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CAAC,+CAA+C;GAC5D,SAAS,CACR;IACC,QAAQ;IACR,WAAW;IACX,CACD;GACD,UAAU,EACT,eAAe;IACd,oBAAoB;IACpB,MAAM;IACN,EACD;GACD,CAAC,CACF,EACD;;CAEF,CAAC"}
1
+ {"version":3,"file":"blockESLintPerfectionist.js","names":[],"sources":["../../src/blocks/blockESLintPerfectionist.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { getScriptFileExtension } from \"./eslint/getScriptFileExtension.js\";\n\nexport const blockESLintPerfectionist = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Perfectionist Plugin\",\n\t},\n\tproduce({ options }) {\n\t\treturn {\n\t\t\taddons: [\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: [`perfectionist.configs[\"recommended-natural\"]`],\n\t\t\t\t\t\t\tfiles: [getScriptFileExtension(options)],\n\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\tperfectionist: {\n\t\t\t\t\t\t\t\t\tpartitionByComment: true,\n\t\t\t\t\t\t\t\t\ttype: \"natural\",\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\timports: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsource: \"eslint-plugin-perfectionist\",\n\t\t\t\t\t\t\tspecifier: \"perfectionist\",\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},\n});\n"],"mappings":";;;;;AAIA,MAAa,2BAA2B,KAAK,YAAY;CACxD,OAAO,EACN,MAAM,+BACN;CACD,QAAQ,EAAE,WAAW;AACpB,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CACX;IACC,SAAS,CAAC,+CAA+C;IACzD,OAAO,CAAC,uBAAuB,QAAQ,CAAC;IACxC,UAAU,EACT,eAAe;KACd,oBAAoB;KACpB,MAAM;KACN,EACD;IACD,CACD;GACD,SAAS,CACR;IACC,QAAQ;IACR,WAAW;IACX,CACD;GACD,CAAC,CACF,EACD;;CAEF,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum94 from "bingo-stratum";
1
+ import * as bingo_stratum17 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockESLintPlugin.d.ts
4
- declare const blockESLintPlugin: bingo_stratum94.BlockWithAddons<{
4
+ declare const blockESLintPlugin: bingo_stratum17.BlockWithAddons<{
5
5
  configEmoji?: [string, string][] | undefined;
6
6
  }, {
7
7
  access: "public" | "restricted";
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintPlugin.d.ts","names":[],"sources":["../../src/blocks/blockESLintPlugin.ts"],"sourcesContent":[],"mappings":";;;cAaa,mCAAiB;;;EAAjB,MAAA,EAAA,QAAA,GAAA,YA2QX;;;;;;;;;;IA3Q4B,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockESLintPlugin.d.ts","names":[],"sources":["../../src/blocks/blockESLintPlugin.ts"],"sourcesContent":[],"mappings":";;;cAca,mCAAiB;;;EAAjB,MAAA,EAAA,QAAA,GAAA,YAgRX;;;;;;;;;;IAhR4B,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
@@ -5,6 +5,7 @@ import { blockGitHubActionsCI } from "./blockGitHubActionsCI.js";
5
5
  import { blockPackageJson } from "./blockPackageJson.js";
6
6
  import { blockDevelopmentDocs } from "./blockDevelopmentDocs.js";
7
7
  import { blockCSpell } from "./blockCSpell.js";
8
+ import { getScriptFileExtension } from "./eslint/getScriptFileExtension.js";
8
9
  import { zConfigEmoji } from "./eslint/schemas.js";
9
10
  import { blockESLint } from "./blockESLint.js";
10
11
  import { blockREADME } from "./blockREADME.js";
@@ -40,7 +41,10 @@ pnpm build:docs
40
41
  Linting: { contents: { items: [`- \`pnpm lint:docs\` ([eslint-doc-generator](https://github.com/bmish/eslint-doc-generator)): Generates and validates documentation for ESLint rules`] } }
41
42
  } }),
42
43
  blockESLint({
43
- extensions: ["eslintPlugin.configs[\"flat/recommended\"]"],
44
+ extensions: [{
45
+ extends: ["eslintPlugin.configs[\"flat/recommended\"]"],
46
+ files: [getScriptFileExtension(options)]
47
+ }],
44
48
  ignores: [configFileName, "docs/rules/*/*.ts"],
45
49
  imports: [{
46
50
  source: {
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintPlugin.js","names":[],"sources":["../../src/blocks/blockESLintPlugin.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockCSpell } from \"./blockCSpell.js\";\nimport { blockDevelopmentDocs } from \"./blockDevelopmentDocs.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { blockGitHubActionsCI } from \"./blockGitHubActionsCI.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockREADME } from \"./blockREADME.js\";\nimport { blockVitest } from \"./blockVitest.js\";\nimport { blockESLintPluginIntake } from \"./eslint/blockESLintPluginIntake.js\";\nimport { zConfigEmoji } from \"./eslint/schemas.js\";\nimport { intakeFile } from \"./intake/intakeFile.js\";\nimport { CommandPhase } from \"./phases.js\";\n\nexport const blockESLintPlugin = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Plugin\",\n\t},\n\taddons: {\n\t\tconfigEmoji: zConfigEmoji,\n\t},\n\tintake({ files }) {\n\t\tconst docGeneratorConfigRaw = intakeFile(files, [\n\t\t\t[\".eslint-doc-generatorrc.js\", \".eslint-doc-generatorrc.mjs\"],\n\t\t]);\n\n\t\treturn docGeneratorConfigRaw\n\t\t\t? blockESLintPluginIntake(docGeneratorConfigRaw[0])\n\t\t\t: undefined;\n\t},\n\tproduce({ addons, options }) {\n\t\tconst { configEmoji } = addons;\n\t\tconst configFileName = `.eslint-doc-generatorrc.${options.type === \"commonjs\" ? \"mjs\" : \"js\"}`;\n\t\tconst pluginName = options.repository\n\t\t\t.replace(/^eslint-plugin-/, \"\")\n\t\t\t.replaceAll(/-\\w/g, (matched) => matched[1].toUpperCase());\n\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockCSpell({\n\t\t\t\t\twords: [\"eslint-doc-generatorrc\"],\n\t\t\t\t}),\n\t\t\t\tblockDevelopmentDocs({\n\t\t\t\t\tsections: {\n\t\t\t\t\t\tBuilding: {\n\t\t\t\t\t\t\tinnerSections: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcontents: `\nRun [\\`eslint-doc-generator\\`](https://github.com/bmish/eslint-doc-generator) to generate Markdown files documenting rules.\n\n\\`\\`\\`shell\npnpm build:docs\n\\`\\`\\`\n\t\t`,\n\t\t\t\t\t\t\t\t\theading: \"Building Docs\",\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\tLinting: {\n\t\t\t\t\t\t\tcontents: {\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t`- \\`pnpm lint:docs\\` ([eslint-doc-generator](https://github.com/bmish/eslint-doc-generator)): Generates and validates documentation for ESLint rules`,\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\tblockESLint({\n\t\t\t\t\textensions: ['eslintPlugin.configs[\"flat/recommended\"]'],\n\t\t\t\t\tignores: [configFileName, \"docs/rules/*/*.ts\"],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\tpackageName: \"eslint-plugin-eslint-plugin\",\n\t\t\t\t\t\t\t\tversion: \"6.4.0\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tspecifier: \"eslintPlugin\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\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: \"Lint Docs\",\n\t\t\t\t\t\t\tsteps: [\n\t\t\t\t\t\t\t\t{ run: \"pnpm build || exit 0\" },\n\t\t\t\t\t\t\t\t{ run: \"pnpm lint:docs\" },\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\tblockREADME({\n\t\t\t\t\tdefaultUsage: [\n\t\t\t\t\t\t`Add this plugin to the list of plugins in your [ESLint configuration file](https://eslint.org/docs/latest/use/configure/configuration-files):\n\n\\`\\`\\`shell\nnpm i ${options.repository} -D\n\\`\\`\\`\n\n\\`\\`\\`ts\nimport ${pluginName} from \"${options.repository}\";\n\nexport default [\n\t// (other plugins)\n\t${pluginName}.configs.recommended, // 👈\n];\n\\`\\`\\`\n\n### Rules\n\nThese are all set to \\`\"error\"\\` in the recommended config:\n\n<!-- begin auto-generated rules list --><!-- end auto-generated rules list -->`,\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\tdependencies: {\n\t\t\t\t\t\t\t\"@typescript-eslint/utils\": \"^8.29.0\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevDependencies: {\n\t\t\t\t\t\t\t\"@typescript-eslint/rule-tester\": \"8.29.1\",\n\t\t\t\t\t\t\t\"eslint-doc-generator\": \"2.1.0\",\n\t\t\t\t\t\t\t\"eslint-plugin-eslint-plugin\": \"6.4.0\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\t\"build:docs\": \"pnpm build --no-dts && eslint-doc-generator\",\n\t\t\t\t\t\t\t\"lint:docs\": \"eslint-doc-generator --check\",\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\tcoverage: {\n\t\t\t\t\t\texclude: [\"src/index.ts\", \"src/rules/index.ts\"],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tfiles: {\n\t\t\t\t[configFileName]: `import prettier from \"prettier\";\n\n/** @type {import('eslint-doc-generator').GenerateOptions} */\nconst config = {\n\t${configEmoji ? `configEmoji: ${JSON.stringify(configEmoji)},\\n\\t` : \"\"}postprocess: async (content, path) =>\n\t\tprettier.format(content, {\n\t\t\t...(await prettier.resolveConfig(path)),\n\t\t\tparser: \"markdown\",\n\t\t}),\n\truleDocTitleFormat: \"name\",\n};\n\nexport default config;\n`,\n\t\t\t},\n\t\t\tscripts: [\n\t\t\t\t{\n\t\t\t\t\tcommands: [\"pnpm build\"],\n\t\t\t\t\tphase: CommandPhase.Build,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcommands: [\"pnpm eslint-doc-generator --init-rule-docs\"],\n\t\t\t\t\tphase: CommandPhase.Process,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\tsetup({ options }) {\n\t\tconst pluginName = options.repository.replace(\"eslint-plugin-\", \"\");\n\n\t\treturn {\n\t\t\tfiles: {\n\t\t\t\tsrc: {\n\t\t\t\t\t\"index.ts\": `import Module from \"node:module\";\n\nimport { rules } from \"./rules/index.js\";\n\nconst require = Module.createRequire(import.meta.url);\n\nconst { name, version } =\n\t// \\`import\\`ing here would bypass the TSConfig's \\`\"rootDir\": \"src\"\\`\n\trequire(\"../package.json\") as typeof import(\"../package.json\");\n\nexport const plugin = {\n\tconfigs: {\n\t\tget recommended() {\n\t\t\treturn recommended;\n\t\t},\n\t},\n\tmeta: { name, version },\n\trules,\n};\n\nconst recommended = {\n\tplugins: {\n\t\t\"${pluginName}\": plugin,\n\t},\n\trules: Object.fromEntries(\n\t\tObject.keys(rules).map((rule) => [\\`${pluginName}/\\${rule}\\`, \"error\"]),\n\t),\n};\n\nexport { rules };\n\nexport default plugin;\n`,\n\t\t\t\t\trules: {\n\t\t\t\t\t\t\"enums.test.ts\": `import { rule } from \"./enums.js\";\nimport { ruleTester } from \"./ruleTester.js\";\n\nruleTester.run(\"enums\", rule, {\n\tinvalid: [\n\t\t{\n\t\t\tcode: \\`enum Values {}\\`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tcolumn: 1,\n\t\t\t\t\tendColumn: 15,\n\t\t\t\t\tendLine: 1,\n\t\t\t\t\tline: 1,\n\t\t\t\t\tmessageId: \"enum\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n\tvalid: [\\`const Values = {};\\`, \\`const Values = {} as const;\\`],\n});\n`,\n\t\t\t\t\t\t\"enums.ts\": `import { createRule } from \"../utils.js\";\n\nexport const rule = createRule({\n\tcreate(context) {\n\t\treturn {\n\t\t\tTSEnumDeclaration(node) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tmessageId: \"enum\",\n\t\t\t\t\tnode,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t},\n\tdefaultOptions: [],\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"Avoid using TypeScript's enums.\",\n\t\t},\n\t\tmessages: {\n\t\t\tenum: \"This enum will not be allowed under TypeScript's --erasableSyntaxOnly.\",\n\t\t},\n\t\tschema: [],\n\t\ttype: \"problem\",\n\t},\n\tname: \"enums\",\n});\n`,\n\t\t\t\t\t\t\"index.ts\": `import { rule as enums } from \"./enums.js\";\n\nexport const rules = {\n\tenums,\n};\n`,\n\t\t\t\t\t\t\"ruleTester.ts\": `import { RuleTester } from \"@typescript-eslint/rule-tester\";\nimport * as vitest from \"vitest\";\n\nRuleTester.afterAll = vitest.afterAll;\nRuleTester.it = vitest.it;\nRuleTester.itOnly = vitest.it.only;\nRuleTester.describe = vitest.describe;\n\nexport const ruleTester = new RuleTester();\n`,\n\t\t\t\t\t},\n\t\t\t\t\t\"utils.ts\": `import { ESLintUtils } from \"@typescript-eslint/utils\";\n\nexport const createRule = ESLintUtils.RuleCreator(\n\t(name) =>\n\t\t\\`https://github.com/${options.owner}/${options.repository}/blob/main/docs/rules/\\${name}.md\\`,\n);\n`,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,oBAAoB,KAAK,YAAY;CACjD,OAAO,EACN,MAAM,iBACN;CACD,QAAQ,EACP,aAAa,cACb;CACD,OAAO,EAAE,SAAS;EACjB,MAAM,wBAAwB,WAAW,OAAO,CAC/C,CAAC,8BAA8B,8BAA8B,CAC7D,CAAC;AAEF,SAAO,wBACJ,wBAAwB,sBAAsB,GAAG,GACjD;;CAEJ,QAAQ,EAAE,QAAQ,WAAW;EAC5B,MAAM,EAAE,gBAAgB;EACxB,MAAM,iBAAiB,2BAA2B,QAAQ,SAAS,aAAa,QAAQ;EACxF,MAAM,aAAa,QAAQ,WACzB,QAAQ,mBAAmB,GAAG,CAC9B,WAAW,SAAS,YAAY,QAAQ,GAAG,aAAa,CAAC;AAE3D,SAAO;GACN,QAAQ;IACP,YAAY,EACX,OAAO,CAAC,yBAAyB,EACjC,CAAC;IACF,qBAAqB,EACpB,UAAU;KACT,UAAU,EACT,eAAe,CACd;MACC,UAAU;;;;;;;MAOV,SAAS;MACT,CACD,EACD;KACD,SAAS,EACR,UAAU,EACT,OAAO,CACN,uJACA,EACD,EACD;KACD,EACD,CAAC;IACF,YAAY;KACX,YAAY,CAAC,6CAA2C;KACxD,SAAS,CAAC,gBAAgB,oBAAoB;KAC9C,SAAS,CACR;MACC,QAAQ;OACP,aAAa;OACb,SAAS;OACT;MACD,WAAW;MACX,CACD;KACD,CAAC;IACF,qBAAqB,EACpB,MAAM,CACL;KACC,MAAM;KACN,OAAO,CACN,EAAE,KAAK,wBAAwB,EAC/B,EAAE,KAAK,kBAAkB,CACzB;KACD,CACD,EACD,CAAC;IACF,YAAY,EACX,cAAc,CACb;;;QAGE,QAAQ,WAAW;;;;SAIlB,WAAW,SAAS,QAAQ,WAAW;;;;GAI7C,WAAW;;;;;;;;gFASR,EACD,CAAC;IACF,iBAAiB,EAChB,YAAY;KACX,cAAc,EACb,4BAA4B,WAC5B;KACD,iBAAiB;MAChB,kCAAkC;MAClC,wBAAwB;MACxB,+BAA+B;MAC/B;KACD,SAAS;MACR,cAAc;MACd,aAAa;MACb;KACD,EACD,CAAC;IACF,YAAY,EACX,UAAU,EACT,SAAS,CAAC,gBAAgB,qBAAqB,EAC/C,EACD,CAAC;IACF;GACD,OAAO,GACL,iBAAiB;;;;GAInB,cAAc,gBAAgB,KAAK,UAAU,YAAY,CAAC,SAAS,GAAG;;;;;;;;;GAUrE;GACD,SAAS,CACR;IACC,UAAU,CAAC,aAAa;IACxB,OAAO,aAAa;IACpB,EACD;IACC,UAAU,CAAC,6CAA6C;IACxD,OAAO,aAAa;IACpB,CACD;GACD;;CAEF,MAAM,EAAE,WAAW;EAClB,MAAM,aAAa,QAAQ,WAAW,QAAQ,kBAAkB,GAAG;AAEnE,SAAO,EACN,OAAO,EACN,KAAK;GACJ,YAAY;;;;;;;;;;;;;;;;;;;;;;KAsBZ,WAAW;;;wCAGwB,WAAW;;;;;;;;GAQ9C,OAAO;IACN,iBAAiB;;;;;;;;;;;;;;;;;;;;;IAqBjB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BZ,YAAY;;;;;;IAMZ,iBAAiB;;;;;;;;;;IAUjB;GACD,YAAY;;;;yBAIQ,QAAQ,MAAM,GAAG,QAAQ,WAAW;;;GAGxD,EACD,EACD;;CAEF,CAAC"}
1
+ {"version":3,"file":"blockESLintPlugin.js","names":[],"sources":["../../src/blocks/blockESLintPlugin.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockCSpell } from \"./blockCSpell.js\";\nimport { blockDevelopmentDocs } from \"./blockDevelopmentDocs.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { blockGitHubActionsCI } from \"./blockGitHubActionsCI.js\";\nimport { blockPackageJson } from \"./blockPackageJson.js\";\nimport { blockREADME } from \"./blockREADME.js\";\nimport { blockVitest } from \"./blockVitest.js\";\nimport { blockESLintPluginIntake } from \"./eslint/blockESLintPluginIntake.js\";\nimport { getScriptFileExtension } from \"./eslint/getScriptFileExtension.js\";\nimport { zConfigEmoji } from \"./eslint/schemas.js\";\nimport { intakeFile } from \"./intake/intakeFile.js\";\nimport { CommandPhase } from \"./phases.js\";\n\nexport const blockESLintPlugin = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Plugin\",\n\t},\n\taddons: {\n\t\tconfigEmoji: zConfigEmoji,\n\t},\n\tintake({ files }) {\n\t\tconst docGeneratorConfigRaw = intakeFile(files, [\n\t\t\t[\".eslint-doc-generatorrc.js\", \".eslint-doc-generatorrc.mjs\"],\n\t\t]);\n\n\t\treturn docGeneratorConfigRaw\n\t\t\t? blockESLintPluginIntake(docGeneratorConfigRaw[0])\n\t\t\t: undefined;\n\t},\n\tproduce({ addons, options }) {\n\t\tconst { configEmoji } = addons;\n\t\tconst configFileName = `.eslint-doc-generatorrc.${options.type === \"commonjs\" ? \"mjs\" : \"js\"}`;\n\t\tconst pluginName = options.repository\n\t\t\t.replace(/^eslint-plugin-/, \"\")\n\t\t\t.replaceAll(/-\\w/g, (matched) => matched[1].toUpperCase());\n\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockCSpell({\n\t\t\t\t\twords: [\"eslint-doc-generatorrc\"],\n\t\t\t\t}),\n\t\t\t\tblockDevelopmentDocs({\n\t\t\t\t\tsections: {\n\t\t\t\t\t\tBuilding: {\n\t\t\t\t\t\t\tinnerSections: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tcontents: `\nRun [\\`eslint-doc-generator\\`](https://github.com/bmish/eslint-doc-generator) to generate Markdown files documenting rules.\n\n\\`\\`\\`shell\npnpm build:docs\n\\`\\`\\`\n\t\t`,\n\t\t\t\t\t\t\t\t\theading: \"Building Docs\",\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\tLinting: {\n\t\t\t\t\t\t\tcontents: {\n\t\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t\t`- \\`pnpm lint:docs\\` ([eslint-doc-generator](https://github.com/bmish/eslint-doc-generator)): Generates and validates documentation for ESLint rules`,\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\tblockESLint({\n\t\t\t\t\textensions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\textends: ['eslintPlugin.configs[\"flat/recommended\"]'],\n\t\t\t\t\t\t\tfiles: [getScriptFileExtension(options)],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\tignores: [configFileName, \"docs/rules/*/*.ts\"],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\tpackageName: \"eslint-plugin-eslint-plugin\",\n\t\t\t\t\t\t\t\tversion: \"6.4.0\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tspecifier: \"eslintPlugin\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\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: \"Lint Docs\",\n\t\t\t\t\t\t\tsteps: [\n\t\t\t\t\t\t\t\t{ run: \"pnpm build || exit 0\" },\n\t\t\t\t\t\t\t\t{ run: \"pnpm lint:docs\" },\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\tblockREADME({\n\t\t\t\t\tdefaultUsage: [\n\t\t\t\t\t\t`Add this plugin to the list of plugins in your [ESLint configuration file](https://eslint.org/docs/latest/use/configure/configuration-files):\n\n\\`\\`\\`shell\nnpm i ${options.repository} -D\n\\`\\`\\`\n\n\\`\\`\\`ts\nimport ${pluginName} from \"${options.repository}\";\n\nexport default [\n\t// (other plugins)\n\t${pluginName}.configs.recommended, // 👈\n];\n\\`\\`\\`\n\n### Rules\n\nThese are all set to \\`\"error\"\\` in the recommended config:\n\n<!-- begin auto-generated rules list --><!-- end auto-generated rules list -->`,\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\tdependencies: {\n\t\t\t\t\t\t\t\"@typescript-eslint/utils\": \"^8.29.0\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdevDependencies: {\n\t\t\t\t\t\t\t\"@typescript-eslint/rule-tester\": \"8.29.1\",\n\t\t\t\t\t\t\t\"eslint-doc-generator\": \"2.1.0\",\n\t\t\t\t\t\t\t\"eslint-plugin-eslint-plugin\": \"6.4.0\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\t\"build:docs\": \"pnpm build --no-dts && eslint-doc-generator\",\n\t\t\t\t\t\t\t\"lint:docs\": \"eslint-doc-generator --check\",\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\tcoverage: {\n\t\t\t\t\t\texclude: [\"src/index.ts\", \"src/rules/index.ts\"],\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tfiles: {\n\t\t\t\t[configFileName]: `import prettier from \"prettier\";\n\n/** @type {import('eslint-doc-generator').GenerateOptions} */\nconst config = {\n\t${configEmoji ? `configEmoji: ${JSON.stringify(configEmoji)},\\n\\t` : \"\"}postprocess: async (content, path) =>\n\t\tprettier.format(content, {\n\t\t\t...(await prettier.resolveConfig(path)),\n\t\t\tparser: \"markdown\",\n\t\t}),\n\truleDocTitleFormat: \"name\",\n};\n\nexport default config;\n`,\n\t\t\t},\n\t\t\tscripts: [\n\t\t\t\t{\n\t\t\t\t\tcommands: [\"pnpm build\"],\n\t\t\t\t\tphase: CommandPhase.Build,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcommands: [\"pnpm eslint-doc-generator --init-rule-docs\"],\n\t\t\t\t\tphase: CommandPhase.Process,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\tsetup({ options }) {\n\t\tconst pluginName = options.repository.replace(\"eslint-plugin-\", \"\");\n\n\t\treturn {\n\t\t\tfiles: {\n\t\t\t\tsrc: {\n\t\t\t\t\t\"index.ts\": `import Module from \"node:module\";\n\nimport { rules } from \"./rules/index.js\";\n\nconst require = Module.createRequire(import.meta.url);\n\nconst { name, version } =\n\t// \\`import\\`ing here would bypass the TSConfig's \\`\"rootDir\": \"src\"\\`\n\trequire(\"../package.json\") as typeof import(\"../package.json\");\n\nexport const plugin = {\n\tconfigs: {\n\t\tget recommended() {\n\t\t\treturn recommended;\n\t\t},\n\t},\n\tmeta: { name, version },\n\trules,\n};\n\nconst recommended = {\n\tplugins: {\n\t\t\"${pluginName}\": plugin,\n\t},\n\trules: Object.fromEntries(\n\t\tObject.keys(rules).map((rule) => [\\`${pluginName}/\\${rule}\\`, \"error\"]),\n\t),\n};\n\nexport { rules };\n\nexport default plugin;\n`,\n\t\t\t\t\trules: {\n\t\t\t\t\t\t\"enums.test.ts\": `import { rule } from \"./enums.js\";\nimport { ruleTester } from \"./ruleTester.js\";\n\nruleTester.run(\"enums\", rule, {\n\tinvalid: [\n\t\t{\n\t\t\tcode: \\`enum Values {}\\`,\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tcolumn: 1,\n\t\t\t\t\tendColumn: 15,\n\t\t\t\t\tendLine: 1,\n\t\t\t\t\tline: 1,\n\t\t\t\t\tmessageId: \"enum\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n\tvalid: [\\`const Values = {};\\`, \\`const Values = {} as const;\\`],\n});\n`,\n\t\t\t\t\t\t\"enums.ts\": `import { createRule } from \"../utils.js\";\n\nexport const rule = createRule({\n\tcreate(context) {\n\t\treturn {\n\t\t\tTSEnumDeclaration(node) {\n\t\t\t\tcontext.report({\n\t\t\t\t\tmessageId: \"enum\",\n\t\t\t\t\tnode,\n\t\t\t\t});\n\t\t\t},\n\t\t};\n\t},\n\tdefaultOptions: [],\n\tmeta: {\n\t\tdocs: {\n\t\t\tdescription: \"Avoid using TypeScript's enums.\",\n\t\t},\n\t\tmessages: {\n\t\t\tenum: \"This enum will not be allowed under TypeScript's --erasableSyntaxOnly.\",\n\t\t},\n\t\tschema: [],\n\t\ttype: \"problem\",\n\t},\n\tname: \"enums\",\n});\n`,\n\t\t\t\t\t\t\"index.ts\": `import { rule as enums } from \"./enums.js\";\n\nexport const rules = {\n\tenums,\n};\n`,\n\t\t\t\t\t\t\"ruleTester.ts\": `import { RuleTester } from \"@typescript-eslint/rule-tester\";\nimport * as vitest from \"vitest\";\n\nRuleTester.afterAll = vitest.afterAll;\nRuleTester.it = vitest.it;\nRuleTester.itOnly = vitest.it.only;\nRuleTester.describe = vitest.describe;\n\nexport const ruleTester = new RuleTester();\n`,\n\t\t\t\t\t},\n\t\t\t\t\t\"utils.ts\": `import { ESLintUtils } from \"@typescript-eslint/utils\";\n\nexport const createRule = ESLintUtils.RuleCreator(\n\t(name) =>\n\t\t\\`https://github.com/${options.owner}/${options.repository}/blob/main/docs/rules/\\${name}.md\\`,\n);\n`,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t},\n});\n"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAa,oBAAoB,KAAK,YAAY;CACjD,OAAO,EACN,MAAM,iBACN;CACD,QAAQ,EACP,aAAa,cACb;CACD,OAAO,EAAE,SAAS;EACjB,MAAM,wBAAwB,WAAW,OAAO,CAC/C,CAAC,8BAA8B,8BAA8B,CAC7D,CAAC;AAEF,SAAO,wBACJ,wBAAwB,sBAAsB,GAAG,GACjD;;CAEJ,QAAQ,EAAE,QAAQ,WAAW;EAC5B,MAAM,EAAE,gBAAgB;EACxB,MAAM,iBAAiB,2BAA2B,QAAQ,SAAS,aAAa,QAAQ;EACxF,MAAM,aAAa,QAAQ,WACzB,QAAQ,mBAAmB,GAAG,CAC9B,WAAW,SAAS,YAAY,QAAQ,GAAG,aAAa,CAAC;AAE3D,SAAO;GACN,QAAQ;IACP,YAAY,EACX,OAAO,CAAC,yBAAyB,EACjC,CAAC;IACF,qBAAqB,EACpB,UAAU;KACT,UAAU,EACT,eAAe,CACd;MACC,UAAU;;;;;;;MAOV,SAAS;MACT,CACD,EACD;KACD,SAAS,EACR,UAAU,EACT,OAAO,CACN,uJACA,EACD,EACD;KACD,EACD,CAAC;IACF,YAAY;KACX,YAAY,CACX;MACC,SAAS,CAAC,6CAA2C;MACrD,OAAO,CAAC,uBAAuB,QAAQ,CAAC;MACxC,CACD;KACD,SAAS,CAAC,gBAAgB,oBAAoB;KAC9C,SAAS,CACR;MACC,QAAQ;OACP,aAAa;OACb,SAAS;OACT;MACD,WAAW;MACX,CACD;KACD,CAAC;IACF,qBAAqB,EACpB,MAAM,CACL;KACC,MAAM;KACN,OAAO,CACN,EAAE,KAAK,wBAAwB,EAC/B,EAAE,KAAK,kBAAkB,CACzB;KACD,CACD,EACD,CAAC;IACF,YAAY,EACX,cAAc,CACb;;;QAGE,QAAQ,WAAW;;;;SAIlB,WAAW,SAAS,QAAQ,WAAW;;;;GAI7C,WAAW;;;;;;;;gFASR,EACD,CAAC;IACF,iBAAiB,EAChB,YAAY;KACX,cAAc,EACb,4BAA4B,WAC5B;KACD,iBAAiB;MAChB,kCAAkC;MAClC,wBAAwB;MACxB,+BAA+B;MAC/B;KACD,SAAS;MACR,cAAc;MACd,aAAa;MACb;KACD,EACD,CAAC;IACF,YAAY,EACX,UAAU,EACT,SAAS,CAAC,gBAAgB,qBAAqB,EAC/C,EACD,CAAC;IACF;GACD,OAAO,GACL,iBAAiB;;;;GAInB,cAAc,gBAAgB,KAAK,UAAU,YAAY,CAAC,SAAS,GAAG;;;;;;;;;GAUrE;GACD,SAAS,CACR;IACC,UAAU,CAAC,aAAa;IACxB,OAAO,aAAa;IACpB,EACD;IACC,UAAU,CAAC,6CAA6C;IACxD,OAAO,aAAa;IACpB,CACD;GACD;;CAEF,MAAM,EAAE,WAAW;EAClB,MAAM,aAAa,QAAQ,WAAW,QAAQ,kBAAkB,GAAG;AAEnE,SAAO,EACN,OAAO,EACN,KAAK;GACJ,YAAY;;;;;;;;;;;;;;;;;;;;;;KAsBZ,WAAW;;;wCAGwB,WAAW;;;;;;;;GAQ9C,OAAO;IACN,iBAAiB;;;;;;;;;;;;;;;;;;;;;IAqBjB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BZ,YAAY;;;;;;IAMZ,iBAAiB;;;;;;;;;;IAUjB;GACD,YAAY;;;;yBAIQ,QAAQ,MAAM,GAAG,QAAQ,WAAW;;;GAGxD,EACD,EACD;;CAEF,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum95 from "bingo-stratum";
1
+ import * as bingo_stratum21 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockESLintRegexp.d.ts
4
- declare const blockESLintRegexp: bingo_stratum95.BlockWithoutAddons<{
4
+ declare const blockESLintRegexp: bingo_stratum21.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintRegexp.d.ts","names":[],"sources":["../../src/blocks/blockESLintRegexp.ts"],"sourcesContent":[],"mappings":";;;cAGa,mCAAiB;;;EAAjB,SAAA,EAAA,MAAA;;;;;;;;;;EAAiB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockESLintRegexp.d.ts","names":[],"sources":["../../src/blocks/blockESLintRegexp.ts"],"sourcesContent":[],"mappings":";;;cAIa,mCAAiB;;;EAAjB,SAAA,EAAA,MAAA;;;;;;;;;;EAAiB,KAAA,EAAA"}
@@ -1,12 +1,16 @@
1
1
  import { base } from "../base.js";
2
+ import { getScriptFileExtension } from "./eslint/getScriptFileExtension.js";
2
3
  import { blockESLint } from "./blockESLint.js";
3
4
 
4
5
  //#region src/blocks/blockESLintRegexp.ts
5
6
  const blockESLintRegexp = base.createBlock({
6
7
  about: { name: "ESLint Regexp Plugin" },
7
- produce() {
8
+ produce({ options }) {
8
9
  return { addons: [blockESLint({
9
- extensions: [`regexp.configs["flat/recommended"]`],
10
+ extensions: [{
11
+ extends: [`regexp.configs["flat/recommended"]`],
12
+ files: [getScriptFileExtension(options)]
13
+ }],
10
14
  imports: [{
11
15
  source: "eslint-plugin-regexp",
12
16
  specifier: "* as regexp"
@@ -1 +1 @@
1
- {"version":3,"file":"blockESLintRegexp.js","names":[],"sources":["../../src/blocks/blockESLintRegexp.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\n\nexport const blockESLintRegexp = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Regexp Plugin\",\n\t},\n\tproduce() {\n\t\treturn {\n\t\t\taddons: [\n\t\t\t\tblockESLint({\n\t\t\t\t\textensions: [`regexp.configs[\"flat/recommended\"]`],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{ source: \"eslint-plugin-regexp\", specifier: \"* as regexp\" },\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t};\n\t},\n});\n"],"mappings":";;;;AAGA,MAAa,oBAAoB,KAAK,YAAY;CACjD,OAAO,EACN,MAAM,wBACN;CACD,UAAU;AACT,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CAAC,qCAAqC;GAClD,SAAS,CACR;IAAE,QAAQ;IAAwB,WAAW;IAAe,CAC5D;GACD,CAAC,CACF,EACD;;CAEF,CAAC"}
1
+ {"version":3,"file":"blockESLintRegexp.js","names":[],"sources":["../../src/blocks/blockESLintRegexp.ts"],"sourcesContent":["import { base } from \"../base.js\";\nimport { blockESLint } from \"./blockESLint.js\";\nimport { getScriptFileExtension } from \"./eslint/getScriptFileExtension.js\";\n\nexport const blockESLintRegexp = base.createBlock({\n\tabout: {\n\t\tname: \"ESLint Regexp Plugin\",\n\t},\n\tproduce({ options }) {\n\t\treturn {\n\t\t\taddons: [\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: [`regexp.configs[\"flat/recommended\"]`],\n\t\t\t\t\t\t\tfiles: [getScriptFileExtension(options)],\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\timports: [\n\t\t\t\t\t\t{ source: \"eslint-plugin-regexp\", specifier: \"* as regexp\" },\n\t\t\t\t\t],\n\t\t\t\t}),\n\t\t\t],\n\t\t};\n\t},\n});\n"],"mappings":";;;;;AAIA,MAAa,oBAAoB,KAAK,YAAY;CACjD,OAAO,EACN,MAAM,wBACN;CACD,QAAQ,EAAE,WAAW;AACpB,SAAO,EACN,QAAQ,CACP,YAAY;GACX,YAAY,CACX;IACC,SAAS,CAAC,qCAAqC;IAC/C,OAAO,CAAC,uBAAuB,QAAQ,CAAC;IACxC,CACD;GACD,SAAS,CACR;IAAE,QAAQ;IAAwB,WAAW;IAAe,CAC5D;GACD,CAAC,CACF,EACD;;CAEF,CAAC"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum96 from "bingo-stratum";
1
+ import * as bingo_stratum19 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockESLintYML.d.ts
4
- declare const blockESLintYML: bingo_stratum96.BlockWithoutAddons<{
4
+ declare const blockESLintYML: bingo_stratum19.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum97 from "bingo-stratum";
1
+ import * as bingo_stratum22 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockExampleFiles.d.ts
4
- declare const blockExampleFiles: bingo_stratum97.BlockWithAddons<{
4
+ declare const blockExampleFiles: bingo_stratum22.BlockWithAddons<{
5
5
  usage: string[];
6
6
  files: Record<string, string>;
7
7
  }, {
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum98 from "bingo-stratum";
1
+ import * as bingo_stratum27 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockFunding.d.ts
4
- declare const blockFunding: bingo_stratum98.BlockWithoutAddons<{
4
+ declare const blockFunding: bingo_stratum27.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum99 from "bingo-stratum";
1
+ import * as bingo_stratum28 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockGitHubActionsCI.d.ts
4
- declare const blockGitHubActionsCI: bingo_stratum99.BlockWithAddons<{
4
+ declare const blockGitHubActionsCI: bingo_stratum28.BlockWithAddons<{
5
5
  jobs?: {
6
6
  name: string;
7
7
  steps: ({
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum100 from "bingo-stratum";
1
+ import * as bingo_stratum29 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockGitHubApps.d.ts
4
- declare const blockGitHubApps: bingo_stratum100.BlockWithAddons<{
4
+ declare const blockGitHubApps: bingo_stratum29.BlockWithAddons<{
5
5
  apps: {
6
6
  name: string;
7
7
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockGitHubApps.d.ts","names":[],"sources":["../../src/blocks/blockGitHubApps.ts"],"sourcesContent":[],"mappings":";;;cAKa,kCAAe;;;IAAf,GAAA,EAAA,MAAA;;;;;;;;;eAAe,CAAA,EAAA,MAAA,GAAA,SAAA;MAAA,SAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockGitHubApps.d.ts","names":[],"sources":["../../src/blocks/blockGitHubApps.ts"],"sourcesContent":[],"mappings":";;;cAKa,iCAAe;;;IAAf,GAAA,EAAA,MAAA;;;;;;;;;eAAe,CAAA,EAAA,MAAA,GAAA,SAAA;MAAA,SAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum101 from "bingo-stratum";
1
+ import * as bingo_stratum30 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockGitHubIssueTemplates.d.ts
4
- declare const blockGitHubIssueTemplates: bingo_stratum101.BlockWithoutAddons<{
4
+ declare const blockGitHubIssueTemplates: bingo_stratum30.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockGitHubIssueTemplates.d.ts","names":[],"sources":["../../src/blocks/blockGitHubIssueTemplates.ts"],"sourcesContent":[],"mappings":";;;cAGa,4CAAyB;;;EAAzB,SAAA,EAAA,MAAA;;;;;;;;;;EAAyB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockGitHubIssueTemplates.d.ts","names":[],"sources":["../../src/blocks/blockGitHubIssueTemplates.ts"],"sourcesContent":[],"mappings":";;;cAGa,2CAAyB;;;EAAzB,SAAA,EAAA,MAAA;;;;;;;;;;EAAyB,KAAA,EAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum102 from "bingo-stratum";
1
+ import * as bingo_stratum31 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockGitHubPRTemplate.d.ts
4
- declare const blockGitHubPRTemplate: bingo_stratum102.BlockWithoutAddons<{
4
+ declare const blockGitHubPRTemplate: bingo_stratum31.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockGitHubPRTemplate.d.ts","names":[],"sources":["../../src/blocks/blockGitHubPRTemplate.ts"],"sourcesContent":[],"mappings":";;;cAEa,wCAAqB;;;EAArB,SAAA,EAAA,MAAA;;;;;;;;;;EAAqB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockGitHubPRTemplate.d.ts","names":[],"sources":["../../src/blocks/blockGitHubPRTemplate.ts"],"sourcesContent":[],"mappings":";;;cAEa,uCAAqB;;;EAArB,SAAA,EAAA,MAAA;;;;;;;;;;EAAqB,KAAA,EAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum92 from "bingo-stratum";
1
+ import * as bingo_stratum32 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockGitignore.d.ts
4
- declare const blockGitignore: bingo_stratum92.BlockWithAddons<{
4
+ declare const blockGitignore: bingo_stratum32.BlockWithAddons<{
5
5
  ignores: string[];
6
6
  }, {
7
7
  access: "public" | "restricted";
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum104 from "bingo-stratum";
1
+ import * as bingo_stratum33 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockKnip.d.ts
4
- declare const blockKnip: bingo_stratum104.BlockWithAddons<{
4
+ declare const blockKnip: bingo_stratum33.BlockWithAddons<{
5
5
  entry?: string[] | undefined;
6
6
  ignoreDependencies?: string[] | undefined;
7
7
  project?: string[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"blockKnip.d.ts","names":[],"sources":["../../src/blocks/blockKnip.ts"],"sourcesContent":[],"mappings":";;;cAiBa,4BAAS;;;EAAT,OAAA,CAAA,EAAA,MAgFX,EAAA,GAAA,SAAA;;;;;;;;;eAhFoB,CAAA,EAAA,MAAA,GAAA,SAAA;MAAA,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockKnip.d.ts","names":[],"sources":["../../src/blocks/blockKnip.ts"],"sourcesContent":[],"mappings":";;;cAiBa,2BAAS;;;EAAT,OAAA,CAAA,EAAA,MAgFX,EAAA,GAAA,SAAA;;;;;;;;;eAhFoB,CAAA,EAAA,MAAA,GAAA,SAAA;MAAA,KAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum105 from "bingo-stratum";
1
+ import * as bingo_stratum35 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockMITLicense.d.ts
4
- declare const blockMITLicense: bingo_stratum105.BlockWithoutAddons<{
4
+ declare const blockMITLicense: bingo_stratum35.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockMITLicense.d.ts","names":[],"sources":["../../src/blocks/blockMITLicense.ts"],"sourcesContent":[],"mappings":";;;cAIa,kCAAe;;;EAAf,SAAA,EAAA,MAAA;;;;;;;;;;EAAe,KAAA,EAAA"}
1
+ {"version":3,"file":"blockMITLicense.d.ts","names":[],"sources":["../../src/blocks/blockMITLicense.ts"],"sourcesContent":[],"mappings":";;;cAIa,iCAAe;;;EAAf,SAAA,EAAA,MAAA;;;;;;;;;;EAAe,KAAA,EAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum106 from "bingo-stratum";
1
+ import * as bingo_stratum37 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockMain.d.ts
4
- declare const blockMain: bingo_stratum106.BlockWithAddons<{
4
+ declare const blockMain: bingo_stratum37.BlockWithAddons<{
5
5
  runArgs: string[];
6
6
  filePath?: string | undefined;
7
7
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"blockMain.d.ts","names":[],"sources":["../../src/blocks/blockMain.ts"],"sourcesContent":[],"mappings":";;;cAMa,4BAAS;;;AAAtB,CAAA,EAAA;;;;;;;;;YAAsB,EAAA,MAAA,GAAA,SAAA;IAAA,CAAA"}
1
+ {"version":3,"file":"blockMain.d.ts","names":[],"sources":["../../src/blocks/blockMain.ts"],"sourcesContent":[],"mappings":";;;cAMa,2BAAS;;;AAAtB,CAAA,EAAA;;;;;;;;;WAAsB,CAAA,EAAA,MAAA,GAAA,SAAA;IAAA,CAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum107 from "bingo-stratum";
1
+ import * as bingo_stratum39 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockMarkdownlint.d.ts
4
- declare const blockMarkdownlint: bingo_stratum107.BlockWithAddons<{
4
+ declare const blockMarkdownlint: bingo_stratum39.BlockWithAddons<{
5
5
  ignores: string[];
6
6
  }, {
7
7
  access: "public" | "restricted";
@@ -1 +1 @@
1
- {"version":3,"file":"blockMarkdownlint.d.ts","names":[],"sources":["../../src/blocks/blockMarkdownlint.ts"],"sourcesContent":[],"mappings":";;;cAaa,oCAAiB;;;EAAjB,MAAA,EAAA,QAAA,GAAA,YA0FX;;;;;;;;;;IA1F4B,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockMarkdownlint.d.ts","names":[],"sources":["../../src/blocks/blockMarkdownlint.ts"],"sourcesContent":[],"mappings":";;;cAaa,mCAAiB;;;EAAjB,MAAA,EAAA,QAAA,GAAA,YA0FX;;;;;;;;;;IA1F4B,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum103 from "bingo-stratum";
1
+ import * as bingo_stratum36 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockNcc.d.ts
4
- declare const blockNcc: bingo_stratum103.BlockWithAddons<{
4
+ declare const blockNcc: bingo_stratum36.BlockWithAddons<{
5
5
  entry?: string | undefined;
6
6
  }, {
7
7
  access: "public" | "restricted";
@@ -1 +1 @@
1
- {"version":3,"file":"blockNcc.d.ts","names":[],"sources":["../../src/blocks/blockNcc.ts"],"sourcesContent":[],"mappings":";;;cAUa,2BAAQ;;;EAAR,MAAA,EAAA,QAqFX,GAAA,YAAA;;;;;;;;;;IArFmB,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockNcc.d.ts","names":[],"sources":["../../src/blocks/blockNcc.ts"],"sourcesContent":[],"mappings":";;;cAUa,0BAAQ;;;EAAR,MAAA,EAAA,QAqFX,GAAA,YAAA;;;;;;;;;;IArFmB,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum109 from "bingo-stratum";
1
+ import * as bingo_stratum38 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockNvmrc.d.ts
4
- declare const blockNvmrc: bingo_stratum109.BlockWithoutAddons<{
4
+ declare const blockNvmrc: bingo_stratum38.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockNvmrc.d.ts","names":[],"sources":["../../src/blocks/blockNvmrc.ts"],"sourcesContent":[],"mappings":";;;cAGa,6BAAU;;;EAAV,SAAA,EAAA,MAkBX;;;;;;;;;;EAlBqB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockNvmrc.d.ts","names":[],"sources":["../../src/blocks/blockNvmrc.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAAU;;;EAAV,SAAA,EAAA,MAkBX;;;;;;;;;;EAlBqB,KAAA,EAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum110 from "bingo-stratum";
1
+ import * as bingo_stratum41 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockOctoGuide.d.ts
4
- declare const blockOctoGuide: bingo_stratum110.BlockWithAddons<{
4
+ declare const blockOctoGuide: bingo_stratum41.BlockWithAddons<{
5
5
  config?: "strict" | "recommended" | undefined;
6
6
  }, {
7
7
  access: "public" | "restricted";
@@ -1 +1 @@
1
- {"version":3,"file":"blockOctoGuide.d.ts","names":[],"sources":["../../src/blocks/blockOctoGuide.ts"],"sourcesContent":[],"mappings":";;;cAQa,iCAAc;;;EAAd,MAAA,EAAA,QAAA,GAiGX,YAAA;;;;;;;;;;IAjGyB,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockOctoGuide.d.ts","names":[],"sources":["../../src/blocks/blockOctoGuide.ts"],"sourcesContent":[],"mappings":";;;cAQa,gCAAc;;;EAAd,MAAA,EAAA,QAAA,GAiGX,YAAA;;;;;;;;;;IAjGyB,WAAA,CAAA,EAAA,MAAA,GAAA,SAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum108 from "bingo-stratum";
1
+ import * as bingo_stratum40 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockOctoGuideStrict.d.ts
4
- declare const blockOctoGuideStrict: bingo_stratum108.BlockWithoutAddons<{
4
+ declare const blockOctoGuideStrict: bingo_stratum40.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;
@@ -1 +1 @@
1
- {"version":3,"file":"blockOctoGuideStrict.d.ts","names":[],"sources":["../../src/blocks/blockOctoGuideStrict.ts"],"sourcesContent":[],"mappings":";;;cAGa,uCAAoB;;;EAApB,SAAA,EAAA,MAAA;;;;;;;;;;EAAoB,KAAA,EAAA"}
1
+ {"version":3,"file":"blockOctoGuideStrict.d.ts","names":[],"sources":["../../src/blocks/blockOctoGuideStrict.ts"],"sourcesContent":[],"mappings":";;;cAGa,sCAAoB;;;EAApB,SAAA,EAAA,MAAA;;;;;;;;;;EAAoB,KAAA,EAAA"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum111 from "bingo-stratum";
1
+ import * as bingo_stratum5 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockPackageJson.d.ts
4
- declare const blockPackageJson: bingo_stratum111.BlockWithAddons<{
4
+ declare const blockPackageJson: bingo_stratum5.BlockWithAddons<{
5
5
  properties: {
6
6
  type?: "commonjs" | "module" | undefined;
7
7
  author?: string | {
@@ -1 +1 @@
1
- {"version":3,"file":"blockPackageJson.d.ts","names":[],"sources":["../../src/blocks/blockPackageJson.ts"],"sourcesContent":[],"mappings":";;;cAiBa,mCAAgB;;;IAAhB,MAAA,CAAA,EAAA,MAgFX,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;kBAhF2B;IAAA,OAAA,CAAA,QAAA,CAAA,MAAA,EAAA,MAAA,GAAA,SAAA,CAAA,GAAA,SAAA"}
1
+ {"version":3,"file":"blockPackageJson.d.ts","names":[],"sources":["../../src/blocks/blockPackageJson.ts"],"sourcesContent":[],"mappings":";;;cAiBa,iCAAgB;;;IAAhB,MAAA,CAAA,EAAA,MA6EX,GAAA;;;;;;;;;;;;;;;;;;;;;;;;;;kBA7E2B;IAAA,OAAA,CAAA,QAAA,CAAA,MAAA,EAAA,MAAA,GAAA,SAAA,CAAA,GAAA,SAAA"}
@@ -40,7 +40,7 @@ const blockPackageJson = base.createBlock({
40
40
  devDependencies: Object.keys(devDependencies).length ? devDependencies : void 0,
41
41
  engines: { node: `>=${options.node.minimum}` },
42
42
  ...options.pnpm && { packageManager: `pnpm@${options.pnpm}` },
43
- files: processFiles([...collectBinFiles(options.bin), ...addons.properties.files ?? []]),
43
+ files: processFiles(addons.properties.files),
44
44
  keywords: options.keywords,
45
45
  name: options.repository,
46
46
  repository: {
@@ -64,11 +64,8 @@ const blockPackageJson = base.createBlock({
64
64
  return { addons: [blockRemoveFiles({ files: ["package-lock.json yarn.lock"] })] };
65
65
  }
66
66
  });
67
- function collectBinFiles(bin) {
68
- if (!bin) return [];
69
- return (typeof bin === "object" ? Object.values(bin) : [bin]).map((file) => file.replace(/^\.\//, ""));
70
- }
71
67
  function processFiles(files) {
68
+ if (!files?.length) return;
72
69
  const sortedByLength = files.filter(Boolean).sort((a, b) => a.length - b.length);
73
70
  return sortedByLength.filter((file, i) => !sortedByLength.slice(0, i).some((earlier) => earlier.endsWith("/") && file.startsWith(earlier))).sort();
74
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"blockPackageJson.js","names":[],"sources":["../../src/blocks/blockPackageJson.ts"],"sourcesContent":["import removeUndefinedObjects from \"remove-undefined-objects\";\nimport semver from \"semver\";\nimport sortPackageJson from \"sort-package-json\";\nimport { z } from \"zod\";\nimport { PackageJson } from \"zod-package-json\";\n\nimport { base } from \"../base.js\";\nimport { htmlToTextSafe } from \"../utils/htmlToTextSafe.js\";\nimport { blockRemoveFiles } from \"./blockRemoveFiles.js\";\nimport { CommandPhase } from \"./phases.js\";\n\nconst PackageJsonWithNullableScripts = PackageJson.partial().extend({\n\tscripts: z\n\t\t.record(z.string(), z.union([z.string(), z.undefined()]))\n\t\t.optional(),\n});\n\nexport const blockPackageJson = base.createBlock({\n\tabout: {\n\t\tname: \"Package JSON\",\n\t},\n\taddons: {\n\t\tcleanupCommands: z.array(z.string()).default([]),\n\t\tproperties: PackageJsonWithNullableScripts.default({}),\n\t},\n\tproduce({ addons, offline, options }) {\n\t\tconst dependencies = useLargerVersions(options.packageData?.dependencies, {\n\t\t\t...options.packageData?.dependencies,\n\t\t\t...addons.properties.dependencies,\n\t\t});\n\t\tconst devDependencies = useLargerVersions(\n\t\t\toptions.packageData?.devDependencies,\n\t\t\t{\n\t\t\t\t...options.packageData?.devDependencies,\n\t\t\t\t...addons.properties.devDependencies,\n\t\t\t},\n\t\t);\n\t\tconst description = htmlToTextSafe(options.description);\n\n\t\treturn {\n\t\t\tfiles: {\n\t\t\t\t\"package.json\": sortPackageJson(\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\tremoveUndefinedObjects({\n\t\t\t\t\t\t\t...options.packageData,\n\t\t\t\t\t\t\t...addons.properties,\n\t\t\t\t\t\t\tauthor: { email: options.email.npm, name: options.author },\n\t\t\t\t\t\t\tbin: options.bin,\n\t\t\t\t\t\t\tdependencies: Object.keys(dependencies).length\n\t\t\t\t\t\t\t\t? dependencies\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\tdevDependencies: Object.keys(devDependencies).length\n\t\t\t\t\t\t\t\t? devDependencies\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tengines: {\n\t\t\t\t\t\t\t\tnode: `>=${options.node.minimum}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...(options.pnpm && {\n\t\t\t\t\t\t\t\tpackageManager: `pnpm@${options.pnpm}`,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tfiles: processFiles([\n\t\t\t\t\t\t\t\t...collectBinFiles(options.bin),\n\t\t\t\t\t\t\t\t...(addons.properties.files ?? []),\n\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\tkeywords: options.keywords,\n\t\t\t\t\t\t\tname: options.repository,\n\t\t\t\t\t\t\trepository: {\n\t\t\t\t\t\t\t\ttype: \"git\",\n\t\t\t\t\t\t\t\turl: `git+https://github.com/${options.owner}/${options.repository}.git`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\t\t...options.packageData?.scripts,\n\t\t\t\t\t\t\t\t...addons.properties.scripts,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttype: options.type ?? \"module\",\n\t\t\t\t\t\t\tversion: options.version ?? \"0.0.0\",\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\tscripts: [\n\t\t\t\t{\n\t\t\t\t\tcommands: [\n\t\t\t\t\t\t`pnpm install ${offline ? \"--offline \" : \"\"}--no-frozen-lockfile`,\n\t\t\t\t\t\t...addons.cleanupCommands,\n\t\t\t\t\t],\n\t\t\t\t\tphase: CommandPhase.Install,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\ttransition() {\n\t\treturn {\n\t\t\taddons: [blockRemoveFiles({ files: [\"package-lock.json yarn.lock\"] })],\n\t\t};\n\t},\n});\n\nfunction collectBinFiles(bin: Record<string, string> | string | undefined) {\n\tif (!bin) {\n\t\treturn [];\n\t}\n\n\tconst files = typeof bin === \"object\" ? Object.values(bin) : [bin];\n\n\treturn files.map((file) => file.replace(/^\\.\\//, \"\"));\n}\n\nfunction processFiles(files: string[]) {\n\t// First sort so that shorter entries are first (e.g. \"lib/\")...\n\tconst sortedByLength = files\n\t\t.filter(Boolean)\n\t\t.sort((a, b) => a.length - b.length);\n\n\t// ...then remove entries captured by earlier directories (e.g. \"lib/index.js\")\n\treturn sortedByLength\n\t\t.filter(\n\t\t\t(file, i) =>\n\t\t\t\t!sortedByLength\n\t\t\t\t\t.slice(0, i)\n\t\t\t\t\t.some((earlier) => earlier.endsWith(\"/\") && file.startsWith(earlier)),\n\t\t)\n\t\t.sort();\n}\n\nfunction removeRangePrefix(version: string) {\n\tconst raw = version.replaceAll(/[\\^~><=]/gu, \"\").split(\" \")[0];\n\n\treturn semver.coerce(raw) ?? raw;\n}\n\nfunction useLargerVersion(existing: string | undefined, replacement: string) {\n\tif (!existing || existing === replacement) {\n\t\treturn replacement;\n\t}\n\n\tconst existingCoerced = semver.coerce(removeRangePrefix(existing));\n\n\treturn existingCoerced &&\n\t\tsemver.gt(existingCoerced, removeRangePrefix(replacement))\n\t\t? existing\n\t\t: replacement;\n}\n\nfunction useLargerVersions(\n\texisting: Record<string, string | undefined> | undefined,\n\treplacements: Record<string, string>,\n) {\n\tif (!existing) {\n\t\treturn replacements;\n\t}\n\n\treturn Object.fromEntries(\n\t\tObject.entries(replacements).map(([key, replacement]) => [\n\t\t\tkey,\n\t\t\tuseLargerVersion(existing[key], replacement),\n\t\t]),\n\t);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"blockPackageJson.js","names":[],"sources":["../../src/blocks/blockPackageJson.ts"],"sourcesContent":["import removeUndefinedObjects from \"remove-undefined-objects\";\nimport semver from \"semver\";\nimport sortPackageJson from \"sort-package-json\";\nimport { z } from \"zod\";\nimport { PackageJson } from \"zod-package-json\";\n\nimport { base } from \"../base.js\";\nimport { htmlToTextSafe } from \"../utils/htmlToTextSafe.js\";\nimport { blockRemoveFiles } from \"./blockRemoveFiles.js\";\nimport { CommandPhase } from \"./phases.js\";\n\nconst PackageJsonWithNullableScripts = PackageJson.partial().extend({\n\tscripts: z\n\t\t.record(z.string(), z.union([z.string(), z.undefined()]))\n\t\t.optional(),\n});\n\nexport const blockPackageJson = base.createBlock({\n\tabout: {\n\t\tname: \"Package JSON\",\n\t},\n\taddons: {\n\t\tcleanupCommands: z.array(z.string()).default([]),\n\t\tproperties: PackageJsonWithNullableScripts.default({}),\n\t},\n\tproduce({ addons, offline, options }) {\n\t\tconst dependencies = useLargerVersions(options.packageData?.dependencies, {\n\t\t\t...options.packageData?.dependencies,\n\t\t\t...addons.properties.dependencies,\n\t\t});\n\t\tconst devDependencies = useLargerVersions(\n\t\t\toptions.packageData?.devDependencies,\n\t\t\t{\n\t\t\t\t...options.packageData?.devDependencies,\n\t\t\t\t...addons.properties.devDependencies,\n\t\t\t},\n\t\t);\n\t\tconst description = htmlToTextSafe(options.description);\n\n\t\treturn {\n\t\t\tfiles: {\n\t\t\t\t\"package.json\": sortPackageJson(\n\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\tremoveUndefinedObjects({\n\t\t\t\t\t\t\t...options.packageData,\n\t\t\t\t\t\t\t...addons.properties,\n\t\t\t\t\t\t\tauthor: { email: options.email.npm, name: options.author },\n\t\t\t\t\t\t\tbin: options.bin,\n\t\t\t\t\t\t\tdependencies: Object.keys(dependencies).length\n\t\t\t\t\t\t\t\t? dependencies\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tdescription,\n\t\t\t\t\t\t\tdevDependencies: Object.keys(devDependencies).length\n\t\t\t\t\t\t\t\t? devDependencies\n\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tengines: {\n\t\t\t\t\t\t\t\tnode: `>=${options.node.minimum}`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t...(options.pnpm && {\n\t\t\t\t\t\t\t\tpackageManager: `pnpm@${options.pnpm}`,\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tfiles: processFiles(addons.properties.files),\n\t\t\t\t\t\t\tkeywords: options.keywords,\n\t\t\t\t\t\t\tname: options.repository,\n\t\t\t\t\t\t\trepository: {\n\t\t\t\t\t\t\t\ttype: \"git\",\n\t\t\t\t\t\t\t\turl: `git+https://github.com/${options.owner}/${options.repository}.git`,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tscripts: {\n\t\t\t\t\t\t\t\t...options.packageData?.scripts,\n\t\t\t\t\t\t\t\t...addons.properties.scripts,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttype: options.type ?? \"module\",\n\t\t\t\t\t\t\tversion: options.version ?? \"0.0.0\",\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\tscripts: [\n\t\t\t\t{\n\t\t\t\t\tcommands: [\n\t\t\t\t\t\t`pnpm install ${offline ? \"--offline \" : \"\"}--no-frozen-lockfile`,\n\t\t\t\t\t\t...addons.cleanupCommands,\n\t\t\t\t\t],\n\t\t\t\t\tphase: CommandPhase.Install,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t},\n\ttransition() {\n\t\treturn {\n\t\t\taddons: [blockRemoveFiles({ files: [\"package-lock.json yarn.lock\"] })],\n\t\t};\n\t},\n});\n\nfunction processFiles(files: string[] | undefined) {\n\t// If no files have been specified, we can skip the property altogether\n\tif (!files?.length) {\n\t\treturn undefined;\n\t}\n\n\t// First sort so that shorter entries are first (e.g. \"lib/\")...\n\tconst sortedByLength = files\n\t\t.filter(Boolean)\n\t\t.sort((a, b) => a.length - b.length);\n\n\t// ...then remove entries captured by earlier directories (e.g. \"lib/index.js\")\n\treturn sortedByLength\n\t\t.filter(\n\t\t\t(file, i) =>\n\t\t\t\t!sortedByLength\n\t\t\t\t\t.slice(0, i)\n\t\t\t\t\t.some((earlier) => earlier.endsWith(\"/\") && file.startsWith(earlier)),\n\t\t)\n\t\t.sort();\n}\n\nfunction removeRangePrefix(version: string) {\n\tconst raw = version.replaceAll(/[\\^~><=]/gu, \"\").split(\" \")[0];\n\n\treturn semver.coerce(raw) ?? raw;\n}\n\nfunction useLargerVersion(existing: string | undefined, replacement: string) {\n\tif (!existing || existing === replacement) {\n\t\treturn replacement;\n\t}\n\n\tconst existingCoerced = semver.coerce(removeRangePrefix(existing));\n\n\treturn existingCoerced &&\n\t\tsemver.gt(existingCoerced, removeRangePrefix(replacement))\n\t\t? existing\n\t\t: replacement;\n}\n\nfunction useLargerVersions(\n\texisting: Record<string, string | undefined> | undefined,\n\treplacements: Record<string, string>,\n) {\n\tif (!existing) {\n\t\treturn replacements;\n\t}\n\n\treturn Object.fromEntries(\n\t\tObject.entries(replacements).map(([key, replacement]) => [\n\t\t\tkey,\n\t\t\tuseLargerVersion(existing[key], replacement),\n\t\t]),\n\t);\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import * as bingo_stratum112 from "bingo-stratum";
1
+ import * as bingo_stratum46 from "bingo-stratum";
2
2
 
3
3
  //#region src/blocks/blockPnpmDedupe.d.ts
4
- declare const blockPnpmDedupe: bingo_stratum112.BlockWithoutAddons<{
4
+ declare const blockPnpmDedupe: bingo_stratum46.BlockWithoutAddons<{
5
5
  access: "public" | "restricted";
6
6
  description: string;
7
7
  directory: string;