create-typescript-app 1.77.0 → 1.78.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 (108) hide show
  1. package/README.md +5 -4
  2. package/lib/bin/promptForMode.js +2 -1
  3. package/lib/bin/promptForMode.js.map +1 -1
  4. package/lib/create/createWithOptions.d.ts +3 -4
  5. package/lib/create/createWithOptions.js +19 -11
  6. package/lib/create/createWithOptions.js.map +1 -1
  7. package/lib/initialize/initializeWithOptions.d.ts +3 -4
  8. package/lib/initialize/initializeWithOptions.js +4 -4
  9. package/lib/initialize/initializeWithOptions.js.map +1 -1
  10. package/lib/migrate/migrateWithOptions.d.ts +3 -4
  11. package/lib/migrate/migrateWithOptions.js +8 -5
  12. package/lib/migrate/migrateWithOptions.js.map +1 -1
  13. package/lib/next/base.js +4 -0
  14. package/lib/next/base.js.map +1 -1
  15. package/lib/next/blocks/blockAllContributors.js +12 -11
  16. package/lib/next/blocks/blockAllContributors.js.map +1 -1
  17. package/lib/next/blocks/blockCSpell.js +2 -7
  18. package/lib/next/blocks/blockCSpell.js.map +1 -1
  19. package/lib/next/blocks/blockContributingDocs.js +11 -0
  20. package/lib/next/blocks/blockContributingDocs.js.map +1 -1
  21. package/lib/next/blocks/blockContributorCovenant.js +11 -0
  22. package/lib/next/blocks/blockContributorCovenant.js.map +1 -1
  23. package/lib/next/blocks/blockDevelopmentDocs.js +15 -9
  24. package/lib/next/blocks/blockDevelopmentDocs.js.map +1 -1
  25. package/lib/next/blocks/blockESLint.js +18 -1
  26. package/lib/next/blocks/blockESLint.js.map +1 -1
  27. package/lib/next/blocks/blockExampleFiles.d.ts +50 -0
  28. package/lib/next/blocks/blockExampleFiles.js +25 -0
  29. package/lib/next/blocks/blockExampleFiles.js.map +1 -0
  30. package/lib/next/blocks/blockGitHubActionsCI.js +11 -0
  31. package/lib/next/blocks/blockGitHubActionsCI.js.map +1 -1
  32. package/lib/next/blocks/blockPackageJson.d.ts +1 -0
  33. package/lib/next/blocks/blockPackageJson.js +18 -7
  34. package/lib/next/blocks/blockPackageJson.js.map +1 -1
  35. package/lib/next/blocks/blockPnpmDedupe.js +1 -6
  36. package/lib/next/blocks/blockPnpmDedupe.js.map +1 -1
  37. package/lib/next/blocks/blockPrettier.js +18 -8
  38. package/lib/next/blocks/blockPrettier.js.map +1 -1
  39. package/lib/next/blocks/blockReleaseIt.js +5 -0
  40. package/lib/next/blocks/blockReleaseIt.js.map +1 -1
  41. package/lib/next/blocks/blockRepositoryBranchRuleset.d.ts +50 -0
  42. package/lib/next/blocks/blockRepositoryBranchRuleset.js +62 -0
  43. package/lib/next/blocks/blockRepositoryBranchRuleset.js.map +1 -0
  44. package/lib/next/blocks/blockRepositoryLabels.d.ts +48 -0
  45. package/lib/next/blocks/blockRepositoryLabels.js +18 -0
  46. package/lib/next/blocks/blockRepositoryLabels.js.map +1 -0
  47. package/lib/next/blocks/blockRepositorySettings.d.ts +48 -0
  48. package/lib/next/blocks/blockRepositorySettings.js +42 -0
  49. package/lib/next/blocks/blockRepositorySettings.js.map +1 -0
  50. package/lib/next/blocks/blockTSup.js +19 -2
  51. package/lib/next/blocks/blockTSup.js.map +1 -1
  52. package/lib/next/blocks/blockTemplatedBy.d.ts +1 -3
  53. package/lib/next/blocks/blockTemplatedBy.js +0 -4
  54. package/lib/next/blocks/blockTemplatedBy.js.map +1 -1
  55. package/lib/next/blocks/blockTypeScript.js +28 -0
  56. package/lib/next/blocks/blockTypeScript.js.map +1 -1
  57. package/lib/next/blocks/blockVSCode.js +4 -0
  58. package/lib/next/blocks/blockVSCode.js.map +1 -1
  59. package/lib/next/blocks/blockVitest.js +63 -0
  60. package/lib/next/blocks/blockVitest.js.map +1 -1
  61. package/lib/next/blocks/packageData.js.map +1 -1
  62. package/lib/next/blocks/phases.d.ts +9 -0
  63. package/lib/next/blocks/phases.js +11 -0
  64. package/lib/next/blocks/phases.js.map +1 -0
  65. package/lib/next/presetMinimal.js +8 -0
  66. package/lib/next/presetMinimal.js.map +1 -1
  67. package/lib/next/runCreateEnginePreset.d.ts +7 -0
  68. package/lib/next/runCreateEnginePreset.js +20 -0
  69. package/lib/next/runCreateEnginePreset.js.map +1 -0
  70. package/lib/shared/options/ensureRepositoryExists.d.ts +3 -4
  71. package/lib/shared/options/ensureRepositoryExists.js +9 -8
  72. package/lib/shared/options/ensureRepositoryExists.js.map +1 -1
  73. package/lib/shared/options/readOptions.d.ts +5 -6
  74. package/lib/shared/options/readOptions.js +7 -4
  75. package/lib/shared/options/readOptions.js.map +1 -1
  76. package/lib/steps/finalizeDependencies.js +43 -48
  77. package/lib/steps/finalizeDependencies.js.map +1 -1
  78. package/lib/steps/initializeGitHubRepository/index.js +7 -2
  79. package/lib/steps/initializeGitHubRepository/index.js.map +1 -1
  80. package/lib/steps/initializeGitHubRepository/initializeBranchProtectionSettings.js +44 -31
  81. package/lib/steps/initializeGitHubRepository/initializeBranchProtectionSettings.js.map +1 -1
  82. package/lib/steps/initializeGitHubRepository/outcomeLabels.d.ts +13 -0
  83. package/lib/steps/initializeGitHubRepository/{labels/outcomeLabels.js → outcomeLabels.js} +4 -1
  84. package/lib/steps/initializeGitHubRepository/outcomeLabels.js.map +1 -0
  85. package/lib/steps/uninstallPackages.js +4 -2
  86. package/lib/steps/uninstallPackages.js.map +1 -1
  87. package/lib/steps/writing/creation/index.js +4 -5
  88. package/lib/steps/writing/creation/index.js.map +1 -1
  89. package/lib/steps/writing/creation/writeAllContributorsRC.js +1 -9
  90. package/lib/steps/writing/creation/writeAllContributorsRC.js.map +1 -1
  91. package/package.json +27 -25
  92. package/lib/next/utils/removeTrailingSlash.d.ts +0 -3
  93. package/lib/next/utils/removeTrailingSlash.js +0 -7
  94. package/lib/next/utils/removeTrailingSlash.js.map +0 -1
  95. package/lib/shared/options/getGitHub.d.ts +0 -9
  96. package/lib/shared/options/getGitHub.js +0 -17
  97. package/lib/shared/options/getGitHub.js.map +0 -1
  98. package/lib/steps/detectExistingContributors.d.ts +0 -7
  99. package/lib/steps/detectExistingContributors.js +0 -19
  100. package/lib/steps/detectExistingContributors.js.map +0 -1
  101. package/lib/steps/initializeGitHubRepository/labels/getExistingEquivalentLabels.d.ts +0 -8
  102. package/lib/steps/initializeGitHubRepository/labels/getExistingEquivalentLabels.js +0 -14
  103. package/lib/steps/initializeGitHubRepository/labels/getExistingEquivalentLabels.js.map +0 -1
  104. package/lib/steps/initializeGitHubRepository/labels/initializeRepositoryLabels.d.ts +0 -8
  105. package/lib/steps/initializeGitHubRepository/labels/initializeRepositoryLabels.js +0 -63
  106. package/lib/steps/initializeGitHubRepository/labels/initializeRepositoryLabels.js.map +0 -1
  107. package/lib/steps/initializeGitHubRepository/labels/outcomeLabels.d.ts +0 -7
  108. package/lib/steps/initializeGitHubRepository/labels/outcomeLabels.js.map +0 -1
@@ -3,6 +3,7 @@ import { base } from "../base.js";
3
3
  import { blockCSpell } from "./blockCSpell.js";
4
4
  import { blockDevelopmentDocs } from "./blockDevelopmentDocs.js";
5
5
  import { blockESLint } from "./blockESLint.js";
6
+ import { blockExampleFiles } from "./blockExampleFiles.js";
6
7
  import { blockGitHubActionsCI } from "./blockGitHubActionsCI.js";
7
8
  import { blockGitignore } from "./blockGitignore.js";
8
9
  import { blockPackageJson } from "./blockPackageJson.js";
@@ -10,6 +11,7 @@ import { blockPrettier } from "./blockPrettier.js";
10
11
  import { blockTSup } from "./blockTSup.js";
11
12
  import { blockVSCode } from "./blockVSCode.js";
12
13
  import { getPackageDependencies } from "./packageData.js";
14
+ import { CommandPhase } from "./phases.js";
13
15
  const blockVitest = base.createBlock({
14
16
  about: {
15
17
  name: "Vitest"
@@ -22,6 +24,18 @@ const blockVitest = base.createBlock({
22
24
  exclude: z.array(z.string()).default([]),
23
25
  include: z.array(z.string()).default([])
24
26
  },
27
+ migrate() {
28
+ return {
29
+ scripts: [
30
+ {
31
+ commands: [
32
+ "rm .github/codecov.yml .mocha* codecov.yml jest.config.*"
33
+ ],
34
+ phase: CommandPhase.Migrations
35
+ }
36
+ ]
37
+ };
38
+ },
25
39
  produce({ addons }) {
26
40
  const { coverage, exclude = [], include = [] } = addons;
27
41
  const excludeText = JSON.stringify(exclude);
@@ -73,6 +87,55 @@ Calls to \`console.log\`, \`console.warn\`, and other console methods will cause
73
87
  }
74
88
  }
75
89
  }),
90
+ blockExampleFiles({
91
+ files: {
92
+ "greet.test.ts": `import { describe, expect, it, vi } from "vitest";
93
+
94
+ import { greet } from "./greet.js";
95
+
96
+ const message = "Yay, testing!";
97
+
98
+ describe("greet", () => {
99
+ it("logs to the console once when message is provided as a string", () => {
100
+ const logger = vi.spyOn(console, "log").mockImplementation(() => undefined);
101
+
102
+ greet(message);
103
+
104
+ expect(logger).toHaveBeenCalledWith(message);
105
+ expect(logger).toHaveBeenCalledTimes(1);
106
+ });
107
+
108
+ it("logs to the console once when message is provided as an object", () => {
109
+ const logger = vi.spyOn(console, "log").mockImplementation(() => undefined);
110
+
111
+ greet({ message });
112
+
113
+ expect(logger).toHaveBeenCalledWith(message);
114
+ expect(logger).toHaveBeenCalledTimes(1);
115
+ });
116
+
117
+ it("logs once when times is not provided in an object", () => {
118
+ const logger = vi.fn();
119
+
120
+ greet({ logger, message });
121
+
122
+ expect(logger).toHaveBeenCalledWith(message);
123
+ expect(logger).toHaveBeenCalledTimes(1);
124
+ });
125
+
126
+ it("logs a specified number of times when times is provided", () => {
127
+ const logger = vi.fn();
128
+ const times = 7;
129
+
130
+ greet({ logger, message, times });
131
+
132
+ expect(logger).toHaveBeenCalledWith(message);
133
+ expect(logger).toHaveBeenCalledTimes(7);
134
+ });
135
+ });
136
+ `
137
+ }
138
+ }),
76
139
  blockGitignore({
77
140
  ignores: [`/${coverage.directory}`]
78
141
  }),
@@ -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 { blockGitHubActionsCI } from \"./blockGitHubActionsCI.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\";\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\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\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\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\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\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 { 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\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\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\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\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 +1 @@
1
- {"version":3,"sources":["../../../src/next/blocks/packageData.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\n\nconst packageData =\n\t// Importing from above src/ would expand the TS build rootDir\n\n\trequire(\"../../../package.json\") as typeof import(\"../../../package.json\");\n\nconst getPackageInner = (\n\tkey: \"dependencies\" | \"devDependencies\",\n\tname: string,\n) => {\n\tconst inner = packageData[key];\n\n\treturn inner[name as keyof typeof inner] as string | undefined;\n};\n\nexport const getPackageDependencies = (...names: string[]) =>\n\tObject.fromEntries(\n\t\tnames.map((name) => {\n\t\t\tconst version =\n\t\t\t\tgetPackageInner(\"devDependencies\", name) ??\n\t\t\t\tgetPackageInner(\"dependencies\", name);\n\n\t\t\tif (!version) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`'${name} is neither in package.json's dependencies nor its devDependencies.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [name, version];\n\t\t}),\n\t);\n"],"mappings":"AAAA,SAAS,qBAAqB;AAE9B,MAAMA,WAAU,cAAc,YAAY,GAAG;AAE7C,MAAM;AAAA;AAAA,EAGLA,SAAQ,uBAAuB;AAAA;AAEhC,MAAM,kBAAkB,CACvB,KACA,SACI;AACJ,QAAM,QAAQ,YAAY,GAAG;AAE7B,SAAO,MAAM,IAA0B;AACxC;AAEO,MAAM,yBAAyB,IAAI,UACzC,OAAO;AAAA,EACN,MAAM,IAAI,CAAC,SAAS;AACnB,UAAM,UACL,gBAAgB,mBAAmB,IAAI,KACvC,gBAAgB,gBAAgB,IAAI;AAErC,QAAI,CAAC,SAAS;AACb,YAAM,IAAI;AAAA,QACT,IAAI,IAAI;AAAA,MACT;AAAA,IACD;AAEA,WAAO,CAAC,MAAM,OAAO;AAAA,EACtB,CAAC;AACF;","names":["require"]}
1
+ {"version":3,"sources":["../../../src/next/blocks/packageData.ts"],"sourcesContent":["import { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\n\nconst packageData =\n\t// Importing from above src/ would expand the TS build rootDir\n\trequire(\"../../../package.json\") as typeof import(\"../../../package.json\");\n\nconst getPackageInner = (\n\tkey: \"dependencies\" | \"devDependencies\",\n\tname: string,\n) => {\n\tconst inner = packageData[key];\n\n\treturn inner[name as keyof typeof inner] as string | undefined;\n};\n\nexport const getPackageDependencies = (...names: string[]) =>\n\tObject.fromEntries(\n\t\tnames.map((name) => {\n\t\t\tconst version =\n\t\t\t\tgetPackageInner(\"devDependencies\", name) ??\n\t\t\t\tgetPackageInner(\"dependencies\", name);\n\n\t\t\tif (!version) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`'${name} is neither in package.json's dependencies nor its devDependencies.`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn [name, version];\n\t\t}),\n\t);\n"],"mappings":"AAAA,SAAS,qBAAqB;AAE9B,MAAMA,WAAU,cAAc,YAAY,GAAG;AAE7C,MAAM;AAAA;AAAA,EAELA,SAAQ,uBAAuB;AAAA;AAEhC,MAAM,kBAAkB,CACvB,KACA,SACI;AACJ,QAAM,QAAQ,YAAY,GAAG;AAE7B,SAAO,MAAM,IAA0B;AACxC;AAEO,MAAM,yBAAyB,IAAI,UACzC,OAAO;AAAA,EACN,MAAM,IAAI,CAAC,SAAS;AACnB,UAAM,UACL,gBAAgB,mBAAmB,IAAI,KACvC,gBAAgB,gBAAgB,IAAI;AAErC,QAAI,CAAC,SAAS;AACb,YAAM,IAAI;AAAA,QACT,IAAI,IAAI;AAAA,MACT;AAAA,IACD;AAEA,WAAO,CAAC,MAAM,OAAO;AAAA,EACtB,CAAC;AACF;","names":["require"]}
@@ -0,0 +1,9 @@
1
+ declare const CommandPhase: {
2
+ readonly Migrations: 0;
3
+ readonly Install: 1;
4
+ readonly Build: 2;
5
+ readonly Process: 3;
6
+ readonly Format: 4;
7
+ };
8
+
9
+ export { CommandPhase };
@@ -0,0 +1,11 @@
1
+ const CommandPhase = {
2
+ Migrations: 0,
3
+ Install: 1,
4
+ Build: 2,
5
+ Process: 3,
6
+ Format: 4
7
+ };
8
+ export {
9
+ CommandPhase
10
+ };
11
+ //# sourceMappingURL=phases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/next/blocks/phases.ts"],"sourcesContent":["// eslint-disable-next-line @eslint-community/eslint-comments/disable-enable-pair\n/* eslint-disable perfectionist/sort-objects */\n\nexport const CommandPhase = {\n\tMigrations: 0,\n\tInstall: 1,\n\tBuild: 2,\n\tProcess: 3,\n\tFormat: 4,\n} as const;\n"],"mappings":"AAGO,MAAM,eAAe;AAAA,EAC3B,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AACT;","names":[]}
@@ -3,6 +3,7 @@ import { blockContributingDocs } from "./blocks/blockContributingDocs.js";
3
3
  import { blockContributorCovenant } from "./blocks/blockContributorCovenant.js";
4
4
  import { blockDevelopmentDocs } from "./blocks/blockDevelopmentDocs.js";
5
5
  import { blockESLint } from "./blocks/blockESLint.js";
6
+ import { blockExampleFiles } from "./blocks/blockExampleFiles.js";
6
7
  import { blockFunding } from "./blocks/blockFunding.js";
7
8
  import { blockGitHubActionsCI } from "./blocks/blockGitHubActionsCI.js";
8
9
  import { blockGitHubIssueTemplates } from "./blocks/blockGitHubIssueTemplates.js";
@@ -12,6 +13,9 @@ import { blockMITLicense } from "./blocks/blockMITLicense.js";
12
13
  import { blockPackageJson } from "./blocks/blockPackageJson.js";
13
14
  import { blockPrettier } from "./blocks/blockPrettier.js";
14
15
  import { blockREADME } from "./blocks/blockREADME.js";
16
+ import { blockRepositoryBranchRuleset } from "./blocks/blockRepositoryBranchRuleset.js";
17
+ import { blockRepositoryLabels } from "./blocks/blockRepositoryLabels.js";
18
+ import { blockRepositorySettings } from "./blocks/blockRepositorySettings.js";
15
19
  import { blockTemplatedBy } from "./blocks/blockTemplatedBy.js";
16
20
  import { blockTSup } from "./blocks/blockTSup.js";
17
21
  import { blockTypeScript } from "./blocks/blockTypeScript.js";
@@ -25,6 +29,7 @@ const presetMinimal = base.createPreset({
25
29
  blockContributorCovenant,
26
30
  blockDevelopmentDocs,
27
31
  blockESLint,
32
+ blockExampleFiles,
28
33
  blockFunding,
29
34
  blockGitHubActionsCI,
30
35
  blockGitHubIssueTemplates,
@@ -34,6 +39,9 @@ const presetMinimal = base.createPreset({
34
39
  blockPackageJson,
35
40
  blockPrettier,
36
41
  blockREADME,
42
+ blockRepositoryBranchRuleset,
43
+ blockRepositoryLabels,
44
+ blockRepositorySettings,
37
45
  blockTemplatedBy,
38
46
  blockTSup,
39
47
  blockTypeScript
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/next/presetMinimal.ts"],"sourcesContent":["import { base } from \"./base.js\";\nimport { blockContributingDocs } from \"./blocks/blockContributingDocs.js\";\nimport { blockContributorCovenant } from \"./blocks/blockContributorCovenant.js\";\nimport { blockDevelopmentDocs } from \"./blocks/blockDevelopmentDocs.js\";\nimport { blockESLint } from \"./blocks/blockESLint.js\";\nimport { blockFunding } from \"./blocks/blockFunding.js\";\nimport { blockGitHubActionsCI } from \"./blocks/blockGitHubActionsCI.js\";\nimport { blockGitHubIssueTemplates } from \"./blocks/blockGitHubIssueTemplates.js\";\nimport { blockGitHubPRTemplate } from \"./blocks/blockGitHubPRTemplate.js\";\nimport { blockGitignore } from \"./blocks/blockGitignore.js\";\nimport { blockMITLicense } from \"./blocks/blockMITLicense.js\";\nimport { blockPackageJson } from \"./blocks/blockPackageJson.js\";\nimport { blockPrettier } from \"./blocks/blockPrettier.js\";\nimport { blockREADME } from \"./blocks/blockREADME.js\";\nimport { blockTemplatedBy } from \"./blocks/blockTemplatedBy.js\";\nimport { blockTSup } from \"./blocks/blockTSup.js\";\nimport { blockTypeScript } from \"./blocks/blockTypeScript.js\";\n\nexport const presetMinimal = base.createPreset({\n\tabout: {\n\t\tdescription:\n\t\t\t\"Just bare starter tooling: building, formatting, linting, and type checking.\",\n\t\tname: \"Minimal\",\n\t},\n\tblocks: [\n\t\tblockContributingDocs,\n\t\tblockContributorCovenant,\n\t\tblockDevelopmentDocs,\n\t\tblockESLint,\n\t\tblockFunding,\n\t\tblockGitHubActionsCI,\n\t\tblockGitHubIssueTemplates,\n\t\tblockGitHubPRTemplate,\n\t\tblockGitignore,\n\t\tblockMITLicense,\n\t\tblockPackageJson,\n\t\tblockPrettier,\n\t\tblockREADME,\n\t\tblockTemplatedBy,\n\t\tblockTSup,\n\t\tblockTypeScript,\n\t],\n});\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,6BAA6B;AACtC,SAAS,gCAAgC;AACzC,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;AAC5B,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAC1C,SAAS,6BAA6B;AACtC,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAEzB,MAAM,gBAAgB,KAAK,aAAa;AAAA,EAC9C,OAAO;AAAA,IACN,aACC;AAAA,IACD,MAAM;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD,CAAC;","names":[]}
1
+ {"version":3,"sources":["../../src/next/presetMinimal.ts"],"sourcesContent":["import { base } from \"./base.js\";\nimport { blockContributingDocs } from \"./blocks/blockContributingDocs.js\";\nimport { blockContributorCovenant } from \"./blocks/blockContributorCovenant.js\";\nimport { blockDevelopmentDocs } from \"./blocks/blockDevelopmentDocs.js\";\nimport { blockESLint } from \"./blocks/blockESLint.js\";\nimport { blockExampleFiles } from \"./blocks/blockExampleFiles.js\";\nimport { blockFunding } from \"./blocks/blockFunding.js\";\nimport { blockGitHubActionsCI } from \"./blocks/blockGitHubActionsCI.js\";\nimport { blockGitHubIssueTemplates } from \"./blocks/blockGitHubIssueTemplates.js\";\nimport { blockGitHubPRTemplate } from \"./blocks/blockGitHubPRTemplate.js\";\nimport { blockGitignore } from \"./blocks/blockGitignore.js\";\nimport { blockMITLicense } from \"./blocks/blockMITLicense.js\";\nimport { blockPackageJson } from \"./blocks/blockPackageJson.js\";\nimport { blockPrettier } from \"./blocks/blockPrettier.js\";\nimport { blockREADME } from \"./blocks/blockREADME.js\";\nimport { blockRepositoryBranchRuleset } from \"./blocks/blockRepositoryBranchRuleset.js\";\nimport { blockRepositoryLabels } from \"./blocks/blockRepositoryLabels.js\";\nimport { blockRepositorySettings } from \"./blocks/blockRepositorySettings.js\";\nimport { blockTemplatedBy } from \"./blocks/blockTemplatedBy.js\";\nimport { blockTSup } from \"./blocks/blockTSup.js\";\nimport { blockTypeScript } from \"./blocks/blockTypeScript.js\";\n\nexport const presetMinimal = base.createPreset({\n\tabout: {\n\t\tdescription:\n\t\t\t\"Just bare starter tooling: building, formatting, linting, and type checking.\",\n\t\tname: \"Minimal\",\n\t},\n\tblocks: [\n\t\tblockContributingDocs,\n\t\tblockContributorCovenant,\n\t\tblockDevelopmentDocs,\n\t\tblockESLint,\n\t\tblockExampleFiles,\n\t\tblockFunding,\n\t\tblockGitHubActionsCI,\n\t\tblockGitHubIssueTemplates,\n\t\tblockGitHubPRTemplate,\n\t\tblockGitignore,\n\t\tblockMITLicense,\n\t\tblockPackageJson,\n\t\tblockPrettier,\n\t\tblockREADME,\n\t\tblockRepositoryBranchRuleset,\n\t\tblockRepositoryLabels,\n\t\tblockRepositorySettings,\n\t\tblockTemplatedBy,\n\t\tblockTSup,\n\t\tblockTypeScript,\n\t],\n});\n"],"mappings":"AAAA,SAAS,YAAY;AACrB,SAAS,6BAA6B;AACtC,SAAS,gCAAgC;AACzC,SAAS,4BAA4B;AACrC,SAAS,mBAAmB;AAC5B,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAC1C,SAAS,6BAA6B;AACtC,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,oCAAoC;AAC7C,SAAS,6BAA6B;AACtC,SAAS,+BAA+B;AACxC,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAEzB,MAAM,gBAAgB,KAAK,aAAa;AAAA,EAC9C,OAAO;AAAA,IACN,aACC;AAAA,IACD,MAAM;AAAA,EACP;AAAA,EACA,QAAQ;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD,CAAC;","names":[]}
@@ -0,0 +1,7 @@
1
+ import { Options } from '../shared/types.js';
2
+ import 'zod';
3
+ import '../shared/codes.js';
4
+
5
+ declare function runCreateEnginePreset(options: Options): Promise<void>;
6
+
7
+ export { runCreateEnginePreset };
@@ -0,0 +1,20 @@
1
+ import { runPreset } from "create";
2
+ import { presetCommon } from "./presetCommon.js";
3
+ import { presetEverything } from "./presetEverything.js";
4
+ import { presetMinimal } from "./presetMinimal.js";
5
+ const presets = {
6
+ common: presetCommon,
7
+ everything: presetEverything,
8
+ minimal: presetMinimal
9
+ };
10
+ async function runCreateEnginePreset(options) {
11
+ const preset = options.base && options.base !== "prompt" && presets[options.base];
12
+ if (!preset) {
13
+ throw new Error(`Cannot yet use create engine with base ${options.base}.`);
14
+ }
15
+ await runPreset(preset, { mode: "initialize", options });
16
+ }
17
+ export {
18
+ runCreateEnginePreset
19
+ };
20
+ //# sourceMappingURL=runCreateEnginePreset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/next/runCreateEnginePreset.ts"],"sourcesContent":["import { runPreset } from \"create\";\n\nimport { Options } from \"../shared/types.js\";\nimport { presetCommon } from \"./presetCommon.js\";\nimport { presetEverything } from \"./presetEverything.js\";\nimport { presetMinimal } from \"./presetMinimal.js\";\n\nconst presets = {\n\tcommon: presetCommon,\n\teverything: presetEverything,\n\tminimal: presetMinimal,\n};\n\nexport async function runCreateEnginePreset(options: Options) {\n\tconst preset =\n\t\toptions.base && options.base !== \"prompt\" && presets[options.base];\n\n\tif (!preset) {\n\t\tthrow new Error(`Cannot yet use create engine with base ${options.base}.`);\n\t}\n\n\tawait runPreset(preset, { mode: \"initialize\", options });\n}\n"],"mappings":"AAAA,SAAS,iBAAiB;AAG1B,SAAS,oBAAoB;AAC7B,SAAS,wBAAwB;AACjC,SAAS,qBAAqB;AAE9B,MAAM,UAAU;AAAA,EACf,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,SAAS;AACV;AAEA,eAAsB,sBAAsB,SAAkB;AAC7D,QAAM,SACL,QAAQ,QAAQ,QAAQ,SAAS,YAAY,QAAQ,QAAQ,IAAI;AAElE,MAAI,CAAC,QAAQ;AACZ,UAAM,IAAI,MAAM,0CAA0C,QAAQ,IAAI,GAAG;AAAA,EAC1E;AAEA,QAAM,UAAU,QAAQ,EAAE,MAAM,cAAc,QAAQ,CAAC;AACxD;","names":[]}
@@ -1,14 +1,13 @@
1
+ import { Octokit } from 'octokit';
1
2
  import { Options } from '../types.js';
2
- import { GitHub } from './getGitHub.js';
3
3
  import 'zod';
4
4
  import '../codes.js';
5
- import 'octokit';
6
5
 
7
6
  type EnsureRepositoryExistsOptions = Pick<Options, "mode" | "owner" | "preserveGeneratedFrom" | "repository">;
8
7
  interface RepositoryExistsResult {
9
- github: GitHub | undefined;
8
+ octokit: Octokit | undefined;
10
9
  repository: string;
11
10
  }
12
- declare function ensureRepositoryExists(github: GitHub | undefined, options: EnsureRepositoryExistsOptions): Promise<Partial<RepositoryExistsResult>>;
11
+ declare function ensureRepositoryExists(octokit: Octokit | undefined, options: EnsureRepositoryExistsOptions): Promise<Partial<RepositoryExistsResult>>;
13
12
 
14
13
  export { type EnsureRepositoryExistsOptions, type RepositoryExistsResult, ensureRepositoryExists };
@@ -1,13 +1,14 @@
1
1
  import * as prompts from "@clack/prompts";
2
2
  import { doesRepositoryExist } from "../doesRepositoryExist.js";
3
+ import { isUsingCreateEngine } from "../isUsingCreateEngine.js";
3
4
  import { filterPromptCancel } from "../prompts.js";
4
5
  import { createRepositoryWithApi } from "./createRepositoryWithApi.js";
5
- async function ensureRepositoryExists(github, options) {
6
+ async function ensureRepositoryExists(octokit, options) {
6
7
  let { repository } = options;
7
8
  let createRepository = options.mode === "create";
8
- while (github) {
9
- if (await doesRepositoryExist(github.octokit, options)) {
10
- return { github, repository };
9
+ while (octokit) {
10
+ if (isUsingCreateEngine() || await doesRepositoryExist(octokit, options)) {
11
+ return { octokit, repository };
11
12
  }
12
13
  const selection = createRepository ? "create" : filterPromptCancel(
13
14
  await prompts.select({
@@ -32,12 +33,12 @@ async function ensureRepositoryExists(github, options) {
32
33
  case void 0:
33
34
  return {};
34
35
  case "create":
35
- await createRepositoryWithApi(github.octokit, {
36
+ await createRepositoryWithApi(octokit, {
36
37
  owner: options.owner,
37
38
  preserveGeneratedFrom: options.preserveGeneratedFrom,
38
39
  repository
39
40
  });
40
- return { github, repository };
41
+ return { octokit, repository };
41
42
  case "different": {
42
43
  const newRepository = filterPromptCancel(
43
44
  await prompts.text({
@@ -51,11 +52,11 @@ async function ensureRepositoryExists(github, options) {
51
52
  break;
52
53
  }
53
54
  case "local":
54
- github = void 0;
55
+ octokit = void 0;
55
56
  break;
56
57
  }
57
58
  }
58
- return { github, repository };
59
+ return { octokit, repository };
59
60
  }
60
61
  export {
61
62
  ensureRepositoryExists
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/options/ensureRepositoryExists.ts"],"sourcesContent":["import * as prompts from \"@clack/prompts\";\n\nimport { doesRepositoryExist } from \"../doesRepositoryExist.js\";\nimport { filterPromptCancel } from \"../prompts.js\";\nimport { Options } from \"../types.js\";\nimport { createRepositoryWithApi } from \"./createRepositoryWithApi.js\";\nimport { GitHub } from \"./getGitHub.js\";\n\nexport type EnsureRepositoryExistsOptions = Pick<\n\tOptions,\n\t\"mode\" | \"owner\" | \"preserveGeneratedFrom\" | \"repository\"\n>;\n\nexport interface RepositoryExistsResult {\n\tgithub: GitHub | undefined;\n\trepository: string;\n}\n\nexport async function ensureRepositoryExists(\n\tgithub: GitHub | undefined,\n\toptions: EnsureRepositoryExistsOptions,\n): Promise<Partial<RepositoryExistsResult>> {\n\t// We'll only respect input options once before prompting for them\n\tlet { repository } = options;\n\tlet createRepository = options.mode === \"create\";\n\n\t// We'll continuously pester the user for a repository\n\t// until they bail, create a new one, or it exists.\n\twhile (github) {\n\t\tif (await doesRepositoryExist(github.octokit, options)) {\n\t\t\treturn { github, repository };\n\t\t}\n\n\t\tconst selection = createRepository\n\t\t\t? \"create\"\n\t\t\t: filterPromptCancel(\n\t\t\t\t\t(await prompts.select({\n\t\t\t\t\t\tmessage: `Repository ${options.repository} doesn't seem to exist under ${options.owner}. What would you like to do?`,\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{ label: \"Create a new repository\", value: \"create\" },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: \"Switch to a different repository name\",\n\t\t\t\t\t\t\t\tvalue: \"different\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: \"Keep changes local\",\n\t\t\t\t\t\t\t\tvalue: \"local\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ label: \"Bail out and maybe try again later\", value: \"bail\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t})) as \"bail\" | \"create\" | \"different\" | \"local\",\n\t\t\t\t);\n\n\t\tcreateRepository = false;\n\n\t\tswitch (selection) {\n\t\t\tcase \"bail\":\n\t\t\tcase undefined:\n\t\t\t\treturn {};\n\n\t\t\tcase \"create\":\n\t\t\t\tawait createRepositoryWithApi(github.octokit, {\n\t\t\t\t\towner: options.owner,\n\t\t\t\t\tpreserveGeneratedFrom: options.preserveGeneratedFrom,\n\t\t\t\t\trepository,\n\t\t\t\t});\n\t\t\t\treturn { github, repository };\n\n\t\t\tcase \"different\": {\n\t\t\t\tconst newRepository = filterPromptCancel(\n\t\t\t\t\tawait prompts.text({\n\t\t\t\t\t\tmessage: `What would you like to call the repository?`,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\tif (!newRepository) {\n\t\t\t\t\treturn {};\n\t\t\t\t}\n\n\t\t\t\trepository = newRepository;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"local\":\n\t\t\t\tgithub = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn { github, repository };\n}\n"],"mappings":"AAAA,YAAY,aAAa;AAEzB,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AAEnC,SAAS,+BAA+B;AAaxC,eAAsB,uBACrB,QACA,SAC2C;AAE3C,MAAI,EAAE,WAAW,IAAI;AACrB,MAAI,mBAAmB,QAAQ,SAAS;AAIxC,SAAO,QAAQ;AACd,QAAI,MAAM,oBAAoB,OAAO,SAAS,OAAO,GAAG;AACvD,aAAO,EAAE,QAAQ,WAAW;AAAA,IAC7B;AAEA,UAAM,YAAY,mBACf,WACA;AAAA,MACC,MAAM,QAAQ,OAAO;AAAA,QACrB,SAAS,cAAc,QAAQ,UAAU,gCAAgC,QAAQ,KAAK;AAAA,QACtF,SAAS;AAAA,UACR,EAAE,OAAO,2BAA2B,OAAO,SAAS;AAAA,UACpD;AAAA,YACC,OAAO;AAAA,YACP,OAAO;AAAA,UACR;AAAA,UACA;AAAA,YACC,OAAO;AAAA,YACP,OAAO;AAAA,UACR;AAAA,UACA,EAAE,OAAO,sCAAsC,OAAO,OAAO;AAAA,QAC9D;AAAA,MACD,CAAC;AAAA,IACF;AAEF,uBAAmB;AAEnB,YAAQ,WAAW;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,CAAC;AAAA,MAET,KAAK;AACJ,cAAM,wBAAwB,OAAO,SAAS;AAAA,UAC7C,OAAO,QAAQ;AAAA,UACf,uBAAuB,QAAQ;AAAA,UAC/B;AAAA,QACD,CAAC;AACD,eAAO,EAAE,QAAQ,WAAW;AAAA,MAE7B,KAAK,aAAa;AACjB,cAAM,gBAAgB;AAAA,UACrB,MAAM,QAAQ,KAAK;AAAA,YAClB,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI,CAAC,eAAe;AACnB,iBAAO,CAAC;AAAA,QACT;AAEA,qBAAa;AACb;AAAA,MACD;AAAA,MAEA,KAAK;AACJ,iBAAS;AACT;AAAA,IACF;AAAA,EACD;AAEA,SAAO,EAAE,QAAQ,WAAW;AAC7B;","names":[]}
1
+ {"version":3,"sources":["../../../src/shared/options/ensureRepositoryExists.ts"],"sourcesContent":["import * as prompts from \"@clack/prompts\";\nimport { Octokit } from \"octokit\";\n\nimport { doesRepositoryExist } from \"../doesRepositoryExist.js\";\nimport { isUsingCreateEngine } from \"../isUsingCreateEngine.js\";\nimport { filterPromptCancel } from \"../prompts.js\";\nimport { Options } from \"../types.js\";\nimport { createRepositoryWithApi } from \"./createRepositoryWithApi.js\";\n\nexport type EnsureRepositoryExistsOptions = Pick<\n\tOptions,\n\t\"mode\" | \"owner\" | \"preserveGeneratedFrom\" | \"repository\"\n>;\n\nexport interface RepositoryExistsResult {\n\toctokit: Octokit | undefined;\n\trepository: string;\n}\n\nexport async function ensureRepositoryExists(\n\toctokit: Octokit | undefined,\n\toptions: EnsureRepositoryExistsOptions,\n): Promise<Partial<RepositoryExistsResult>> {\n\t// We'll only respect input options once before prompting for them\n\tlet { repository } = options;\n\tlet createRepository = options.mode === \"create\";\n\n\t// We'll continuously pester the user for a repository\n\t// until they bail, create a new one, or it exists.\n\twhile (octokit) {\n\t\tif (\n\t\t\tisUsingCreateEngine() ||\n\t\t\t(await doesRepositoryExist(octokit, options))\n\t\t) {\n\t\t\treturn { octokit, repository };\n\t\t}\n\n\t\tconst selection = createRepository\n\t\t\t? \"create\"\n\t\t\t: filterPromptCancel(\n\t\t\t\t\t(await prompts.select({\n\t\t\t\t\t\tmessage: `Repository ${options.repository} doesn't seem to exist under ${options.owner}. What would you like to do?`,\n\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t{ label: \"Create a new repository\", value: \"create\" },\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: \"Switch to a different repository name\",\n\t\t\t\t\t\t\t\tvalue: \"different\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tlabel: \"Keep changes local\",\n\t\t\t\t\t\t\t\tvalue: \"local\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ label: \"Bail out and maybe try again later\", value: \"bail\" },\n\t\t\t\t\t\t],\n\t\t\t\t\t})) as \"bail\" | \"create\" | \"different\" | \"local\",\n\t\t\t\t);\n\n\t\tcreateRepository = false;\n\n\t\tswitch (selection) {\n\t\t\tcase \"bail\":\n\t\t\tcase undefined:\n\t\t\t\treturn {};\n\n\t\t\tcase \"create\":\n\t\t\t\tawait createRepositoryWithApi(octokit, {\n\t\t\t\t\towner: options.owner,\n\t\t\t\t\tpreserveGeneratedFrom: options.preserveGeneratedFrom,\n\t\t\t\t\trepository,\n\t\t\t\t});\n\t\t\t\treturn { octokit, repository };\n\n\t\t\tcase \"different\": {\n\t\t\t\tconst newRepository = filterPromptCancel(\n\t\t\t\t\tawait prompts.text({\n\t\t\t\t\t\tmessage: `What would you like to call the repository?`,\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\tif (!newRepository) {\n\t\t\t\t\treturn {};\n\t\t\t\t}\n\n\t\t\t\trepository = newRepository;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"local\":\n\t\t\t\toctokit = undefined;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn { octokit, repository };\n}\n"],"mappings":"AAAA,YAAY,aAAa;AAGzB,SAAS,2BAA2B;AACpC,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AAEnC,SAAS,+BAA+B;AAYxC,eAAsB,uBACrB,SACA,SAC2C;AAE3C,MAAI,EAAE,WAAW,IAAI;AACrB,MAAI,mBAAmB,QAAQ,SAAS;AAIxC,SAAO,SAAS;AACf,QACC,oBAAoB,KACnB,MAAM,oBAAoB,SAAS,OAAO,GAC1C;AACD,aAAO,EAAE,SAAS,WAAW;AAAA,IAC9B;AAEA,UAAM,YAAY,mBACf,WACA;AAAA,MACC,MAAM,QAAQ,OAAO;AAAA,QACrB,SAAS,cAAc,QAAQ,UAAU,gCAAgC,QAAQ,KAAK;AAAA,QACtF,SAAS;AAAA,UACR,EAAE,OAAO,2BAA2B,OAAO,SAAS;AAAA,UACpD;AAAA,YACC,OAAO;AAAA,YACP,OAAO;AAAA,UACR;AAAA,UACA;AAAA,YACC,OAAO;AAAA,YACP,OAAO;AAAA,UACR;AAAA,UACA,EAAE,OAAO,sCAAsC,OAAO,OAAO;AAAA,QAC9D;AAAA,MACD,CAAC;AAAA,IACF;AAEF,uBAAmB;AAEnB,YAAQ,WAAW;AAAA,MAClB,KAAK;AAAA,MACL,KAAK;AACJ,eAAO,CAAC;AAAA,MAET,KAAK;AACJ,cAAM,wBAAwB,SAAS;AAAA,UACtC,OAAO,QAAQ;AAAA,UACf,uBAAuB,QAAQ;AAAA,UAC/B;AAAA,QACD,CAAC;AACD,eAAO,EAAE,SAAS,WAAW;AAAA,MAE9B,KAAK,aAAa;AACjB,cAAM,gBAAgB;AAAA,UACrB,MAAM,QAAQ,KAAK;AAAA,YAClB,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAEA,YAAI,CAAC,eAAe;AACnB,iBAAO,CAAC;AAAA,QACT;AAEA,qBAAa;AACb;AAAA,MACD;AAAA,MAEA,KAAK;AACJ,kBAAU;AACV;AAAA,IACF;AAAA,EACD;AAEA,SAAO,EAAE,SAAS,WAAW;AAC9B;","names":[]}
@@ -1,11 +1,10 @@
1
+ import { Octokit } from 'octokit';
1
2
  import { z } from 'zod';
2
3
  import { Options, Mode, PromptedOptions } from '../types.js';
3
- import { GitHub } from './getGitHub.js';
4
4
  import '../codes.js';
5
- import 'octokit';
6
5
 
7
- interface GitHubAndOptions {
8
- github: GitHub | undefined;
6
+ interface OctokitAndOptions {
7
+ octokit: Octokit | undefined;
9
8
  options: Options;
10
9
  }
11
10
  interface OptionsParseCancelled {
@@ -14,9 +13,9 @@ interface OptionsParseCancelled {
14
13
  options: object;
15
14
  }
16
15
  type OptionsParseResult = OptionsParseCancelled | OptionsParseSuccess;
17
- interface OptionsParseSuccess extends GitHubAndOptions {
16
+ interface OptionsParseSuccess extends OctokitAndOptions {
18
17
  cancelled: false;
19
18
  }
20
19
  declare function readOptions(args: string[], mode: Mode, promptedOptions?: PromptedOptions): Promise<OptionsParseResult>;
21
20
 
22
- export { type GitHubAndOptions, type OptionsParseCancelled, type OptionsParseResult, type OptionsParseSuccess, readOptions };
21
+ export { type OctokitAndOptions, type OptionsParseCancelled, type OptionsParseResult, type OptionsParseSuccess, readOptions };
@@ -1,4 +1,5 @@
1
1
  import { parseArgs } from "node:util";
2
+ import { octokitFromAuth } from "octokit-from-auth";
2
3
  import { titleCase } from "title-case";
3
4
  import { withSpinner } from "../cli/spinners.js";
4
5
  import { allArgOptions } from "./args.js";
@@ -7,7 +8,6 @@ import { createOptionDefaults } from "./createOptionDefaults/index.js";
7
8
  import { detectEmailRedundancy } from "./detectEmailRedundancy.js";
8
9
  import { ensureRepositoryExists } from "./ensureRepositoryExists.js";
9
10
  import { getBase } from "./getBase.js";
10
- import { getGitHub } from "./getGitHub.js";
11
11
  import { getPrefillOrPromptedOption } from "./getPrefillOrPromptedOption.js";
12
12
  import { logInferredOptions } from "./logInferredOptions.js";
13
13
  import { optionsSchema } from "./optionsSchema.js";
@@ -116,8 +116,11 @@ async function readOptions(args, mode, promptedOptions = {}) {
116
116
  options
117
117
  };
118
118
  }
119
- const { github, repository } = await ensureRepositoryExists(
120
- options.skipGitHubApi ? void 0 : await withSpinner("Checking GitHub authentication", getGitHub),
119
+ const { octokit, repository } = await ensureRepositoryExists(
120
+ options.skipGitHubApi ? void 0 : await withSpinner(
121
+ "Checking GitHub authentication",
122
+ async () => octokitFromAuth()
123
+ ),
121
124
  {
122
125
  mode,
123
126
  owner: options.owner,
@@ -220,7 +223,7 @@ async function readOptions(args, mode, promptedOptions = {}) {
220
223
  }
221
224
  return {
222
225
  cancelled: false,
223
- github,
226
+ octokit,
224
227
  options: augmentedOptions
225
228
  };
226
229
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/shared/options/readOptions.ts"],"sourcesContent":["import { parseArgs } from \"node:util\";\nimport { titleCase } from \"title-case\";\nimport { z } from \"zod\";\n\nimport { withSpinner } from \"../cli/spinners.js\";\nimport { Mode, OptionsGuide, PromptedOptions } from \"../types.js\";\nimport { Options, OptionsLogo } from \"../types.js\";\nimport { allArgOptions } from \"./args.js\";\nimport { augmentOptionsWithExcludes } from \"./augmentOptionsWithExcludes.js\";\nimport { createOptionDefaults } from \"./createOptionDefaults/index.js\";\nimport { detectEmailRedundancy } from \"./detectEmailRedundancy.js\";\nimport { ensureRepositoryExists } from \"./ensureRepositoryExists.js\";\nimport { getBase } from \"./getBase.js\";\nimport { getGitHub, GitHub } from \"./getGitHub.js\";\nimport { getPrefillOrPromptedOption } from \"./getPrefillOrPromptedOption.js\";\nimport { logInferredOptions } from \"./logInferredOptions.js\";\nimport { optionsSchema } from \"./optionsSchema.js\";\n\nexport interface GitHubAndOptions {\n\tgithub: GitHub | undefined;\n\toptions: Options;\n}\n\nexport interface OptionsParseCancelled {\n\tcancelled: true;\n\terror?: string | z.ZodError<object>;\n\toptions: object;\n}\n\nexport type OptionsParseResult = OptionsParseCancelled | OptionsParseSuccess;\n\nexport interface OptionsParseSuccess extends GitHubAndOptions {\n\tcancelled: false;\n}\n\nexport async function readOptions(\n\targs: string[],\n\tmode: Mode,\n\tpromptedOptions: PromptedOptions = {},\n): Promise<OptionsParseResult> {\n\tconst defaults = createOptionDefaults(promptedOptions);\n\tconst { values } = parseArgs({\n\t\targs,\n\t\toptions: allArgOptions,\n\t\tstrict: false,\n\t\ttokens: true,\n\t});\n\n\tif (mode === \"migrate\" && !values.base) {\n\t\tvalues.base = await getBase();\n\t}\n\n\tconst mappedOptions = {\n\t\taccess: values.access,\n\t\tauthor: values.author,\n\t\tauto: !!values.auto,\n\t\tbase: values.base,\n\t\tbin: values.bin,\n\t\tdescription: values.description,\n\t\tdirectory: values.directory,\n\t\temail:\n\t\t\t(values.email ?? values[\"email-github\"] ?? values[\"email-npm\"])\n\t\t\t\t? {\n\t\t\t\t\t\tgithub: values.email ?? values[\"email-github\"],\n\t\t\t\t\t\tnpm: values.email ?? values[\"email-npm\"],\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\texcludeAllContributors: values[\"exclude-all-contributors\"],\n\t\texcludeCompliance: values[\"exclude-compliance\"],\n\t\texcludeLintESLint: values[\"exclude-lint-eslint\"],\n\t\texcludeLintJSDoc: values[\"exclude-lint-jsdoc\"],\n\t\texcludeLintJson: values[\"exclude-lint-json\"],\n\t\texcludeLintKnip: values[\"exclude-lint-knip\"],\n\t\texcludeLintMd: values[\"exclude-lint-md\"],\n\t\texcludeLintPackageJson: values[\"exclude-lint-package-json\"],\n\t\texcludeLintPackages: values[\"exclude-lint-packages\"],\n\t\texcludeLintPerfectionist: values[\"exclude-lint-perfectionist\"],\n\t\texcludeLintRegex: values[\"exclude-lint-regex\"],\n\t\texcludeLintSpelling: values[\"exclude-lint-spelling\"],\n\t\texcludeLintStrict: values[\"exclude-lint-strict\"],\n\t\texcludeLintYml: values[\"exclude-lint-yml\"],\n\t\texcludeReleases: values[\"exclude-releases\"],\n\t\texcludeRenovate: values[\"exclude-renovate\"],\n\t\texcludeTemplatedBy: values[\"exclude-templated-by\"],\n\t\texcludeTests: values[\"unit-tests\"],\n\t\tfunding: values.funding,\n\t\tguide: values.guide,\n\t\tguideTitle: values[\"guide-title\"],\n\t\tlogo: values.logo,\n\t\tlogoAlt: values[\"logo-alt\"],\n\t\toffline: values.offline,\n\t\towner: values.owner,\n\t\tpreserveGeneratedFrom:\n\t\t\tvalues[\"preserve-generated-from\"] ?? values.owner === \"JoshuaKGoldberg\",\n\t\trepository: values.repository,\n\t\tskipAllContributorsApi:\n\t\t\tvalues[\"skip-all-contributors-api\"] ?? values.offline,\n\t\tskipGitHubApi: values[\"skip-github-api\"] ?? values.offline,\n\t\tskipInstall: values[\"skip-install\"],\n\t\tskipRemoval: values[\"skip-removal\"],\n\t\tskipRestore: values[\"skip-restore\"],\n\t\tskipUninstall: values[\"skip-uninstall\"],\n\t\ttitle: values.title,\n\t};\n\n\tconst emailError = detectEmailRedundancy(values);\n\tif (emailError) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: emailError,\n\t\t\toptions: mappedOptions,\n\t\t};\n\t}\n\n\tconst optionsParseResult = optionsSchema.safeParse(mappedOptions);\n\n\tif (!optionsParseResult.success) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: optionsParseResult.error,\n\t\t\toptions: mappedOptions,\n\t\t};\n\t}\n\n\tconst options = optionsParseResult.data;\n\n\tconst ownerOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: defaults.owner,\n\t\tmessage: \"What organization or user will the repository be under?\",\n\t\tname: \"owner\",\n\t\tprovided: options.owner,\n\t});\n\n\toptions.owner ??= ownerOption.value;\n\n\tif (!options.owner) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: ownerOption.error,\n\t\t\toptions,\n\t\t};\n\t}\n\n\tconst repositoryOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: defaults.repository,\n\t\tmessage: \"What will the kebab-case name of the repository be?\",\n\t\tname: \"repository\",\n\t\tprovided: options.repository,\n\t});\n\n\toptions.repository ??= repositoryOption.value;\n\n\tif (!options.repository) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: repositoryOption.error,\n\t\t\toptions,\n\t\t};\n\t}\n\n\tconst { github, repository } = await ensureRepositoryExists(\n\t\toptions.skipGitHubApi\n\t\t\t? undefined\n\t\t\t: await withSpinner(\"Checking GitHub authentication\", getGitHub),\n\t\t{\n\t\t\tmode,\n\t\t\towner: options.owner,\n\t\t\trepository: options.repository,\n\t\t},\n\t);\n\n\tif (!repository) {\n\t\treturn { cancelled: true, error: repositoryOption.error, options };\n\t}\n\n\tconst descriptionOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: async () =>\n\t\t\t(await defaults.description()) ?? \"A very lovely package. Hooray!\",\n\t\tmessage: \"How would you describe the new package?\",\n\t\tname: \"description\",\n\t\tprovided: options.description,\n\t});\n\n\toptions.description ??= descriptionOption.value;\n\n\tif (!options.description) {\n\t\treturn { cancelled: true, error: descriptionOption.error, options };\n\t}\n\n\tconst titleOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: async () =>\n\t\t\t(await defaults.title()) ?? titleCase(repository).replaceAll(\"-\", \" \"),\n\t\tmessage: \"What will the Title Case title of the repository be?\",\n\t\tname: \"title\",\n\t\tprovided: options.title,\n\t});\n\n\toptions.title ??= titleOption.value;\n\n\tif (!options.title) {\n\t\treturn { cancelled: true, error: titleOption.error, options };\n\t}\n\n\tlet guide: OptionsGuide | undefined;\n\n\tif (options.guide) {\n\t\tif (options.guideTitle) {\n\t\t\tguide = { href: options.guide, title: options.guideTitle };\n\t\t} else {\n\t\t\tconst titleOption = await getPrefillOrPromptedOption({\n\t\t\t\tauto: !!mappedOptions.auto,\n\t\t\t\tmessage: \"What is the title text for the guide?\",\n\t\t\t\tname: \"getPrefillOrPromptedOption\",\n\t\t\t});\n\n\t\t\tif (!titleOption.value) {\n\t\t\t\treturn { cancelled: true, error: titleOption.error, options };\n\t\t\t}\n\n\t\t\tguide = { href: options.guide, title: titleOption.value };\n\t\t}\n\t}\n\n\tlet logo: OptionsLogo | undefined;\n\n\tif (options.logo) {\n\t\tif (options.logoAlt) {\n\t\t\tlogo = { alt: options.logoAlt, src: options.logo };\n\t\t} else {\n\t\t\tconst logoAltOption = await getPrefillOrPromptedOption({\n\t\t\t\tauto: !!mappedOptions.auto,\n\t\t\t\tmessage: \"What is the alt text (non-visual description) of the logo?\",\n\t\t\t\tname: \"getPrefillOrPromptedOption\",\n\t\t\t});\n\n\t\t\tif (!logoAltOption.value) {\n\t\t\t\treturn { cancelled: true, error: logoAltOption.error, options };\n\t\t\t}\n\n\t\t\tlogo = { alt: logoAltOption.value, src: options.logo };\n\t\t}\n\t}\n\n\tlet email = options.email ?? (await defaults.email());\n\n\tif (!email) {\n\t\tconst emailOption = await getPrefillOrPromptedOption({\n\t\t\tauto: !!mappedOptions.auto,\n\t\t\tmessage: \"What email should be used in package.json and .md files?\",\n\t\t\tname: \"email\",\n\t\t});\n\n\t\tif (!emailOption.value) {\n\t\t\treturn { cancelled: true, error: emailOption.error, options };\n\t\t}\n\n\t\temail = { github: emailOption.value, npm: emailOption.value };\n\t}\n\n\tconst augmentedOptions = await augmentOptionsWithExcludes({\n\t\t...options,\n\t\taccess: options.access ?? \"public\",\n\t\tauthor:\n\t\t\toptions.author ?? (await defaults.author()) ?? (await defaults.owner()),\n\t\tbin: options.bin ?? (await defaults.bin()),\n\t\tdescription: options.description,\n\t\tdirectory:\n\t\t\toptions.directory ?? promptedOptions.directory ?? options.repository,\n\t\temail,\n\t\tfunding: options.funding ?? (await defaults.funding()),\n\t\tguide: guide ?? (await defaults.guide()),\n\t\tlogo: logo ?? (await defaults.logo()),\n\t\tmode,\n\t\towner: options.owner,\n\t\trepository,\n\t\ttitle: options.title,\n\t});\n\n\tif (!augmentedOptions) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\toptions,\n\t\t};\n\t}\n\n\tif (options.auto) {\n\t\tlogInferredOptions(augmentedOptions);\n\t}\n\n\treturn {\n\t\tcancelled: false,\n\t\tgithub,\n\t\toptions: augmentedOptions,\n\t};\n}\n"],"mappings":"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","names":["titleOption"]}
1
+ {"version":3,"sources":["../../../src/shared/options/readOptions.ts"],"sourcesContent":["import { parseArgs } from \"node:util\";\nimport { Octokit } from \"octokit\";\nimport { octokitFromAuth } from \"octokit-from-auth\";\nimport { titleCase } from \"title-case\";\nimport { z } from \"zod\";\n\nimport { withSpinner } from \"../cli/spinners.js\";\nimport { Mode, OptionsGuide, PromptedOptions } from \"../types.js\";\nimport { Options, OptionsLogo } from \"../types.js\";\nimport { allArgOptions } from \"./args.js\";\nimport { augmentOptionsWithExcludes } from \"./augmentOptionsWithExcludes.js\";\nimport { createOptionDefaults } from \"./createOptionDefaults/index.js\";\nimport { detectEmailRedundancy } from \"./detectEmailRedundancy.js\";\nimport { ensureRepositoryExists } from \"./ensureRepositoryExists.js\";\nimport { getBase } from \"./getBase.js\";\nimport { getPrefillOrPromptedOption } from \"./getPrefillOrPromptedOption.js\";\nimport { logInferredOptions } from \"./logInferredOptions.js\";\nimport { optionsSchema } from \"./optionsSchema.js\";\n\nexport interface OctokitAndOptions {\n\toctokit: Octokit | undefined;\n\toptions: Options;\n}\n\nexport interface OptionsParseCancelled {\n\tcancelled: true;\n\terror?: string | z.ZodError<object>;\n\toptions: object;\n}\n\nexport type OptionsParseResult = OptionsParseCancelled | OptionsParseSuccess;\n\nexport interface OptionsParseSuccess extends OctokitAndOptions {\n\tcancelled: false;\n}\n\nexport async function readOptions(\n\targs: string[],\n\tmode: Mode,\n\tpromptedOptions: PromptedOptions = {},\n): Promise<OptionsParseResult> {\n\tconst defaults = createOptionDefaults(promptedOptions);\n\tconst { values } = parseArgs({\n\t\targs,\n\t\toptions: allArgOptions,\n\t\tstrict: false,\n\t\ttokens: true,\n\t});\n\n\tif (mode === \"migrate\" && !values.base) {\n\t\tvalues.base = await getBase();\n\t}\n\n\tconst mappedOptions = {\n\t\taccess: values.access,\n\t\tauthor: values.author,\n\t\tauto: !!values.auto,\n\t\tbase: values.base,\n\t\tbin: values.bin,\n\t\tdescription: values.description,\n\t\tdirectory: values.directory,\n\t\temail:\n\t\t\t(values.email ?? values[\"email-github\"] ?? values[\"email-npm\"])\n\t\t\t\t? {\n\t\t\t\t\t\tgithub: values.email ?? values[\"email-github\"],\n\t\t\t\t\t\tnpm: values.email ?? values[\"email-npm\"],\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\texcludeAllContributors: values[\"exclude-all-contributors\"],\n\t\texcludeCompliance: values[\"exclude-compliance\"],\n\t\texcludeLintESLint: values[\"exclude-lint-eslint\"],\n\t\texcludeLintJSDoc: values[\"exclude-lint-jsdoc\"],\n\t\texcludeLintJson: values[\"exclude-lint-json\"],\n\t\texcludeLintKnip: values[\"exclude-lint-knip\"],\n\t\texcludeLintMd: values[\"exclude-lint-md\"],\n\t\texcludeLintPackageJson: values[\"exclude-lint-package-json\"],\n\t\texcludeLintPackages: values[\"exclude-lint-packages\"],\n\t\texcludeLintPerfectionist: values[\"exclude-lint-perfectionist\"],\n\t\texcludeLintRegex: values[\"exclude-lint-regex\"],\n\t\texcludeLintSpelling: values[\"exclude-lint-spelling\"],\n\t\texcludeLintStrict: values[\"exclude-lint-strict\"],\n\t\texcludeLintYml: values[\"exclude-lint-yml\"],\n\t\texcludeReleases: values[\"exclude-releases\"],\n\t\texcludeRenovate: values[\"exclude-renovate\"],\n\t\texcludeTemplatedBy: values[\"exclude-templated-by\"],\n\t\texcludeTests: values[\"unit-tests\"],\n\t\tfunding: values.funding,\n\t\tguide: values.guide,\n\t\tguideTitle: values[\"guide-title\"],\n\t\tlogo: values.logo,\n\t\tlogoAlt: values[\"logo-alt\"],\n\t\toffline: values.offline,\n\t\towner: values.owner,\n\t\tpreserveGeneratedFrom:\n\t\t\tvalues[\"preserve-generated-from\"] ?? values.owner === \"JoshuaKGoldberg\",\n\t\trepository: values.repository,\n\t\tskipAllContributorsApi:\n\t\t\tvalues[\"skip-all-contributors-api\"] ?? values.offline,\n\t\tskipGitHubApi: values[\"skip-github-api\"] ?? values.offline,\n\t\tskipInstall: values[\"skip-install\"],\n\t\tskipRemoval: values[\"skip-removal\"],\n\t\tskipRestore: values[\"skip-restore\"],\n\t\tskipUninstall: values[\"skip-uninstall\"],\n\t\ttitle: values.title,\n\t};\n\n\tconst emailError = detectEmailRedundancy(values);\n\tif (emailError) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: emailError,\n\t\t\toptions: mappedOptions,\n\t\t};\n\t}\n\n\tconst optionsParseResult = optionsSchema.safeParse(mappedOptions);\n\n\tif (!optionsParseResult.success) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: optionsParseResult.error,\n\t\t\toptions: mappedOptions,\n\t\t};\n\t}\n\n\tconst options = optionsParseResult.data;\n\n\tconst ownerOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: defaults.owner,\n\t\tmessage: \"What organization or user will the repository be under?\",\n\t\tname: \"owner\",\n\t\tprovided: options.owner,\n\t});\n\n\toptions.owner ??= ownerOption.value;\n\n\tif (!options.owner) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: ownerOption.error,\n\t\t\toptions,\n\t\t};\n\t}\n\n\tconst repositoryOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: defaults.repository,\n\t\tmessage: \"What will the kebab-case name of the repository be?\",\n\t\tname: \"repository\",\n\t\tprovided: options.repository,\n\t});\n\n\toptions.repository ??= repositoryOption.value;\n\n\tif (!options.repository) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\terror: repositoryOption.error,\n\t\t\toptions,\n\t\t};\n\t}\n\n\tconst { octokit, repository } = await ensureRepositoryExists(\n\t\toptions.skipGitHubApi\n\t\t\t? undefined\n\t\t\t: await withSpinner(\"Checking GitHub authentication\", async () =>\n\t\t\t\t\toctokitFromAuth(),\n\t\t\t\t),\n\t\t{\n\t\t\tmode,\n\t\t\towner: options.owner,\n\t\t\trepository: options.repository,\n\t\t},\n\t);\n\n\tif (!repository) {\n\t\treturn { cancelled: true, error: repositoryOption.error, options };\n\t}\n\n\tconst descriptionOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: async () =>\n\t\t\t(await defaults.description()) ?? \"A very lovely package. Hooray!\",\n\t\tmessage: \"How would you describe the new package?\",\n\t\tname: \"description\",\n\t\tprovided: options.description,\n\t});\n\n\toptions.description ??= descriptionOption.value;\n\n\tif (!options.description) {\n\t\treturn { cancelled: true, error: descriptionOption.error, options };\n\t}\n\n\tconst titleOption = await getPrefillOrPromptedOption({\n\t\tauto: !!mappedOptions.auto,\n\t\tgetDefaultValue: async () =>\n\t\t\t(await defaults.title()) ?? titleCase(repository).replaceAll(\"-\", \" \"),\n\t\tmessage: \"What will the Title Case title of the repository be?\",\n\t\tname: \"title\",\n\t\tprovided: options.title,\n\t});\n\n\toptions.title ??= titleOption.value;\n\n\tif (!options.title) {\n\t\treturn { cancelled: true, error: titleOption.error, options };\n\t}\n\n\tlet guide: OptionsGuide | undefined;\n\n\tif (options.guide) {\n\t\tif (options.guideTitle) {\n\t\t\tguide = { href: options.guide, title: options.guideTitle };\n\t\t} else {\n\t\t\tconst titleOption = await getPrefillOrPromptedOption({\n\t\t\t\tauto: !!mappedOptions.auto,\n\t\t\t\tmessage: \"What is the title text for the guide?\",\n\t\t\t\tname: \"getPrefillOrPromptedOption\",\n\t\t\t});\n\n\t\t\tif (!titleOption.value) {\n\t\t\t\treturn { cancelled: true, error: titleOption.error, options };\n\t\t\t}\n\n\t\t\tguide = { href: options.guide, title: titleOption.value };\n\t\t}\n\t}\n\n\tlet logo: OptionsLogo | undefined;\n\n\tif (options.logo) {\n\t\tif (options.logoAlt) {\n\t\t\tlogo = { alt: options.logoAlt, src: options.logo };\n\t\t} else {\n\t\t\tconst logoAltOption = await getPrefillOrPromptedOption({\n\t\t\t\tauto: !!mappedOptions.auto,\n\t\t\t\tmessage: \"What is the alt text (non-visual description) of the logo?\",\n\t\t\t\tname: \"getPrefillOrPromptedOption\",\n\t\t\t});\n\n\t\t\tif (!logoAltOption.value) {\n\t\t\t\treturn { cancelled: true, error: logoAltOption.error, options };\n\t\t\t}\n\n\t\t\tlogo = { alt: logoAltOption.value, src: options.logo };\n\t\t}\n\t}\n\n\tlet email = options.email ?? (await defaults.email());\n\n\tif (!email) {\n\t\tconst emailOption = await getPrefillOrPromptedOption({\n\t\t\tauto: !!mappedOptions.auto,\n\t\t\tmessage: \"What email should be used in package.json and .md files?\",\n\t\t\tname: \"email\",\n\t\t});\n\n\t\tif (!emailOption.value) {\n\t\t\treturn { cancelled: true, error: emailOption.error, options };\n\t\t}\n\n\t\temail = { github: emailOption.value, npm: emailOption.value };\n\t}\n\n\tconst augmentedOptions = await augmentOptionsWithExcludes({\n\t\t...options,\n\t\taccess: options.access ?? \"public\",\n\t\tauthor:\n\t\t\toptions.author ?? (await defaults.author()) ?? (await defaults.owner()),\n\t\tbin: options.bin ?? (await defaults.bin()),\n\t\tdescription: options.description,\n\t\tdirectory:\n\t\t\toptions.directory ?? promptedOptions.directory ?? options.repository,\n\t\temail,\n\t\tfunding: options.funding ?? (await defaults.funding()),\n\t\tguide: guide ?? (await defaults.guide()),\n\t\tlogo: logo ?? (await defaults.logo()),\n\t\tmode,\n\t\towner: options.owner,\n\t\trepository,\n\t\ttitle: options.title,\n\t});\n\n\tif (!augmentedOptions) {\n\t\treturn {\n\t\t\tcancelled: true,\n\t\t\toptions,\n\t\t};\n\t}\n\n\tif (options.auto) {\n\t\tlogInferredOptions(augmentedOptions);\n\t}\n\n\treturn {\n\t\tcancelled: false,\n\t\toctokit,\n\t\toptions: augmentedOptions,\n\t};\n}\n"],"mappings":"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","names":["titleOption"]}
@@ -1,57 +1,52 @@
1
1
  import { execaCommand } from "execa";
2
- import { isUsingCreateEngine } from "../shared/isUsingCreateEngine.js";
3
2
  import { readPackageData, removeDependencies } from "../shared/packages.js";
4
3
  async function finalizeDependencies(options) {
5
- if (isUsingCreateEngine()) {
6
- await execaCommand("pnpm install");
7
- } else {
8
- const devDependencies = [
9
- "@eslint/js",
10
- "@types/node",
11
- "eslint-plugin-n",
12
- "eslint",
13
- "husky",
14
- "lint-staged",
15
- "prettier-plugin-curly",
16
- "prettier-plugin-packagejson",
17
- "prettier-plugin-sh",
18
- "prettier",
19
- "tsup",
20
- "typescript-eslint",
21
- "typescript",
22
- ...options.excludeAllContributors ? [] : ["all-contributors-cli"],
23
- ...options.excludeLintESLint ? [] : ["@eslint-community/eslint-plugin-eslint-comments"],
24
- ...options.excludeLintJSDoc ? [] : ["eslint-plugin-jsdoc"],
25
- ...options.excludeLintJson ? [] : ["eslint-plugin-jsonc"],
26
- ...options.excludeLintKnip ? [] : ["knip"],
27
- ...options.excludeLintMd ? [] : [
28
- "@types/eslint-plugin-markdown",
29
- "eslint-plugin-markdown",
30
- "markdownlint",
31
- "markdownlint-cli",
32
- "sentences-per-line"
33
- ],
34
- ...options.excludeLintPackageJson ? [] : ["eslint-plugin-package-json"],
35
- ...options.excludeLintPerfectionist ? [] : ["eslint-plugin-perfectionist"],
36
- ...options.excludeLintRegex ? [] : ["eslint-plugin-regexp"],
37
- ...options.excludeLintSpelling ? [] : ["cspell"],
38
- ...options.excludeLintYml ? [] : ["eslint-plugin-yml"],
39
- ...options.excludeReleases ? [] : ["@release-it/conventional-changelog", "release-it"],
40
- ...options.excludeTests ? [] : [
41
- "@vitest/coverage-v8",
42
- "@vitest/eslint-plugin",
43
- "console-fail-test",
44
- "vitest"
45
- ]
46
- ].filter(Boolean).sort().map((packageName) => `${packageName}@latest`).join(" ");
47
- await execaCommand(
48
- `pnpm add ${devDependencies} -D${options.offline ? " --offline" : ""}`
49
- );
50
- }
4
+ const devDependencies = [
5
+ "@eslint/js",
6
+ "@types/node",
7
+ "eslint-plugin-n",
8
+ "eslint",
9
+ "husky",
10
+ "lint-staged",
11
+ "prettier-plugin-curly",
12
+ "prettier-plugin-packagejson",
13
+ "prettier-plugin-sh",
14
+ "prettier",
15
+ "tsup",
16
+ "typescript-eslint",
17
+ "typescript",
18
+ ...options.excludeAllContributors ? [] : ["all-contributors-cli"],
19
+ ...options.excludeLintESLint ? [] : ["@eslint-community/eslint-plugin-eslint-comments"],
20
+ ...options.excludeLintJSDoc ? [] : ["eslint-plugin-jsdoc"],
21
+ ...options.excludeLintJson ? [] : ["eslint-plugin-jsonc"],
22
+ ...options.excludeLintKnip ? [] : ["knip"],
23
+ ...options.excludeLintMd ? [] : [
24
+ "@types/eslint-plugin-markdown",
25
+ "eslint-plugin-markdown",
26
+ "markdownlint",
27
+ "markdownlint-cli",
28
+ "sentences-per-line"
29
+ ],
30
+ ...options.excludeLintPackageJson ? [] : ["eslint-plugin-package-json"],
31
+ ...options.excludeLintPerfectionist ? [] : ["eslint-plugin-perfectionist"],
32
+ ...options.excludeLintRegex ? [] : ["eslint-plugin-regexp"],
33
+ ...options.excludeLintSpelling ? [] : ["cspell"],
34
+ ...options.excludeLintYml ? [] : ["eslint-plugin-yml"],
35
+ ...options.excludeReleases ? [] : ["@release-it/conventional-changelog", "release-it"],
36
+ ...options.excludeTests ? [] : [
37
+ "@vitest/coverage-v8",
38
+ "@vitest/eslint-plugin",
39
+ "console-fail-test",
40
+ "vitest"
41
+ ]
42
+ ].filter(Boolean).sort().map((packageName) => `${packageName}@latest`).join(" ");
43
+ await execaCommand(
44
+ `pnpm add ${devDependencies} -D${options.offline ? " --offline" : ""}`
45
+ );
51
46
  if (!options.excludeAllContributors) {
52
47
  await execaCommand(`npx all-contributors-cli generate`);
53
48
  await removeDependencies(
54
- ["all-contributors-cli", "all-contributors-for-repository"],
49
+ ["all-contributors-cli"],
55
50
  (await readPackageData()).devDependencies,
56
51
  "-D"
57
52
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/steps/finalizeDependencies.ts"],"sourcesContent":["import { execaCommand } from \"execa\";\n\nimport { isUsingCreateEngine } from \"../shared/isUsingCreateEngine.js\";\nimport { readPackageData, removeDependencies } from \"../shared/packages.js\";\nimport { Options } from \"../shared/types.js\";\n\nexport async function finalizeDependencies(options: Options) {\n\tif (isUsingCreateEngine()) {\n\t\t// TODO: How to switch from \"latest\" to the actual versions?\n\t\t// Maybe an eslint-plugin-package-json lint rule?\n\t\tawait execaCommand(\"pnpm install\");\n\t} else {\n\t\tconst devDependencies = [\n\t\t\t\"@eslint/js\",\n\t\t\t\"@types/node\",\n\t\t\t\"eslint-plugin-n\",\n\t\t\t\"eslint\",\n\t\t\t\"husky\",\n\t\t\t\"lint-staged\",\n\t\t\t\"prettier-plugin-curly\",\n\t\t\t\"prettier-plugin-packagejson\",\n\t\t\t\"prettier-plugin-sh\",\n\t\t\t\"prettier\",\n\t\t\t\"tsup\",\n\t\t\t\"typescript-eslint\",\n\t\t\t\"typescript\",\n\t\t\t...(options.excludeAllContributors ? [] : [\"all-contributors-cli\"]),\n\t\t\t...(options.excludeLintESLint\n\t\t\t\t? []\n\t\t\t\t: [\"@eslint-community/eslint-plugin-eslint-comments\"]),\n\t\t\t...(options.excludeLintJSDoc ? [] : [\"eslint-plugin-jsdoc\"]),\n\t\t\t...(options.excludeLintJson ? [] : [\"eslint-plugin-jsonc\"]),\n\t\t\t...(options.excludeLintKnip ? [] : [\"knip\"]),\n\t\t\t...(options.excludeLintMd\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\t\"@types/eslint-plugin-markdown\",\n\t\t\t\t\t\t\"eslint-plugin-markdown\",\n\t\t\t\t\t\t\"markdownlint\",\n\t\t\t\t\t\t\"markdownlint-cli\",\n\t\t\t\t\t\t\"sentences-per-line\",\n\t\t\t\t\t]),\n\t\t\t...(options.excludeLintPackageJson ? [] : [\"eslint-plugin-package-json\"]),\n\t\t\t...(options.excludeLintPerfectionist\n\t\t\t\t? []\n\t\t\t\t: [\"eslint-plugin-perfectionist\"]),\n\t\t\t...(options.excludeLintRegex ? [] : [\"eslint-plugin-regexp\"]),\n\t\t\t...(options.excludeLintSpelling ? [] : [\"cspell\"]),\n\t\t\t...(options.excludeLintYml ? [] : [\"eslint-plugin-yml\"]),\n\t\t\t...(options.excludeReleases\n\t\t\t\t? []\n\t\t\t\t: [\"@release-it/conventional-changelog\", \"release-it\"]),\n\t\t\t...(options.excludeTests\n\t\t\t\t? []\n\t\t\t\t: [\n\t\t\t\t\t\t\"@vitest/coverage-v8\",\n\t\t\t\t\t\t\"@vitest/eslint-plugin\",\n\t\t\t\t\t\t\"console-fail-test\",\n\t\t\t\t\t\t\"vitest\",\n\t\t\t\t\t]),\n\t\t]\n\t\t\t.filter(Boolean)\n\t\t\t.sort()\n\t\t\t.map((packageName) => `${packageName}@latest`)\n\t\t\t.join(\" \");\n\n\t\tawait execaCommand(\n\t\t\t`pnpm add ${devDependencies} -D${options.offline ? \" --offline\" : \"\"}`,\n\t\t);\n\t}\n\n\tif (!options.excludeAllContributors) {\n\t\tawait execaCommand(`npx all-contributors-cli generate`);\n\t\tawait removeDependencies(\n\t\t\t[\"all-contributors-cli\", \"all-contributors-for-repository\"],\n\t\t\t(await readPackageData()).devDependencies,\n\t\t\t\"-D\",\n\t\t);\n\t}\n\n\tawait execaCommand(`pnpm dedupe --offline`);\n}\n"],"mappings":"AAAA,SAAS,oBAAoB;AAE7B,SAAS,2BAA2B;AACpC,SAAS,iBAAiB,0BAA0B;AAGpD,eAAsB,qBAAqB,SAAkB;AAC5D,MAAI,oBAAoB,GAAG;AAG1B,UAAM,aAAa,cAAc;AAAA,EAClC,OAAO;AACN,UAAM,kBAAkB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAI,QAAQ,yBAAyB,CAAC,IAAI,CAAC,sBAAsB;AAAA,MACjE,GAAI,QAAQ,oBACT,CAAC,IACD,CAAC,iDAAiD;AAAA,MACrD,GAAI,QAAQ,mBAAmB,CAAC,IAAI,CAAC,qBAAqB;AAAA,MAC1D,GAAI,QAAQ,kBAAkB,CAAC,IAAI,CAAC,qBAAqB;AAAA,MACzD,GAAI,QAAQ,kBAAkB,CAAC,IAAI,CAAC,MAAM;AAAA,MAC1C,GAAI,QAAQ,gBACT,CAAC,IACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACF,GAAI,QAAQ,yBAAyB,CAAC,IAAI,CAAC,4BAA4B;AAAA,MACvE,GAAI,QAAQ,2BACT,CAAC,IACD,CAAC,6BAA6B;AAAA,MACjC,GAAI,QAAQ,mBAAmB,CAAC,IAAI,CAAC,sBAAsB;AAAA,MAC3D,GAAI,QAAQ,sBAAsB,CAAC,IAAI,CAAC,QAAQ;AAAA,MAChD,GAAI,QAAQ,iBAAiB,CAAC,IAAI,CAAC,mBAAmB;AAAA,MACtD,GAAI,QAAQ,kBACT,CAAC,IACD,CAAC,sCAAsC,YAAY;AAAA,MACtD,GAAI,QAAQ,eACT,CAAC,IACD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACH,EACE,OAAO,OAAO,EACd,KAAK,EACL,IAAI,CAAC,gBAAgB,GAAG,WAAW,SAAS,EAC5C,KAAK,GAAG;AAEV,UAAM;AAAA,MACL,YAAY,eAAe,MAAM,QAAQ,UAAU,eAAe,EAAE;AAAA,IACrE;AAAA,EACD;AAEA,MAAI,CAAC,QAAQ,wBAAwB;AACpC,UAAM,aAAa,mCAAmC;AACtD,UAAM;AAAA,MACL,CAAC,wBAAwB,iCAAiC;AAAA,OACzD,MAAM,gBAAgB,GAAG;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAEA,QAAM,aAAa,uBAAuB;AAC3C;","names":[]}
1
+ {"version":3,"sources":["../../src/steps/finalizeDependencies.ts"],"sourcesContent":["import { execaCommand } from \"execa\";\n\nimport { readPackageData, removeDependencies } from \"../shared/packages.js\";\nimport { Options } from \"../shared/types.js\";\n\nexport async function finalizeDependencies(options: Options) {\n\tconst devDependencies = [\n\t\t\"@eslint/js\",\n\t\t\"@types/node\",\n\t\t\"eslint-plugin-n\",\n\t\t\"eslint\",\n\t\t\"husky\",\n\t\t\"lint-staged\",\n\t\t\"prettier-plugin-curly\",\n\t\t\"prettier-plugin-packagejson\",\n\t\t\"prettier-plugin-sh\",\n\t\t\"prettier\",\n\t\t\"tsup\",\n\t\t\"typescript-eslint\",\n\t\t\"typescript\",\n\t\t...(options.excludeAllContributors ? [] : [\"all-contributors-cli\"]),\n\t\t...(options.excludeLintESLint\n\t\t\t? []\n\t\t\t: [\"@eslint-community/eslint-plugin-eslint-comments\"]),\n\t\t...(options.excludeLintJSDoc ? [] : [\"eslint-plugin-jsdoc\"]),\n\t\t...(options.excludeLintJson ? [] : [\"eslint-plugin-jsonc\"]),\n\t\t...(options.excludeLintKnip ? [] : [\"knip\"]),\n\t\t...(options.excludeLintMd\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t\"@types/eslint-plugin-markdown\",\n\t\t\t\t\t\"eslint-plugin-markdown\",\n\t\t\t\t\t\"markdownlint\",\n\t\t\t\t\t\"markdownlint-cli\",\n\t\t\t\t\t\"sentences-per-line\",\n\t\t\t\t]),\n\t\t...(options.excludeLintPackageJson ? [] : [\"eslint-plugin-package-json\"]),\n\t\t...(options.excludeLintPerfectionist\n\t\t\t? []\n\t\t\t: [\"eslint-plugin-perfectionist\"]),\n\t\t...(options.excludeLintRegex ? [] : [\"eslint-plugin-regexp\"]),\n\t\t...(options.excludeLintSpelling ? [] : [\"cspell\"]),\n\t\t...(options.excludeLintYml ? [] : [\"eslint-plugin-yml\"]),\n\t\t...(options.excludeReleases\n\t\t\t? []\n\t\t\t: [\"@release-it/conventional-changelog\", \"release-it\"]),\n\t\t...(options.excludeTests\n\t\t\t? []\n\t\t\t: [\n\t\t\t\t\t\"@vitest/coverage-v8\",\n\t\t\t\t\t\"@vitest/eslint-plugin\",\n\t\t\t\t\t\"console-fail-test\",\n\t\t\t\t\t\"vitest\",\n\t\t\t\t]),\n\t]\n\t\t.filter(Boolean)\n\t\t.sort()\n\t\t.map((packageName) => `${packageName}@latest`)\n\t\t.join(\" \");\n\n\tawait execaCommand(\n\t\t`pnpm add ${devDependencies} -D${options.offline ? \" --offline\" : \"\"}`,\n\t);\n\n\tif (!options.excludeAllContributors) {\n\t\tawait execaCommand(`npx all-contributors-cli generate`);\n\t\tawait removeDependencies(\n\t\t\t[\"all-contributors-cli\"],\n\t\t\t(await readPackageData()).devDependencies,\n\t\t\t\"-D\",\n\t\t);\n\t}\n\n\tawait execaCommand(`pnpm dedupe --offline`);\n}\n"],"mappings":"AAAA,SAAS,oBAAoB;AAE7B,SAAS,iBAAiB,0BAA0B;AAGpD,eAAsB,qBAAqB,SAAkB;AAC5D,QAAM,kBAAkB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAI,QAAQ,yBAAyB,CAAC,IAAI,CAAC,sBAAsB;AAAA,IACjE,GAAI,QAAQ,oBACT,CAAC,IACD,CAAC,iDAAiD;AAAA,IACrD,GAAI,QAAQ,mBAAmB,CAAC,IAAI,CAAC,qBAAqB;AAAA,IAC1D,GAAI,QAAQ,kBAAkB,CAAC,IAAI,CAAC,qBAAqB;AAAA,IACzD,GAAI,QAAQ,kBAAkB,CAAC,IAAI,CAAC,MAAM;AAAA,IAC1C,GAAI,QAAQ,gBACT,CAAC,IACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,IACF,GAAI,QAAQ,yBAAyB,CAAC,IAAI,CAAC,4BAA4B;AAAA,IACvE,GAAI,QAAQ,2BACT,CAAC,IACD,CAAC,6BAA6B;AAAA,IACjC,GAAI,QAAQ,mBAAmB,CAAC,IAAI,CAAC,sBAAsB;AAAA,IAC3D,GAAI,QAAQ,sBAAsB,CAAC,IAAI,CAAC,QAAQ;AAAA,IAChD,GAAI,QAAQ,iBAAiB,CAAC,IAAI,CAAC,mBAAmB;AAAA,IACtD,GAAI,QAAQ,kBACT,CAAC,IACD,CAAC,sCAAsC,YAAY;AAAA,IACtD,GAAI,QAAQ,eACT,CAAC,IACD;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACH,EACE,OAAO,OAAO,EACd,KAAK,EACL,IAAI,CAAC,gBAAgB,GAAG,WAAW,SAAS,EAC5C,KAAK,GAAG;AAEV,QAAM;AAAA,IACL,YAAY,eAAe,MAAM,QAAQ,UAAU,eAAe,EAAE;AAAA,EACrE;AAEA,MAAI,CAAC,QAAQ,wBAAwB;AACpC,UAAM,aAAa,mCAAmC;AACtD,UAAM;AAAA,MACL,CAAC,sBAAsB;AAAA,OACtB,MAAM,gBAAgB,GAAG;AAAA,MAC1B;AAAA,IACD;AAAA,EACD;AAEA,QAAM,aAAa,uBAAuB;AAC3C;","names":[]}