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.
- package/LICENSE +153 -1
- package/outfile.cjs +338 -129
- package/package.json +16 -12
- package/template/base/node_modules/.bin/vite +17 -0
- package/template/base/package.json +5 -10
- package/template/base/vite.config.js +2 -11
- package/template/code/default/src/components/icons/IconTooling.vue +0 -2
- package/template/code/router/src/components/icons/IconTooling.vue +0 -2
- package/template/code/typescript-default/src/components/icons/IconTooling.vue +0 -2
- package/template/code/typescript-router/src/components/icons/IconTooling.vue +0 -2
- package/template/{code/default/cypress/integration/example.spec.js → config/cypress/cypress/e2e/example.cy.js} +0 -0
- package/template/config/cypress/cypress/{jsconfig.json → e2e/jsconfig.json} +1 -1
- package/template/config/cypress/cypress/support/commands.ts +37 -0
- package/template/config/cypress/cypress/support/{index.js → e2e.js} +0 -0
- package/template/config/cypress/cypress.config.js +8 -0
- package/template/config/cypress/cypress.config.ts +8 -0
- package/template/config/cypress/node_modules/.bin/cypress +17 -0
- package/template/config/cypress/node_modules/.bin/server-test +17 -0
- package/template/config/cypress/node_modules/.bin/start-server-and-test +17 -0
- package/template/config/cypress/node_modules/.bin/start-test +17 -0
- package/template/config/cypress/package.json +3 -7
- package/template/config/cypress-ct/cypress/support/component-index.html +12 -0
- package/template/config/cypress-ct/cypress/support/component.js +27 -0
- package/template/config/cypress-ct/cypress/support/component.ts +39 -0
- package/template/config/cypress-ct/cypress.config.js +15 -0
- package/template/config/cypress-ct/cypress.config.ts +15 -0
- package/template/config/cypress-ct/node_modules/.bin/cypress +17 -0
- package/template/config/cypress-ct/package.json +12 -0
- package/template/{code/typescript-default/src/components/__tests__/HelloWorld.spec.ts → config/cypress-ct/src/components/__tests__/HelloWorld.cy.js} +2 -3
- package/template/config/jsx/node_modules/.bin/vite +17 -0
- package/template/config/jsx/package.json +9 -0
- package/template/config/jsx/vite.config.js +23 -0
- package/template/config/pinia/package.json +2 -1
- package/template/config/router/package.json +1 -1
- package/template/config/typescript/env.d.ts +0 -1
- package/template/config/typescript/node_modules/.bin/npm-run-all +17 -0
- package/template/config/typescript/node_modules/.bin/run-p +17 -0
- package/template/config/typescript/node_modules/.bin/run-s +17 -0
- package/template/config/typescript/node_modules/.bin/tsc +17 -0
- package/template/config/typescript/node_modules/.bin/tsserver +17 -0
- package/template/config/typescript/node_modules/.bin/vue-tsc +17 -0
- package/template/config/typescript/package.json +7 -5
- package/template/config/vitest/node_modules/.bin/vitest +17 -0
- package/template/config/vitest/package.json +14 -0
- package/template/config/vitest/src/components/__tests__/HelloWorld.spec.js +11 -0
- package/template/entry/default/src/main.js +3 -9
- package/template/entry/pinia/src/main.js +4 -8
- package/template/entry/router/src/main.js +3 -8
- package/template/entry/router-and-pinia/src/main.js +4 -8
- package/template/eslint/package.json +11 -0
- package/template/tsconfig/base/package.json +5 -0
- package/template/tsconfig/base/tsconfig.config.json +8 -0
- package/template/tsconfig/base/tsconfig.json +16 -0
- package/template/tsconfig/cypress/cypress/e2e/tsconfig.json +10 -0
- package/template/tsconfig/cypress-ct/tsconfig.app.json +12 -0
- package/template/tsconfig/cypress-ct/tsconfig.cypress-ct.json +8 -0
- package/template/tsconfig/cypress-ct/tsconfig.json +14 -0
- package/template/tsconfig/vitest/package.json +8 -0
- package/template/tsconfig/vitest/tsconfig.app.json +12 -0
- package/template/tsconfig/vitest/tsconfig.json +14 -0
- package/template/tsconfig/vitest/tsconfig.vitest.json +9 -0
- package/template/code/default/src/components/__tests__/HelloWorld.spec.js +0 -13
- package/template/code/router/cypress/integration/example.spec.js +0 -13
- package/template/code/router/src/components/__tests__/HelloWorld.spec.js +0 -13
- package/template/code/typescript-default/cypress/integration/example.spec.ts +0 -8
- package/template/code/typescript-router/cypress/integration/example.spec.ts +0 -13
- package/template/code/typescript-router/src/components/__tests__/HelloWorld.spec.ts +0 -13
- package/template/config/cypress/cypress/plugins/index.js +0 -28
- package/template/config/cypress/cypress.json +0 -7
- 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[
|
|
10
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
11
|
};
|
|
12
|
-
var
|
|
13
|
-
if (
|
|
14
|
-
for (let key of __getOwnPropNames(
|
|
15
|
-
if (!__hasOwnProp.call(
|
|
16
|
-
__defProp(
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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:
|
|
305
|
-
close:
|
|
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,
|
|
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
|
-
|
|
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(
|
|
781
|
+
return new Promise(function(resolve5, reject) {
|
|
781
782
|
var gen = fn.apply(self2, args);
|
|
782
783
|
function _next(value) {
|
|
783
|
-
asyncGeneratorStep(gen,
|
|
784
|
+
asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
|
|
784
785
|
}
|
|
785
786
|
function _throw(err) {
|
|
786
|
-
asyncGeneratorStep(gen,
|
|
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,
|
|
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
|
-
|
|
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(
|
|
1541
|
+
return new Promise(function(resolve5, reject) {
|
|
1541
1542
|
var gen = fn.apply(self2, args);
|
|
1542
1543
|
function _next(value) {
|
|
1543
|
-
asyncGeneratorStep(gen,
|
|
1544
|
+
asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
|
|
1544
1545
|
}
|
|
1545
1546
|
function _throw(err) {
|
|
1546
|
-
asyncGeneratorStep(gen,
|
|
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,
|
|
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
|
-
|
|
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(
|
|
1767
|
+
return new Promise(function(resolve5, reject) {
|
|
1767
1768
|
var gen = fn.apply(self2, args);
|
|
1768
1769
|
function _next(value) {
|
|
1769
|
-
asyncGeneratorStep(gen,
|
|
1770
|
+
asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
|
|
1770
1771
|
}
|
|
1771
1772
|
function _throw(err) {
|
|
1772
|
-
asyncGeneratorStep(gen,
|
|
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,
|
|
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
|
-
|
|
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(
|
|
2225
|
+
return new Promise(function(resolve5, reject) {
|
|
2225
2226
|
var gen = fn.apply(self2, args);
|
|
2226
2227
|
function _next(value) {
|
|
2227
|
-
asyncGeneratorStep(gen,
|
|
2228
|
+
asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
|
|
2228
2229
|
}
|
|
2229
2230
|
function _throw(err) {
|
|
2230
|
-
asyncGeneratorStep(gen,
|
|
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,
|
|
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
|
-
|
|
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(
|
|
2911
|
+
return new Promise(function(resolve5, reject) {
|
|
2911
2912
|
var gen = fn.apply(self2, args);
|
|
2912
2913
|
function _next(value) {
|
|
2913
|
-
asyncGeneratorStep(gen,
|
|
2914
|
+
asyncGeneratorStep(gen, resolve5, reject, _next, _throw, "next", value);
|
|
2914
2915
|
}
|
|
2915
2916
|
function _throw(err) {
|
|
2916
|
-
asyncGeneratorStep(gen,
|
|
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.
|
|
5258
|
-
var
|
|
5259
|
-
var
|
|
5260
|
-
var import_minimist =
|
|
5261
|
-
var import_prompts =
|
|
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 =
|
|
5298
|
-
const close =
|
|
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.
|
|
5346
|
-
var
|
|
5347
|
-
var
|
|
5346
|
+
// utils/renderTemplate.ts
|
|
5347
|
+
var fs = __toESM(require("fs"), 1);
|
|
5348
|
+
var path = __toESM(require("path"), 1);
|
|
5348
5349
|
|
|
5349
|
-
// utils/deepMerge.
|
|
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.
|
|
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.
|
|
5387
|
+
// utils/renderTemplate.ts
|
|
5387
5388
|
function renderTemplate(src, dest) {
|
|
5388
|
-
const stats =
|
|
5389
|
+
const stats = fs.statSync(src);
|
|
5389
5390
|
if (stats.isDirectory()) {
|
|
5390
|
-
|
|
5391
|
-
|
|
5392
|
-
|
|
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 =
|
|
5397
|
-
if (filename === "package.json" &&
|
|
5398
|
-
const existing = JSON.parse(
|
|
5399
|
-
const newPackage = JSON.parse(
|
|
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
|
-
|
|
5405
|
+
fs.writeFileSync(dest, JSON.stringify(pkg, null, 2) + "\n");
|
|
5402
5406
|
return;
|
|
5403
5407
|
}
|
|
5404
5408
|
if (filename.startsWith("_")) {
|
|
5405
|
-
dest =
|
|
5409
|
+
dest = path.resolve(path.dirname(dest), filename.replace(/^_/, "."));
|
|
5406
5410
|
}
|
|
5407
|
-
|
|
5411
|
+
fs.copyFileSync(src, dest);
|
|
5408
5412
|
}
|
|
5409
5413
|
var renderTemplate_default = renderTemplate;
|
|
5410
5414
|
|
|
5411
|
-
// utils/directoryTraverse.
|
|
5412
|
-
var
|
|
5413
|
-
var
|
|
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
|
|
5416
|
-
const fullpath =
|
|
5417
|
-
if (
|
|
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 (
|
|
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
|
|
5429
|
-
const fullpath =
|
|
5430
|
-
if (
|
|
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/
|
|
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.
|
|
5451
|
-
var sfcTypeSupportDoc =
|
|
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
|
-
|
|
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
|
|
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=
|
|
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 (
|
|
5506
|
+
if (needsVitest) {
|
|
5490
5507
|
npmScriptsDescriptions += `
|
|
5491
|
-
### Run Unit Tests with [
|
|
5508
|
+
### Run Unit Tests with [Vitest](https://vitest.dev/)
|
|
5492
5509
|
|
|
5493
5510
|
\`\`\`sh
|
|
5494
|
-
${getCommand(packageManager, "test:unit")}
|
|
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
|
-
//
|
|
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 !
|
|
5646
|
+
return !fs4.existsSync(dir) || fs4.readdirSync(dir).length === 0;
|
|
5518
5647
|
}
|
|
5519
5648
|
function emptyDir(dir) {
|
|
5520
|
-
|
|
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"
|
|
5662
|
+
"with-tests": ["tests"],
|
|
5528
5663
|
router: ["vue-router"]
|
|
5529
5664
|
},
|
|
5530
5665
|
boolean: true
|
|
5531
5666
|
});
|
|
5532
|
-
const isFeatureFlagsUsed = typeof (argv.default
|
|
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: "
|
|
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
|
|
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
|
-
|
|
5613
|
-
|
|
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
|
-
|
|
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
|
|
5620
|
-
|
|
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 (!
|
|
5623
|
-
|
|
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
|
-
|
|
5629
|
-
const templateRoot =
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
5663
|
-
|
|
5664
|
-
|
|
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 =
|
|
5668
|
-
const indexHtmlContent =
|
|
5669
|
-
|
|
5670
|
-
}
|
|
5671
|
-
|
|
5672
|
-
|
|
5673
|
-
|
|
5674
|
-
|
|
5675
|
-
|
|
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
|
|
5682
|
-
|
|
5683
|
-
|
|
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
|
-
|
|
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 ${
|
|
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
|
}
|