zixulu 1.34.2 → 1.35.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constant/index.js +5 -0
- package/dist/constant/index.js.map +2 -2
- package/dist/utils/downloadAnydesk.js +37 -0
- package/dist/utils/downloadAnydesk.js.map +7 -0
- package/dist/utils/downloadFirefox.js +37 -0
- package/dist/utils/downloadFirefox.js.map +7 -0
- package/dist/utils/downloadHoneyview.js +37 -0
- package/dist/utils/downloadHoneyview.js.map +7 -0
- package/dist/utils/downloadLatestSoftware.js +23 -1
- package/dist/utils/downloadLatestSoftware.js.map +2 -2
- package/dist/utils/downloadPotPlayer.js +37 -0
- package/dist/utils/downloadPotPlayer.js.map +7 -0
- package/dist/utils/downloadPowerToys.js +38 -0
- package/dist/utils/downloadPowerToys.js.map +7 -0
- package/dist/utils/index.js +14 -19
- package/dist/utils/index.js.map +3 -3
- package/package.json +56 -54
- package/src/constant/index.ts +6 -1
- package/src/utils/downloadAnydesk.ts +9 -0
- package/src/utils/downloadFirefox.ts +9 -0
- package/src/utils/downloadHoneyview.ts +9 -0
- package/src/utils/downloadLatestSoftware.ts +22 -1
- package/src/utils/downloadPotPlayer.ts +9 -0
- package/src/utils/downloadPowerToys.ts +10 -0
- package/src/utils/index.ts +13 -16
package/dist/constant/index.js
CHANGED
|
@@ -49,6 +49,11 @@ var Software = /* @__PURE__ */ ((Software2) => {
|
|
|
49
49
|
Software2["NodeJS"] = "NodeJS";
|
|
50
50
|
Software2["Geek Uninstaller"] = "Geek Uninstaller";
|
|
51
51
|
Software2["DeskGo"] = "DeskGo";
|
|
52
|
+
Software2["PowerToys"] = "PowerToys";
|
|
53
|
+
Software2["Honeyview"] = "Honeyview";
|
|
54
|
+
Software2["AnyDesk"] = "AnyDesk";
|
|
55
|
+
Software2["Firefox"] = "Firefox";
|
|
56
|
+
Software2["PotPlayer"] = "PotPlayer";
|
|
52
57
|
return Software2;
|
|
53
58
|
})(Software || {});
|
|
54
59
|
var ProjectType = /* @__PURE__ */ ((ProjectType2) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/constant/index.ts"],
|
|
4
|
-
"sourcesContent": ["export enum PackageManager {\r\n npm = \"npm\",\r\n yarn = \"yarn\",\r\n pnpm = \"pnpm\",\r\n bun = \"bun\"\r\n}\r\n\r\nexport enum Registry {\r\n npm = \"https://registry.npmjs.org/\",\r\n taobao = \"https://registry.npmmirror.com/\",\r\n tencent = \"https://mirrors.cloud.tencent.com/npm/\"\r\n}\r\n\r\nexport enum Software {\r\n \"VS Code\" = \"VS Code\",\r\n \"Chrome\" = \"Chrome\",\r\n \"Supermium\" = \"Supermium\",\r\n \"7zip\" = \"7zip\",\r\n \"Git\" = \"Git\",\r\n \"NodeJS\" = \"NodeJS\",\r\n \"Geek Uninstaller\" = \"Geek Uninstaller\",\r\n \"DeskGo\" = \"DeskGo\"\r\n}\r\n\r\nexport enum ProjectType {\r\n next = \"next\",\r\n remix = \"remix\",\r\n vite = \"vite\",\r\n rsbuild = \"rsbuild\"\r\n}\r\n\r\nexport enum CommitType {\r\n feature = \"feature\",\r\n fix = \"fix\",\r\n docs = \"docs\",\r\n wip = \"wip\",\r\n perfs = \"perfs\",\r\n rollback = \"rollback\",\r\n other = \"other\"\r\n}\r\n\r\nexport const CommitTypeMap = {\r\n [CommitType.feature]: \"✨feature: \",\r\n [CommitType.fix]: \"🐞 fix: \",\r\n [CommitType.docs]: \"📄 docs: \",\r\n [CommitType.wip]: \"🖥️ wip: \",\r\n [CommitType.perfs]: \"🚅 perfs: \",\r\n [CommitType.rollback]: \"⏪ rollback: \",\r\n [CommitType.other]: \"🔵 other: \"\r\n}"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAK,iBAAL,kBAAKA,oBAAL;AACH,EAAAA,gBAAA,SAAM;AACN,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,SAAM;AAJE,SAAAA;AAAA,GAAA;AAOL,IAAK,WAAL,kBAAKC,cAAL;AACH,EAAAA,UAAA,SAAM;AACN,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,aAAU;AAHF,SAAAA;AAAA,GAAA;AAML,IAAK,WAAL,kBAAKC,cAAL;AACH,EAAAA,UAAA,aAAY;AACZ,EAAAA,UAAA,YAAW;AACX,EAAAA,UAAA,eAAc;AACd,EAAAA,UAAA,UAAS;AACT,EAAAA,UAAA,SAAQ;AACR,EAAAA,UAAA,YAAW;AACX,EAAAA,UAAA,sBAAqB;AACrB,EAAAA,UAAA,YAAW;
|
|
4
|
+
"sourcesContent": ["export enum PackageManager {\r\n npm = \"npm\",\r\n yarn = \"yarn\",\r\n pnpm = \"pnpm\",\r\n bun = \"bun\"\r\n}\r\n\r\nexport enum Registry {\r\n npm = \"https://registry.npmjs.org/\",\r\n taobao = \"https://registry.npmmirror.com/\",\r\n tencent = \"https://mirrors.cloud.tencent.com/npm/\"\r\n}\r\n\r\nexport enum Software {\r\n \"VS Code\" = \"VS Code\",\r\n \"Chrome\" = \"Chrome\",\r\n \"Supermium\" = \"Supermium\",\r\n \"7zip\" = \"7zip\",\r\n \"Git\" = \"Git\",\r\n \"NodeJS\" = \"NodeJS\",\r\n \"Geek Uninstaller\" = \"Geek Uninstaller\",\r\n \"DeskGo\" = \"DeskGo\",\r\n \"PowerToys\" = \"PowerToys\",\r\n \"Honeyview\" = \"Honeyview\",\r\n \"AnyDesk\" = \"AnyDesk\",\r\n \"Firefox\" = \"Firefox\",\r\n \"PotPlayer\" = \"PotPlayer\"\r\n}\r\n\r\nexport enum ProjectType {\r\n next = \"next\",\r\n remix = \"remix\",\r\n vite = \"vite\",\r\n rsbuild = \"rsbuild\"\r\n}\r\n\r\nexport enum CommitType {\r\n feature = \"feature\",\r\n fix = \"fix\",\r\n docs = \"docs\",\r\n wip = \"wip\",\r\n perfs = \"perfs\",\r\n rollback = \"rollback\",\r\n other = \"other\"\r\n}\r\n\r\nexport const CommitTypeMap = {\r\n [CommitType.feature]: \"✨feature: \",\r\n [CommitType.fix]: \"🐞 fix: \",\r\n [CommitType.docs]: \"📄 docs: \",\r\n [CommitType.wip]: \"🖥️ wip: \",\r\n [CommitType.perfs]: \"🚅 perfs: \",\r\n [CommitType.rollback]: \"⏪ rollback: \",\r\n [CommitType.other]: \"🔵 other: \"\r\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,IAAK,iBAAL,kBAAKA,oBAAL;AACH,EAAAA,gBAAA,SAAM;AACN,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,SAAM;AAJE,SAAAA;AAAA,GAAA;AAOL,IAAK,WAAL,kBAAKC,cAAL;AACH,EAAAA,UAAA,SAAM;AACN,EAAAA,UAAA,YAAS;AACT,EAAAA,UAAA,aAAU;AAHF,SAAAA;AAAA,GAAA;AAML,IAAK,WAAL,kBAAKC,cAAL;AACH,EAAAA,UAAA,aAAY;AACZ,EAAAA,UAAA,YAAW;AACX,EAAAA,UAAA,eAAc;AACd,EAAAA,UAAA,UAAS;AACT,EAAAA,UAAA,SAAQ;AACR,EAAAA,UAAA,YAAW;AACX,EAAAA,UAAA,sBAAqB;AACrB,EAAAA,UAAA,YAAW;AACX,EAAAA,UAAA,eAAc;AACd,EAAAA,UAAA,eAAc;AACd,EAAAA,UAAA,aAAY;AACZ,EAAAA,UAAA,aAAY;AACZ,EAAAA,UAAA,eAAc;AAbN,SAAAA;AAAA,GAAA;AAgBL,IAAK,cAAL,kBAAKC,iBAAL;AACH,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,WAAQ;AACR,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,aAAU;AAJF,SAAAA;AAAA,GAAA;AAOL,IAAK,aAAL,kBAAKC,gBAAL;AACH,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,WAAQ;AAPA,SAAAA;AAAA,GAAA;AAUL,IAAM,gBAAgB;AAAA,EACzB,CAAC,uBAAkB,GAAG;AAAA,EACtB,CAAC,eAAc,GAAG;AAAA,EAClB,CAAC,iBAAe,GAAG;AAAA,EACnB,CAAC,eAAc,GAAG;AAAA,EAClB,CAAC,mBAAgB,GAAG;AAAA,EACpB,CAAC,yBAAmB,GAAG;AAAA,EACvB,CAAC,mBAAgB,GAAG;AACxB;",
|
|
6
6
|
"names": ["PackageManager", "Registry", "Software", "ProjectType", "CommitType"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/utils/downloadAnydesk.ts
|
|
20
|
+
var downloadAnydesk_exports = {};
|
|
21
|
+
__export(downloadAnydesk_exports, {
|
|
22
|
+
downloadAnydesk: () => downloadAnydesk
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(downloadAnydesk_exports);
|
|
25
|
+
var import__ = require(".");
|
|
26
|
+
async function downloadAnydesk(dir) {
|
|
27
|
+
await (0, import__.downloadFromWinget)({
|
|
28
|
+
name: "AnyDesk",
|
|
29
|
+
id: "AnyDeskSoftwareGmbH.AnyDesk",
|
|
30
|
+
dir
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
downloadAnydesk
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=downloadAnydesk.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/downloadAnydesk.ts"],
|
|
4
|
+
"sourcesContent": ["import { downloadFromWinget } from \".\"\r\n\r\nexport async function downloadAnydesk(dir: string) {\r\n await downloadFromWinget({\r\n name: \"AnyDesk\",\r\n id: \"AnyDeskSoftwareGmbH.AnyDesk\",\r\n dir\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAmC;AAEnC,eAAsB,gBAAgB,KAAa;AAC/C,YAAM,6BAAmB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/utils/downloadFirefox.ts
|
|
20
|
+
var downloadFirefox_exports = {};
|
|
21
|
+
__export(downloadFirefox_exports, {
|
|
22
|
+
downloadFirefox: () => downloadFirefox
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(downloadFirefox_exports);
|
|
25
|
+
var import__ = require(".");
|
|
26
|
+
async function downloadFirefox(dir) {
|
|
27
|
+
await (0, import__.downloadFromWinget)({
|
|
28
|
+
name: "Firefox",
|
|
29
|
+
id: "Mozilla.Firefox",
|
|
30
|
+
dir
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
downloadFirefox
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=downloadFirefox.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/downloadFirefox.ts"],
|
|
4
|
+
"sourcesContent": ["import { downloadFromWinget } from \".\"\r\n\r\nexport async function downloadFirefox(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Firefox\",\r\n id: \"Mozilla.Firefox\",\r\n dir\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAmC;AAEnC,eAAsB,gBAAgB,KAAa;AAC/C,YAAM,6BAAmB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/utils/downloadHoneyview.ts
|
|
20
|
+
var downloadHoneyview_exports = {};
|
|
21
|
+
__export(downloadHoneyview_exports, {
|
|
22
|
+
downloadHoneyview: () => downloadHoneyview
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(downloadHoneyview_exports);
|
|
25
|
+
var import__ = require(".");
|
|
26
|
+
async function downloadHoneyview(dir) {
|
|
27
|
+
await (0, import__.downloadFromWinget)({
|
|
28
|
+
name: "Honeyview",
|
|
29
|
+
id: "Bandisoft.Honeyview",
|
|
30
|
+
dir
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
downloadHoneyview
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=downloadHoneyview.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/downloadHoneyview.ts"],
|
|
4
|
+
"sourcesContent": ["import { downloadFromWinget } from \".\"\r\n\r\nexport async function downloadHoneyview(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Honeyview\",\r\n id: \"Bandisoft.Honeyview\",\r\n dir\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAmC;AAEnC,eAAsB,kBAAkB,KAAa;AACjD,YAAM,6BAAmB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/utils/downloadLatestSoftware.ts
|
|
30
30
|
var downloadLatestSoftware_exports = {};
|
|
31
31
|
__export(downloadLatestSoftware_exports, {
|
|
32
|
+
SoftwareDownloadMap: () => SoftwareDownloadMap,
|
|
32
33
|
downloadLatestSoftware: () => downloadLatestSoftware
|
|
33
34
|
});
|
|
34
35
|
module.exports = __toCommonJS(downloadLatestSoftware_exports);
|
|
@@ -36,6 +37,26 @@ var import_constant = require("../constant/index");
|
|
|
36
37
|
var import_consola = __toESM(require("consola"));
|
|
37
38
|
var import_promises = require("fs/promises");
|
|
38
39
|
var import__ = require(".");
|
|
40
|
+
var import_downloadAnydesk = require("./downloadAnydesk");
|
|
41
|
+
var import_downloadFirefox = require("./downloadFirefox");
|
|
42
|
+
var import_downloadHoneyview = require("./downloadHoneyview");
|
|
43
|
+
var import_downloadPowerToys = require("./downloadPowerToys");
|
|
44
|
+
var import_downloadPotPlayer = require("./downloadPotPlayer");
|
|
45
|
+
var SoftwareDownloadMap = {
|
|
46
|
+
[import_constant.Software.Chrome]: import__.downloadChrome,
|
|
47
|
+
[import_constant.Software.NodeJS]: import__.downloadNodeJS,
|
|
48
|
+
[import_constant.Software["7zip"]]: import__.download7Zip,
|
|
49
|
+
[import_constant.Software.Git]: import__.downloadGit,
|
|
50
|
+
[import_constant.Software.DeskGo]: import__.downloadDeskGo,
|
|
51
|
+
[import_constant.Software["Geek Uninstaller"]]: import__.downloadGeekUninstaller,
|
|
52
|
+
[import_constant.Software["VS Code"]]: import__.downloadVscode,
|
|
53
|
+
[import_constant.Software.Supermium]: import__.downloadSupermium,
|
|
54
|
+
[import_constant.Software.PowerToys]: import_downloadPowerToys.downloadPowerToys,
|
|
55
|
+
[import_constant.Software.Honeyview]: import_downloadHoneyview.downloadHoneyview,
|
|
56
|
+
[import_constant.Software.AnyDesk]: import_downloadAnydesk.downloadAnydesk,
|
|
57
|
+
[import_constant.Software.Firefox]: import_downloadFirefox.downloadFirefox,
|
|
58
|
+
[import_constant.Software.PotPlayer]: import_downloadPotPlayer.downloadPotPlayer
|
|
59
|
+
};
|
|
39
60
|
async function downloadLatestSoftware() {
|
|
40
61
|
import_consola.default.start("开始下载软件");
|
|
41
62
|
const { default: inquirer } = await import("inquirer");
|
|
@@ -52,12 +73,13 @@ async function downloadLatestSoftware() {
|
|
|
52
73
|
await (0, import_promises.mkdir)(dir, { recursive: true });
|
|
53
74
|
for (const software of softwares) {
|
|
54
75
|
import_consola.default.start(`正在下载 ${software}`);
|
|
55
|
-
await
|
|
76
|
+
await SoftwareDownloadMap[software](dir);
|
|
56
77
|
}
|
|
57
78
|
import_consola.default.success("软件下载完成");
|
|
58
79
|
}
|
|
59
80
|
// Annotate the CommonJS export names for ESM import in node:
|
|
60
81
|
0 && (module.exports = {
|
|
82
|
+
SoftwareDownloadMap,
|
|
61
83
|
downloadLatestSoftware
|
|
62
84
|
});
|
|
63
85
|
//# sourceMappingURL=downloadLatestSoftware.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/downloadLatestSoftware.ts"],
|
|
4
|
-
"sourcesContent": ["import { Software } from \"@constant/index\"\r\nimport consola from \"consola\"\r\nimport { mkdir } from \"fs/promises\"\r\nimport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AACzB,qBAAoB;AACpB,sBAAsB;AACtB,
|
|
4
|
+
"sourcesContent": ["import { Software } from \"@constant/index\"\r\nimport consola from \"consola\"\r\nimport { mkdir } from \"fs/promises\"\r\nimport { download7Zip, downloadChrome, downloadDeskGo, downloadGeekUninstaller, downloadGit, downloadNodeJS, downloadSupermium, downloadVscode } from \".\"\r\nimport { downloadAnydesk } from \"./downloadAnydesk\"\r\nimport { downloadFirefox } from \"./downloadFirefox\"\r\nimport { downloadHoneyview } from \"./downloadHoneyview\"\r\nimport { downloadPowerToys } from \"./downloadPowerToys\"\r\nimport { downloadPotPlayer } from \"./downloadPotPlayer\"\r\n\r\nexport const SoftwareDownloadMap: Record<Software, (dir: string) => Promise<void>> = {\r\n [Software.Chrome]: downloadChrome,\r\n [Software.NodeJS]: downloadNodeJS,\r\n [Software[\"7zip\"]]: download7Zip,\r\n [Software.Git]: downloadGit,\r\n [Software.DeskGo]: downloadDeskGo,\r\n [Software[\"Geek Uninstaller\"]]: downloadGeekUninstaller,\r\n [Software[\"VS Code\"]]: downloadVscode,\r\n [Software.Supermium]: downloadSupermium,\r\n [Software.PowerToys]: downloadPowerToys,\r\n [Software.Honeyview]: downloadHoneyview,\r\n [Software.AnyDesk]: downloadAnydesk,\r\n [Software.Firefox]: downloadFirefox,\r\n [Software.PotPlayer]: downloadPotPlayer\r\n}\r\n\r\nexport async function downloadLatestSoftware() {\r\n consola.start(\"开始下载软件\")\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const dir = `softwares-${Date.now()}`\r\n const { softwares } = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"softwares\",\r\n message: \"请选择要下载的软件\",\r\n choices: Object.values(Software),\r\n default: Object.values(Software)\r\n })\r\n if (softwares.length === 0) return\r\n await mkdir(dir, { recursive: true })\r\n for (const software of softwares) {\r\n consola.start(`正在下载 ${software}`)\r\n await SoftwareDownloadMap[software as Software](dir)\r\n }\r\n consola.success(\"软件下载完成\")\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AACzB,qBAAoB;AACpB,sBAAsB;AACtB,eAAsJ;AACtJ,6BAAgC;AAChC,6BAAgC;AAChC,+BAAkC;AAClC,+BAAkC;AAClC,+BAAkC;AAE3B,IAAM,sBAAwE;AAAA,EACjF,CAAC,yBAAS,MAAM,GAAG;AAAA,EACnB,CAAC,yBAAS,MAAM,GAAG;AAAA,EACnB,CAAC,yBAAS,MAAM,CAAC,GAAG;AAAA,EACpB,CAAC,yBAAS,GAAG,GAAG;AAAA,EAChB,CAAC,yBAAS,MAAM,GAAG;AAAA,EACnB,CAAC,yBAAS,kBAAkB,CAAC,GAAG;AAAA,EAChC,CAAC,yBAAS,SAAS,CAAC,GAAG;AAAA,EACvB,CAAC,yBAAS,SAAS,GAAG;AAAA,EACtB,CAAC,yBAAS,SAAS,GAAG;AAAA,EACtB,CAAC,yBAAS,SAAS,GAAG;AAAA,EACtB,CAAC,yBAAS,OAAO,GAAG;AAAA,EACpB,CAAC,yBAAS,OAAO,GAAG;AAAA,EACpB,CAAC,yBAAS,SAAS,GAAG;AAC1B;AAEA,eAAsB,yBAAyB;AAC3C,iBAAAA,QAAQ,MAAM,QAAQ;AACtB,QAAM,EAAE,SAAS,SAAS,IAAI,MAAM,OAAO,UAAU;AACrD,QAAM,MAAM,aAAa,KAAK,IAAI;AAClC,QAAM,EAAE,UAAU,IAAI,MAAM,SAAS,OAAO;AAAA,IACxC,MAAM;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,SAAS,OAAO,OAAO,wBAAQ;AAAA,IAC/B,SAAS,OAAO,OAAO,wBAAQ;AAAA,EACnC,CAAC;AACD,MAAI,UAAU,WAAW;AAAG;AAC5B,YAAM,uBAAM,KAAK,EAAE,WAAW,KAAK,CAAC;AACpC,aAAW,YAAY,WAAW;AAC9B,mBAAAA,QAAQ,MAAM,QAAQ,UAAU;AAChC,UAAM,oBAAoB,QAAoB,EAAE,GAAG;AAAA,EACvD;AACA,iBAAAA,QAAQ,QAAQ,QAAQ;AAC5B;",
|
|
6
6
|
"names": ["consola"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/utils/downloadPotPlayer.ts
|
|
20
|
+
var downloadPotPlayer_exports = {};
|
|
21
|
+
__export(downloadPotPlayer_exports, {
|
|
22
|
+
downloadPotPlayer: () => downloadPotPlayer
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(downloadPotPlayer_exports);
|
|
25
|
+
var import__ = require(".");
|
|
26
|
+
async function downloadPotPlayer(dir) {
|
|
27
|
+
await (0, import__.downloadFromWinget)({
|
|
28
|
+
name: "PotPlayer",
|
|
29
|
+
id: "Daum.PotPlayer",
|
|
30
|
+
dir
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
34
|
+
0 && (module.exports = {
|
|
35
|
+
downloadPotPlayer
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=downloadPotPlayer.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/downloadPotPlayer.ts"],
|
|
4
|
+
"sourcesContent": ["import { downloadFromWinget } from \".\"\r\n\r\nexport async function downloadPotPlayer(dir: string) {\r\n await downloadFromWinget({\r\n name: \"PotPlayer\",\r\n id: \"Daum.PotPlayer\",\r\n dir\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAmC;AAEnC,eAAsB,kBAAkB,KAAa;AACjD,YAAM,6BAAmB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/utils/downloadPowerToys.ts
|
|
20
|
+
var downloadPowerToys_exports = {};
|
|
21
|
+
__export(downloadPowerToys_exports, {
|
|
22
|
+
downloadPowerToys: () => downloadPowerToys
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(downloadPowerToys_exports);
|
|
25
|
+
var import__ = require(".");
|
|
26
|
+
async function downloadPowerToys(dir) {
|
|
27
|
+
await (0, import__.downloadFromWinget)({
|
|
28
|
+
name: "PowerToys",
|
|
29
|
+
id: "Microsoft.PowerToys",
|
|
30
|
+
dir,
|
|
31
|
+
architecture: "x64"
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
35
|
+
0 && (module.exports = {
|
|
36
|
+
downloadPowerToys
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=downloadPowerToys.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/downloadPowerToys.ts"],
|
|
4
|
+
"sourcesContent": ["import { downloadFromWinget } from \".\"\r\n\r\nexport async function downloadPowerToys(dir: string) {\r\n await downloadFromWinget({\r\n name: \"PowerToys\",\r\n id: \"Microsoft.PowerToys\",\r\n dir,\r\n architecture: \"x64\"\r\n })\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAmC;AAEnC,eAAsB,kBAAkB,KAAa;AACjD,YAAM,6BAAmB;AAAA,IACrB,MAAM;AAAA,IACN,IAAI;AAAA,IACJ;AAAA,IACA,cAAc;AAAA,EAClB,CAAC;AACL;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/utils/index.js
CHANGED
|
@@ -29,7 +29,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/utils/index.ts
|
|
30
30
|
var utils_exports = {};
|
|
31
31
|
__export(utils_exports, {
|
|
32
|
-
SoftwareDownloadMap: () => SoftwareDownloadMap,
|
|
33
32
|
actionWithBackup: () => actionWithBackup,
|
|
34
33
|
addDependencies: () => addDependencies,
|
|
35
34
|
addDevDependencies: () => addDevDependencies,
|
|
@@ -83,7 +82,6 @@ __export(utils_exports, {
|
|
|
83
82
|
sortArrayOrObject: () => sortArrayOrObject,
|
|
84
83
|
spawnAsync: () => spawnAsync,
|
|
85
84
|
splitExtendsType: () => splitExtendsType,
|
|
86
|
-
vscodeExts: () => vscodeExts,
|
|
87
85
|
writePackageJson: () => writePackageJson,
|
|
88
86
|
writeSyncVscodeScript: () => writeSyncVscodeScript,
|
|
89
87
|
zipDir: () => zipDir
|
|
@@ -99,6 +97,7 @@ var import_https_proxy_agent = require("https-proxy-agent");
|
|
|
99
97
|
var import_os = require("os");
|
|
100
98
|
var import_path = require("path");
|
|
101
99
|
var import_process = require("process");
|
|
100
|
+
var import_soda_nodejs = require("soda-nodejs");
|
|
102
101
|
var import_stream = require("stream");
|
|
103
102
|
var import_yaml = __toESM(require("yaml"));
|
|
104
103
|
var import_hasChangeNoCommit = require("./hasChangeNoCommit");
|
|
@@ -637,7 +636,7 @@ async function downloadChrome(dir) {
|
|
|
637
636
|
name: "Chrome",
|
|
638
637
|
id: "Google.Chrome",
|
|
639
638
|
dir,
|
|
640
|
-
architecture: "
|
|
639
|
+
architecture: "x64"
|
|
641
640
|
});
|
|
642
641
|
}
|
|
643
642
|
async function downloadNodeJS(dir) {
|
|
@@ -652,7 +651,7 @@ async function download7Zip(dir) {
|
|
|
652
651
|
name: "7Zip",
|
|
653
652
|
id: "7zip.7zip",
|
|
654
653
|
dir,
|
|
655
|
-
architecture: "
|
|
654
|
+
architecture: "x64"
|
|
656
655
|
});
|
|
657
656
|
}
|
|
658
657
|
async function downloadGit(dir) {
|
|
@@ -667,8 +666,16 @@ async function downloadDeskGo(dir) {
|
|
|
667
666
|
}
|
|
668
667
|
async function downloadGeekUninstaller(dir) {
|
|
669
668
|
await download(`https://geekuninstaller.com/geek.zip`, dir);
|
|
669
|
+
await (0, import_soda_nodejs.unzip)({
|
|
670
|
+
input: (0, import_path.join)(dir, "geek.zip"),
|
|
671
|
+
output: dir
|
|
672
|
+
});
|
|
673
|
+
await (0, import_promises.rm)((0, import_path.join)(dir, "geek.zip"), { force: true });
|
|
674
|
+
const response = await fetch("https://geekuninstaller.com/download");
|
|
675
|
+
const text = await response.text();
|
|
676
|
+
const version = text.match(/<b>(.+?)<\/b>/)[1];
|
|
677
|
+
await (0, import_promises.rename)((0, import_path.join)(dir, "geek.exe"), (0, import_path.join)(dir, `GeekUninstaller_${version}_x64.exe`));
|
|
670
678
|
}
|
|
671
|
-
var vscodeExts = ["MS-CEINTL.vscode-language-pack-zh-hans", "russell.any-rule", "russell.any-type", "formulahendry.code-runner", "dsznajder.es7-react-js-snippets", "ms-vscode.vscode-typescript-next", "bierner.lit-html", "ritwickdey.LiveServer", "yzhang.markdown-all-in-one", "bierner.markdown-preview-github-styles", "mervin.markdown-formatter", "DavidAnson.vscode-markdownlint", "PKief.material-icon-theme", "techer.open-in-browser", "esbenp.prettier-vscode", "Prisma.prisma", "bradlc.vscode-tailwindcss", "styled-components.vscode-styled-components", "rioukkevin.vscode-git-commit"];
|
|
672
679
|
async function getVscodeExtInfo(ext) {
|
|
673
680
|
const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`);
|
|
674
681
|
const html = await response.text();
|
|
@@ -690,13 +697,13 @@ async function downloadVscodeExts(dir) {
|
|
|
690
697
|
extList.split(/[\n\r]/).filter(Boolean).map((ext) => getVscodeExtInfo(ext))
|
|
691
698
|
);
|
|
692
699
|
const setting = await getSetting();
|
|
693
|
-
const
|
|
700
|
+
const vscodeExts = setting?.vscodeExts;
|
|
694
701
|
const exts2 = await inquirer.prompt({
|
|
695
702
|
type: "checkbox",
|
|
696
703
|
name: "exts",
|
|
697
704
|
message: "选择需要下载的扩展",
|
|
698
705
|
choices: exts.map((ext) => ({ name: ext.name, value: ext.id })),
|
|
699
|
-
default:
|
|
706
|
+
default: vscodeExts?.filter((ext) => exts.some((item) => item.id === ext)) || exts.map((ext) => ext.id)
|
|
700
707
|
});
|
|
701
708
|
setting.vscodeExts = exts2.exts;
|
|
702
709
|
await setSetting(setting);
|
|
@@ -707,16 +714,6 @@ async function downloadVscodeExts(dir) {
|
|
|
707
714
|
await retry(() => download(ext.url, dir, `${ext.id}-${ext.version}.vsix`), 2);
|
|
708
715
|
}
|
|
709
716
|
}
|
|
710
|
-
var SoftwareDownloadMap = {
|
|
711
|
-
[import_constant.Software.Chrome]: downloadChrome,
|
|
712
|
-
[import_constant.Software.NodeJS]: downloadNodeJS,
|
|
713
|
-
[import_constant.Software["7zip"]]: download7Zip,
|
|
714
|
-
[import_constant.Software.Git]: downloadGit,
|
|
715
|
-
[import_constant.Software.DeskGo]: downloadDeskGo,
|
|
716
|
-
[import_constant.Software["Geek Uninstaller"]]: downloadGeekUninstaller,
|
|
717
|
-
[import_constant.Software["VS Code"]]: downloadVscode,
|
|
718
|
-
[import_constant.Software.Supermium]: downloadSupermium
|
|
719
|
-
};
|
|
720
717
|
async function writeSyncVscodeScript(dir) {
|
|
721
718
|
const script = `// @ts-check
|
|
722
719
|
import { spawn } from "child_process"
|
|
@@ -922,7 +919,6 @@ async function retry(callback, times = 1) {
|
|
|
922
919
|
}
|
|
923
920
|
// Annotate the CommonJS export names for ESM import in node:
|
|
924
921
|
0 && (module.exports = {
|
|
925
|
-
SoftwareDownloadMap,
|
|
926
922
|
actionWithBackup,
|
|
927
923
|
addDependencies,
|
|
928
924
|
addDevDependencies,
|
|
@@ -976,7 +972,6 @@ async function retry(callback, times = 1) {
|
|
|
976
972
|
sortArrayOrObject,
|
|
977
973
|
spawnAsync,
|
|
978
974
|
splitExtendsType,
|
|
979
|
-
vscodeExts,
|
|
980
975
|
writePackageJson,
|
|
981
976
|
writeSyncVscodeScript,
|
|
982
977
|
zipDir
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/index.ts"],
|
|
4
|
-
"sourcesContent": ["import { CommitType, CommitTypeMap, PackageManager, Software } from \"@constant/index\"\r\nimport archiver from \"archiver\"\r\nimport { exec, spawn } from \"child_process\"\r\nimport consola from \"consola\"\r\nimport { Stats, createWriteStream, existsSync, readFileSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { homedir } from \"os\"\r\nimport { ParsedPath, join, parse } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { cwd, exit } from \"process\"\r\nimport { Readable } from \"stream\"\r\nimport YAML from \"yaml\"\r\nimport { hasChangeNoCommit } from \"./hasChangeNoCommit\"\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(path ?? cwd(), \"package.json\")\r\n}\r\n\r\n/** 获取包的最新版本 */\r\nexport async function getPackageLatestVersion(packageName: string) {\r\n try {\r\n const url = `https://registry.npmjs.org/${packageName}/latest`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n return data.version as string\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 最新版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\nexport async function getPackageVersions(packageName: string) {\r\n try {\r\n const url = `https://registry.npmjs.org/${packageName}`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n return Object.keys(data.versions) as string[]\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\nexport function getVersionFromRequiredVersion(requiredVersion: string) {\r\n return requiredVersion.replace(/^\\D*/, \"\")\r\n}\r\n\r\nexport function getVersionNum(version: string) {\r\n const reg = /^(\\d+)(\\.\\d+)?(\\.\\d+)?/\r\n const result = version.match(reg)\r\n if (!result) throw new Error(\"无效的版本号\")\r\n return Array.from(result)\r\n .slice(1)\r\n .map(str => (str ? parseInt(str.replace(/^\\./, \"\")) : 0))\r\n}\r\n\r\nexport async function getPackageUpgradeVersion(packageName: string, version: string, level: \"major\" | \"minor\" | \"patch\") {\r\n const current = getVersionNum(version)\r\n const versions = await getPackageVersions(packageName)\r\n const reg = /^\\d+\\.\\d+\\.\\d+$/\r\n const result = versions\r\n .filter(item => {\r\n if (!reg.test(item)) return false\r\n const latest = getVersionNum(item)\r\n let index = -1\r\n for (let i = 0; i < latest.length; i++) {\r\n const cv = current[i]\r\n const lv = latest[i]\r\n if (lv < cv) break\r\n if (lv > cv) {\r\n index = i\r\n break\r\n }\r\n }\r\n if (index === -1) return false\r\n if (level === \"major\") return index >= 0\r\n if (level === \"minor\") return index >= 1\r\n if (level === \"patch\") return index >= 2\r\n })\r\n .map(item => getVersionNum(item))\r\n result.sort((a, b) => {\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] < b[i]) return 1\r\n if (a[i] > b[i]) return -1\r\n }\r\n return 0\r\n })\r\n return result[0]?.join(\".\")\r\n}\r\n\r\n/** 读取 package.json */\r\nexport function readPackageJsonSync(path?: string): Record<string, any> {\r\n try {\r\n const result = JSON.parse(readFileSync(getPackageJsonPath(path), \"utf-8\"))\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 读取 package.json */\r\nexport async function readPackageJson(path?: string): Promise<Record<string, any>> {\r\n try {\r\n const result = JSON.parse(await readFile(getPackageJsonPath(path), \"utf-8\"))\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入依赖 */\r\nexport async function addDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.dependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.dependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至依赖成功`)\r\n }\r\n const keys = Object.keys(packageJson.dependencies)\r\n keys.sort()\r\n const sortedDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDependencies[key] = packageJson.dependencies[key]\r\n }\r\n packageJson.dependencies = sortedDependencies\r\n await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入开发依赖 */\r\nexport async function addDevDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.devDependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.devDependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至开发依赖成功`)\r\n }\r\n const keys = Object.keys(packageJson.devDependencies)\r\n keys.sort()\r\n const sortedDevDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDevDependencies[key] = packageJson.devDependencies[key]\r\n }\r\n packageJson.devDependencies = sortedDevDependencies\r\n await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写回 package.json */\r\nexport async function writePackageJson(packageJson: Record<string, any>, path?: string) {\r\n try {\r\n await writeFile(getPackageJsonPath(path), JSON.stringify(packageJson, undefined, 4), \"utf-8\")\r\n consola.success(\"修改 package.json 成功\")\r\n } catch (error) {\r\n consola.fail(\"修改 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\nexport function isPositiveInteger(value: any, allowZero = false): value is number {\r\n return Number.isInteger(value) && (allowZero ? value >= 0 : value > 0)\r\n}\r\n\r\nexport interface GetFilesOptions {\r\n path?: string\r\n match: (path: ParsedPath, stats: Stats) => boolean\r\n count?: number\r\n depth?: number\r\n exclude?: (path: ParsedPath, stats: Stats) => boolean\r\n}\r\n\r\nexport async function getFiles(options: GetFilesOptions) {\r\n const { path = \"./\", match, count, depth, exclude } = options\r\n if (count !== undefined && !isPositiveInteger(count)) throw new Error(\"count 必须是正整数\")\r\n if (depth !== undefined && !isPositiveInteger(depth)) throw new Error(\"depth 必须是正整数\")\r\n const result: string[] = []\r\n const e = Symbol()\r\n async function _getFiles(path: string, depth: number | undefined) {\r\n const files = await readdir(path)\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const parsedPath = parse(filePath)\r\n const stats = await stat(filePath)\r\n if (match(parsedPath, stats)) {\r\n const length = result.push(filePath)\r\n if (count !== undefined && length >= count) throw e\r\n }\r\n if (!stats.isDirectory()) continue\r\n if (exclude && exclude(parsedPath, stats)) continue\r\n if (depth === 1) continue\r\n await _getFiles(filePath, depth && depth - 1)\r\n }\r\n }\r\n try {\r\n await _getFiles(path, depth)\r\n } catch (error) {\r\n if (error !== e) throw error\r\n }\r\n return result\r\n}\r\n\r\n/** 添加 tailwind.config.js 配置成功 */\r\nexport async function addTailwindConfig() {\r\n try {\r\n await writeFile(\r\n \"tailwind.config.ts\",\r\n `import type { Config } from \"tailwindcss\"\r\nconst config: Config = {\r\n content: [\r\n \"./index.html\",\r\n \"./public/index.html\",\r\n \"./src/**/*.{js,ts,jsx,tsx}\",\r\n \"./app/**/*.{js,ts,jsx,tsx}\",\r\n \"./components/**/*.{js,ts,jsx,tsx}\",\r\n ],\r\n theme: {\r\n extend: {},\r\n },\r\n plugins: [],\r\n}\r\n\r\nexport default config\r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind.config.ts 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind.config.ts 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 postcss.config.js 配置 */\r\nexport async function addPostCSSConfig() {\r\n try {\r\n await rm(\"postcss.config.js\", { force: true })\r\n await rm(\"postcss.config.mjs\", { force: true })\r\n await rm(\"postcss.config.cjs\", { force: true })\r\n await writeFile(\r\n \"postcss.config.mjs\",\r\n `/** @type {import(\"postcss-load-config\").Config} */\r\nconst config = {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {}\r\n }\r\n}\r\n\r\nexport default config \r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.mjs 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.mjs 配置失败\")\r\n }\r\n}\r\n\r\nasync function getEntryCssPath(path: string): Promise<string> {\r\n const dir = await readdir(path)\r\n if (dir.includes(\"app\")) {\r\n const stats = await stat(join(path, \"app\"))\r\n if (stats.isDirectory()) return getEntryCssPath(join(path, \"app\"))\r\n }\r\n if (dir.includes(\"src\")) {\r\n const stats = await stat(join(path, \"src\"))\r\n if (stats.isDirectory()) return getEntryCssPath(join(path, \"src\"))\r\n }\r\n return path\r\n}\r\n\r\nasync function createEntryCss() {\r\n const path = await getEntryCssPath(\"./\")\r\n const dir = await readdir(path)\r\n let hasIndex = false\r\n let hasApp = false\r\n for (const item of dir) {\r\n const parsedPath = parse(item)\r\n if (!(parsedPath.ext === \"ts\" || parsedPath.ext === \"tsx\" || parsedPath.ext === \"js\" || parsedPath.ext === \"jsx\")) continue\r\n if (parsedPath.name.toLowerCase() === \"index\" || parsedPath.name.toLowerCase() === \"main\") hasIndex = true\r\n if (parsedPath.name.toLowerCase() === \"app\") hasApp = true\r\n if (hasIndex && hasApp) break\r\n }\r\n const cssPath = hasIndex || !hasApp ? join(path, \"index.css\") : join(path, \"app.css\")\r\n await writeFile(cssPath, \"\")\r\n return cssPath\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport async function addTailwindToCSS() {\r\n try {\r\n const files = await getFiles({\r\n match: (path, stats) => (path.base.toLowerCase() === \"index.css\" || path.base.toLowerCase() === \"app.css\" || path.base.toLowerCase() === \"globals.css\") && stats.isFile(),\r\n count: 1,\r\n exclude: (path, stats) => path.base === \"node_modules\" && stats.isDirectory()\r\n })\r\n if (files.length === 0) files.push(await createEntryCss())\r\n const file = files[0]\r\n const { base } = parse(file)\r\n const css = await readFile(file, \"utf-8\")\r\n if (css.includes(\"@tailwind\")) {\r\n consola.warn(`${base} 已经包含 tailwind`)\r\n return\r\n }\r\n await writeFile(\r\n file,\r\n `@tailwind base; \r\n@tailwind components;\r\n@tailwind utilities;\r\n\r\n${css}`,\r\n \"utf-8\"\r\n )\r\n consola.success(`添加 tailwind 成功`)\r\n } catch (error) {\r\n console.log(error)\r\n consola.fail(`添加 tailwind 失败`)\r\n }\r\n}\r\n\r\nexport const prettierConfig: Config = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n\r\nexport const prettierConfigText = `module.exports = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n`\r\n\r\nexport const prettierConfigTextWithTailwind = `module.exports = {\r\n plugins: [\"prettier-plugin-tailwindcss\"],\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n`\r\n\r\nexport function sortArrayOrObject(data: any) {\r\n if (typeof data !== \"object\" || data === null) return data\r\n if (Array.isArray(data)) {\r\n const _data = [...data]\r\n _data.sort()\r\n return _data\r\n }\r\n if (Object.getPrototypeOf(data) === Object.prototype) {\r\n const keys = Object.keys(data)\r\n keys.sort()\r\n const _data: Record<string, any> = {}\r\n for (const key of keys) {\r\n _data[key] = data[key]\r\n }\r\n return _data\r\n }\r\n return data\r\n}\r\n\r\nexport async function installDependcies(silent?: boolean, manager?: PackageManager): Promise<boolean> {\r\n if (!silent) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { install } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"install\",\r\n message: \"安装依赖\"\r\n })\r\n if (install === false) return false\r\n }\r\n manager ??= await getPackageManager()\r\n await spawnAsync(`${manager} install`)\r\n return true\r\n}\r\n\r\nexport function getTypeInGenerics(str: string, start = 0) {\r\n if (str[start] !== \"<\") throw new Error(\"无效的泛型\")\r\n let count = 1\r\n let index: number | undefined = undefined\r\n for (let i = start + 1; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n count++\r\n continue\r\n }\r\n if (w === \">\") {\r\n count--\r\n if (count === 0) {\r\n index = i\r\n break\r\n }\r\n }\r\n }\r\n if (index === undefined) throw new Error(\"无效的泛型\")\r\n return str.slice(start + 1, index)\r\n}\r\n\r\nexport type ExecAsyncOptions = {\r\n cwd?: string | URL | undefined\r\n}\r\n\r\nexport type SpawnAsyncOptions = {\r\n ignoreError?: boolean\r\n cwd?: string | URL | undefined\r\n}\r\n\r\nexport function execAsync(command: string, options?: ExecAsyncOptions) {\r\n consola.log(command)\r\n const { cwd } = options || {}\r\n return new Promise<string>((resolve, reject) => {\r\n exec(command, { cwd }, (error, stdout, stderr) => {\r\n if (error) return reject(error)\r\n if (stderr) consola.warn(stderr)\r\n resolve(stdout)\r\n })\r\n })\r\n}\r\n\r\nexport function spawnAsync(command: string, options?: SpawnAsyncOptions) {\r\n consola.log(command)\r\n const { ignoreError = false, cwd } = options || {}\r\n return new Promise<void>((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\", cwd })\r\n child.on(\"exit\", code => {\r\n if (code !== 0 && !ignoreError) {\r\n reject(new Error(`Command failed with code ${code}`))\r\n return\r\n }\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\nexport function splitExtendsType(str: string) {\r\n const types: string[] = []\r\n let index = 0\r\n for (let i = 0; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n const type = getTypeInGenerics(str, i)\r\n i += type.length + 1\r\n continue\r\n }\r\n if (w === \",\") {\r\n types.push(str.slice(index, i))\r\n index = i + 1\r\n }\r\n }\r\n types.push(str.slice(index))\r\n return types.map(v => v.trim()).filter(v => v)\r\n}\r\n\r\nexport const addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\", \"test.js\", \"test.mjs\", \"test.ts\", \"test\"]\r\n\r\nconst agent = new HttpsProxyAgent(\"http://localhost:7890\")\r\n\r\nexport function getFilename(headers: Headers | NodeFetchHeaders) {\r\n const disposition = headers.get(\"content-disposition\")\r\n if (!disposition) return undefined\r\n const reg = /filename=(.+?);/\r\n const result = disposition.match(reg)\r\n if (!result) return undefined\r\n return result[1]\r\n}\r\n\r\nexport async function download(url: string, dir: string, filename?: string) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const response = await fetch(url, { agent })\r\n filename = getFilename(response.headers) || filename || new URL(url).pathname.split(\"/\").at(-1)!\r\n const writeable = createWriteStream(join(dir, filename))\r\n await new Promise((resolve, reject) => Readable.from(response.body!).pipe(writeable).on(\"finish\", resolve).on(\"error\", reject))\r\n return filename\r\n}\r\n\r\nexport async function downloadVscode(dir: string) {\r\n await download(\"https://code.visualstudio.com/sha/download?build=stable&os=win32-x64\", dir, \"vscode.exe\")\r\n}\r\n\r\nexport async function sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\n\r\nexport async function downloadSupermium(dir: string) {\r\n const response = await fetch(\"https://win32subsystem.live/supermium/\")\r\n const html = await response.text()\r\n const reg = /href=\".+?setup\\.exe\"/g\r\n const matches = Array.from(html.match(reg) || [])\r\n const reg2 = /<b>Supermium (\\d+(\\.\\d+)*)/\r\n const version = html.match(reg2)![1]\r\n for (let i = 0; i < matches.length; i++) {\r\n const str = matches[i]\r\n const url = new URL(str.slice(6, -1), \"https://win32subsystem.live\").href\r\n const filename = await download(url, dir)\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `Supermium_${version}_${filename.endsWith(\"64_setup.exe\") ? \"x64\" : \"x86\"}.exe`))\r\n }\r\n}\r\n\r\nexport namespace PCQQ {\r\n export interface Result {\r\n resp: Resp\r\n }\r\n\r\n export interface Resp {\r\n soft_list: Softlist[]\r\n retCode: number\r\n }\r\n\r\n export interface Softlist {\r\n soft_id: number\r\n os_type: number\r\n os_bit: number\r\n display_name: string\r\n nick_ver: string\r\n ver_name: string\r\n file_size: string\r\n file_name: string\r\n publish_date: string\r\n download_url: string\r\n download_https_url: string\r\n }\r\n}\r\n\r\nexport async function downloadFromPCQQ(dir: string, cmdid: number, soft_id_list: number) {\r\n const data = new URLSearchParams()\r\n data.set(\"cmdid\", cmdid.toString())\r\n data.set(\"jprxReq[req][soft_id_list][]\", soft_id_list.toString())\r\n const headers = new Headers()\r\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded\")\r\n const response = await fetch(`https://luban.m.qq.com/api/public/software-manager/softwareProxy`, { method: \"POST\", headers, body: data.toString() })\r\n const result: PCQQ.Result = await response.json()\r\n await download(result.resp.soft_list[0].download_https_url, dir, result.resp.soft_list[0].file_name)\r\n}\r\n\r\nexport namespace Winget {\r\n export interface Package {\r\n PackageIdentifier: string\r\n PackageVersion: string\r\n InstallerType: string\r\n InstallModes: string[]\r\n InstallerSwitches: InstallerSwitches\r\n ExpectedReturnCodes: ExpectedReturnCode[]\r\n UpgradeBehavior: string\r\n Protocols: string[]\r\n FileExtensions: string[]\r\n AppsAndFeaturesEntries: AppsAndFeaturesEntry[]\r\n Installers: Installer[]\r\n ManifestType: string\r\n ManifestVersion: string\r\n }\r\n\r\n export interface Installer {\r\n Architecture: string\r\n Scope: string\r\n InstallerUrl: string\r\n InstallerSha256: string\r\n InstallerSwitches: InstallerSwitches2\r\n ProductCode: string\r\n }\r\n\r\n export interface InstallerSwitches2 {\r\n Custom: string\r\n }\r\n\r\n export interface AppsAndFeaturesEntry {\r\n UpgradeCode: string\r\n InstallerType: string\r\n }\r\n\r\n export interface ExpectedReturnCode {\r\n InstallerReturnCode: number\r\n ReturnResponse: string\r\n }\r\n\r\n export interface InstallerSwitches {\r\n Log: string\r\n }\r\n}\r\n\r\nexport type WingetItem = {\r\n filename: string\r\n version: string\r\n ext: string\r\n architecture: string\r\n}\r\n\r\nexport type WingetDownloadInfo = {\r\n name: string\r\n id: string\r\n dir: string\r\n architecture?: \"x64\" | \"x86\" | \"all\"\r\n}\r\n\r\nexport async function downloadFromWinget({ name, id, dir, architecture = \"x64\" }: WingetDownloadInfo) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const firstLetter = id[0].toLowerCase()\r\n const path = id.replace(/\\./g, \"/\")\r\n const response = await fetch(`https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/${firstLetter}/${path}`, { agent })\r\n const data: GithubContent[] = (await response.json()) as any\r\n if (!Array.isArray(data)) throw new Error((data as any).message)\r\n const reg2 = /^\\d+(\\.\\d+?)*$/\r\n const stables = data.filter(item => reg2.test(item.name))\r\n stables.sort((a, b) => {\r\n const avs = a.name.split(\".\")\r\n const bvs = b.name.split(\".\")\r\n const max = Math.max(avs.length, bvs.length)\r\n for (let i = 0; i < max; i++) {\r\n const av = avs[i] ? parseInt(avs[i]) : 0\r\n const bv = bvs[i] ? parseInt(bvs[i]) : 0\r\n if (av < bv) return 1\r\n if (av > bv) return -1\r\n }\r\n return 0\r\n })\r\n const response2 = await fetch(`https://raw.githubusercontent.com/microsoft/winget-pkgs/master/manifests/${firstLetter}/${path}/${stables[0].name}/${id}.installer.yaml`, { agent })\r\n const yaml = await response2.text()\r\n const pkg: Winget.Package = YAML.parse(yaml)\r\n const installers = pkg.Installers.filter((item, index) => {\r\n if (item.Architecture !== \"x64\" && item.Architecture !== \"x86\") return false\r\n if (architecture !== \"all\" && item.Architecture !== architecture) return false\r\n if (!item.InstallerUrl.endsWith(\".exe\") && !item.InstallerUrl.endsWith(\".msi\")) return false\r\n if (item.InstallerUrl.endsWith(\".msi\") && pkg.Installers.some(item2 => item2.Architecture === item.Architecture && item2.InstallerUrl.endsWith(\".exe\"))) return false\r\n if (pkg.Installers.findIndex(item2 => item2.Architecture === item.Architecture) !== index) return false\r\n return true\r\n })\r\n const result: WingetItem[] = []\r\n for (const { InstallerUrl, Architecture } of installers) {\r\n if (Architecture !== \"x64\" && Architecture !== \"x86\") continue\r\n const filename = await download(InstallerUrl, dir)\r\n result.push({ filename, version: pkg.PackageVersion, ext: InstallerUrl.endsWith(\".exe\") ? \"exe\" : \"msi\", architecture: Architecture })\r\n }\r\n for (const { version, filename, architecture, ext } of result) {\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `${name}_${version}_${architecture}.${ext}`))\r\n }\r\n}\r\n\r\nexport interface GithubContent {\r\n name: string\r\n path: string\r\n sha: string\r\n size: number\r\n url: string\r\n html_url: string\r\n git_url: string\r\n download_url?: string | null\r\n type: string\r\n _links: Links\r\n}\r\n\r\nexport interface Links {\r\n self: string\r\n git: string\r\n html: string\r\n}\r\n\r\nexport async function downloadChrome(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Chrome\",\r\n id: \"Google.Chrome\",\r\n dir,\r\n architecture: \"all\"\r\n })\r\n}\r\n\r\nexport async function downloadNodeJS(dir: string) {\r\n await downloadFromWinget({\r\n name: \"NodeJS\",\r\n id: \"OpenJS.NodeJS.LTS\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function download7Zip(dir: string) {\r\n await downloadFromWinget({\r\n name: \"7Zip\",\r\n id: \"7zip.7zip\",\r\n dir,\r\n architecture: \"all\"\r\n })\r\n}\r\n\r\nexport async function downloadGit(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Git\",\r\n id: \"Git.Git\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function downloadDeskGo(dir: string) {\r\n await downloadFromPCQQ(dir, 3318, 23125)\r\n}\r\n\r\nexport async function downloadGeekUninstaller(dir: string) {\r\n await download(`https://geekuninstaller.com/geek.zip`, dir)\r\n}\r\n\r\nexport const vscodeExts: string[] = [\"MS-CEINTL.vscode-language-pack-zh-hans\", \"russell.any-rule\", \"russell.any-type\", \"formulahendry.code-runner\", \"dsznajder.es7-react-js-snippets\", \"ms-vscode.vscode-typescript-next\", \"bierner.lit-html\", \"ritwickdey.LiveServer\", \"yzhang.markdown-all-in-one\", \"bierner.markdown-preview-github-styles\", \"mervin.markdown-formatter\", \"DavidAnson.vscode-markdownlint\", \"PKief.material-icon-theme\", \"techer.open-in-browser\", \"esbenp.prettier-vscode\", \"Prisma.prisma\", \"bradlc.vscode-tailwindcss\", \"styled-components.vscode-styled-components\", \"rioukkevin.vscode-git-commit\"]\r\n\r\nexport async function getVscodeExtInfo(ext: string): Promise<VscodeExt> {\r\n const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`)\r\n const html = await response.text()\r\n const reg = /^(.+?)\\.(.+?)$/\r\n const [, author, name] = ext.match(reg)!\r\n const reg2 = /\"Version\":\"(.+?)\"/\r\n const version = html.match(reg2)![1]\r\n const reg3 = /<span class=\"ux-item-name\">(.+?)<\\/span>/\r\n const displayName = html.match(reg3)![1]\r\n const url = `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${author}/vsextensions/${name}/${version}/vspackage`\r\n return { id: ext, name: displayName, version, url }\r\n // await download(url, dir, `${ext}-${version}.vsix`)\r\n}\r\n\r\nexport interface VscodeExt {\r\n id: string\r\n name: string\r\n version: string\r\n url: string\r\n}\r\n\r\nexport async function downloadVscodeExts(dir: string) {\r\n await mkdir(dir, { recursive: true })\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.start(\"正在获取 VS Code 扩展列表\")\r\n const extList = await execAsync(\"code --list-extensions\")\r\n const exts = await Promise.all(\r\n extList\r\n .split(/[\\n\\r]/)\r\n .filter(Boolean)\r\n .map(ext => getVscodeExtInfo(ext))\r\n )\r\n const setting = await getSetting()\r\n const vscodeExts = setting?.vscodeExts as string[] | undefined\r\n const exts2 = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"exts\",\r\n message: \"选择需要下载的扩展\",\r\n choices: exts.map(ext => ({ name: ext.name, value: ext.id })),\r\n default: vscodeExts?.filter(ext => exts.some(item => item.id === ext)) || exts.map(ext => ext.id)\r\n })\r\n setting.vscodeExts = exts2.exts\r\n await setSetting(setting)\r\n for (const ext of exts) {\r\n if (!exts2.exts.includes(ext.id)) continue\r\n consola.start(`正在下载 ${ext.name}`)\r\n await retry(() => download(ext.url, dir, `${ext.id}-${ext.version}.vsix`), 2)\r\n }\r\n}\r\n\r\nexport const SoftwareDownloadMap: Record<Software, (dir: string) => Promise<void>> = {\r\n [Software.Chrome]: downloadChrome,\r\n [Software.NodeJS]: downloadNodeJS,\r\n [Software[\"7zip\"]]: download7Zip,\r\n [Software.Git]: downloadGit,\r\n [Software.DeskGo]: downloadDeskGo,\r\n [Software[\"Geek Uninstaller\"]]: downloadGeekUninstaller,\r\n [Software[\"VS Code\"]]: downloadVscode,\r\n [Software.Supermium]: downloadSupermium\r\n}\r\n\r\nexport async function writeSyncVscodeScript(dir: string) {\r\n const script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { readdir, copyFile, rm } from \"fs/promises\"\r\nimport { homedir } from \"os\"\r\nimport { join } from \"path\"\r\n\r\n/** \r\n * @param {string} command\r\n */\r\nfunction spawnAsync(command) {\r\n return new Promise((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\" })\r\n child.on(\"exit\", code => {\r\n if (code !== 0) return reject(new Error(\\`Command failed with code \\${code}\\`))\r\n resolve(0)\r\n })\r\n })\r\n}\r\n\r\nasync function main() {\r\n const dir = await readdir(\"./extensions\")\r\n for (const ext of dir) {\r\n await spawnAsync(\\`code --install-extension \"./extensions/\\${ext}\"\\`)\r\n }\r\n const userDir = homedir()\r\n const setting = join(userDir, \"AppData/Roaming/Code/User/settings.json\")\r\n await rm(setting, { force: true })\r\n await copyFile(\"./settings.json\", setting)\r\n const snippetTarget = join(userDir, \"AppData/Roaming/Code/User/snippets\")\r\n const dir2 = await readdir(\"./snippets\")\r\n for (const file of dir2) {\r\n await rm(join(snippetTarget, file), { force: true })\r\n await copyFile(join(\"./snippets\", file), join(snippetTarget, file))\r\n }\r\n}\r\n\r\nmain()`\r\n await writeFile(join(dir, \"syncVscode.mjs\"), script, \"utf-8\")\r\n}\r\n\r\nexport async function getProcessInfoFromPid(pid: number) {\r\n try {\r\n const stdout = await execAsync(`tasklist | findstr ${pid}`)\r\n const reg = new RegExp(`( +)${pid}( (Services|Console) +)`)\r\n return stdout\r\n .split(/[\\n\\r]/)\r\n .find(line => reg.test(line))\r\n ?.replace(reg, \"$1$2\")\r\n ?.replace(/ +/g, \" \")\r\n } catch (error) {\r\n return undefined\r\n }\r\n}\r\n\r\nexport type PidInfo = {\r\n pid: number\r\n info: string\r\n}\r\n\r\nexport async function getPidInfoFromPort(port: number) {\r\n try {\r\n const stdout = await execAsync(`netstat -ano | findstr :${port}`)\r\n const reg = new RegExp(` (\\\\[::\\\\]|(\\\\d{1,3}\\\\.){3}\\\\d{1,3}):${port} `)\r\n const result = Array.from(\r\n new Set(\r\n stdout\r\n .split(/[\\n\\r]/)\r\n .filter(line => reg.test(line))\r\n .map(line => ({ pid: parseInt(line.match(reg)![1]), info: line }))\r\n )\r\n )\r\n for (let i = 0; ; ) {\r\n if (result.some(({ info }) => info[i] === undefined)) break\r\n if (result.some(({ info }) => info[i] !== \" \" || info[i + 1] !== \" \")) {\r\n i++\r\n continue\r\n }\r\n result.forEach(item => (item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`))\r\n }\r\n return result\r\n } catch (error) {\r\n return []\r\n }\r\n}\r\n\r\nexport function zipDir(sourceDir: string, outPath: string) {\r\n const archive = archiver(\"zip\", { zlib: { level: 0 } }) // 设置压缩级别\r\n const stream = createWriteStream(outPath)\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n archive\r\n .directory(sourceDir, false) // 添加整个目录到压缩文件\r\n .on(\"error\", err => reject(err))\r\n .pipe(stream)\r\n\r\n stream.on(\"close\", () => resolve())\r\n archive.finalize()\r\n })\r\n}\r\n\r\nexport async function getPackageManager(): Promise<PackageManager> {\r\n const dir = await readdir(\"./\")\r\n if (dir.includes(\"yarn.lock\")) return PackageManager.yarn\r\n if (dir.includes(\"package-lock.json\")) return PackageManager.npm\r\n if (dir.includes(\"pnpm-lock.yaml\")) return PackageManager.pnpm\r\n if (dir.includes(\"bun.lockb\")) return PackageManager.bun\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { manager } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"请选择包管理器\",\r\n choices: [\"yarn\", \"npm\", \"pnpm\", \"bun\"]\r\n })\r\n return manager as PackageManager\r\n}\r\n\r\nexport async function isCommandExisted(command: string): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n exec(`powershell -command command ${command}`, err => {\r\n resolve(!err)\r\n })\r\n })\r\n}\r\n\r\nexport async function ifContinue(message = \"是否继续\"): Promise<boolean> {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { continue: cont } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"continue\",\r\n message\r\n })\r\n return cont\r\n}\r\n\r\nexport async function isRepo() {\r\n try {\r\n await execAsync(\"git status\")\r\n return true\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * @param [forceRepo=false] 是否强制认为是 git 目录\r\n * @returns 如果是 git 目录且检测到未提交的更改,选择继续,则返回 true,否则返回 undefined\r\n */\r\nexport async function backupFirst(forceRepo = false): Promise<true | void> {\r\n if (!(await isRepo())) {\r\n if (forceRepo) {\r\n consola.error(\"git 不可用\")\r\n exit()\r\n }\r\n consola.warn(\"强烈建议使用前备份代码\")\r\n const cont = await ifContinue()\r\n if (!cont) exit()\r\n return\r\n }\r\n if (await hasChangeNoCommit()) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.warn(\"强烈建议使用前提交代码\")\r\n const cont = await ifContinue()\r\n if (!cont) exit()\r\n return true\r\n }\r\n}\r\n\r\nexport async function addGitCommit(message: string) {\r\n consola.start(\"提交代码\")\r\n await execAsync(\"git add .\")\r\n await execAsync(`git commit -m \"${message}\"`)\r\n}\r\n\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<string>>(action: T, message?: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<void>>(action: T, message: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup(action: (...args: any[]) => Promise<string | void>, message?: string) {\r\n return async (...args: any[]) => {\r\n const skip = await backupFirst()\r\n const msg = await action(...args)\r\n if (!(await isRepo()) || skip || !(await hasChangeNoCommit())) return\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { commit } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"commit\",\r\n message: \"是否自动提交代码\",\r\n default: true\r\n })\r\n if (!commit) return\r\n let commitMessage: string\r\n if (typeof message === \"string\") commitMessage = message\r\n else if (typeof msg === \"string\") commitMessage = msg\r\n else {\r\n consola.warn(\"请提供提交信息\")\r\n exit()\r\n }\r\n await addGitCommit(commitMessage)\r\n }\r\n}\r\n\r\nexport function getCommitMessage(type: CommitType, message: string) {\r\n return `${CommitTypeMap[type]}${message}`\r\n}\r\n\r\nexport async function getSetting() {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n if (existsSync(settingPath)) {\r\n const setting = JSON.parse(await readFile(settingPath, \"utf-8\"))\r\n return setting\r\n }\r\n return {}\r\n}\r\n\r\nexport async function setSetting(setting: Record<string, any>) {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n await writeFile(settingPath, JSON.stringify(setting, undefined, 4), \"utf-8\")\r\n}\r\n\r\nexport async function retry<T>(callback: () => Promise<T>, times = 1) {\r\n try {\r\n return await callback()\r\n } catch (error) {\r\n if (times === 0) throw error\r\n return await retry(callback, times - 1)\r\n }\r\n}\r\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["consola", "path", "depth", "cwd", "fetch", "YAML", "architecture", "
|
|
4
|
+
"sourcesContent": ["import { CommitType, CommitTypeMap, PackageManager } from \"@constant/index\"\r\nimport archiver from \"archiver\"\r\nimport { exec, spawn } from \"child_process\"\r\nimport consola from \"consola\"\r\nimport { Stats, createWriteStream, existsSync, readFileSync } from \"fs\"\r\nimport { mkdir, readFile, readdir, rename, rm, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport { type Headers as NodeFetchHeaders } from \"node-fetch\"\r\nimport { homedir } from \"os\"\r\nimport { ParsedPath, join, parse } from \"path\"\r\nimport { Config } from \"prettier\"\r\nimport { cwd, exit } from \"process\"\r\nimport { unzip } from \"soda-nodejs\"\r\nimport { Readable } from \"stream\"\r\nimport YAML from \"yaml\"\r\nimport { hasChangeNoCommit } from \"./hasChangeNoCommit\"\r\n\r\nexport function getPackageJsonPath(path?: string) {\r\n return join(path ?? cwd(), \"package.json\")\r\n}\r\n\r\n/** 获取包的最新版本 */\r\nexport async function getPackageLatestVersion(packageName: string) {\r\n try {\r\n const url = `https://registry.npmjs.org/${packageName}/latest`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n return data.version as string\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 最新版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\nexport async function getPackageVersions(packageName: string) {\r\n try {\r\n const url = `https://registry.npmjs.org/${packageName}`\r\n const response = await fetch(url)\r\n const data = await response.json()\r\n return Object.keys(data.versions) as string[]\r\n } catch (error) {\r\n consola.fail(`获取 ${packageName} 版本号失败`)\r\n exit()\r\n }\r\n}\r\n\r\nexport function getVersionFromRequiredVersion(requiredVersion: string) {\r\n return requiredVersion.replace(/^\\D*/, \"\")\r\n}\r\n\r\nexport function getVersionNum(version: string) {\r\n const reg = /^(\\d+)(\\.\\d+)?(\\.\\d+)?/\r\n const result = version.match(reg)\r\n if (!result) throw new Error(\"无效的版本号\")\r\n return Array.from(result)\r\n .slice(1)\r\n .map(str => (str ? parseInt(str.replace(/^\\./, \"\")) : 0))\r\n}\r\n\r\nexport async function getPackageUpgradeVersion(packageName: string, version: string, level: \"major\" | \"minor\" | \"patch\") {\r\n const current = getVersionNum(version)\r\n const versions = await getPackageVersions(packageName)\r\n const reg = /^\\d+\\.\\d+\\.\\d+$/\r\n const result = versions\r\n .filter(item => {\r\n if (!reg.test(item)) return false\r\n const latest = getVersionNum(item)\r\n let index = -1\r\n for (let i = 0; i < latest.length; i++) {\r\n const cv = current[i]\r\n const lv = latest[i]\r\n if (lv < cv) break\r\n if (lv > cv) {\r\n index = i\r\n break\r\n }\r\n }\r\n if (index === -1) return false\r\n if (level === \"major\") return index >= 0\r\n if (level === \"minor\") return index >= 1\r\n if (level === \"patch\") return index >= 2\r\n })\r\n .map(item => getVersionNum(item))\r\n result.sort((a, b) => {\r\n for (let i = 0; i < a.length; i++) {\r\n if (a[i] < b[i]) return 1\r\n if (a[i] > b[i]) return -1\r\n }\r\n return 0\r\n })\r\n return result[0]?.join(\".\")\r\n}\r\n\r\n/** 读取 package.json */\r\nexport function readPackageJsonSync(path?: string): Record<string, any> {\r\n try {\r\n const result = JSON.parse(readFileSync(getPackageJsonPath(path), \"utf-8\"))\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 读取 package.json */\r\nexport async function readPackageJson(path?: string): Promise<Record<string, any>> {\r\n try {\r\n const result = JSON.parse(await readFile(getPackageJsonPath(path), \"utf-8\"))\r\n return result\r\n } catch (error) {\r\n consola.error(error)\r\n consola.fail(\"读取 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入依赖 */\r\nexport async function addDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.dependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.dependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至依赖成功`)\r\n }\r\n const keys = Object.keys(packageJson.dependencies)\r\n keys.sort()\r\n const sortedDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDependencies[key] = packageJson.dependencies[key]\r\n }\r\n packageJson.dependencies = sortedDependencies\r\n await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写入开发依赖 */\r\nexport async function addDevDependencies(...packages: string[]): Promise<void> {\r\n try {\r\n const packageJson = await readPackageJson()\r\n packageJson.devDependencies ??= {}\r\n for (const name of packages) {\r\n packageJson.devDependencies[name] ??= `^${await getPackageLatestVersion(name)}`\r\n consola.success(`添加 ${name} 至开发依赖成功`)\r\n }\r\n const keys = Object.keys(packageJson.devDependencies)\r\n keys.sort()\r\n const sortedDevDependencies: Record<string, string> = {}\r\n for (const key of keys) {\r\n sortedDevDependencies[key] = packageJson.devDependencies[key]\r\n }\r\n packageJson.devDependencies = sortedDevDependencies\r\n await writePackageJson(packageJson)\r\n } catch (error) {\r\n consola.error(error)\r\n exit()\r\n }\r\n}\r\n\r\n/** 写回 package.json */\r\nexport async function writePackageJson(packageJson: Record<string, any>, path?: string) {\r\n try {\r\n await writeFile(getPackageJsonPath(path), JSON.stringify(packageJson, undefined, 4), \"utf-8\")\r\n consola.success(\"修改 package.json 成功\")\r\n } catch (error) {\r\n consola.fail(\"修改 package.json 失败\")\r\n exit()\r\n }\r\n}\r\n\r\nexport function isPositiveInteger(value: any, allowZero = false): value is number {\r\n return Number.isInteger(value) && (allowZero ? value >= 0 : value > 0)\r\n}\r\n\r\nexport interface GetFilesOptions {\r\n path?: string\r\n match: (path: ParsedPath, stats: Stats) => boolean\r\n count?: number\r\n depth?: number\r\n exclude?: (path: ParsedPath, stats: Stats) => boolean\r\n}\r\n\r\nexport async function getFiles(options: GetFilesOptions) {\r\n const { path = \"./\", match, count, depth, exclude } = options\r\n if (count !== undefined && !isPositiveInteger(count)) throw new Error(\"count 必须是正整数\")\r\n if (depth !== undefined && !isPositiveInteger(depth)) throw new Error(\"depth 必须是正整数\")\r\n const result: string[] = []\r\n const e = Symbol()\r\n async function _getFiles(path: string, depth: number | undefined) {\r\n const files = await readdir(path)\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const parsedPath = parse(filePath)\r\n const stats = await stat(filePath)\r\n if (match(parsedPath, stats)) {\r\n const length = result.push(filePath)\r\n if (count !== undefined && length >= count) throw e\r\n }\r\n if (!stats.isDirectory()) continue\r\n if (exclude && exclude(parsedPath, stats)) continue\r\n if (depth === 1) continue\r\n await _getFiles(filePath, depth && depth - 1)\r\n }\r\n }\r\n try {\r\n await _getFiles(path, depth)\r\n } catch (error) {\r\n if (error !== e) throw error\r\n }\r\n return result\r\n}\r\n\r\n/** 添加 tailwind.config.js 配置成功 */\r\nexport async function addTailwindConfig() {\r\n try {\r\n await writeFile(\r\n \"tailwind.config.ts\",\r\n `import type { Config } from \"tailwindcss\"\r\nconst config: Config = {\r\n content: [\r\n \"./index.html\",\r\n \"./public/index.html\",\r\n \"./src/**/*.{js,ts,jsx,tsx}\",\r\n \"./app/**/*.{js,ts,jsx,tsx}\",\r\n \"./components/**/*.{js,ts,jsx,tsx}\",\r\n ],\r\n theme: {\r\n extend: {},\r\n },\r\n plugins: [],\r\n}\r\n\r\nexport default config\r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 tailwind.config.ts 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 tailwind.config.ts 配置失败\")\r\n }\r\n}\r\n\r\n/** 添加 postcss.config.js 配置 */\r\nexport async function addPostCSSConfig() {\r\n try {\r\n await rm(\"postcss.config.js\", { force: true })\r\n await rm(\"postcss.config.mjs\", { force: true })\r\n await rm(\"postcss.config.cjs\", { force: true })\r\n await writeFile(\r\n \"postcss.config.mjs\",\r\n `/** @type {import(\"postcss-load-config\").Config} */\r\nconst config = {\r\n plugins: {\r\n tailwindcss: {},\r\n autoprefixer: {}\r\n }\r\n}\r\n\r\nexport default config \r\n`,\r\n \"utf-8\"\r\n )\r\n consola.success(\"添加 postcss.config.mjs 配置成功\")\r\n } catch (error) {\r\n consola.fail(\"添加 postcss.config.mjs 配置失败\")\r\n }\r\n}\r\n\r\nasync function getEntryCssPath(path: string): Promise<string> {\r\n const dir = await readdir(path)\r\n if (dir.includes(\"app\")) {\r\n const stats = await stat(join(path, \"app\"))\r\n if (stats.isDirectory()) return getEntryCssPath(join(path, \"app\"))\r\n }\r\n if (dir.includes(\"src\")) {\r\n const stats = await stat(join(path, \"src\"))\r\n if (stats.isDirectory()) return getEntryCssPath(join(path, \"src\"))\r\n }\r\n return path\r\n}\r\n\r\nasync function createEntryCss() {\r\n const path = await getEntryCssPath(\"./\")\r\n const dir = await readdir(path)\r\n let hasIndex = false\r\n let hasApp = false\r\n for (const item of dir) {\r\n const parsedPath = parse(item)\r\n if (!(parsedPath.ext === \"ts\" || parsedPath.ext === \"tsx\" || parsedPath.ext === \"js\" || parsedPath.ext === \"jsx\")) continue\r\n if (parsedPath.name.toLowerCase() === \"index\" || parsedPath.name.toLowerCase() === \"main\") hasIndex = true\r\n if (parsedPath.name.toLowerCase() === \"app\") hasApp = true\r\n if (hasIndex && hasApp) break\r\n }\r\n const cssPath = hasIndex || !hasApp ? join(path, \"index.css\") : join(path, \"app.css\")\r\n await writeFile(cssPath, \"\")\r\n return cssPath\r\n}\r\n\r\n/** 添加 tailwind 至 index.css 成功 */\r\nexport async function addTailwindToCSS() {\r\n try {\r\n const files = await getFiles({\r\n match: (path, stats) => (path.base.toLowerCase() === \"index.css\" || path.base.toLowerCase() === \"app.css\" || path.base.toLowerCase() === \"globals.css\") && stats.isFile(),\r\n count: 1,\r\n exclude: (path, stats) => path.base === \"node_modules\" && stats.isDirectory()\r\n })\r\n if (files.length === 0) files.push(await createEntryCss())\r\n const file = files[0]\r\n const { base } = parse(file)\r\n const css = await readFile(file, \"utf-8\")\r\n if (css.includes(\"@tailwind\")) {\r\n consola.warn(`${base} 已经包含 tailwind`)\r\n return\r\n }\r\n await writeFile(\r\n file,\r\n `@tailwind base; \r\n@tailwind components;\r\n@tailwind utilities;\r\n\r\n${css}`,\r\n \"utf-8\"\r\n )\r\n consola.success(`添加 tailwind 成功`)\r\n } catch (error) {\r\n console.log(error)\r\n consola.fail(`添加 tailwind 失败`)\r\n }\r\n}\r\n\r\nexport const prettierConfig: Config = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n\r\nexport const prettierConfigText = `module.exports = {\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n`\r\n\r\nexport const prettierConfigTextWithTailwind = `module.exports = {\r\n plugins: [\"prettier-plugin-tailwindcss\"],\r\n semi: false,\r\n tabWidth: 4,\r\n arrowParens: \"avoid\",\r\n printWidth: 800,\r\n trailingComma: \"none\"\r\n}\r\n`\r\n\r\nexport function sortArrayOrObject(data: any) {\r\n if (typeof data !== \"object\" || data === null) return data\r\n if (Array.isArray(data)) {\r\n const _data = [...data]\r\n _data.sort()\r\n return _data\r\n }\r\n if (Object.getPrototypeOf(data) === Object.prototype) {\r\n const keys = Object.keys(data)\r\n keys.sort()\r\n const _data: Record<string, any> = {}\r\n for (const key of keys) {\r\n _data[key] = data[key]\r\n }\r\n return _data\r\n }\r\n return data\r\n}\r\n\r\nexport async function installDependcies(silent?: boolean, manager?: PackageManager): Promise<boolean> {\r\n if (!silent) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { install } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"install\",\r\n message: \"安装依赖\"\r\n })\r\n if (install === false) return false\r\n }\r\n manager ??= await getPackageManager()\r\n await spawnAsync(`${manager} install`)\r\n return true\r\n}\r\n\r\nexport function getTypeInGenerics(str: string, start = 0) {\r\n if (str[start] !== \"<\") throw new Error(\"无效的泛型\")\r\n let count = 1\r\n let index: number | undefined = undefined\r\n for (let i = start + 1; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n count++\r\n continue\r\n }\r\n if (w === \">\") {\r\n count--\r\n if (count === 0) {\r\n index = i\r\n break\r\n }\r\n }\r\n }\r\n if (index === undefined) throw new Error(\"无效的泛型\")\r\n return str.slice(start + 1, index)\r\n}\r\n\r\nexport type ExecAsyncOptions = {\r\n cwd?: string | URL | undefined\r\n}\r\n\r\nexport type SpawnAsyncOptions = {\r\n ignoreError?: boolean\r\n cwd?: string | URL | undefined\r\n}\r\n\r\nexport function execAsync(command: string, options?: ExecAsyncOptions) {\r\n consola.log(command)\r\n const { cwd } = options || {}\r\n return new Promise<string>((resolve, reject) => {\r\n exec(command, { cwd }, (error, stdout, stderr) => {\r\n if (error) return reject(error)\r\n if (stderr) consola.warn(stderr)\r\n resolve(stdout)\r\n })\r\n })\r\n}\r\n\r\nexport function spawnAsync(command: string, options?: SpawnAsyncOptions) {\r\n consola.log(command)\r\n const { ignoreError = false, cwd } = options || {}\r\n return new Promise<void>((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\", cwd })\r\n child.on(\"exit\", code => {\r\n if (code !== 0 && !ignoreError) {\r\n reject(new Error(`Command failed with code ${code}`))\r\n return\r\n }\r\n resolve()\r\n })\r\n })\r\n}\r\n\r\nexport function splitExtendsType(str: string) {\r\n const types: string[] = []\r\n let index = 0\r\n for (let i = 0; i < str.length; i++) {\r\n const w = str[i]\r\n if (w === \"<\") {\r\n const type = getTypeInGenerics(str, i)\r\n i += type.length + 1\r\n continue\r\n }\r\n if (w === \",\") {\r\n types.push(str.slice(index, i))\r\n index = i + 1\r\n }\r\n }\r\n types.push(str.slice(index))\r\n return types.map(v => v.trim()).filter(v => v)\r\n}\r\n\r\nexport const addedRules = [\"package-lock.json\", \"yarn.lock\", \"node_modules\", \"dist\", \"build\", \"pnpm-lock.yaml\", \"yarn-error.log\", \"test.js\", \"test.mjs\", \"test.ts\", \"test\"]\r\n\r\nconst agent = new HttpsProxyAgent(\"http://localhost:7890\")\r\n\r\nexport function getFilename(headers: Headers | NodeFetchHeaders) {\r\n const disposition = headers.get(\"content-disposition\")\r\n if (!disposition) return undefined\r\n const reg = /filename=(.+?);/\r\n const result = disposition.match(reg)\r\n if (!result) return undefined\r\n return result[1]\r\n}\r\n\r\nexport async function download(url: string, dir: string, filename?: string) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const response = await fetch(url, { agent })\r\n filename = getFilename(response.headers) || filename || new URL(url).pathname.split(\"/\").at(-1)!\r\n const writeable = createWriteStream(join(dir, filename))\r\n await new Promise((resolve, reject) => Readable.from(response.body!).pipe(writeable).on(\"finish\", resolve).on(\"error\", reject))\r\n return filename\r\n}\r\n\r\nexport async function downloadVscode(dir: string) {\r\n await download(\"https://code.visualstudio.com/sha/download?build=stable&os=win32-x64\", dir, \"vscode.exe\")\r\n}\r\n\r\nexport async function sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms))\r\n}\r\n\r\nexport async function downloadSupermium(dir: string) {\r\n const response = await fetch(\"https://win32subsystem.live/supermium/\")\r\n const html = await response.text()\r\n const reg = /href=\".+?setup\\.exe\"/g\r\n const matches = Array.from(html.match(reg) || [])\r\n const reg2 = /<b>Supermium (\\d+(\\.\\d+)*)/\r\n const version = html.match(reg2)![1]\r\n for (let i = 0; i < matches.length; i++) {\r\n const str = matches[i]\r\n const url = new URL(str.slice(6, -1), \"https://win32subsystem.live\").href\r\n const filename = await download(url, dir)\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `Supermium_${version}_${filename.endsWith(\"64_setup.exe\") ? \"x64\" : \"x86\"}.exe`))\r\n }\r\n}\r\n\r\nexport namespace PCQQ {\r\n export interface Result {\r\n resp: Resp\r\n }\r\n\r\n export interface Resp {\r\n soft_list: Softlist[]\r\n retCode: number\r\n }\r\n\r\n export interface Softlist {\r\n soft_id: number\r\n os_type: number\r\n os_bit: number\r\n display_name: string\r\n nick_ver: string\r\n ver_name: string\r\n file_size: string\r\n file_name: string\r\n publish_date: string\r\n download_url: string\r\n download_https_url: string\r\n }\r\n}\r\n\r\nexport async function downloadFromPCQQ(dir: string, cmdid: number, soft_id_list: number) {\r\n const data = new URLSearchParams()\r\n data.set(\"cmdid\", cmdid.toString())\r\n data.set(\"jprxReq[req][soft_id_list][]\", soft_id_list.toString())\r\n const headers = new Headers()\r\n headers.set(\"Content-Type\", \"application/x-www-form-urlencoded\")\r\n const response = await fetch(`https://luban.m.qq.com/api/public/software-manager/softwareProxy`, { method: \"POST\", headers, body: data.toString() })\r\n const result: PCQQ.Result = await response.json()\r\n await download(result.resp.soft_list[0].download_https_url, dir, result.resp.soft_list[0].file_name)\r\n}\r\n\r\nexport namespace Winget {\r\n export interface Package {\r\n PackageIdentifier: string\r\n PackageVersion: string\r\n InstallerType: string\r\n InstallModes: string[]\r\n InstallerSwitches: InstallerSwitches\r\n ExpectedReturnCodes: ExpectedReturnCode[]\r\n UpgradeBehavior: string\r\n Protocols: string[]\r\n FileExtensions: string[]\r\n AppsAndFeaturesEntries: AppsAndFeaturesEntry[]\r\n Installers: Installer[]\r\n ManifestType: string\r\n ManifestVersion: string\r\n }\r\n\r\n export interface Installer {\r\n Architecture: string\r\n Scope: string\r\n InstallerUrl: string\r\n InstallerSha256: string\r\n InstallerSwitches: InstallerSwitches2\r\n ProductCode: string\r\n }\r\n\r\n export interface InstallerSwitches2 {\r\n Custom: string\r\n }\r\n\r\n export interface AppsAndFeaturesEntry {\r\n UpgradeCode: string\r\n InstallerType: string\r\n }\r\n\r\n export interface ExpectedReturnCode {\r\n InstallerReturnCode: number\r\n ReturnResponse: string\r\n }\r\n\r\n export interface InstallerSwitches {\r\n Log: string\r\n }\r\n}\r\n\r\nexport type WingetItem = {\r\n filename: string\r\n version: string\r\n ext: string\r\n architecture: string\r\n}\r\n\r\nexport type WingetDownloadInfo = {\r\n name: string\r\n id: string\r\n dir: string\r\n architecture?: \"x64\" | \"x86\" | \"all\"\r\n}\r\n\r\nexport async function downloadFromWinget({ name, id, dir, architecture = \"x64\" }: WingetDownloadInfo) {\r\n const { default: fetch } = await import(\"node-fetch\")\r\n const firstLetter = id[0].toLowerCase()\r\n const path = id.replace(/\\./g, \"/\")\r\n const response = await fetch(`https://api.github.com/repos/microsoft/winget-pkgs/contents/manifests/${firstLetter}/${path}`, { agent })\r\n const data: GithubContent[] = (await response.json()) as any\r\n if (!Array.isArray(data)) throw new Error((data as any).message)\r\n const reg2 = /^\\d+(\\.\\d+?)*$/\r\n const stables = data.filter(item => reg2.test(item.name))\r\n stables.sort((a, b) => {\r\n const avs = a.name.split(\".\")\r\n const bvs = b.name.split(\".\")\r\n const max = Math.max(avs.length, bvs.length)\r\n for (let i = 0; i < max; i++) {\r\n const av = avs[i] ? parseInt(avs[i]) : 0\r\n const bv = bvs[i] ? parseInt(bvs[i]) : 0\r\n if (av < bv) return 1\r\n if (av > bv) return -1\r\n }\r\n return 0\r\n })\r\n const response2 = await fetch(`https://raw.githubusercontent.com/microsoft/winget-pkgs/master/manifests/${firstLetter}/${path}/${stables[0].name}/${id}.installer.yaml`, { agent })\r\n const yaml = await response2.text()\r\n const pkg: Winget.Package = YAML.parse(yaml)\r\n const installers = pkg.Installers.filter((item, index) => {\r\n if (item.Architecture !== \"x64\" && item.Architecture !== \"x86\") return false\r\n if (architecture !== \"all\" && item.Architecture !== architecture) return false\r\n if (!item.InstallerUrl.endsWith(\".exe\") && !item.InstallerUrl.endsWith(\".msi\")) return false\r\n if (item.InstallerUrl.endsWith(\".msi\") && pkg.Installers.some(item2 => item2.Architecture === item.Architecture && item2.InstallerUrl.endsWith(\".exe\"))) return false\r\n if (pkg.Installers.findIndex(item2 => item2.Architecture === item.Architecture) !== index) return false\r\n return true\r\n })\r\n const result: WingetItem[] = []\r\n for (const { InstallerUrl, Architecture } of installers) {\r\n if (Architecture !== \"x64\" && Architecture !== \"x86\") continue\r\n const filename = await download(InstallerUrl, dir)\r\n result.push({ filename, version: pkg.PackageVersion, ext: InstallerUrl.endsWith(\".exe\") ? \"exe\" : \"msi\", architecture: Architecture })\r\n }\r\n for (const { version, filename, architecture, ext } of result) {\r\n await sleep(100)\r\n await rename(join(dir, filename), join(dir, `${name}_${version}_${architecture}.${ext}`))\r\n }\r\n}\r\n\r\nexport interface GithubContent {\r\n name: string\r\n path: string\r\n sha: string\r\n size: number\r\n url: string\r\n html_url: string\r\n git_url: string\r\n download_url?: string | null\r\n type: string\r\n _links: Links\r\n}\r\n\r\nexport interface Links {\r\n self: string\r\n git: string\r\n html: string\r\n}\r\n\r\nexport async function downloadChrome(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Chrome\",\r\n id: \"Google.Chrome\",\r\n dir,\r\n architecture: \"x64\"\r\n })\r\n}\r\n\r\nexport async function downloadNodeJS(dir: string) {\r\n await downloadFromWinget({\r\n name: \"NodeJS\",\r\n id: \"OpenJS.NodeJS.LTS\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function download7Zip(dir: string) {\r\n await downloadFromWinget({\r\n name: \"7Zip\",\r\n id: \"7zip.7zip\",\r\n dir,\r\n architecture: \"x64\"\r\n })\r\n}\r\n\r\nexport async function downloadGit(dir: string) {\r\n await downloadFromWinget({\r\n name: \"Git\",\r\n id: \"Git.Git\",\r\n dir\r\n })\r\n}\r\n\r\nexport async function downloadDeskGo(dir: string) {\r\n await downloadFromPCQQ(dir, 3318, 23125)\r\n}\r\n\r\nexport async function downloadGeekUninstaller(dir: string) {\r\n await download(`https://geekuninstaller.com/geek.zip`, dir)\r\n await unzip({\r\n input: join(dir, \"geek.zip\"),\r\n output: dir\r\n })\r\n await rm(join(dir, \"geek.zip\"), { force: true })\r\n const response = await fetch(\"https://geekuninstaller.com/download\")\r\n const text = await response.text()\r\n const version = text.match(/<b>(.+?)<\\/b>/)![1]\r\n await rename(join(dir, \"geek.exe\"), join(dir, `GeekUninstaller_${version}_x64.exe`))\r\n}\r\n\r\nexport async function getVscodeExtInfo(ext: string): Promise<VscodeExt> {\r\n const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`)\r\n const html = await response.text()\r\n const reg = /^(.+?)\\.(.+?)$/\r\n const [, author, name] = ext.match(reg)!\r\n const reg2 = /\"Version\":\"(.+?)\"/\r\n const version = html.match(reg2)![1]\r\n const reg3 = /<span class=\"ux-item-name\">(.+?)<\\/span>/\r\n const displayName = html.match(reg3)![1]\r\n const url = `https://marketplace.visualstudio.com/_apis/public/gallery/publishers/${author}/vsextensions/${name}/${version}/vspackage`\r\n return { id: ext, name: displayName, version, url }\r\n // await download(url, dir, `${ext}-${version}.vsix`)\r\n}\r\n\r\nexport interface VscodeExt {\r\n id: string\r\n name: string\r\n version: string\r\n url: string\r\n}\r\n\r\nexport async function downloadVscodeExts(dir: string) {\r\n await mkdir(dir, { recursive: true })\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.start(\"正在获取 VS Code 扩展列表\")\r\n const extList = await execAsync(\"code --list-extensions\")\r\n const exts = await Promise.all(\r\n extList\r\n .split(/[\\n\\r]/)\r\n .filter(Boolean)\r\n .map(ext => getVscodeExtInfo(ext))\r\n )\r\n const setting = await getSetting()\r\n const vscodeExts = setting?.vscodeExts as string[] | undefined\r\n const exts2 = await inquirer.prompt({\r\n type: \"checkbox\",\r\n name: \"exts\",\r\n message: \"选择需要下载的扩展\",\r\n choices: exts.map(ext => ({ name: ext.name, value: ext.id })),\r\n default: vscodeExts?.filter(ext => exts.some(item => item.id === ext)) || exts.map(ext => ext.id)\r\n })\r\n setting.vscodeExts = exts2.exts\r\n await setSetting(setting)\r\n for (const ext of exts) {\r\n if (!exts2.exts.includes(ext.id)) continue\r\n consola.start(`正在下载 ${ext.name}`)\r\n await retry(() => download(ext.url, dir, `${ext.id}-${ext.version}.vsix`), 2)\r\n }\r\n}\r\n\r\nexport async function writeSyncVscodeScript(dir: string) {\r\n const script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { readdir, copyFile, rm } from \"fs/promises\"\r\nimport { homedir } from \"os\"\r\nimport { join } from \"path\"\r\n\r\n/** \r\n * @param {string} command\r\n */\r\nfunction spawnAsync(command) {\r\n return new Promise((resolve, reject) => {\r\n const child = spawn(command, { shell: true, stdio: \"inherit\" })\r\n child.on(\"exit\", code => {\r\n if (code !== 0) return reject(new Error(\\`Command failed with code \\${code}\\`))\r\n resolve(0)\r\n })\r\n })\r\n}\r\n\r\nasync function main() {\r\n const dir = await readdir(\"./extensions\")\r\n for (const ext of dir) {\r\n await spawnAsync(\\`code --install-extension \"./extensions/\\${ext}\"\\`)\r\n }\r\n const userDir = homedir()\r\n const setting = join(userDir, \"AppData/Roaming/Code/User/settings.json\")\r\n await rm(setting, { force: true })\r\n await copyFile(\"./settings.json\", setting)\r\n const snippetTarget = join(userDir, \"AppData/Roaming/Code/User/snippets\")\r\n const dir2 = await readdir(\"./snippets\")\r\n for (const file of dir2) {\r\n await rm(join(snippetTarget, file), { force: true })\r\n await copyFile(join(\"./snippets\", file), join(snippetTarget, file))\r\n }\r\n}\r\n\r\nmain()`\r\n await writeFile(join(dir, \"syncVscode.mjs\"), script, \"utf-8\")\r\n}\r\n\r\nexport async function getProcessInfoFromPid(pid: number) {\r\n try {\r\n const stdout = await execAsync(`tasklist | findstr ${pid}`)\r\n const reg = new RegExp(`( +)${pid}( (Services|Console) +)`)\r\n return stdout\r\n .split(/[\\n\\r]/)\r\n .find(line => reg.test(line))\r\n ?.replace(reg, \"$1$2\")\r\n ?.replace(/ +/g, \" \")\r\n } catch (error) {\r\n return undefined\r\n }\r\n}\r\n\r\nexport type PidInfo = {\r\n pid: number\r\n info: string\r\n}\r\n\r\nexport async function getPidInfoFromPort(port: number) {\r\n try {\r\n const stdout = await execAsync(`netstat -ano | findstr :${port}`)\r\n const reg = new RegExp(` (\\\\[::\\\\]|(\\\\d{1,3}\\\\.){3}\\\\d{1,3}):${port} `)\r\n const result = Array.from(\r\n new Set(\r\n stdout\r\n .split(/[\\n\\r]/)\r\n .filter(line => reg.test(line))\r\n .map(line => ({ pid: parseInt(line.match(reg)![1]), info: line }))\r\n )\r\n )\r\n for (let i = 0; ; ) {\r\n if (result.some(({ info }) => info[i] === undefined)) break\r\n if (result.some(({ info }) => info[i] !== \" \" || info[i + 1] !== \" \")) {\r\n i++\r\n continue\r\n }\r\n result.forEach(item => (item.info = `${item.info.slice(0, i)}${item.info.slice(i + 1)}`))\r\n }\r\n return result\r\n } catch (error) {\r\n return []\r\n }\r\n}\r\n\r\nexport function zipDir(sourceDir: string, outPath: string) {\r\n const archive = archiver(\"zip\", { zlib: { level: 0 } }) // 设置压缩级别\r\n const stream = createWriteStream(outPath)\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n archive\r\n .directory(sourceDir, false) // 添加整个目录到压缩文件\r\n .on(\"error\", err => reject(err))\r\n .pipe(stream)\r\n\r\n stream.on(\"close\", () => resolve())\r\n archive.finalize()\r\n })\r\n}\r\n\r\nexport async function getPackageManager(): Promise<PackageManager> {\r\n const dir = await readdir(\"./\")\r\n if (dir.includes(\"yarn.lock\")) return PackageManager.yarn\r\n if (dir.includes(\"package-lock.json\")) return PackageManager.npm\r\n if (dir.includes(\"pnpm-lock.yaml\")) return PackageManager.pnpm\r\n if (dir.includes(\"bun.lockb\")) return PackageManager.bun\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { manager } = await inquirer.prompt({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"请选择包管理器\",\r\n choices: [\"yarn\", \"npm\", \"pnpm\", \"bun\"]\r\n })\r\n return manager as PackageManager\r\n}\r\n\r\nexport async function isCommandExisted(command: string): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n exec(`powershell -command command ${command}`, err => {\r\n resolve(!err)\r\n })\r\n })\r\n}\r\n\r\nexport async function ifContinue(message = \"是否继续\"): Promise<boolean> {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { continue: cont } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"continue\",\r\n message\r\n })\r\n return cont\r\n}\r\n\r\nexport async function isRepo() {\r\n try {\r\n await execAsync(\"git status\")\r\n return true\r\n } catch (error) {\r\n return false\r\n }\r\n}\r\n\r\n/**\r\n * @param [forceRepo=false] 是否强制认为是 git 目录\r\n * @returns 如果是 git 目录且检测到未提交的更改,选择继续,则返回 true,否则返回 undefined\r\n */\r\nexport async function backupFirst(forceRepo = false): Promise<true | void> {\r\n if (!(await isRepo())) {\r\n if (forceRepo) {\r\n consola.error(\"git 不可用\")\r\n exit()\r\n }\r\n consola.warn(\"强烈建议使用前备份代码\")\r\n const cont = await ifContinue()\r\n if (!cont) exit()\r\n return\r\n }\r\n if (await hasChangeNoCommit()) {\r\n const { default: inquirer } = await import(\"inquirer\")\r\n consola.warn(\"强烈建议使用前提交代码\")\r\n const cont = await ifContinue()\r\n if (!cont) exit()\r\n return true\r\n }\r\n}\r\n\r\nexport async function addGitCommit(message: string) {\r\n consola.start(\"提交代码\")\r\n await execAsync(\"git add .\")\r\n await execAsync(`git commit -m \"${message}\"`)\r\n}\r\n\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<string>>(action: T, message?: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup<T extends (...args: any[]) => Promise<void>>(action: T, message: string): (...args: Parameters<T>) => Promise<void>\r\nexport function actionWithBackup(action: (...args: any[]) => Promise<string | void>, message?: string) {\r\n return async (...args: any[]) => {\r\n const skip = await backupFirst()\r\n const msg = await action(...args)\r\n if (!(await isRepo()) || skip || !(await hasChangeNoCommit())) return\r\n const { default: inquirer } = await import(\"inquirer\")\r\n const { commit } = await inquirer.prompt({\r\n type: \"confirm\",\r\n name: \"commit\",\r\n message: \"是否自动提交代码\",\r\n default: true\r\n })\r\n if (!commit) return\r\n let commitMessage: string\r\n if (typeof message === \"string\") commitMessage = message\r\n else if (typeof msg === \"string\") commitMessage = msg\r\n else {\r\n consola.warn(\"请提供提交信息\")\r\n exit()\r\n }\r\n await addGitCommit(commitMessage)\r\n }\r\n}\r\n\r\nexport function getCommitMessage(type: CommitType, message: string) {\r\n return `${CommitTypeMap[type]}${message}`\r\n}\r\n\r\nexport async function getSetting() {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n if (existsSync(settingPath)) {\r\n const setting = JSON.parse(await readFile(settingPath, \"utf-8\"))\r\n return setting\r\n }\r\n return {}\r\n}\r\n\r\nexport async function setSetting(setting: Record<string, any>) {\r\n const userDir = homedir()\r\n const settingPath = join(userDir, \".zixulu.json\")\r\n await writeFile(settingPath, JSON.stringify(setting, undefined, 4), \"utf-8\")\r\n}\r\n\r\nexport async function retry<T>(callback: () => Promise<T>, times = 1) {\r\n try {\r\n return await callback()\r\n } catch (error) {\r\n if (times === 0) throw error\r\n return await retry(callback, times - 1)\r\n }\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["consola", "path", "depth", "cwd", "fetch", "YAML", "architecture", "archiver"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,54 +1,56 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "zixulu",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"main": "dist/index.js",
|
|
5
|
-
"types": "dist/index.d.ts",
|
|
6
|
-
"bin": {
|
|
7
|
-
"zixulu": "dist/index.js"
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"dev": "father dev",
|
|
11
|
-
"build": "father build",
|
|
12
|
-
"build:deps": "father prebundle",
|
|
13
|
-
"prepublishOnly": "father doctor && npm run build"
|
|
14
|
-
},
|
|
15
|
-
"keywords": [],
|
|
16
|
-
"authors": [],
|
|
17
|
-
"license": "MIT",
|
|
18
|
-
"files": [
|
|
19
|
-
"compiled",
|
|
20
|
-
"dist",
|
|
21
|
-
"src"
|
|
22
|
-
],
|
|
23
|
-
"publishConfig": {
|
|
24
|
-
"access": "public",
|
|
25
|
-
"registry": "https://registry.npmjs.org/"
|
|
26
|
-
},
|
|
27
|
-
"repository": {
|
|
28
|
-
"type": "git",
|
|
29
|
-
"url": "git+https://github.com/1adybug/zixulu.git"
|
|
30
|
-
},
|
|
31
|
-
"dependencies": {
|
|
32
|
-
"archiver": "^7.0.1",
|
|
33
|
-
"clipboardy": "^4.0.0",
|
|
34
|
-
"commander": "^12.0.0",
|
|
35
|
-
"consola": "^3.2.3",
|
|
36
|
-
"dayjs": "^1.11.11",
|
|
37
|
-
"https-proxy-agent": "^7.0.4",
|
|
38
|
-
"inquirer": "^9.2.19",
|
|
39
|
-
"json5": "^2.2.3",
|
|
40
|
-
"node-fetch": "^3.3.2",
|
|
41
|
-
"prettier": "^3.2.5",
|
|
42
|
-
"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"@types/
|
|
47
|
-
"@types/
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "zixulu",
|
|
3
|
+
"version": "1.35.1",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"types": "dist/index.d.ts",
|
|
6
|
+
"bin": {
|
|
7
|
+
"zixulu": "dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"dev": "father dev",
|
|
11
|
+
"build": "father build",
|
|
12
|
+
"build:deps": "father prebundle",
|
|
13
|
+
"prepublishOnly": "father doctor && npm run build"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [],
|
|
16
|
+
"authors": [],
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"files": [
|
|
19
|
+
"compiled",
|
|
20
|
+
"dist",
|
|
21
|
+
"src"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public",
|
|
25
|
+
"registry": "https://registry.npmjs.org/"
|
|
26
|
+
},
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/1adybug/zixulu.git"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"archiver": "^7.0.1",
|
|
33
|
+
"clipboardy": "^4.0.0",
|
|
34
|
+
"commander": "^12.0.0",
|
|
35
|
+
"consola": "^3.2.3",
|
|
36
|
+
"dayjs": "^1.11.11",
|
|
37
|
+
"https-proxy-agent": "^7.0.4",
|
|
38
|
+
"inquirer": "^9.2.19",
|
|
39
|
+
"json5": "^2.2.3",
|
|
40
|
+
"node-fetch": "^3.3.2",
|
|
41
|
+
"prettier": "^3.2.5",
|
|
42
|
+
"soda-nodejs": "^0.2.0",
|
|
43
|
+
"yaml": "^2.4.1"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/archiver": "^6.0.2",
|
|
47
|
+
"@types/inquirer": "^9.0.7",
|
|
48
|
+
"@types/node": "^20.12.7",
|
|
49
|
+
"father": "^4.4.0",
|
|
50
|
+
"typescript": "^5.5.3"
|
|
51
|
+
},
|
|
52
|
+
"resolutions": {
|
|
53
|
+
"string-width": "^4",
|
|
54
|
+
"strip-ansi": "^6"
|
|
55
|
+
}
|
|
56
|
+
}
|
package/src/constant/index.ts
CHANGED
|
@@ -19,7 +19,12 @@ export enum Software {
|
|
|
19
19
|
"Git" = "Git",
|
|
20
20
|
"NodeJS" = "NodeJS",
|
|
21
21
|
"Geek Uninstaller" = "Geek Uninstaller",
|
|
22
|
-
"DeskGo" = "DeskGo"
|
|
22
|
+
"DeskGo" = "DeskGo",
|
|
23
|
+
"PowerToys" = "PowerToys",
|
|
24
|
+
"Honeyview" = "Honeyview",
|
|
25
|
+
"AnyDesk" = "AnyDesk",
|
|
26
|
+
"Firefox" = "Firefox",
|
|
27
|
+
"PotPlayer" = "PotPlayer"
|
|
23
28
|
}
|
|
24
29
|
|
|
25
30
|
export enum ProjectType {
|
|
@@ -1,7 +1,28 @@
|
|
|
1
1
|
import { Software } from "@constant/index"
|
|
2
2
|
import consola from "consola"
|
|
3
3
|
import { mkdir } from "fs/promises"
|
|
4
|
-
import {
|
|
4
|
+
import { download7Zip, downloadChrome, downloadDeskGo, downloadGeekUninstaller, downloadGit, downloadNodeJS, downloadSupermium, downloadVscode } from "."
|
|
5
|
+
import { downloadAnydesk } from "./downloadAnydesk"
|
|
6
|
+
import { downloadFirefox } from "./downloadFirefox"
|
|
7
|
+
import { downloadHoneyview } from "./downloadHoneyview"
|
|
8
|
+
import { downloadPowerToys } from "./downloadPowerToys"
|
|
9
|
+
import { downloadPotPlayer } from "./downloadPotPlayer"
|
|
10
|
+
|
|
11
|
+
export const SoftwareDownloadMap: Record<Software, (dir: string) => Promise<void>> = {
|
|
12
|
+
[Software.Chrome]: downloadChrome,
|
|
13
|
+
[Software.NodeJS]: downloadNodeJS,
|
|
14
|
+
[Software["7zip"]]: download7Zip,
|
|
15
|
+
[Software.Git]: downloadGit,
|
|
16
|
+
[Software.DeskGo]: downloadDeskGo,
|
|
17
|
+
[Software["Geek Uninstaller"]]: downloadGeekUninstaller,
|
|
18
|
+
[Software["VS Code"]]: downloadVscode,
|
|
19
|
+
[Software.Supermium]: downloadSupermium,
|
|
20
|
+
[Software.PowerToys]: downloadPowerToys,
|
|
21
|
+
[Software.Honeyview]: downloadHoneyview,
|
|
22
|
+
[Software.AnyDesk]: downloadAnydesk,
|
|
23
|
+
[Software.Firefox]: downloadFirefox,
|
|
24
|
+
[Software.PotPlayer]: downloadPotPlayer
|
|
25
|
+
}
|
|
5
26
|
|
|
6
27
|
export async function downloadLatestSoftware() {
|
|
7
28
|
consola.start("开始下载软件")
|
package/src/utils/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CommitType, CommitTypeMap, PackageManager
|
|
1
|
+
import { CommitType, CommitTypeMap, PackageManager } from "@constant/index"
|
|
2
2
|
import archiver from "archiver"
|
|
3
3
|
import { exec, spawn } from "child_process"
|
|
4
4
|
import consola from "consola"
|
|
@@ -10,6 +10,7 @@ import { homedir } from "os"
|
|
|
10
10
|
import { ParsedPath, join, parse } from "path"
|
|
11
11
|
import { Config } from "prettier"
|
|
12
12
|
import { cwd, exit } from "process"
|
|
13
|
+
import { unzip } from "soda-nodejs"
|
|
13
14
|
import { Readable } from "stream"
|
|
14
15
|
import YAML from "yaml"
|
|
15
16
|
import { hasChangeNoCommit } from "./hasChangeNoCommit"
|
|
@@ -678,7 +679,7 @@ export async function downloadChrome(dir: string) {
|
|
|
678
679
|
name: "Chrome",
|
|
679
680
|
id: "Google.Chrome",
|
|
680
681
|
dir,
|
|
681
|
-
architecture: "
|
|
682
|
+
architecture: "x64"
|
|
682
683
|
})
|
|
683
684
|
}
|
|
684
685
|
|
|
@@ -695,7 +696,7 @@ export async function download7Zip(dir: string) {
|
|
|
695
696
|
name: "7Zip",
|
|
696
697
|
id: "7zip.7zip",
|
|
697
698
|
dir,
|
|
698
|
-
architecture: "
|
|
699
|
+
architecture: "x64"
|
|
699
700
|
})
|
|
700
701
|
}
|
|
701
702
|
|
|
@@ -713,10 +714,17 @@ export async function downloadDeskGo(dir: string) {
|
|
|
713
714
|
|
|
714
715
|
export async function downloadGeekUninstaller(dir: string) {
|
|
715
716
|
await download(`https://geekuninstaller.com/geek.zip`, dir)
|
|
717
|
+
await unzip({
|
|
718
|
+
input: join(dir, "geek.zip"),
|
|
719
|
+
output: dir
|
|
720
|
+
})
|
|
721
|
+
await rm(join(dir, "geek.zip"), { force: true })
|
|
722
|
+
const response = await fetch("https://geekuninstaller.com/download")
|
|
723
|
+
const text = await response.text()
|
|
724
|
+
const version = text.match(/<b>(.+?)<\/b>/)![1]
|
|
725
|
+
await rename(join(dir, "geek.exe"), join(dir, `GeekUninstaller_${version}_x64.exe`))
|
|
716
726
|
}
|
|
717
727
|
|
|
718
|
-
export const vscodeExts: string[] = ["MS-CEINTL.vscode-language-pack-zh-hans", "russell.any-rule", "russell.any-type", "formulahendry.code-runner", "dsznajder.es7-react-js-snippets", "ms-vscode.vscode-typescript-next", "bierner.lit-html", "ritwickdey.LiveServer", "yzhang.markdown-all-in-one", "bierner.markdown-preview-github-styles", "mervin.markdown-formatter", "DavidAnson.vscode-markdownlint", "PKief.material-icon-theme", "techer.open-in-browser", "esbenp.prettier-vscode", "Prisma.prisma", "bradlc.vscode-tailwindcss", "styled-components.vscode-styled-components", "rioukkevin.vscode-git-commit"]
|
|
719
|
-
|
|
720
728
|
export async function getVscodeExtInfo(ext: string): Promise<VscodeExt> {
|
|
721
729
|
const response = await fetch(`https://marketplace.visualstudio.com/items?itemName=${ext}`)
|
|
722
730
|
const html = await response.text()
|
|
@@ -767,17 +775,6 @@ export async function downloadVscodeExts(dir: string) {
|
|
|
767
775
|
}
|
|
768
776
|
}
|
|
769
777
|
|
|
770
|
-
export const SoftwareDownloadMap: Record<Software, (dir: string) => Promise<void>> = {
|
|
771
|
-
[Software.Chrome]: downloadChrome,
|
|
772
|
-
[Software.NodeJS]: downloadNodeJS,
|
|
773
|
-
[Software["7zip"]]: download7Zip,
|
|
774
|
-
[Software.Git]: downloadGit,
|
|
775
|
-
[Software.DeskGo]: downloadDeskGo,
|
|
776
|
-
[Software["Geek Uninstaller"]]: downloadGeekUninstaller,
|
|
777
|
-
[Software["VS Code"]]: downloadVscode,
|
|
778
|
-
[Software.Supermium]: downloadSupermium
|
|
779
|
-
}
|
|
780
|
-
|
|
781
778
|
export async function writeSyncVscodeScript(dir: string) {
|
|
782
779
|
const script = `// @ts-check
|
|
783
780
|
import { spawn } from "child_process"
|