create-vue 2.0.5 → 2.1.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 (70) hide show
  1. package/LICENSE +153 -1
  2. package/outfile.cjs +338 -129
  3. package/package.json +16 -12
  4. package/template/base/node_modules/.bin/vite +17 -0
  5. package/template/base/package.json +5 -10
  6. package/template/base/vite.config.js +2 -11
  7. package/template/code/default/src/components/icons/IconTooling.vue +0 -2
  8. package/template/code/router/src/components/icons/IconTooling.vue +0 -2
  9. package/template/code/typescript-default/src/components/icons/IconTooling.vue +0 -2
  10. package/template/code/typescript-router/src/components/icons/IconTooling.vue +0 -2
  11. package/template/{code/default/cypress/integration/example.spec.js → config/cypress/cypress/e2e/example.cy.js} +0 -0
  12. package/template/config/cypress/cypress/{jsconfig.json → e2e/jsconfig.json} +1 -1
  13. package/template/config/cypress/cypress/support/commands.ts +37 -0
  14. package/template/config/cypress/cypress/support/{index.js → e2e.js} +0 -0
  15. package/template/config/cypress/cypress.config.js +8 -0
  16. package/template/config/cypress/cypress.config.ts +8 -0
  17. package/template/config/cypress/node_modules/.bin/cypress +17 -0
  18. package/template/config/cypress/node_modules/.bin/server-test +17 -0
  19. package/template/config/cypress/node_modules/.bin/start-server-and-test +17 -0
  20. package/template/config/cypress/node_modules/.bin/start-test +17 -0
  21. package/template/config/cypress/package.json +3 -7
  22. package/template/config/cypress-ct/cypress/support/component-index.html +12 -0
  23. package/template/config/cypress-ct/cypress/support/component.js +27 -0
  24. package/template/config/cypress-ct/cypress/support/component.ts +39 -0
  25. package/template/config/cypress-ct/cypress.config.js +15 -0
  26. package/template/config/cypress-ct/cypress.config.ts +15 -0
  27. package/template/config/cypress-ct/node_modules/.bin/cypress +17 -0
  28. package/template/config/cypress-ct/package.json +12 -0
  29. package/template/{code/typescript-default/src/components/__tests__/HelloWorld.spec.ts → config/cypress-ct/src/components/__tests__/HelloWorld.cy.js} +2 -3
  30. package/template/config/jsx/node_modules/.bin/vite +17 -0
  31. package/template/config/jsx/package.json +9 -0
  32. package/template/config/jsx/vite.config.js +23 -0
  33. package/template/config/pinia/package.json +2 -1
  34. package/template/config/router/package.json +1 -1
  35. package/template/config/typescript/env.d.ts +0 -1
  36. package/template/config/typescript/node_modules/.bin/npm-run-all +17 -0
  37. package/template/config/typescript/node_modules/.bin/run-p +17 -0
  38. package/template/config/typescript/node_modules/.bin/run-s +17 -0
  39. package/template/config/typescript/node_modules/.bin/tsc +17 -0
  40. package/template/config/typescript/node_modules/.bin/tsserver +17 -0
  41. package/template/config/typescript/node_modules/.bin/vue-tsc +17 -0
  42. package/template/config/typescript/package.json +7 -5
  43. package/template/config/vitest/node_modules/.bin/vitest +17 -0
  44. package/template/config/vitest/package.json +14 -0
  45. package/template/config/vitest/src/components/__tests__/HelloWorld.spec.js +11 -0
  46. package/template/entry/default/src/main.js +3 -9
  47. package/template/entry/pinia/src/main.js +4 -8
  48. package/template/entry/router/src/main.js +3 -8
  49. package/template/entry/router-and-pinia/src/main.js +4 -8
  50. package/template/eslint/package.json +11 -0
  51. package/template/tsconfig/base/package.json +5 -0
  52. package/template/tsconfig/base/tsconfig.config.json +8 -0
  53. package/template/tsconfig/base/tsconfig.json +16 -0
  54. package/template/tsconfig/cypress/cypress/e2e/tsconfig.json +10 -0
  55. package/template/tsconfig/cypress-ct/tsconfig.app.json +12 -0
  56. package/template/tsconfig/cypress-ct/tsconfig.cypress-ct.json +8 -0
  57. package/template/tsconfig/cypress-ct/tsconfig.json +14 -0
  58. package/template/tsconfig/vitest/package.json +8 -0
  59. package/template/tsconfig/vitest/tsconfig.app.json +12 -0
  60. package/template/tsconfig/vitest/tsconfig.json +14 -0
  61. package/template/tsconfig/vitest/tsconfig.vitest.json +9 -0
  62. package/template/code/default/src/components/__tests__/HelloWorld.spec.js +0 -13
  63. package/template/code/router/cypress/integration/example.spec.js +0 -13
  64. package/template/code/router/src/components/__tests__/HelloWorld.spec.js +0 -13
  65. package/template/code/typescript-default/cypress/integration/example.spec.ts +0 -8
  66. package/template/code/typescript-router/cypress/integration/example.spec.ts +0 -13
  67. package/template/code/typescript-router/src/components/__tests__/HelloWorld.spec.ts +0 -13
  68. package/template/config/cypress/cypress/plugins/index.js +0 -28
  69. package/template/config/cypress/cypress.json +0 -7
  70. package/template/config/typescript/tsconfig.json +0 -24
package/outfile.cjs CHANGED
@@ -1,29 +1,27 @@
1
1
  #!/usr/bin/env node
2
+ /*! create-vue v2.1.0 | MIT */
2
3
  var __create = Object.create;
3
4
  var __defProp = Object.defineProperty;
4
5
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
6
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
7
  var __getProtoOf = Object.getPrototypeOf;
7
8
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
9
9
  var __commonJS = (cb, mod) => function __require() {
10
- return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
11
  };
12
- var __reExport = (target, module2, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && key !== "default")
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
17
  }
18
- return target;
19
- };
20
- var __toModule = (module2) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
18
+ return to;
22
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
23
21
 
24
- // node_modules/.pnpm/minimist@1.2.5/node_modules/minimist/index.js
22
+ // node_modules/.pnpm/minimist@1.2.6/node_modules/minimist/index.js
25
23
  var require_minimist = __commonJS({
26
- "node_modules/.pnpm/minimist@1.2.5/node_modules/minimist/index.js"(exports, module2) {
24
+ "node_modules/.pnpm/minimist@1.2.6/node_modules/minimist/index.js"(exports, module2) {
27
25
  module2.exports = function(args, opts) {
28
26
  if (!opts)
29
27
  opts = {};
@@ -81,7 +79,7 @@ var require_minimist = __commonJS({
81
79
  var o = obj;
82
80
  for (var i2 = 0; i2 < keys.length - 1; i2++) {
83
81
  var key2 = keys[i2];
84
- if (key2 === "__proto__")
82
+ if (isConstructorOrProto(o, key2))
85
83
  return;
86
84
  if (o[key2] === void 0)
87
85
  o[key2] = {};
@@ -92,7 +90,7 @@ var require_minimist = __commonJS({
92
90
  o = o[key2];
93
91
  }
94
92
  var key2 = keys[keys.length - 1];
95
- if (key2 === "__proto__")
93
+ if (isConstructorOrProto(o, key2))
96
94
  return;
97
95
  if (o === Object.prototype || o === Number.prototype || o === String.prototype)
98
96
  o = {};
@@ -220,6 +218,9 @@ var require_minimist = __commonJS({
220
218
  return true;
221
219
  return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
222
220
  }
221
+ function isConstructorOrProto(obj, key) {
222
+ return key === "constructor" && typeof obj[key] === "function" || key === "__proto__";
223
+ }
223
224
  }
224
225
  });
225
226
 
@@ -301,8 +302,8 @@ var require_kleur = __commonJS({
301
302
  }
302
303
  function init2(open, close) {
303
304
  let blk = {
304
- open: `[${open}m`,
305
- close: `[${close}m`,
305
+ open: `\x1B[${open}m`,
306
+ close: `\x1B[${close}m`,
306
307
  rgx: new RegExp(`\\x1b\\[${close}m`, "g")
307
308
  };
308
309
  return function(txt) {
@@ -393,7 +394,7 @@ var require_strip = __commonJS({
393
394
  var require_src = __commonJS({
394
395
  "node_modules/.pnpm/sisteransi@1.0.5/node_modules/sisteransi/src/index.js"(exports, module2) {
395
396
  "use strict";
396
- var ESC = "";
397
+ var ESC = "\x1B";
397
398
  var CSI = `${ESC}[`;
398
399
  var beep = "\x07";
399
400
  var cursor = {
@@ -760,7 +761,7 @@ var require_prompt = __commonJS({
760
761
  var require_text = __commonJS({
761
762
  "node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/text.js"(exports, module2) {
762
763
  "use strict";
763
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
764
+ function asyncGeneratorStep(gen, resolve5, reject, _next, _throw, key, arg) {
764
765
  try {
765
766
  var info = gen[key](arg);
766
767
  var value = info.value;
@@ -769,7 +770,7 @@ var require_text = __commonJS({
769
770
  return;
770
771
  }
771
772
  if (info.done) {
772
- resolve(value);
773
+ resolve5(value);
773
774
  } else {
774
775
  Promise.resolve(value).then(_next, _throw);
775
776
  }
@@ -777,13 +778,13 @@ var require_text = __commonJS({
777
778
  function _asyncToGenerator(fn) {
778
779
  return function() {
779
780
  var self2 = this, args = arguments;
780
- return new Promise(function(resolve, reject) {
781
+ return new Promise(function(resolve5, reject) {
781
782
  var gen = fn.apply(self2, args);
782
783
  function _next(value) {
783
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
784
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
784
785
  }
785
786
  function _throw(err) {
786
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
787
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "throw", err);
787
788
  }
788
789
  _next(void 0);
789
790
  });
@@ -1520,7 +1521,7 @@ var require_dateparts = __commonJS({
1520
1521
  var require_date = __commonJS({
1521
1522
  "node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/date.js"(exports, module2) {
1522
1523
  "use strict";
1523
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
1524
+ function asyncGeneratorStep(gen, resolve5, reject, _next, _throw, key, arg) {
1524
1525
  try {
1525
1526
  var info = gen[key](arg);
1526
1527
  var value = info.value;
@@ -1529,7 +1530,7 @@ var require_date = __commonJS({
1529
1530
  return;
1530
1531
  }
1531
1532
  if (info.done) {
1532
- resolve(value);
1533
+ resolve5(value);
1533
1534
  } else {
1534
1535
  Promise.resolve(value).then(_next, _throw);
1535
1536
  }
@@ -1537,13 +1538,13 @@ var require_date = __commonJS({
1537
1538
  function _asyncToGenerator(fn) {
1538
1539
  return function() {
1539
1540
  var self2 = this, args = arguments;
1540
- return new Promise(function(resolve, reject) {
1541
+ return new Promise(function(resolve5, reject) {
1541
1542
  var gen = fn.apply(self2, args);
1542
1543
  function _next(value) {
1543
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
1544
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
1544
1545
  }
1545
1546
  function _throw(err) {
1546
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
1547
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "throw", err);
1547
1548
  }
1548
1549
  _next(void 0);
1549
1550
  });
@@ -1746,7 +1747,7 @@ ${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);
1746
1747
  var require_number = __commonJS({
1747
1748
  "node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/number.js"(exports, module2) {
1748
1749
  "use strict";
1749
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
1750
+ function asyncGeneratorStep(gen, resolve5, reject, _next, _throw, key, arg) {
1750
1751
  try {
1751
1752
  var info = gen[key](arg);
1752
1753
  var value = info.value;
@@ -1755,7 +1756,7 @@ var require_number = __commonJS({
1755
1756
  return;
1756
1757
  }
1757
1758
  if (info.done) {
1758
- resolve(value);
1759
+ resolve5(value);
1759
1760
  } else {
1760
1761
  Promise.resolve(value).then(_next, _throw);
1761
1762
  }
@@ -1763,13 +1764,13 @@ var require_number = __commonJS({
1763
1764
  function _asyncToGenerator(fn) {
1764
1765
  return function() {
1765
1766
  var self2 = this, args = arguments;
1766
- return new Promise(function(resolve, reject) {
1767
+ return new Promise(function(resolve5, reject) {
1767
1768
  var gen = fn.apply(self2, args);
1768
1769
  function _next(value) {
1769
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
1770
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
1770
1771
  }
1771
1772
  function _throw(err) {
1772
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
1773
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "throw", err);
1773
1774
  }
1774
1775
  _next(void 0);
1775
1776
  });
@@ -2204,7 +2205,7 @@ Instructions:
2204
2205
  var require_autocomplete = __commonJS({
2205
2206
  "node_modules/.pnpm/prompts@2.4.2/node_modules/prompts/dist/elements/autocomplete.js"(exports, module2) {
2206
2207
  "use strict";
2207
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2208
+ function asyncGeneratorStep(gen, resolve5, reject, _next, _throw, key, arg) {
2208
2209
  try {
2209
2210
  var info = gen[key](arg);
2210
2211
  var value = info.value;
@@ -2213,7 +2214,7 @@ var require_autocomplete = __commonJS({
2213
2214
  return;
2214
2215
  }
2215
2216
  if (info.done) {
2216
- resolve(value);
2217
+ resolve5(value);
2217
2218
  } else {
2218
2219
  Promise.resolve(value).then(_next, _throw);
2219
2220
  }
@@ -2221,13 +2222,13 @@ var require_autocomplete = __commonJS({
2221
2222
  function _asyncToGenerator(fn) {
2222
2223
  return function() {
2223
2224
  var self2 = this, args = arguments;
2224
- return new Promise(function(resolve, reject) {
2225
+ return new Promise(function(resolve5, reject) {
2225
2226
  var gen = fn.apply(self2, args);
2226
2227
  function _next(value) {
2227
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
2228
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
2228
2229
  }
2229
2230
  function _throw(err) {
2230
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
2231
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "throw", err);
2231
2232
  }
2232
2233
  _next(void 0);
2233
2234
  });
@@ -2890,7 +2891,7 @@ var require_dist = __commonJS({
2890
2891
  arr2[i] = arr[i];
2891
2892
  return arr2;
2892
2893
  }
2893
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2894
+ function asyncGeneratorStep(gen, resolve5, reject, _next, _throw, key, arg) {
2894
2895
  try {
2895
2896
  var info = gen[key](arg);
2896
2897
  var value = info.value;
@@ -2899,7 +2900,7 @@ var require_dist = __commonJS({
2899
2900
  return;
2900
2901
  }
2901
2902
  if (info.done) {
2902
- resolve(value);
2903
+ resolve5(value);
2903
2904
  } else {
2904
2905
  Promise.resolve(value).then(_next, _throw);
2905
2906
  }
@@ -2907,13 +2908,13 @@ var require_dist = __commonJS({
2907
2908
  function _asyncToGenerator(fn) {
2908
2909
  return function() {
2909
2910
  var self2 = this, args = arguments;
2910
- return new Promise(function(resolve, reject) {
2911
+ return new Promise(function(resolve5, reject) {
2911
2912
  var gen = fn.apply(self2, args);
2912
2913
  function _next(value) {
2913
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
2914
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
2914
2915
  }
2915
2916
  function _throw(err) {
2916
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
2917
+ asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "throw", err);
2917
2918
  }
2918
2919
  _next(void 0);
2919
2920
  });
@@ -5254,11 +5255,11 @@ var require_prompts3 = __commonJS({
5254
5255
  }
5255
5256
  });
5256
5257
 
5257
- // index.js
5258
- var import_fs4 = __toModule(require("fs"));
5259
- var import_path3 = __toModule(require("path"));
5260
- var import_minimist = __toModule(require_minimist());
5261
- var import_prompts = __toModule(require_prompts3());
5258
+ // index.ts
5259
+ var fs4 = __toESM(require("fs"), 1);
5260
+ var path4 = __toESM(require("path"), 1);
5261
+ var import_minimist = __toESM(require_minimist(), 1);
5262
+ var import_prompts = __toESM(require_prompts3(), 1);
5262
5263
 
5263
5264
  // node_modules/.pnpm/kolorist@1.5.1/node_modules/kolorist/dist/esm/index.mjs
5264
5265
  var enabled = true;
@@ -5294,8 +5295,8 @@ var options = {
5294
5295
  supportLevel
5295
5296
  };
5296
5297
  function kolorist(start, end, level = 1) {
5297
- const open = `[${start}m`;
5298
- const close = `[${end}m`;
5298
+ const open = `\x1B[${start}m`;
5299
+ const close = `\x1B[${end}m`;
5299
5300
  const regex = new RegExp(`\\x1b\\[${end}m`, "g");
5300
5301
  return (str) => {
5301
5302
  return options.enabled && options.supportLevel >= level ? open + ("" + str).replace(regex, open) + close : "" + str;
@@ -5342,13 +5343,13 @@ var bgLightMagenta = kolorist(105, 49);
5342
5343
  var bgLightCyan = kolorist(106, 49);
5343
5344
  var bgLightGray = kolorist(47, 49);
5344
5345
 
5345
- // utils/renderTemplate.js
5346
- var import_fs = __toModule(require("fs"));
5347
- var import_path = __toModule(require("path"));
5346
+ // utils/renderTemplate.ts
5347
+ var fs = __toESM(require("fs"), 1);
5348
+ var path = __toESM(require("path"), 1);
5348
5349
 
5349
- // utils/deepMerge.js
5350
+ // utils/deepMerge.ts
5350
5351
  var isObject = (val) => val && typeof val === "object";
5351
- var mergeArrayWithDedupe = (a, b) => Array.from(new Set([...a, ...b]));
5352
+ var mergeArrayWithDedupe = (a, b) => Array.from(/* @__PURE__ */ new Set([...a, ...b]));
5352
5353
  function deepMerge(target, obj) {
5353
5354
  for (const key of Object.keys(obj)) {
5354
5355
  const oldVal = target[key];
@@ -5365,7 +5366,7 @@ function deepMerge(target, obj) {
5365
5366
  }
5366
5367
  var deepMerge_default = deepMerge;
5367
5368
 
5368
- // utils/sortDependencies.js
5369
+ // utils/sortDependencies.ts
5369
5370
  function sortDependencies(packageJson) {
5370
5371
  const sorted = {};
5371
5372
  const depTypes = ["dependencies", "devDependencies", "peerDependencies", "optionalDependencies"];
@@ -5383,40 +5384,43 @@ function sortDependencies(packageJson) {
5383
5384
  };
5384
5385
  }
5385
5386
 
5386
- // utils/renderTemplate.js
5387
+ // utils/renderTemplate.ts
5387
5388
  function renderTemplate(src, dest) {
5388
- const stats = import_fs.default.statSync(src);
5389
+ const stats = fs.statSync(src);
5389
5390
  if (stats.isDirectory()) {
5390
- import_fs.default.mkdirSync(dest, { recursive: true });
5391
- for (const file of import_fs.default.readdirSync(src)) {
5392
- renderTemplate(import_path.default.resolve(src, file), import_path.default.resolve(dest, file));
5391
+ if (path.basename(src) === "node_modules") {
5392
+ return;
5393
+ }
5394
+ fs.mkdirSync(dest, { recursive: true });
5395
+ for (const file of fs.readdirSync(src)) {
5396
+ renderTemplate(path.resolve(src, file), path.resolve(dest, file));
5393
5397
  }
5394
5398
  return;
5395
5399
  }
5396
- const filename = import_path.default.basename(src);
5397
- if (filename === "package.json" && import_fs.default.existsSync(dest)) {
5398
- const existing = JSON.parse(import_fs.default.readFileSync(dest));
5399
- const newPackage = JSON.parse(import_fs.default.readFileSync(src));
5400
+ const filename = path.basename(src);
5401
+ if (filename === "package.json" && fs.existsSync(dest)) {
5402
+ const existing = JSON.parse(fs.readFileSync(dest, "utf8"));
5403
+ const newPackage = JSON.parse(fs.readFileSync(src, "utf8"));
5400
5404
  const pkg = sortDependencies(deepMerge_default(existing, newPackage));
5401
- import_fs.default.writeFileSync(dest, JSON.stringify(pkg, null, 2) + "\n");
5405
+ fs.writeFileSync(dest, JSON.stringify(pkg, null, 2) + "\n");
5402
5406
  return;
5403
5407
  }
5404
5408
  if (filename.startsWith("_")) {
5405
- dest = import_path.default.resolve(import_path.default.dirname(dest), filename.replace(/^_/, "."));
5409
+ dest = path.resolve(path.dirname(dest), filename.replace(/^_/, "."));
5406
5410
  }
5407
- import_fs.default.copyFileSync(src, dest);
5411
+ fs.copyFileSync(src, dest);
5408
5412
  }
5409
5413
  var renderTemplate_default = renderTemplate;
5410
5414
 
5411
- // utils/directoryTraverse.js
5412
- var import_fs2 = __toModule(require("fs"));
5413
- var import_path2 = __toModule(require("path"));
5415
+ // utils/directoryTraverse.ts
5416
+ var fs2 = __toESM(require("fs"), 1);
5417
+ var path2 = __toESM(require("path"), 1);
5414
5418
  function preOrderDirectoryTraverse(dir, dirCallback, fileCallback) {
5415
- for (const filename of import_fs2.default.readdirSync(dir)) {
5416
- const fullpath = import_path2.default.resolve(dir, filename);
5417
- if (import_fs2.default.lstatSync(fullpath).isDirectory()) {
5419
+ for (const filename of fs2.readdirSync(dir)) {
5420
+ const fullpath = path2.resolve(dir, filename);
5421
+ if (fs2.lstatSync(fullpath).isDirectory()) {
5418
5422
  dirCallback(fullpath);
5419
- if (import_fs2.default.existsSync(fullpath)) {
5423
+ if (fs2.existsSync(fullpath)) {
5420
5424
  preOrderDirectoryTraverse(fullpath, dirCallback, fileCallback);
5421
5425
  }
5422
5426
  continue;
@@ -5425,9 +5429,9 @@ function preOrderDirectoryTraverse(dir, dirCallback, fileCallback) {
5425
5429
  }
5426
5430
  }
5427
5431
  function postOrderDirectoryTraverse(dir, dirCallback, fileCallback) {
5428
- for (const filename of import_fs2.default.readdirSync(dir)) {
5429
- const fullpath = import_path2.default.resolve(dir, filename);
5430
- if (import_fs2.default.lstatSync(fullpath).isDirectory()) {
5432
+ for (const filename of fs2.readdirSync(dir)) {
5433
+ const fullpath = path2.resolve(dir, filename);
5434
+ if (fs2.lstatSync(fullpath).isDirectory()) {
5431
5435
  postOrderDirectoryTraverse(fullpath, dirCallback, fileCallback);
5432
5436
  dirCallback(fullpath);
5433
5437
  continue;
@@ -5436,10 +5440,7 @@ function postOrderDirectoryTraverse(dir, dirCallback, fileCallback) {
5436
5440
  }
5437
5441
  }
5438
5442
 
5439
- // utils/generateReadme.js
5440
- var import_fs3 = __toModule(require("fs"));
5441
-
5442
- // utils/getCommand.js
5443
+ // utils/getCommand.ts
5443
5444
  function getCommand(packageManager, scriptName) {
5444
5445
  if (scriptName === "install") {
5445
5446
  return packageManager === "yarn" ? "yarn" : `${packageManager} install`;
@@ -5447,21 +5448,37 @@ function getCommand(packageManager, scriptName) {
5447
5448
  return packageManager === "npm" ? `npm run ${scriptName}` : `${packageManager} ${scriptName}`;
5448
5449
  }
5449
5450
 
5450
- // utils/generateReadme.js
5451
- var sfcTypeSupportDoc = "\n## Type Support for `.vue` Imports in TS\n\nSince TypeScript cannot handle type information for `.vue` imports, they are shimmed to be a generic Vue component type by default. In most cases this is fine if you don't really care about component prop types outside of templates.\n\nHowever, if you wish to get actual prop types in `.vue` imports (for example to get props validation when using manual `h(...)` calls), you can run `Volar: Switch TS Plugin on/off` from VSCode command palette.\n";
5451
+ // utils/generateReadme.ts
5452
+ var sfcTypeSupportDoc = [
5453
+ "",
5454
+ "## Type Support for `.vue` Imports in TS",
5455
+ "",
5456
+ "TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.",
5457
+ "",
5458
+ "If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:",
5459
+ "",
5460
+ "1. Disable the built-in TypeScript Extension",
5461
+ " 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette",
5462
+ " 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`",
5463
+ "2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.",
5464
+ ""
5465
+ ].join("\n");
5452
5466
  function generateReadme({
5453
5467
  projectName,
5454
5468
  packageManager,
5455
5469
  needsTypeScript,
5456
- needsTests
5470
+ needsCypress,
5471
+ needsCypressCT,
5472
+ needsVitest,
5473
+ needsEslint
5457
5474
  }) {
5458
5475
  let readme = `# ${projectName}
5459
5476
 
5460
- This template should help get you started developing with Vue 2 in Vite.
5477
+ This template should help get you started developing with Vue 3 in Vite.
5461
5478
 
5462
5479
  ## Recommended IDE Setup
5463
5480
 
5464
- [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=johnsoncodehk.volar) (and disable Vetur).
5481
+ [VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
5465
5482
  ${needsTypeScript ? sfcTypeSupportDoc : ""}
5466
5483
  ## Customize configuration
5467
5484
 
@@ -5486,27 +5503,139 @@ ${getCommand(packageManager, "dev")}
5486
5503
  ${getCommand(packageManager, "build")}
5487
5504
  \`\`\`
5488
5505
  `;
5489
- if (needsTests) {
5506
+ if (needsVitest) {
5490
5507
  npmScriptsDescriptions += `
5491
- ### Run Unit Tests with [Cypress Component Testing](https://docs.cypress.io/guides/component-testing/introduction)
5508
+ ### Run Unit Tests with [Vitest](https://vitest.dev/)
5492
5509
 
5493
5510
  \`\`\`sh
5494
- ${getCommand(packageManager, "test:unit")} # or \`${getCommand(packageManager, "test:unit:ci")}\` for headless testing
5511
+ ${getCommand(packageManager, "test:unit")}
5495
5512
  \`\`\`
5513
+ `;
5514
+ }
5515
+ if (needsCypressCT) {
5516
+ npmScriptsDescriptions += `
5517
+ ### Run Headed Component Tests with [Cypress Component Testing](https://on.cypress.io/component)
5496
5518
 
5519
+ \`\`\`sh
5520
+ ${getCommand(packageManager, "test:unit")} # or \`${getCommand(packageManager, "test:unit:ci")}\` for headless testing
5521
+ \`\`\`
5522
+ `;
5523
+ }
5524
+ if (needsCypress) {
5525
+ npmScriptsDescriptions += `
5497
5526
  ### Run End-to-End Tests with [Cypress](https://www.cypress.io/)
5498
5527
 
5499
5528
  \`\`\`sh
5500
5529
  ${getCommand(packageManager, "build")}
5501
5530
  ${getCommand(packageManager, "test:e2e")} # or \`${getCommand(packageManager, "test:e2e:ci")}\` for headless testing
5502
5531
  \`\`\`
5532
+ `;
5533
+ }
5534
+ if (needsEslint) {
5535
+ npmScriptsDescriptions += `
5536
+ ### Lint with [ESLint](https://eslint.org/)
5537
+
5538
+ \`\`\`sh
5539
+ ${getCommand(packageManager, "lint")}
5540
+ \`\`\`
5503
5541
  `;
5504
5542
  }
5505
5543
  readme += npmScriptsDescriptions;
5506
5544
  return readme;
5507
5545
  }
5508
5546
 
5509
- // index.js
5547
+ // utils/renderEslint.ts
5548
+ var fs3 = __toESM(require("fs"), 1);
5549
+ var path3 = __toESM(require("path"), 1);
5550
+
5551
+ // template/eslint/package.json
5552
+ var devDependencies = {
5553
+ "@rushstack/eslint-patch": "^1.1.0",
5554
+ "@vue/eslint-config-prettier": "^7.0.0",
5555
+ "@vue/eslint-config-typescript": "^11.0.0",
5556
+ eslint: "^8.5.0",
5557
+ "eslint-plugin-cypress": "^2.12.1",
5558
+ "eslint-plugin-vue": "^9.0.0",
5559
+ prettier: "^2.5.1"
5560
+ };
5561
+
5562
+ // utils/renderEslint.ts
5563
+ var dependencies = {};
5564
+ function addEslintDependency(name) {
5565
+ dependencies[name] = devDependencies[name];
5566
+ }
5567
+ addEslintDependency("eslint");
5568
+ addEslintDependency("eslint-plugin-vue");
5569
+ var config = {
5570
+ root: true,
5571
+ extends: ["plugin:vue/essential"]
5572
+ };
5573
+ function configureEslint({ language, styleGuide, needsPrettier, needsCypress, needsCypressCT }) {
5574
+ switch (`${styleGuide}-${language}`) {
5575
+ case "default-javascript":
5576
+ config.extends.push("eslint:recommended");
5577
+ break;
5578
+ case "default-typescript":
5579
+ addEslintDependency("@vue/eslint-config-typescript");
5580
+ config.extends.push("eslint:recommended");
5581
+ config.extends.push("@vue/eslint-config-typescript/recommended");
5582
+ break;
5583
+ }
5584
+ if (needsPrettier) {
5585
+ addEslintDependency("prettier");
5586
+ addEslintDependency("@vue/eslint-config-prettier");
5587
+ config.extends.push("@vue/eslint-config-prettier");
5588
+ }
5589
+ if (needsCypress) {
5590
+ const cypressOverrides = [
5591
+ {
5592
+ files: needsCypressCT ? ["**/__tests__/*.{cy,spec}.{js,ts,jsx,tsx}", "cypress/e2e/**.{cy,spec}.{js,ts,jsx,tsx}"] : ["cypress/e2e/**.{cy,spec}.{js,ts,jsx,tsx}"],
5593
+ extends: ["plugin:cypress/recommended"]
5594
+ }
5595
+ ];
5596
+ addEslintDependency("eslint-plugin-cypress");
5597
+ config.overrides = cypressOverrides;
5598
+ }
5599
+ let configuration = "/* eslint-env node */\n";
5600
+ if (styleGuide !== "default" || language !== "javascript" || needsPrettier) {
5601
+ addEslintDependency("@rushstack/eslint-patch");
5602
+ configuration += `require("@rushstack/eslint-patch/modern-module-resolution");
5603
+
5604
+ `;
5605
+ }
5606
+ configuration += `module.exports = ${JSON.stringify(config, void 0, 2)}
5607
+ `;
5608
+ return {
5609
+ dependencies,
5610
+ configuration
5611
+ };
5612
+ }
5613
+ function renderEslint(rootDir, { needsTypeScript, needsCypress, needsCypressCT, needsPrettier }) {
5614
+ const { dependencies: dependencies2, configuration } = configureEslint({
5615
+ language: needsTypeScript ? "typescript" : "javascript",
5616
+ styleGuide: "default",
5617
+ needsPrettier,
5618
+ needsCypress,
5619
+ needsCypressCT
5620
+ });
5621
+ const packageJsonPath = path3.resolve(rootDir, "package.json");
5622
+ const existingPkg = JSON.parse(fs3.readFileSync(packageJsonPath, "utf8"));
5623
+ const pkg = sortDependencies(deepMerge_default(existingPkg, {
5624
+ scripts: {
5625
+ lint: needsTypeScript ? "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" : "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore"
5626
+ },
5627
+ devDependencies: dependencies2
5628
+ }));
5629
+ fs3.writeFileSync(packageJsonPath, JSON.stringify(pkg, null, 2) + "\n");
5630
+ const eslintrcPath = path3.resolve(rootDir, ".eslintrc.cjs");
5631
+ fs3.writeFileSync(eslintrcPath, configuration);
5632
+ }
5633
+
5634
+ // utils/banner.ts
5635
+ var banner = "\x1B[38;2;66;211;146mV\x1B[39m\x1B[38;2;66;211;146mu\x1B[39m\x1B[38;2;66;211;146me\x1B[39m\x1B[38;2;66;211;146m.\x1B[39m\x1B[38;2;66;211;146mj\x1B[39m\x1B[38;2;67;209;149ms\x1B[39m \x1B[38;2;68;206;152m-\x1B[39m \x1B[38;2;69;204;155mT\x1B[39m\x1B[38;2;70;201;158mh\x1B[39m\x1B[38;2;71;199;162me\x1B[39m \x1B[38;2;72;196;165mP\x1B[39m\x1B[38;2;73;194;168mr\x1B[39m\x1B[38;2;74;192;171mo\x1B[39m\x1B[38;2;75;189;174mg\x1B[39m\x1B[38;2;76;187;177mr\x1B[39m\x1B[38;2;77;184;180me\x1B[39m\x1B[38;2;78;182;183ms\x1B[39m\x1B[38;2;79;179;186ms\x1B[39m\x1B[38;2;80;177;190mi\x1B[39m\x1B[38;2;81;175;193mv\x1B[39m\x1B[38;2;82;172;196me\x1B[39m \x1B[38;2;83;170;199mJ\x1B[39m\x1B[38;2;83;167;202ma\x1B[39m\x1B[38;2;84;165;205mv\x1B[39m\x1B[38;2;85;162;208ma\x1B[39m\x1B[38;2;86;160;211mS\x1B[39m\x1B[38;2;87;158;215mc\x1B[39m\x1B[38;2;88;155;218mr\x1B[39m\x1B[38;2;89;153;221mi\x1B[39m\x1B[38;2;90;150;224mp\x1B[39m\x1B[38;2;91;148;227mt\x1B[39m \x1B[38;2;92;145;230mF\x1B[39m\x1B[38;2;93;143;233mr\x1B[39m\x1B[38;2;94;141;236ma\x1B[39m\x1B[38;2;95;138;239mm\x1B[39m\x1B[38;2;96;136;243me\x1B[39m\x1B[38;2;97;133;246mw\x1B[39m\x1B[38;2;98;131;249mo\x1B[39m\x1B[38;2;99;128;252mr\x1B[39m\x1B[38;2;100;126;255mk\x1B[39m";
5636
+ var banner_default = banner;
5637
+
5638
+ // index.ts
5510
5639
  function isValidPackageName(projectName) {
5511
5640
  return /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/.test(projectName);
5512
5641
  }
@@ -5514,22 +5643,28 @@ function toValidPackageName(projectName) {
5514
5643
  return projectName.trim().toLowerCase().replace(/\s+/g, "-").replace(/^[._]/, "").replace(/[^a-z0-9-~]+/g, "-");
5515
5644
  }
5516
5645
  function canSafelyOverwrite(dir) {
5517
- return !import_fs4.default.existsSync(dir) || import_fs4.default.readdirSync(dir).length === 0;
5646
+ return !fs4.existsSync(dir) || fs4.readdirSync(dir).length === 0;
5518
5647
  }
5519
5648
  function emptyDir(dir) {
5520
- postOrderDirectoryTraverse(dir, (dir2) => import_fs4.default.rmdirSync(dir2), (file) => import_fs4.default.unlinkSync(file));
5649
+ if (!fs4.existsSync(dir)) {
5650
+ return;
5651
+ }
5652
+ postOrderDirectoryTraverse(dir, (dir2) => fs4.rmdirSync(dir2), (file) => fs4.unlinkSync(file));
5521
5653
  }
5522
5654
  async function init() {
5655
+ console.log(`
5656
+ ${banner_default}
5657
+ `);
5523
5658
  const cwd = process.cwd();
5524
5659
  const argv = (0, import_minimist.default)(process.argv.slice(2), {
5525
5660
  alias: {
5526
5661
  typescript: ["ts"],
5527
- "with-tests": ["tests", "cypress"],
5662
+ "with-tests": ["tests"],
5528
5663
  router: ["vue-router"]
5529
5664
  },
5530
5665
  boolean: true
5531
5666
  });
5532
- const isFeatureFlagsUsed = typeof (argv.default || argv.ts || argv.router || argv.pinia || argv.tests) === "boolean";
5667
+ const isFeatureFlagsUsed = typeof (argv.default ?? argv.ts ?? argv.jsx ?? argv.router ?? argv.pinia ?? argv.tests ?? argv.vitest ?? argv.cypress ?? argv.eslint) === "boolean";
5533
5668
  let targetDir = argv._[0];
5534
5669
  const defaultProjectName = !targetDir ? "vue-project" : targetDir;
5535
5670
  const forceOverwrite = argv.force;
@@ -5553,7 +5688,7 @@ async function init() {
5553
5688
  },
5554
5689
  {
5555
5690
  name: "overwriteChecker",
5556
- type: (prev, values = {}) => {
5691
+ type: (prev, values) => {
5557
5692
  if (values.shouldOverwrite === false) {
5558
5693
  throw new Error(red("\u2716") + " Operation cancelled");
5559
5694
  }
@@ -5575,6 +5710,14 @@ async function init() {
5575
5710
  active: "Yes",
5576
5711
  inactive: "No"
5577
5712
  },
5713
+ {
5714
+ name: "needsJsx",
5715
+ type: () => isFeatureFlagsUsed ? null : "toggle",
5716
+ message: "Add JSX Support?",
5717
+ initial: false,
5718
+ active: "Yes",
5719
+ inactive: "No"
5720
+ },
5578
5721
  {
5579
5722
  name: "needsRouter",
5580
5723
  type: () => isFeatureFlagsUsed ? null : "toggle",
@@ -5592,9 +5735,38 @@ async function init() {
5592
5735
  inactive: "No"
5593
5736
  },
5594
5737
  {
5595
- name: "needsTests",
5738
+ name: "needsVitest",
5739
+ type: () => isFeatureFlagsUsed ? null : "toggle",
5740
+ message: "Add Vitest for Unit Testing?",
5741
+ initial: false,
5742
+ active: "Yes",
5743
+ inactive: "No"
5744
+ },
5745
+ {
5746
+ name: "needsCypress",
5747
+ type: () => isFeatureFlagsUsed ? null : "toggle",
5748
+ message: (prev, answers) => answers.needsVitest ? "Add Cypress for End-to-End testing?" : "Add Cypress for both Unit and End-to-End testing?",
5749
+ initial: false,
5750
+ active: "Yes",
5751
+ inactive: "No"
5752
+ },
5753
+ {
5754
+ name: "needsEslint",
5596
5755
  type: () => isFeatureFlagsUsed ? null : "toggle",
5597
- message: "Add Cypress for testing?",
5756
+ message: "Add ESLint for code quality?",
5757
+ initial: false,
5758
+ active: "Yes",
5759
+ inactive: "No"
5760
+ },
5761
+ {
5762
+ name: "needsPrettier",
5763
+ type: (prev, values) => {
5764
+ if (isFeatureFlagsUsed || !values.needsEslint) {
5765
+ return null;
5766
+ }
5767
+ return "toggle";
5768
+ },
5769
+ message: "Add Prettier for code formatting?",
5598
5770
  initial: false,
5599
5771
  active: "Yes",
5600
5772
  inactive: "No"
@@ -5609,40 +5781,68 @@ async function init() {
5609
5781
  process.exit(1);
5610
5782
  }
5611
5783
  const {
5612
- packageName = toValidPackageName(defaultProjectName),
5613
- shouldOverwrite,
5784
+ projectName,
5785
+ packageName = projectName ?? defaultProjectName,
5786
+ shouldOverwrite = argv.force,
5787
+ needsJsx = argv.jsx,
5614
5788
  needsTypeScript = argv.typescript,
5615
5789
  needsRouter = argv.router,
5616
5790
  needsPinia = argv.pinia,
5617
- needsTests = argv.tests
5791
+ needsCypress = argv.cypress || argv.tests,
5792
+ needsVitest = argv.vitest || argv.tests,
5793
+ needsEslint = argv.eslint || argv["eslint-with-prettier"],
5794
+ needsPrettier = argv["eslint-with-prettier"]
5618
5795
  } = result;
5619
- const root = import_path3.default.join(cwd, targetDir);
5620
- if (shouldOverwrite) {
5796
+ const needsCypressCT = needsCypress && !needsVitest;
5797
+ const root = path4.join(cwd, targetDir);
5798
+ if (fs4.existsSync(root) && shouldOverwrite) {
5621
5799
  emptyDir(root);
5622
- } else if (!import_fs4.default.existsSync(root)) {
5623
- import_fs4.default.mkdirSync(root);
5800
+ } else if (!fs4.existsSync(root)) {
5801
+ fs4.mkdirSync(root);
5624
5802
  }
5625
5803
  console.log(`
5626
5804
  Scaffolding project in ${root}...`);
5627
5805
  const pkg = { name: packageName, version: "0.0.0" };
5628
- import_fs4.default.writeFileSync(import_path3.default.resolve(root, "package.json"), JSON.stringify(pkg, null, 2));
5629
- const templateRoot = import_path3.default.resolve(__dirname, "template");
5806
+ fs4.writeFileSync(path4.resolve(root, "package.json"), JSON.stringify(pkg, null, 2));
5807
+ const templateRoot = path4.resolve(__dirname, "template");
5630
5808
  const render = function render2(templateName) {
5631
- const templateDir = import_path3.default.resolve(templateRoot, templateName);
5809
+ const templateDir = path4.resolve(templateRoot, templateName);
5632
5810
  renderTemplate_default(templateDir, root);
5633
5811
  };
5634
5812
  render("base");
5813
+ if (needsJsx) {
5814
+ render("config/jsx");
5815
+ }
5635
5816
  if (needsRouter) {
5636
5817
  render("config/router");
5637
5818
  }
5638
5819
  if (needsPinia) {
5639
5820
  render("config/pinia");
5640
5821
  }
5641
- if (needsTests) {
5822
+ if (needsVitest) {
5823
+ render("config/vitest");
5824
+ }
5825
+ if (needsCypress) {
5642
5826
  render("config/cypress");
5643
5827
  }
5828
+ if (needsCypressCT) {
5829
+ render("config/cypress-ct");
5830
+ }
5644
5831
  if (needsTypeScript) {
5645
5832
  render("config/typescript");
5833
+ render("tsconfig/base");
5834
+ if (needsCypress) {
5835
+ render("tsconfig/cypress");
5836
+ }
5837
+ if (needsCypressCT) {
5838
+ render("tsconfig/cypress-ct");
5839
+ }
5840
+ if (needsVitest) {
5841
+ render("tsconfig/vitest");
5842
+ }
5843
+ }
5844
+ if (needsEslint) {
5845
+ renderEslint(root, { needsTypeScript, needsCypress, needsCypressCT, needsPrettier });
5646
5846
  }
5647
5847
  const codeTemplate = (needsTypeScript ? "typescript-" : "") + (needsRouter ? "router" : "default");
5648
5848
  render(`code/${codeTemplate}`);
@@ -5659,39 +5859,48 @@ Scaffolding project in ${root}...`);
5659
5859
  preOrderDirectoryTraverse(root, () => {
5660
5860
  }, (filepath) => {
5661
5861
  if (filepath.endsWith(".js")) {
5662
- import_fs4.default.renameSync(filepath, filepath.replace(/\.js$/, ".ts"));
5663
- } else if (import_path3.default.basename(filepath) === "jsconfig.json") {
5664
- import_fs4.default.renameSync(filepath, filepath.replace(/jsconfig\.json$/, "tsconfig.json"));
5862
+ const tsFilePath = filepath.replace(/\.js$/, ".ts");
5863
+ if (fs4.existsSync(tsFilePath)) {
5864
+ fs4.unlinkSync(filepath);
5865
+ } else {
5866
+ fs4.renameSync(filepath, tsFilePath);
5867
+ }
5868
+ } else if (path4.basename(filepath) === "jsconfig.json") {
5869
+ fs4.unlinkSync(filepath);
5665
5870
  }
5666
5871
  });
5667
- const indexHtmlPath = import_path3.default.resolve(root, "index.html");
5668
- const indexHtmlContent = import_fs4.default.readFileSync(indexHtmlPath, "utf8");
5669
- import_fs4.default.writeFileSync(indexHtmlPath, indexHtmlContent.replace("src/main.js", "src/main.ts"));
5670
- }
5671
- if (!needsTests) {
5672
- preOrderDirectoryTraverse(root, (dirpath) => {
5673
- const dirname = import_path3.default.basename(dirpath);
5674
- if (dirname === "cypress" || dirname === "__tests__") {
5675
- emptyDir(dirpath);
5676
- import_fs4.default.rmdirSync(dirpath);
5677
- }
5678
- }, () => {
5872
+ const indexHtmlPath = path4.resolve(root, "index.html");
5873
+ const indexHtmlContent = fs4.readFileSync(indexHtmlPath, "utf8");
5874
+ fs4.writeFileSync(indexHtmlPath, indexHtmlContent.replace("src/main.js", "src/main.ts"));
5875
+ } else {
5876
+ preOrderDirectoryTraverse(root, () => {
5877
+ }, (filepath) => {
5878
+ if (filepath.endsWith(".ts")) {
5879
+ fs4.unlinkSync(filepath);
5880
+ }
5679
5881
  });
5680
5882
  }
5681
- const packageManager = /pnpm/.test(process.env.npm_execpath) ? "pnpm" : /yarn/.test(process.env.npm_execpath) ? "yarn" : "npm";
5682
- import_fs4.default.writeFileSync(import_path3.default.resolve(root, "README.md"), generateReadme({
5683
- projectName: result.projectName || defaultProjectName,
5883
+ const userAgent = process.env.npm_config_user_agent ?? "";
5884
+ const packageManager = /pnpm/.test(userAgent) ? "pnpm" : /yarn/.test(userAgent) ? "yarn" : "npm";
5885
+ fs4.writeFileSync(path4.resolve(root, "README.md"), generateReadme({
5886
+ projectName: result.projectName ?? defaultProjectName,
5684
5887
  packageManager,
5685
5888
  needsTypeScript,
5686
- needsTests
5889
+ needsVitest,
5890
+ needsCypress,
5891
+ needsCypressCT,
5892
+ needsEslint
5687
5893
  }));
5688
5894
  console.log(`
5689
5895
  Done. Now run:
5690
5896
  `);
5691
5897
  if (root !== cwd) {
5692
- console.log(` ${bold(green(`cd ${import_path3.default.relative(cwd, root)}`))}`);
5898
+ console.log(` ${bold(green(`cd ${path4.relative(cwd, root)}`))}`);
5693
5899
  }
5694
5900
  console.log(` ${bold(green(getCommand(packageManager, "install")))}`);
5901
+ if (needsPrettier) {
5902
+ console.log(` ${bold(green(getCommand(packageManager, "lint")))}`);
5903
+ }
5695
5904
  console.log(` ${bold(green(getCommand(packageManager, "dev")))}`);
5696
5905
  console.log();
5697
5906
  }