zixulu 1.40.1 → 1.40.2
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/index.js +6 -2
- package/dist/index.js.map +2 -2
- package/dist/utils/addExpressScript.d.ts +7 -0
- package/dist/utils/addExpressScript.js +154 -0
- package/dist/utils/addExpressScript.js.map +7 -0
- package/dist/utils/addNextScript.js +4 -2
- package/dist/utils/addNextScript.js.map +2 -2
- package/dist/utils/getHeaders.d.ts +6 -0
- package/dist/utils/getHeaders.js +54 -0
- package/dist/utils/getHeaders.js.map +7 -0
- package/dist/utils/replaceAssets.js +133 -56
- package/dist/utils/replaceAssets.js.map +3 -3
- package/package.json +1 -1
- package/src/index.ts +31 -5
- package/src/utils/addExpressScript.ts +121 -0
- package/src/utils/addNextScript.ts +4 -2
- package/src/utils/getHeaders.ts +21 -0
- package/src/utils/replaceAssets.ts +132 -54
package/dist/index.js
CHANGED
|
@@ -41,11 +41,13 @@ var import_addNextScript = require("./utils/addNextScript");
|
|
|
41
41
|
var import_createBrowserlistrc = require("./utils/createBrowserlistrc");
|
|
42
42
|
var import_getCommitMessage = require("./utils/getCommitMessage");
|
|
43
43
|
var import_readPackageJsonSync = require("./utils/readPackageJsonSync");
|
|
44
|
+
var import_removeTailwindCssPreset = require("./utils/removeTailwindCssPreset");
|
|
44
45
|
var import_replaceAssets = require("./utils/replaceAssets");
|
|
45
46
|
var import_setGlobal = require("./utils/setGlobal");
|
|
46
47
|
var import_upgradeRsbuild = require("./utils/upgradeRsbuild");
|
|
47
48
|
var import_upgradeWorkspaceDependceny = require("./utils/upgradeWorkspaceDependceny");
|
|
48
|
-
var
|
|
49
|
+
var import_addExpressScript = require("./utils/addExpressScript");
|
|
50
|
+
var import_getHeaders = require("./utils/getHeaders");
|
|
49
51
|
var program = new import_commander.Command();
|
|
50
52
|
var pkg = (0, import_readPackageJsonSync.readPackageJsonSync)((0, import_path.resolve)(__dirname, "../"));
|
|
51
53
|
program.name("格数科技").version(pkg.version);
|
|
@@ -93,12 +95,14 @@ program.command("replace-alias").alias("ra").description("替换路径别名").a
|
|
|
93
95
|
program.command("pnpm").description("设置 pnpm 配置").action(import_pnpm.pnpm);
|
|
94
96
|
program.command("rollup").description("rollup 打包").action(import_rollup.rollup);
|
|
95
97
|
program.command("browserlistrc").alias("blr").description("添加 browserlistrc 配置").action(import_createBrowserlistrc.createBrowserlistrc);
|
|
96
|
-
program.command("asset").description("替换文件中的资源地址").argument("dir", "静态文件夹路径").
|
|
98
|
+
program.command("asset").description("替换文件中的资源地址").argument("dir", "静态文件夹路径").option("-b, --base <base>", "资源地址 BaseUrl").option("-p, --proxy", "是否使用代理").action((dir, { proxy, base }) => (0, import_replaceAssets.replaceAssets)({ base, dir, proxy }));
|
|
97
99
|
program.command("upgrade-rsbuild").alias("ur").description("升级 rsbuild").option("-r, --registry <registry>", "npm 源地址,可以是 npm、taobao、tencent 或者自定义地址").option("-p, --proxy", "是否使用代理").action(async (options) => {
|
|
98
100
|
(0, import_setGlobal.setGlobal)(options);
|
|
99
101
|
await (0, import_actionWithBackup.actionWithBackup)(() => (0, import_upgradeRsbuild.upgradeRsbuild)())();
|
|
100
102
|
});
|
|
103
|
+
program.command("add-express-script").alias("aes").option("-p, --port <port>", "端口地址").option("-c, --core <core>", "实例数").option("-l, --localhost", "是否只开启本地监听").option("-pem, --pemPath <pemPath>", "证书目录").description("添加 express 启动脚本").action((0, import_actionWithBackup.actionWithBackup)(import_addExpressScript.addExpressScript));
|
|
101
104
|
program.command("add-next-script").alias("ans").option("-p, --port <port>", "端口地址").option("-c, --core <core>", "实例数").option("-l, --localhost", "是否只开启本地监听").option("-pem, --pemPath <pemPath>", "证书目录").description("添加 next 启动脚本").action((0, import_actionWithBackup.actionWithBackup)(import_addNextScript.addNextScript));
|
|
102
105
|
program.command("removeTailwindCssPreflight").alias("rtp").description("删除 tailwindcss 的 preflight.css 中的 img 和 video 样式").action((0, import_actionWithBackup.actionWithBackup)(() => (0, import_removeTailwindCssPreset.removeTailwindCssPreflight)()));
|
|
106
|
+
program.command("headers").description("将浏览器中直接复制的 headers 转换为对象").action(import_getHeaders.getHeaders);
|
|
103
107
|
program.parse();
|
|
104
108
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { CommitType } from \"@constant/index\"\r\nimport { addAntd } from \"@utils/addAntd\"\r\nimport { addGitignore } from \"@utils/addGitignore\"\r\nimport { addFolderPathAlias, replacePathAlias } from \"@utils/addPathAlias\"\r\nimport { addPrettier } from \"@utils/addPrettier\"\r\nimport { addPrisma } from \"@utils/addPrisma\"\r\nimport { arrowToFunction } from \"@utils/arrowToFunction\"\r\nimport { betaVersion } from \"@utils/betaVersion\"\r\nimport { checkType } from \"@utils/checkType\"\r\nimport { code2Snippet } from \"@utils/code2Snippet\"\r\nimport { downloadLatestSoftware } from \"@utils/downloadLatestSoftware\"\r\nimport { downloadNpm } from \"@utils/downloadNpm\"\r\nimport { generatePrisma } from \"@utils/generatePrisma\"\r\nimport { initProject } from \"@utils/initProject\"\r\nimport { interfaceToType } from \"@utils/interfaceToType\"\r\nimport { killProcessByPort } from \"@utils/killProcessByPort\"\r\nimport { next } from \"@utils/next\"\r\nimport { pnpm } from \"@utils/pnpm\"\r\nimport { reinstall } from \"@utils/reinstall\"\r\nimport { removeComment } from \"@utils/removeComment\"\r\nimport { removeESLint } from \"@utils/removeESLint\"\r\nimport { removeFileOrFolderFromGit } from \"@utils/removeFileOrFolderFromGit\"\r\nimport { rollup } from \"@utils/rollup\"\r\nimport { rsbuild } from \"@utils/rsbuild\"\r\nimport { setFatherConfig } from \"@utils/setFatherConfig\"\r\nimport { setGitProxy } from \"@utils/setGitProxy\"\r\nimport { setRegistry } from \"@utils/setRegistry\"\r\nimport { setShellProxy } from \"@utils/setShellProxy\"\r\nimport { sortPackageJson } from \"@utils/sortPackageJson\"\r\nimport { syncVscode } from \"@utils/syncVscode\"\r\nimport { tailwind } from \"@utils/tailwind\"\r\nimport { upgradeDependency } from \"@utils/upgradeDependency\"\r\nimport { vite } from \"@utils/vite\"\r\nimport { Command } from \"commander\"\r\nimport { resolve } from \"path\"\r\nimport { actionWithBackup } from \"./utils/actionWithBackup\"\r\nimport { addNextScript } from \"./utils/addNextScript\"\r\nimport { createBrowserlistrc } from \"./utils/createBrowserlistrc\"\r\nimport { getCommitMessage } from \"./utils/getCommitMessage\"\r\nimport { readPackageJsonSync } from \"./utils/readPackageJsonSync\"\r\nimport { replaceAssets } from \"./utils/replaceAssets\"\r\nimport { setGlobal } from \"./utils/setGlobal\"\r\nimport { upgradeRsbuild } from \"./utils/upgradeRsbuild\"\r\nimport { upgradeWorkspaceDependceny } from \"./utils/upgradeWorkspaceDependceny\"\r\nimport { removeTailwindCssPreflight } from \"./utils/removeTailwindCssPreset\"\r\n\r\nconst program = new Command()\r\n\r\nconst pkg = readPackageJsonSync(resolve(__dirname, \"../\"))\r\n\r\nprogram.name(\"格数科技\").version(pkg.version)\r\n\r\nprogram\r\n .command(\"eslint\")\r\n .description(\"删除 ESLint 相关配置\")\r\n .action(actionWithBackup(removeESLint, getCommitMessage(CommitType.feature, \"删除 ESLint 相关配置\")))\r\n\r\nprogram\r\n .command(\"prettier\")\r\n .description(\"添加 prettier 配置\")\r\n .action(actionWithBackup(addPrettier, getCommitMessage(CommitType.feature, \"添加 prettier 配置文件\")))\r\n\r\nprogram\r\n .command(\"vite\")\r\n .description(\"初始化 vite 配置\")\r\n .action(actionWithBackup(vite, getCommitMessage(CommitType.feature, \"初始化 vite 配置\")))\r\n\r\nprogram\r\n .command(\"rsbuild\")\r\n .description(\"初始化 rsbuild 配置\")\r\n .action(actionWithBackup(rsbuild, getCommitMessage(CommitType.feature, \"初始化 rsbuild 配置\")))\r\n\r\nprogram\r\n .command(\"next\")\r\n .description(\"初始化 next 配置\")\r\n .action(actionWithBackup(next, getCommitMessage(CommitType.feature, \"初始化 next 配置\")))\r\n\r\nprogram\r\n .command(\"tailwind\")\r\n .description(\"添加 tailwind 配置\")\r\n .action(actionWithBackup(tailwind, getCommitMessage(CommitType.feature, \"添加 tailwind 配置\")))\r\n\r\nprogram\r\n .command(\"remove-comment\")\r\n .description(\"删除文件注释\")\r\n .argument(\"path\", \"文件路径\")\r\n .action(actionWithBackup(removeComment, getCommitMessage(CommitType.feature, \"删除文件注释\")))\r\n\r\nprogram\r\n .command(\"father\")\r\n .alias(\"fs\")\r\n .description(\"初始化 father 项目配置\")\r\n .action(actionWithBackup(setFatherConfig, getCommitMessage(CommitType.feature, \"初始化 father 项目配置\")))\r\n\r\nprogram\r\n .command(\"upgrade-dependency\")\r\n .alias(\"ud\")\r\n .description(\"升级项目依赖\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .action(async optios => {\r\n setGlobal(optios)\r\n await actionWithBackup(() => upgradeDependency())()\r\n })\r\n\r\nprogram\r\n .command(\"upgrade-workspace-dependency\")\r\n .alias(\"uwd\")\r\n .description(\"升级工作区项目依赖\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .argument(\"[dir]\", \"项目目录\", \"packages\")\r\n .action(async (dir, options) => {\r\n setGlobal(options)\r\n await upgradeWorkspaceDependceny(dir)\r\n })\r\n\r\nprogram.command(\"registry\").description(\"设置 npm registry\").action(setRegistry)\r\n\r\nprogram\r\n .command(\"sort-package-json\")\r\n .alias(\"spj\")\r\n .description(\"对 package.json 中的依赖进行排序\")\r\n .action(actionWithBackup(sortPackageJson, getCommitMessage(CommitType.feature, \"对 package.json 中的依赖进行排序\")))\r\n\r\nprogram\r\n .command(\"arrow-to-function\")\r\n .alias(\"a2f\")\r\n .description(\"将箭头函数组件转换为函数组件\")\r\n .action(actionWithBackup(arrowToFunction, getCommitMessage(CommitType.feature, \"将箭头函数组件转换为函数组件\")))\r\n\r\nprogram\r\n .command(\"interface-to-type\")\r\n .alias(\"i2t\")\r\n .description(\"将 interface 转换为 type\")\r\n .action(actionWithBackup(interfaceToType, getCommitMessage(CommitType.feature, \"将 interface 转换为 type\")))\r\n\r\nprogram\r\n .command(\"gitignore\")\r\n .description(\"添加 .gitignore 配置\")\r\n .action(actionWithBackup(addGitignore, getCommitMessage(CommitType.feature, \"添加 .gitignore 配置\")))\r\n\r\nprogram.command(\"git-proxy\").alias(\"gp\").description(\"设置 git 代理\").action(setGitProxy)\r\n\r\nprogram.command(\"shell-proxy\").alias(\"sp\").description(\"设置 Shell 代理\").action(setShellProxy)\r\n\r\nprogram.command(\"download-software\").alias(\"ds\").description(\"下载最新版软件\").action(downloadLatestSoftware)\r\n\r\nprogram.command(\"vscode\").alias(\"vsc\").description(\"同步 VS Code 配置\").action(syncVscode)\r\n\r\nprogram.command(\"kill-port\").description(\"根据端口号杀死进程\").argument(\"port\", \"端口号\").action(killProcessByPort)\r\n\r\nprogram.command(\"rm-git\").argument(\"path\", \"要移除的文件或文件夹\").action(removeFileOrFolderFromGit)\r\n\r\nprogram.command(\"npm-download\").alias(\"nd\").description(\"下载 npm 包\").argument(\"name\", \"包名\").action(downloadNpm)\r\n\r\nprogram\r\n .command(\"prisma\")\r\n .description(\"添加 prisma 配置\")\r\n .action(actionWithBackup(addPrisma, getCommitMessage(CommitType.feature, \"添加 prisma 配置\")))\r\n\r\nprogram.command(\"prisma-generate\").alias(\"pg\").description(\"生成 prisma client\").action(generatePrisma)\r\n\r\nprogram\r\n .command(\"antd\")\r\n .description(\"添加 antd 配置\")\r\n .action(actionWithBackup(addAntd, getCommitMessage(CommitType.feature, \"添加 antd 配置\")))\r\n\r\nprogram\r\n .command(\"init\")\r\n .description(\"初始化项目\")\r\n .action(actionWithBackup(initProject, getCommitMessage(CommitType.feature, \"初始化项目\")))\r\n\r\nprogram.command(\"tsc\").description(\"类型检查\").action(checkType)\r\n\r\nprogram.command(\"beta-version\").alias(\"bv\").description(\"设置版本号\").action(betaVersion)\r\n\r\nprogram\r\n .command(\"reinstall\")\r\n .alias(\"ri\")\r\n .description(\"重新安装依赖\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .action(async options => {\r\n setGlobal(options)\r\n reinstall()\r\n })\r\n\r\nprogram.command(\"snippet\").alias(\"sn\").description(\"生成 vscode snippet\").argument(\"path\", \"文件路径\").action(code2Snippet)\r\n\r\nprogram.command(\"add-alias\").alias(\"aa\").description(\"添加路径别名\").action(actionWithBackup(addFolderPathAlias))\r\n\r\nprogram.command(\"replace-alias\").alias(\"ra\").description(\"替换路径别名\").action(actionWithBackup(replacePathAlias))\r\n\r\nprogram.command(\"pnpm\").description(\"设置 pnpm 配置\").action(pnpm)\r\n\r\nprogram.command(\"rollup\").description(\"rollup 打包\").action(rollup)\r\n\r\nprogram.command(\"browserlistrc\").alias(\"blr\").description(\"添加 browserlistrc 配置\").action(createBrowserlistrc)\r\n\r\nprogram\r\n .command(\"asset\")\r\n .description(\"替换文件中的资源地址\")\r\n .argument(\"dir\", \"静态文件夹路径\")\r\n .argument(\"base\", \"资源地址 BaseUrl\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .action((dir, base, { proxy }) => replaceAssets({ base, dir, proxy }))\r\n\r\nprogram\r\n .command(\"upgrade-rsbuild\")\r\n .alias(\"ur\")\r\n .description(\"升级 rsbuild\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .action(async options => {\r\n setGlobal(options)\r\n await actionWithBackup(() => upgradeRsbuild())()\r\n })\r\n\r\nprogram.command(\"add-next-script\").alias(\"ans\").option(\"-p, --port <port>\", \"端口地址\").option(\"-c, --core <core>\", \"实例数\").option(\"-l, --localhost\", \"是否只开启本地监听\").option(\"-pem, --pemPath <pemPath>\", \"证书目录\").description(\"添加 next 启动脚本\").action(actionWithBackup(addNextScript))\r\n\r\nprogram.command(\"removeTailwindCssPreflight\").alias(\"rtp\").description(\"删除 tailwindcss 的 preflight.css 中的 img 和 video 样式\").action(actionWithBackup(() => removeTailwindCssPreflight()))\r\n\r\nprogram.parse()\r\n"],
|
|
5
|
-
"mappings": ";;;AAEA,sBAA2B;AAC3B,qBAAwB;AACxB,0BAA6B;AAC7B,0BAAqD;AACrD,yBAA4B;AAC5B,uBAA0B;AAC1B,6BAAgC;AAChC,yBAA4B;AAC5B,uBAA0B;AAC1B,0BAA6B;AAC7B,oCAAuC;AACvC,yBAA4B;AAC5B,4BAA+B;AAC/B,yBAA4B;AAC5B,6BAAgC;AAChC,+BAAkC;AAClC,kBAAqB;AACrB,kBAAqB;AACrB,uBAA0B;AAC1B,2BAA8B;AAC9B,0BAA6B;AAC7B,uCAA0C;AAC1C,oBAAuB;AACvB,qBAAwB;AACxB,6BAAgC;AAChC,yBAA4B;AAC5B,yBAA4B;AAC5B,2BAA8B;AAC9B,6BAAgC;AAChC,wBAA2B;AAC3B,sBAAyB;AACzB,+BAAkC;AAClC,kBAAqB;AACrB,uBAAwB;AACxB,kBAAwB;AACxB,8BAAiC;AACjC,2BAA8B;AAC9B,iCAAoC;AACpC,8BAAiC;AACjC,iCAAoC;AACpC,2BAA8B;AAC9B,uBAA0B;AAC1B,4BAA+B;AAC/B,wCAA2C;AAC3C,
|
|
4
|
+
"sourcesContent": ["#!/usr/bin/env node\r\n\r\nimport { CommitType } from \"@constant/index\"\r\nimport { addAntd } from \"@utils/addAntd\"\r\nimport { addGitignore } from \"@utils/addGitignore\"\r\nimport { addFolderPathAlias, replacePathAlias } from \"@utils/addPathAlias\"\r\nimport { addPrettier } from \"@utils/addPrettier\"\r\nimport { addPrisma } from \"@utils/addPrisma\"\r\nimport { arrowToFunction } from \"@utils/arrowToFunction\"\r\nimport { betaVersion } from \"@utils/betaVersion\"\r\nimport { checkType } from \"@utils/checkType\"\r\nimport { code2Snippet } from \"@utils/code2Snippet\"\r\nimport { downloadLatestSoftware } from \"@utils/downloadLatestSoftware\"\r\nimport { downloadNpm } from \"@utils/downloadNpm\"\r\nimport { generatePrisma } from \"@utils/generatePrisma\"\r\nimport { initProject } from \"@utils/initProject\"\r\nimport { interfaceToType } from \"@utils/interfaceToType\"\r\nimport { killProcessByPort } from \"@utils/killProcessByPort\"\r\nimport { next } from \"@utils/next\"\r\nimport { pnpm } from \"@utils/pnpm\"\r\nimport { reinstall } from \"@utils/reinstall\"\r\nimport { removeComment } from \"@utils/removeComment\"\r\nimport { removeESLint } from \"@utils/removeESLint\"\r\nimport { removeFileOrFolderFromGit } from \"@utils/removeFileOrFolderFromGit\"\r\nimport { rollup } from \"@utils/rollup\"\r\nimport { rsbuild } from \"@utils/rsbuild\"\r\nimport { setFatherConfig } from \"@utils/setFatherConfig\"\r\nimport { setGitProxy } from \"@utils/setGitProxy\"\r\nimport { setRegistry } from \"@utils/setRegistry\"\r\nimport { setShellProxy } from \"@utils/setShellProxy\"\r\nimport { sortPackageJson } from \"@utils/sortPackageJson\"\r\nimport { syncVscode } from \"@utils/syncVscode\"\r\nimport { tailwind } from \"@utils/tailwind\"\r\nimport { upgradeDependency } from \"@utils/upgradeDependency\"\r\nimport { vite } from \"@utils/vite\"\r\nimport { Command } from \"commander\"\r\nimport { resolve } from \"path\"\r\nimport { actionWithBackup } from \"./utils/actionWithBackup\"\r\nimport { addNextScript } from \"./utils/addNextScript\"\r\nimport { createBrowserlistrc } from \"./utils/createBrowserlistrc\"\r\nimport { getCommitMessage } from \"./utils/getCommitMessage\"\r\nimport { readPackageJsonSync } from \"./utils/readPackageJsonSync\"\r\nimport { removeTailwindCssPreflight } from \"./utils/removeTailwindCssPreset\"\r\nimport { replaceAssets } from \"./utils/replaceAssets\"\r\nimport { setGlobal } from \"./utils/setGlobal\"\r\nimport { upgradeRsbuild } from \"./utils/upgradeRsbuild\"\r\nimport { upgradeWorkspaceDependceny } from \"./utils/upgradeWorkspaceDependceny\"\r\nimport { addExpressScript } from \"./utils/addExpressScript\"\r\nimport { getHeaders } from \"./utils/getHeaders\"\r\n\r\nconst program = new Command()\r\n\r\nconst pkg = readPackageJsonSync(resolve(__dirname, \"../\"))\r\n\r\nprogram.name(\"格数科技\").version(pkg.version)\r\n\r\nprogram\r\n .command(\"eslint\")\r\n .description(\"删除 ESLint 相关配置\")\r\n .action(actionWithBackup(removeESLint, getCommitMessage(CommitType.feature, \"删除 ESLint 相关配置\")))\r\n\r\nprogram\r\n .command(\"prettier\")\r\n .description(\"添加 prettier 配置\")\r\n .action(actionWithBackup(addPrettier, getCommitMessage(CommitType.feature, \"添加 prettier 配置文件\")))\r\n\r\nprogram\r\n .command(\"vite\")\r\n .description(\"初始化 vite 配置\")\r\n .action(actionWithBackup(vite, getCommitMessage(CommitType.feature, \"初始化 vite 配置\")))\r\n\r\nprogram\r\n .command(\"rsbuild\")\r\n .description(\"初始化 rsbuild 配置\")\r\n .action(actionWithBackup(rsbuild, getCommitMessage(CommitType.feature, \"初始化 rsbuild 配置\")))\r\n\r\nprogram\r\n .command(\"next\")\r\n .description(\"初始化 next 配置\")\r\n .action(actionWithBackup(next, getCommitMessage(CommitType.feature, \"初始化 next 配置\")))\r\n\r\nprogram\r\n .command(\"tailwind\")\r\n .description(\"添加 tailwind 配置\")\r\n .action(actionWithBackup(tailwind, getCommitMessage(CommitType.feature, \"添加 tailwind 配置\")))\r\n\r\nprogram\r\n .command(\"remove-comment\")\r\n .description(\"删除文件注释\")\r\n .argument(\"path\", \"文件路径\")\r\n .action(actionWithBackup(removeComment, getCommitMessage(CommitType.feature, \"删除文件注释\")))\r\n\r\nprogram\r\n .command(\"father\")\r\n .alias(\"fs\")\r\n .description(\"初始化 father 项目配置\")\r\n .action(actionWithBackup(setFatherConfig, getCommitMessage(CommitType.feature, \"初始化 father 项目配置\")))\r\n\r\nprogram\r\n .command(\"upgrade-dependency\")\r\n .alias(\"ud\")\r\n .description(\"升级项目依赖\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .action(async optios => {\r\n setGlobal(optios)\r\n await actionWithBackup(() => upgradeDependency())()\r\n })\r\n\r\nprogram\r\n .command(\"upgrade-workspace-dependency\")\r\n .alias(\"uwd\")\r\n .description(\"升级工作区项目依赖\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .argument(\"[dir]\", \"项目目录\", \"packages\")\r\n .action(async (dir, options) => {\r\n setGlobal(options)\r\n await upgradeWorkspaceDependceny(dir)\r\n })\r\n\r\nprogram.command(\"registry\").description(\"设置 npm registry\").action(setRegistry)\r\n\r\nprogram\r\n .command(\"sort-package-json\")\r\n .alias(\"spj\")\r\n .description(\"对 package.json 中的依赖进行排序\")\r\n .action(actionWithBackup(sortPackageJson, getCommitMessage(CommitType.feature, \"对 package.json 中的依赖进行排序\")))\r\n\r\nprogram\r\n .command(\"arrow-to-function\")\r\n .alias(\"a2f\")\r\n .description(\"将箭头函数组件转换为函数组件\")\r\n .action(actionWithBackup(arrowToFunction, getCommitMessage(CommitType.feature, \"将箭头函数组件转换为函数组件\")))\r\n\r\nprogram\r\n .command(\"interface-to-type\")\r\n .alias(\"i2t\")\r\n .description(\"将 interface 转换为 type\")\r\n .action(actionWithBackup(interfaceToType, getCommitMessage(CommitType.feature, \"将 interface 转换为 type\")))\r\n\r\nprogram\r\n .command(\"gitignore\")\r\n .description(\"添加 .gitignore 配置\")\r\n .action(actionWithBackup(addGitignore, getCommitMessage(CommitType.feature, \"添加 .gitignore 配置\")))\r\n\r\nprogram.command(\"git-proxy\").alias(\"gp\").description(\"设置 git 代理\").action(setGitProxy)\r\n\r\nprogram.command(\"shell-proxy\").alias(\"sp\").description(\"设置 Shell 代理\").action(setShellProxy)\r\n\r\nprogram.command(\"download-software\").alias(\"ds\").description(\"下载最新版软件\").action(downloadLatestSoftware)\r\n\r\nprogram.command(\"vscode\").alias(\"vsc\").description(\"同步 VS Code 配置\").action(syncVscode)\r\n\r\nprogram.command(\"kill-port\").description(\"根据端口号杀死进程\").argument(\"port\", \"端口号\").action(killProcessByPort)\r\n\r\nprogram.command(\"rm-git\").argument(\"path\", \"要移除的文件或文件夹\").action(removeFileOrFolderFromGit)\r\n\r\nprogram.command(\"npm-download\").alias(\"nd\").description(\"下载 npm 包\").argument(\"name\", \"包名\").action(downloadNpm)\r\n\r\nprogram\r\n .command(\"prisma\")\r\n .description(\"添加 prisma 配置\")\r\n .action(actionWithBackup(addPrisma, getCommitMessage(CommitType.feature, \"添加 prisma 配置\")))\r\n\r\nprogram.command(\"prisma-generate\").alias(\"pg\").description(\"生成 prisma client\").action(generatePrisma)\r\n\r\nprogram\r\n .command(\"antd\")\r\n .description(\"添加 antd 配置\")\r\n .action(actionWithBackup(addAntd, getCommitMessage(CommitType.feature, \"添加 antd 配置\")))\r\n\r\nprogram\r\n .command(\"init\")\r\n .description(\"初始化项目\")\r\n .action(actionWithBackup(initProject, getCommitMessage(CommitType.feature, \"初始化项目\")))\r\n\r\nprogram.command(\"tsc\").description(\"类型检查\").action(checkType)\r\n\r\nprogram.command(\"beta-version\").alias(\"bv\").description(\"设置版本号\").action(betaVersion)\r\n\r\nprogram\r\n .command(\"reinstall\")\r\n .alias(\"ri\")\r\n .description(\"重新安装依赖\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .action(async options => {\r\n setGlobal(options)\r\n reinstall()\r\n })\r\n\r\nprogram.command(\"snippet\").alias(\"sn\").description(\"生成 vscode snippet\").argument(\"path\", \"文件路径\").action(code2Snippet)\r\n\r\nprogram.command(\"add-alias\").alias(\"aa\").description(\"添加路径别名\").action(actionWithBackup(addFolderPathAlias))\r\n\r\nprogram.command(\"replace-alias\").alias(\"ra\").description(\"替换路径别名\").action(actionWithBackup(replacePathAlias))\r\n\r\nprogram.command(\"pnpm\").description(\"设置 pnpm 配置\").action(pnpm)\r\n\r\nprogram.command(\"rollup\").description(\"rollup 打包\").action(rollup)\r\n\r\nprogram.command(\"browserlistrc\").alias(\"blr\").description(\"添加 browserlistrc 配置\").action(createBrowserlistrc)\r\n\r\nprogram\r\n .command(\"asset\")\r\n .description(\"替换文件中的资源地址\")\r\n .argument(\"dir\", \"静态文件夹路径\")\r\n .option(\"-b, --base <base>\", \"资源地址 BaseUrl\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .action((dir, { proxy, base }) => replaceAssets({ base, dir, proxy }))\r\n\r\nprogram\r\n .command(\"upgrade-rsbuild\")\r\n .alias(\"ur\")\r\n .description(\"升级 rsbuild\")\r\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\r\n .option(\"-p, --proxy\", \"是否使用代理\")\r\n .action(async options => {\r\n setGlobal(options)\r\n await actionWithBackup(() => upgradeRsbuild())()\r\n })\r\n\r\nprogram\r\n .command(\"add-express-script\")\r\n .alias(\"aes\")\r\n .option(\"-p, --port <port>\", \"端口地址\")\r\n .option(\"-c, --core <core>\", \"实例数\")\r\n .option(\"-l, --localhost\", \"是否只开启本地监听\")\r\n .option(\"-pem, --pemPath <pemPath>\", \"证书目录\")\r\n .description(\"添加 express 启动脚本\")\r\n .action(actionWithBackup(addExpressScript))\r\n\r\nprogram\r\n .command(\"add-next-script\")\r\n .alias(\"ans\")\r\n .option(\"-p, --port <port>\", \"端口地址\")\r\n .option(\"-c, --core <core>\", \"实例数\")\r\n .option(\"-l, --localhost\", \"是否只开启本地监听\")\r\n .option(\"-pem, --pemPath <pemPath>\", \"证书目录\")\r\n .description(\"添加 next 启动脚本\")\r\n .action(actionWithBackup(addNextScript))\r\n\r\nprogram\r\n .command(\"removeTailwindCssPreflight\")\r\n .alias(\"rtp\")\r\n .description(\"删除 tailwindcss 的 preflight.css 中的 img 和 video 样式\")\r\n .action(actionWithBackup(() => removeTailwindCssPreflight()))\r\n\r\nprogram.command(\"headers\").description(\"将浏览器中直接复制的 headers 转换为对象\").action(getHeaders)\r\n\r\nprogram.parse()\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/utils/addExpressScript.ts
|
|
30
|
+
var addExpressScript_exports = {};
|
|
31
|
+
__export(addExpressScript_exports, {
|
|
32
|
+
addExpressScript: () => addExpressScript
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(addExpressScript_exports);
|
|
35
|
+
var import_consola = __toESM(require("consola"));
|
|
36
|
+
var import_promises = require("fs/promises");
|
|
37
|
+
var import_addDependency = require("./addDependency");
|
|
38
|
+
var import_installDependceny = require("./installDependceny");
|
|
39
|
+
var import_readPackageJson = require("./readPackageJson");
|
|
40
|
+
var import_writePackageJson = require("./writePackageJson");
|
|
41
|
+
var import_getCommitMessage = require("./getCommitMessage");
|
|
42
|
+
var import_constant = require("../constant");
|
|
43
|
+
var script = `// @ts-check
|
|
44
|
+
import { spawn } from "child_process"
|
|
45
|
+
import { config } from "dotenv"
|
|
46
|
+
import { readFile } from "fs/promises"
|
|
47
|
+
import { cpus } from "os"
|
|
48
|
+
|
|
49
|
+
config()
|
|
50
|
+
|
|
51
|
+
async function main() {
|
|
52
|
+
let core = parseInt(process.env.CORE || "1")
|
|
53
|
+
if (!Number.isInteger(core)) core = 1
|
|
54
|
+
if (core < 1) core = 1
|
|
55
|
+
if (core > cpus().length) core = cpus().length
|
|
56
|
+
const packageJson = JSON.parse(await readFile("package.json", "utf-8"))
|
|
57
|
+
|
|
58
|
+
spawn(\`pm2 start scripts/server.mjs --name \${packageJson.name} -i \${core}\`, { shell: true, stdio: "inherit" })
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
main()
|
|
62
|
+
`;
|
|
63
|
+
var script2 = `// @ts-check
|
|
64
|
+
import cors from "cors"
|
|
65
|
+
import { config } from "dotenv"
|
|
66
|
+
import express from "express"
|
|
67
|
+
import { readFile } from "fs/promises"
|
|
68
|
+
import { createServer as createHttpServer } from "http"
|
|
69
|
+
import { createServer as createHttpsServer } from "https"
|
|
70
|
+
import { join, resolve } from "path"
|
|
71
|
+
|
|
72
|
+
config()
|
|
73
|
+
|
|
74
|
+
async function main() {
|
|
75
|
+
const PEM_PATH = process.env.PEM_PATH
|
|
76
|
+
const https = !!PEM_PATH
|
|
77
|
+
const PORT = process.env.PORT ? Number(process.env.PORT) : https ? 443 : 80
|
|
78
|
+
const LOCALHOST = process.env.LOCALHOST === "true"
|
|
79
|
+
|
|
80
|
+
const app = express()
|
|
81
|
+
|
|
82
|
+
app.use(cors())
|
|
83
|
+
|
|
84
|
+
app.use("/", express.static("dist"))
|
|
85
|
+
|
|
86
|
+
app.get("/*", async (request, response) => {
|
|
87
|
+
response.sendFile(resolve("dist", "index.html"))
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
if (!https) {
|
|
91
|
+
const server = createHttpServer(app)
|
|
92
|
+
if (LOCALHOST) server.listen(PORT, "127.0.0.1")
|
|
93
|
+
else server.listen(PORT)
|
|
94
|
+
return
|
|
95
|
+
}
|
|
96
|
+
const key = await readFile(join(PEM_PATH, "privkey.pem"), "utf8")
|
|
97
|
+
const cert = await readFile(join(PEM_PATH, "cert.pem"), "utf8")
|
|
98
|
+
const ca = await readFile(join(PEM_PATH, "chain.pem"), "utf8")
|
|
99
|
+
const server = createHttpsServer({ key, cert, ca }, app)
|
|
100
|
+
if (LOCALHOST) server.listen(PORT, "127.0.0.1")
|
|
101
|
+
else server.listen(PORT)
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
main()
|
|
105
|
+
`;
|
|
106
|
+
async function addExpressScript({ pemPath, port, core, localhost } = {}) {
|
|
107
|
+
await (0, import_addDependency.addDependency)({
|
|
108
|
+
package: ["cors", "dotenv", "express"],
|
|
109
|
+
type: "devDependencies"
|
|
110
|
+
});
|
|
111
|
+
await (0, import_promises.mkdir)("scripts", { recursive: true });
|
|
112
|
+
await (0, import_promises.writeFile)("scripts/start.mjs", script, "utf-8");
|
|
113
|
+
import_consola.default.success("已添加 scripts/start.js");
|
|
114
|
+
await (0, import_promises.writeFile)("scripts/server.mjs", script2, "utf-8");
|
|
115
|
+
import_consola.default.success("已添加 scripts/server.js");
|
|
116
|
+
let env = "";
|
|
117
|
+
try {
|
|
118
|
+
env = await (0, import_promises.readFile)(".env", "utf-8");
|
|
119
|
+
} catch (error) {
|
|
120
|
+
}
|
|
121
|
+
if (/^ *PEM_PATH=/m.test(env))
|
|
122
|
+
env = env.replace(/^ *PEM_PATH=.*$/m, `PEM_PATH="${pemPath ?? ""}"`);
|
|
123
|
+
else
|
|
124
|
+
env += `
|
|
125
|
+
PEM_PATH="${pemPath ?? ""}"`;
|
|
126
|
+
if (/^ *PORT=/m.test(env))
|
|
127
|
+
env = env.replace(/^ *PORT=.*$/m, `PORT="${port ?? ""}"`);
|
|
128
|
+
else
|
|
129
|
+
env += `
|
|
130
|
+
PORT="${port ?? ""}"`;
|
|
131
|
+
if (/^ *CORE=/m.test(env))
|
|
132
|
+
env = env.replace(/^ *CORE=.*$/m, `CORE="${core ?? ""}"`);
|
|
133
|
+
else
|
|
134
|
+
env += `
|
|
135
|
+
CORE="${core ?? ""}"`;
|
|
136
|
+
if (/^ *LOCALHOST=/m.test(env))
|
|
137
|
+
env = env.replace(/^ *LOCALHOST=.*$/m, `LOCALHOST="${localhost ? "true" : "false"}"`);
|
|
138
|
+
else
|
|
139
|
+
env += `
|
|
140
|
+
LOCALHOST="${localhost ? "true" : "false"}"`;
|
|
141
|
+
await (0, import_promises.writeFile)(".env", env, "utf-8");
|
|
142
|
+
const packageJson = await (0, import_readPackageJson.readPackageJson)();
|
|
143
|
+
packageJson.scripts ??= {};
|
|
144
|
+
packageJson.scripts.start = "node scripts/start.mjs";
|
|
145
|
+
await (0, import_writePackageJson.writePackageJson)({ data: packageJson });
|
|
146
|
+
import_consola.default.success("已添加启动命令 start");
|
|
147
|
+
await (0, import_installDependceny.installDependceny)();
|
|
148
|
+
return (0, import_getCommitMessage.getCommitMessage)(import_constant.CommitType.feature, "添加启动命令");
|
|
149
|
+
}
|
|
150
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
151
|
+
0 && (module.exports = {
|
|
152
|
+
addExpressScript
|
|
153
|
+
});
|
|
154
|
+
//# sourceMappingURL=addExpressScript.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/addExpressScript.ts"],
|
|
4
|
+
"sourcesContent": ["import consola from \"consola\"\r\nimport { mkdir, readFile, writeFile } from \"fs/promises\"\r\nimport { addDependency } from \"./addDependency\"\r\nimport { installDependceny } from \"./installDependceny\"\r\nimport { readPackageJson } from \"./readPackageJson\"\r\nimport { writePackageJson } from \"./writePackageJson\"\r\nimport { getCommitMessage } from \"./getCommitMessage\"\r\nimport { CommitType } from \"@src/constant\"\r\n\r\nconst script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { config } from \"dotenv\"\r\nimport { readFile } from \"fs/promises\"\r\nimport { cpus } from \"os\"\r\n\r\nconfig()\r\n\r\nasync function main() {\r\n let core = parseInt(process.env.CORE || \"1\")\r\n if (!Number.isInteger(core)) core = 1\r\n if (core < 1) core = 1\r\n if (core > cpus().length) core = cpus().length\r\n const packageJson = JSON.parse(await readFile(\"package.json\", \"utf-8\"))\r\n\r\n spawn(\\`pm2 start scripts/server.mjs --name \\${packageJson.name} -i \\${core}\\`, { shell: true, stdio: \"inherit\" })\r\n}\r\n\r\nmain()\r\n`\r\n\r\nconst script2 = `// @ts-check\r\nimport cors from \"cors\"\r\nimport { config } from \"dotenv\"\r\nimport express from \"express\"\r\nimport { readFile } from \"fs/promises\"\r\nimport { createServer as createHttpServer } from \"http\"\r\nimport { createServer as createHttpsServer } from \"https\"\r\nimport { join, resolve } from \"path\"\r\n\r\nconfig()\r\n\r\nasync function main() {\r\n const PEM_PATH = process.env.PEM_PATH\r\n const https = !!PEM_PATH\r\n const PORT = process.env.PORT ? Number(process.env.PORT) : https ? 443 : 80\r\n const LOCALHOST = process.env.LOCALHOST === \"true\"\r\n\r\n const app = express()\r\n\r\n app.use(cors())\r\n\r\n app.use(\"/\", express.static(\"dist\"))\r\n\r\n app.get(\"/*\", async (request, response) => {\r\n response.sendFile(resolve(\"dist\", \"index.html\"))\r\n })\r\n\r\n if (!https) {\r\n const server = createHttpServer(app)\r\n if (LOCALHOST) server.listen(PORT, \"127.0.0.1\")\r\n else server.listen(PORT)\r\n return\r\n }\r\n const key = await readFile(join(PEM_PATH, \"privkey.pem\"), \"utf8\")\r\n const cert = await readFile(join(PEM_PATH, \"cert.pem\"), \"utf8\")\r\n const ca = await readFile(join(PEM_PATH, \"chain.pem\"), \"utf8\")\r\n const server = createHttpsServer({ key, cert, ca }, app)\r\n if (LOCALHOST) server.listen(PORT, \"127.0.0.1\")\r\n else server.listen(PORT)\r\n}\r\n\r\nmain()\r\n`\r\n\r\nexport type AddExpressScriptOptions = {\r\n pemPath?: string\r\n port?: string\r\n core?: string\r\n localhost?: boolean\r\n}\r\n\r\nexport async function addExpressScript({ pemPath, port, core, localhost }: AddExpressScriptOptions = {}) {\r\n await addDependency({\r\n package: [\"cors\", \"dotenv\", \"express\"],\r\n type: \"devDependencies\"\r\n })\r\n await mkdir(\"scripts\", { recursive: true })\r\n await writeFile(\"scripts/start.mjs\", script, \"utf-8\")\r\n consola.success(\"已添加 scripts/start.js\")\r\n await writeFile(\"scripts/server.mjs\", script2, \"utf-8\")\r\n consola.success(\"已添加 scripts/server.js\")\r\n let env = \"\"\r\n try {\r\n env = await readFile(\".env\", \"utf-8\")\r\n } catch (error) {}\r\n\r\n // 添加证书目录\r\n if (/^ *PEM_PATH=/m.test(env)) env = env.replace(/^ *PEM_PATH=.*$/m, `PEM_PATH=\"${pemPath ?? \"\"}\"`)\r\n else env += `\\nPEM_PATH=\"${pemPath ?? \"\"}\"`\r\n\r\n // 添加端口号\r\n if (/^ *PORT=/m.test(env)) env = env.replace(/^ *PORT=.*$/m, `PORT=\"${port ?? \"\"}\"`)\r\n else env += `\\nPORT=\"${port ?? \"\"}\"`\r\n\r\n // 添加实例数\r\n if (/^ *CORE=/m.test(env)) env = env.replace(/^ *CORE=.*$/m, `CORE=\"${core ?? \"\"}\"`)\r\n else env += `\\nCORE=\"${core ?? \"\"}\"`\r\n\r\n // 添加是否只监听本地\r\n if (/^ *LOCALHOST=/m.test(env)) env = env.replace(/^ *LOCALHOST=.*$/m, `LOCALHOST=\"${localhost ? \"true\" : \"false\"}\"`)\r\n else env += `\\nLOCALHOST=\"${localhost ? \"true\" : \"false\"}\"`\r\n\r\n await writeFile(\".env\", env, \"utf-8\")\r\n const packageJson = await readPackageJson()\r\n packageJson.scripts ??= {}\r\n packageJson.scripts.start = \"node scripts/start.mjs\"\r\n await writePackageJson({ data: packageJson })\r\n consola.success(\"已添加启动命令 start\")\r\n await installDependceny()\r\n return getCommitMessage(CommitType.feature, \"添加启动命令\")\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAA2C;AAC3C,2BAA8B;AAC9B,+BAAkC;AAClC,6BAAgC;AAChC,8BAAiC;AACjC,8BAAiC;AACjC,sBAA2B;AAE3B,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBf,IAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDhB,eAAsB,iBAAiB,EAAE,SAAS,MAAM,MAAM,UAAU,IAA6B,CAAC,GAAG;AACrG,YAAM,oCAAc;AAAA,IAChB,SAAS,CAAC,QAAQ,UAAU,SAAS;AAAA,IACrC,MAAM;AAAA,EACV,CAAC;AACD,YAAM,uBAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,YAAM,2BAAU,qBAAqB,QAAQ,OAAO;AACpD,iBAAAA,QAAQ,QAAQ,sBAAsB;AACtC,YAAM,2BAAU,sBAAsB,SAAS,OAAO;AACtD,iBAAAA,QAAQ,QAAQ,uBAAuB;AACvC,MAAI,MAAM;AACV,MAAI;AACA,UAAM,UAAM,0BAAS,QAAQ,OAAO;AAAA,EACxC,SAAS,OAAP;AAAA,EAAe;AAGjB,MAAI,gBAAgB,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,oBAAoB,aAAa,WAAW,KAAK;AAAA;AAC7F,WAAO;AAAA,YAAe,WAAW;AAGtC,MAAI,YAAY,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,gBAAgB,SAAS,QAAQ,KAAK;AAAA;AAC9E,WAAO;AAAA,QAAW,QAAQ;AAG/B,MAAI,YAAY,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,gBAAgB,SAAS,QAAQ,KAAK;AAAA;AAC9E,WAAO;AAAA,QAAW,QAAQ;AAG/B,MAAI,iBAAiB,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,qBAAqB,cAAc,YAAY,SAAS,UAAU;AAAA;AAC/G,WAAO;AAAA,aAAgB,YAAY,SAAS;AAEjD,YAAM,2BAAU,QAAQ,KAAK,OAAO;AACpC,QAAM,cAAc,UAAM,wCAAgB;AAC1C,cAAY,YAAY,CAAC;AACzB,cAAY,QAAQ,QAAQ;AAC5B,YAAM,0CAAiB,EAAE,MAAM,YAAY,CAAC;AAC5C,iBAAAA,QAAQ,QAAQ,eAAe;AAC/B,YAAM,4CAAkB;AACxB,aAAO,0CAAiB,2BAAW,SAAS,QAAQ;AACxD;",
|
|
6
|
+
"names": ["consola"]
|
|
7
|
+
}
|
|
@@ -58,7 +58,8 @@ async function main() {
|
|
|
58
58
|
spawn(\`pm2 start scripts/server.mjs --name \${packageJson.name} -i \${core}\`, { shell: true, stdio: "inherit" })
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
main()
|
|
61
|
+
main()
|
|
62
|
+
`;
|
|
62
63
|
var script2 = `// @ts-check
|
|
63
64
|
import { config } from "dotenv"
|
|
64
65
|
import { readFile } from "fs/promises"
|
|
@@ -93,7 +94,8 @@ async function main() {
|
|
|
93
94
|
else server.listen(PORT)
|
|
94
95
|
}
|
|
95
96
|
|
|
96
|
-
main()
|
|
97
|
+
main()
|
|
98
|
+
`;
|
|
97
99
|
async function addNextScript({ pemPath, port, core, localhost } = {}) {
|
|
98
100
|
await (0, import_addDependency.addDependency)({
|
|
99
101
|
package: ["dotenv", "get-port-please"],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/addNextScript.ts"],
|
|
4
|
-
"sourcesContent": ["import consola from \"consola\"\r\nimport { mkdir, readFile, writeFile } from \"fs/promises\"\r\nimport { addDependency } from \"./addDependency\"\r\nimport { installDependceny } from \"./installDependceny\"\r\nimport { readPackageJson } from \"./readPackageJson\"\r\nimport { writePackageJson } from \"./writePackageJson\"\r\nimport { getCommitMessage } from \"./getCommitMessage\"\r\nimport { CommitType } from \"@src/constant\"\r\n\r\nconst script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { config } from \"dotenv\"\r\nimport { readFile } from \"fs/promises\"\r\nimport { cpus } from \"os\"\r\n\r\nconfig()\r\n\r\nasync function main() {\r\n let core = parseInt(process.env.CORE || \"1\")\r\n if (!Number.isInteger(core)) core = 1\r\n if (core < 1) core = 1\r\n if (core > cpus().length) core = cpus().length\r\n const packageJson = JSON.parse(await readFile(\"package.json\", \"utf-8\"))\r\n\r\n spawn(\\`pm2 start scripts/server.mjs --name \\${packageJson.name} -i \\${core}\\`, { shell: true, stdio: \"inherit\" })\r\n}\r\n\r\nmain()`\r\n\r\nconst script2 = `// @ts-check\r\nimport { config } from \"dotenv\"\r\nimport { readFile } from \"fs/promises\"\r\nimport { checkPort } from \"get-port-please\"\r\nimport { createServer as createHttpServer } from \"http\"\r\nimport { createServer as createHttpsServer } from \"https\"\r\nimport next from \"next\"\r\nimport { join } from \"path\"\r\n\r\nconfig()\r\n\r\nasync function main() {\r\n const PEM_PATH = process.env.PEM_PATH\r\n const https = !!PEM_PATH\r\n const PORT = process.env.PORT ? Number(process.env.PORT) : https ? 443 : 80\r\n const LOCALHOST = process.env.LOCALHOST === \"true\"\r\n if (!checkPort(PORT)) throw new Error(\\`无效的端口号: \\${PORT}\\`)\r\n const app = next({ experimentalHttpsServer: https })\r\n const handle = app.getRequestHandler()\r\n await app.prepare()\r\n if (!https) {\r\n const server = createHttpServer((request, response) => handle(request, response))\r\n if (LOCALHOST) server.listen(PORT, \"127.0.0.1\")\r\n else server.listen(PORT)\r\n return\r\n }\r\n const key = await readFile(join(PEM_PATH, \"privkey.pem\"), \"utf8\")\r\n const cert = await readFile(join(PEM_PATH, \"cert.pem\"), \"utf8\")\r\n const ca = await readFile(join(PEM_PATH, \"chain.pem\"), \"utf8\")\r\n const server = createHttpsServer({ key, cert, ca }, (request, response) => handle(request, response))\r\n if (LOCALHOST) server.listen(PORT, \"127.0.0.1\")\r\n else server.listen(PORT)\r\n}\r\n\r\nmain()`\r\n\r\nexport type AddNextScriptOptions = {\r\n pemPath?: string\r\n port?: string\r\n core?: string\r\n localhost?: boolean\r\n}\r\n\r\nexport async function addNextScript({ pemPath, port, core, localhost }: AddNextScriptOptions = {}) {\r\n await addDependency({\r\n package: [\"dotenv\", \"get-port-please\"],\r\n type: \"devDependencies\"\r\n })\r\n await mkdir(\"scripts\", { recursive: true })\r\n await writeFile(\"scripts/start.mjs\", script, \"utf-8\")\r\n consola.success(\"已添加 scripts/start.js\")\r\n await writeFile(\"scripts/server.mjs\", script2, \"utf-8\")\r\n consola.success(\"已添加 scripts/server.js\")\r\n let env = \"\"\r\n try {\r\n env = await readFile(\".env\", \"utf-8\")\r\n } catch (error) {}\r\n\r\n // 添加证书目录\r\n if (/^ *PEM_PATH=/m.test(env)) env = env.replace(/^ *PEM_PATH=.*$/m, `PEM_PATH=\"${pemPath ?? \"\"}\"`)\r\n else env += `\\nPEM_PATH=\"${pemPath ?? \"\"}\"`\r\n\r\n // 添加端口号\r\n if (/^ *PORT=/m.test(env)) env = env.replace(/^ *PORT=.*$/m, `PORT=\"${port ?? \"\"}\"`)\r\n else env += `\\nPORT=\"${port ?? \"\"}\"`\r\n\r\n // 添加实例数\r\n if (/^ *CORE=/m.test(env)) env = env.replace(/^ *CORE=.*$/m, `CORE=\"${core ?? \"\"}\"`)\r\n else env += `\\nCORE=\"${core ?? \"\"}\"`\r\n\r\n // 添加是否只监听本地\r\n if (/^ *LOCALHOST=/m.test(env)) env = env.replace(/^ *LOCALHOST=.*$/m, `LOCALHOST=\"${localhost ? \"true\" : \"false\"}\"`)\r\n else env += `\\nLOCALHOST=\"${localhost ? \"true\" : \"false\"}\"`\r\n\r\n await writeFile(\".env\", env, \"utf-8\")\r\n const packageJson = await readPackageJson()\r\n packageJson.scripts ??= {}\r\n packageJson.scripts.start = \"node scripts/start.mjs\"\r\n await writePackageJson({ data: packageJson })\r\n consola.success(\"已添加启动命令 start\")\r\n await installDependceny()\r\n return getCommitMessage(CommitType.feature, \"添加启动命令\")\r\n}\r\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAA2C;AAC3C,2BAA8B;AAC9B,+BAAkC;AAClC,6BAAgC;AAChC,8BAAiC;AACjC,8BAAiC;AACjC,sBAA2B;AAE3B,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import consola from \"consola\"\r\nimport { mkdir, readFile, writeFile } from \"fs/promises\"\r\nimport { addDependency } from \"./addDependency\"\r\nimport { installDependceny } from \"./installDependceny\"\r\nimport { readPackageJson } from \"./readPackageJson\"\r\nimport { writePackageJson } from \"./writePackageJson\"\r\nimport { getCommitMessage } from \"./getCommitMessage\"\r\nimport { CommitType } from \"@src/constant\"\r\n\r\nconst script = `// @ts-check\r\nimport { spawn } from \"child_process\"\r\nimport { config } from \"dotenv\"\r\nimport { readFile } from \"fs/promises\"\r\nimport { cpus } from \"os\"\r\n\r\nconfig()\r\n\r\nasync function main() {\r\n let core = parseInt(process.env.CORE || \"1\")\r\n if (!Number.isInteger(core)) core = 1\r\n if (core < 1) core = 1\r\n if (core > cpus().length) core = cpus().length\r\n const packageJson = JSON.parse(await readFile(\"package.json\", \"utf-8\"))\r\n\r\n spawn(\\`pm2 start scripts/server.mjs --name \\${packageJson.name} -i \\${core}\\`, { shell: true, stdio: \"inherit\" })\r\n}\r\n\r\nmain()\r\n`\r\n\r\nconst script2 = `// @ts-check\r\nimport { config } from \"dotenv\"\r\nimport { readFile } from \"fs/promises\"\r\nimport { checkPort } from \"get-port-please\"\r\nimport { createServer as createHttpServer } from \"http\"\r\nimport { createServer as createHttpsServer } from \"https\"\r\nimport next from \"next\"\r\nimport { join } from \"path\"\r\n\r\nconfig()\r\n\r\nasync function main() {\r\n const PEM_PATH = process.env.PEM_PATH\r\n const https = !!PEM_PATH\r\n const PORT = process.env.PORT ? Number(process.env.PORT) : https ? 443 : 80\r\n const LOCALHOST = process.env.LOCALHOST === \"true\"\r\n if (!checkPort(PORT)) throw new Error(\\`无效的端口号: \\${PORT}\\`)\r\n const app = next({ experimentalHttpsServer: https })\r\n const handle = app.getRequestHandler()\r\n await app.prepare()\r\n if (!https) {\r\n const server = createHttpServer((request, response) => handle(request, response))\r\n if (LOCALHOST) server.listen(PORT, \"127.0.0.1\")\r\n else server.listen(PORT)\r\n return\r\n }\r\n const key = await readFile(join(PEM_PATH, \"privkey.pem\"), \"utf8\")\r\n const cert = await readFile(join(PEM_PATH, \"cert.pem\"), \"utf8\")\r\n const ca = await readFile(join(PEM_PATH, \"chain.pem\"), \"utf8\")\r\n const server = createHttpsServer({ key, cert, ca }, (request, response) => handle(request, response))\r\n if (LOCALHOST) server.listen(PORT, \"127.0.0.1\")\r\n else server.listen(PORT)\r\n}\r\n\r\nmain()\r\n`\r\n\r\nexport type AddNextScriptOptions = {\r\n pemPath?: string\r\n port?: string\r\n core?: string\r\n localhost?: boolean\r\n}\r\n\r\nexport async function addNextScript({ pemPath, port, core, localhost }: AddNextScriptOptions = {}) {\r\n await addDependency({\r\n package: [\"dotenv\", \"get-port-please\"],\r\n type: \"devDependencies\"\r\n })\r\n await mkdir(\"scripts\", { recursive: true })\r\n await writeFile(\"scripts/start.mjs\", script, \"utf-8\")\r\n consola.success(\"已添加 scripts/start.js\")\r\n await writeFile(\"scripts/server.mjs\", script2, \"utf-8\")\r\n consola.success(\"已添加 scripts/server.js\")\r\n let env = \"\"\r\n try {\r\n env = await readFile(\".env\", \"utf-8\")\r\n } catch (error) {}\r\n\r\n // 添加证书目录\r\n if (/^ *PEM_PATH=/m.test(env)) env = env.replace(/^ *PEM_PATH=.*$/m, `PEM_PATH=\"${pemPath ?? \"\"}\"`)\r\n else env += `\\nPEM_PATH=\"${pemPath ?? \"\"}\"`\r\n\r\n // 添加端口号\r\n if (/^ *PORT=/m.test(env)) env = env.replace(/^ *PORT=.*$/m, `PORT=\"${port ?? \"\"}\"`)\r\n else env += `\\nPORT=\"${port ?? \"\"}\"`\r\n\r\n // 添加实例数\r\n if (/^ *CORE=/m.test(env)) env = env.replace(/^ *CORE=.*$/m, `CORE=\"${core ?? \"\"}\"`)\r\n else env += `\\nCORE=\"${core ?? \"\"}\"`\r\n\r\n // 添加是否只监听本地\r\n if (/^ *LOCALHOST=/m.test(env)) env = env.replace(/^ *LOCALHOST=.*$/m, `LOCALHOST=\"${localhost ? \"true\" : \"false\"}\"`)\r\n else env += `\\nLOCALHOST=\"${localhost ? \"true\" : \"false\"}\"`\r\n\r\n await writeFile(\".env\", env, \"utf-8\")\r\n const packageJson = await readPackageJson()\r\n packageJson.scripts ??= {}\r\n packageJson.scripts.start = \"node scripts/start.mjs\"\r\n await writePackageJson({ data: packageJson })\r\n consola.success(\"已添加启动命令 start\")\r\n await installDependceny()\r\n return getCommitMessage(CommitType.feature, \"添加启动命令\")\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,sBAA2C;AAC3C,2BAA8B;AAC9B,+BAAkC;AAClC,6BAAgC;AAChC,8BAAiC;AACjC,8BAAiC;AACjC,sBAA2B;AAE3B,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqBf,IAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA4ChB,eAAsB,cAAc,EAAE,SAAS,MAAM,MAAM,UAAU,IAA0B,CAAC,GAAG;AAC/F,YAAM,oCAAc;AAAA,IAChB,SAAS,CAAC,UAAU,iBAAiB;AAAA,IACrC,MAAM;AAAA,EACV,CAAC;AACD,YAAM,uBAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,YAAM,2BAAU,qBAAqB,QAAQ,OAAO;AACpD,iBAAAA,QAAQ,QAAQ,sBAAsB;AACtC,YAAM,2BAAU,sBAAsB,SAAS,OAAO;AACtD,iBAAAA,QAAQ,QAAQ,uBAAuB;AACvC,MAAI,MAAM;AACV,MAAI;AACA,UAAM,UAAM,0BAAS,QAAQ,OAAO;AAAA,EACxC,SAAS,OAAP;AAAA,EAAe;AAGjB,MAAI,gBAAgB,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,oBAAoB,aAAa,WAAW,KAAK;AAAA;AAC7F,WAAO;AAAA,YAAe,WAAW;AAGtC,MAAI,YAAY,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,gBAAgB,SAAS,QAAQ,KAAK;AAAA;AAC9E,WAAO;AAAA,QAAW,QAAQ;AAG/B,MAAI,YAAY,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,gBAAgB,SAAS,QAAQ,KAAK;AAAA;AAC9E,WAAO;AAAA,QAAW,QAAQ;AAG/B,MAAI,iBAAiB,KAAK,GAAG;AAAG,UAAM,IAAI,QAAQ,qBAAqB,cAAc,YAAY,SAAS,UAAU;AAAA;AAC/G,WAAO;AAAA,aAAgB,YAAY,SAAS;AAEjD,YAAM,2BAAU,QAAQ,KAAK,OAAO;AACpC,QAAM,cAAc,UAAM,wCAAgB;AAC1C,cAAY,YAAY,CAAC;AACzB,cAAY,QAAQ,QAAQ;AAC5B,YAAM,0CAAiB,EAAE,MAAM,YAAY,CAAC;AAC5C,iBAAAA,QAAQ,QAAQ,eAAe;AAC/B,YAAM,4CAAkB;AACxB,aAAO,0CAAiB,2BAAW,SAAS,QAAQ;AACxD;",
|
|
6
6
|
"names": ["consola"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/utils/getHeaders.ts
|
|
30
|
+
var getHeaders_exports = {};
|
|
31
|
+
__export(getHeaders_exports, {
|
|
32
|
+
getHeaders: () => getHeaders
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(getHeaders_exports);
|
|
35
|
+
async function getHeaders() {
|
|
36
|
+
const { default: clipboard } = await import("clipboardy");
|
|
37
|
+
const str = await clipboard.read();
|
|
38
|
+
const reg = /^(.+?):$[\n\r]*^(.+?)$/gm;
|
|
39
|
+
const reg2 = new RegExp(reg.source, "m");
|
|
40
|
+
const result = [`const headers = new Headers()`];
|
|
41
|
+
const match = str.match(reg);
|
|
42
|
+
if (!match)
|
|
43
|
+
throw new Error("headers 格式错误");
|
|
44
|
+
Array.from(match).forEach((item) => {
|
|
45
|
+
const match2 = item.match(reg2);
|
|
46
|
+
result.push(`headers.set("${match2[1].trim()}", \`${match2[2].trim()}\`)`);
|
|
47
|
+
});
|
|
48
|
+
await clipboard.write(result.join("\n"));
|
|
49
|
+
}
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
getHeaders
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=getHeaders.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/getHeaders.ts"],
|
|
4
|
+
"sourcesContent": ["\r\n \r\n/**\r\n * 将浏览器中直接复制的 headers 转换为对象\r\n * @param str 复制的 headers\r\n * @returns headers 对象\r\n */\r\nexport async function getHeaders() {\r\n const { default: clipboard } = await import(\"clipboardy\")\r\n const str = await clipboard.read()\r\n const reg = /^(.+?):$[\\n\\r]*^(.+?)$/gm\r\n const reg2 = new RegExp(reg.source, \"m\")\r\n const result = [`const headers = new Headers()`]\r\n const match = str.match(reg)\r\n if (!match) throw new Error(\"headers 格式错误\")\r\n Array.from(match).forEach(item => {\r\n const match2 = item.match(reg2)\r\n result.push (`headers.set(\"${match2![1].trim()}\", \\`${match2![2].trim()}\\`)`)\r\n })\r\n await clipboard.write(result.join(\"\\n\"))\r\n}\r\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,eAAsB,aAAa;AAC/B,QAAM,EAAE,SAAS,UAAU,IAAI,MAAM,OAAO,YAAY;AACxD,QAAM,MAAM,MAAM,UAAU,KAAK;AACjC,QAAM,MAAM;AACZ,QAAM,OAAO,IAAI,OAAO,IAAI,QAAQ,GAAG;AACvC,QAAM,SAAS,CAAC,+BAA+B;AAC/C,QAAM,QAAQ,IAAI,MAAM,GAAG;AAC3B,MAAI,CAAC;AAAO,UAAM,IAAI,MAAM,cAAc;AAC1C,QAAM,KAAK,KAAK,EAAE,QAAQ,UAAQ;AAC9B,UAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,WAAO,KAAM,gBAAgB,OAAQ,CAAC,EAAE,KAAK,SAAS,OAAQ,CAAC,EAAE,KAAK,MAAM;AAAA,EAChF,CAAC;AACD,QAAM,UAAU,MAAM,OAAO,KAAK,IAAI,CAAC;AAC3C;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -40,94 +40,171 @@ var import_md5 = __toESM(require("md5"));
|
|
|
40
40
|
var import_path = require("path");
|
|
41
41
|
var import_stream = require("stream");
|
|
42
42
|
var import_isAsset = require("./isAsset");
|
|
43
|
-
var
|
|
43
|
+
var import_retry = require("./retry");
|
|
44
|
+
function getReg() {
|
|
45
|
+
return /(https?:|href=")\/\/[a-zA-Z0-9\.\-\*_\/\&\=\:\,\%\@]+/gm;
|
|
46
|
+
}
|
|
47
|
+
function getReg2() {
|
|
48
|
+
return /((from|import) *?["'])([a-zA-Z0-9\.\-\*_\/\&\=\:\,\%\@]+\.js)(["'])/gm;
|
|
49
|
+
}
|
|
50
|
+
var reg3 = /(["'])([a-zA-Z0-9\.\-\*_\/\&\=\:\,\%\@]+\.js)(["'])/;
|
|
51
|
+
var reg4 = /[a-z0-9]{32}\.js/;
|
|
44
52
|
async function replaceAssets(options) {
|
|
45
53
|
const { base, dir, proxy } = options;
|
|
54
|
+
if (base)
|
|
55
|
+
new URL(base);
|
|
46
56
|
await (0, import_promises.mkdir)("assets", { recursive: true });
|
|
47
|
-
const agent =
|
|
48
|
-
const { default: fetch } = await import("node-fetch");
|
|
57
|
+
const agent = new import_https_proxy_agent.HttpsProxyAgent("http://localhost:7890");
|
|
58
|
+
const { default: fetch, Headers } = await import("node-fetch");
|
|
59
|
+
const headers = new Headers();
|
|
60
|
+
headers.set(
|
|
61
|
+
"accept",
|
|
62
|
+
`text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`
|
|
63
|
+
);
|
|
64
|
+
headers.set("accept-encoding", `gzip, deflate, br, zstd`);
|
|
65
|
+
headers.set("accept-language", `en,zh-CN;q=0.9,zh;q=0.8`);
|
|
66
|
+
headers.set("cache-control", `no-cache`);
|
|
67
|
+
headers.set("dnt", `1`);
|
|
68
|
+
headers.set("pragma", `no-cache`);
|
|
69
|
+
headers.set("priority", `u=0, i`);
|
|
70
|
+
headers.set("sec-ch-ua", `"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"`);
|
|
71
|
+
headers.set("sec-ch-ua-mobile", `?0`);
|
|
72
|
+
headers.set("sec-ch-ua-platform", `"Windows"`);
|
|
73
|
+
headers.set("sec-fetch-dest", `document`);
|
|
74
|
+
headers.set("sec-fetch-mode", `navigate`);
|
|
75
|
+
headers.set("sec-fetch-site", `none`);
|
|
76
|
+
headers.set("sec-fetch-user", `?1`);
|
|
77
|
+
headers.set("upgrade-insecure-requests", `1`);
|
|
78
|
+
headers.set("user-agent", `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36`);
|
|
49
79
|
const downloadMap = /* @__PURE__ */ new Map();
|
|
80
|
+
const errors = /* @__PURE__ */ new Set();
|
|
50
81
|
async function download(url) {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
82
|
+
try {
|
|
83
|
+
if (downloadMap.has(url))
|
|
84
|
+
return downloadMap.get(url);
|
|
85
|
+
if (url.startsWith(base) || new URL(url).hostname === "private-alipayobjects.alipay.com") {
|
|
86
|
+
downloadMap.set(url, url);
|
|
87
|
+
return url;
|
|
88
|
+
}
|
|
89
|
+
import_consola.default.start(`download ${url}`);
|
|
90
|
+
const { ext } = (0, import_path.parse)(new URL(url).pathname);
|
|
91
|
+
let response;
|
|
92
|
+
let filename;
|
|
93
|
+
if (ext) {
|
|
94
|
+
filename = `${(0, import_md5.default)(url)}${ext}`;
|
|
95
|
+
} else {
|
|
96
|
+
response = await fetch(url, {
|
|
97
|
+
agent: proxy ? agent : void 0,
|
|
98
|
+
headers
|
|
99
|
+
});
|
|
100
|
+
filename = `${(0, import_md5.default)(url)}.${response.headers.get("content-type")?.split("/")[1].split("+")[0]}`;
|
|
101
|
+
}
|
|
102
|
+
const dir2 = await (0, import_promises.readdir)("assets");
|
|
103
|
+
if (!dir2.includes(filename)) {
|
|
104
|
+
response ??= await fetch(url, {
|
|
105
|
+
agent: proxy ? agent : void 0,
|
|
106
|
+
headers
|
|
107
|
+
});
|
|
108
|
+
const file = (0, import_fs.createWriteStream)((0, import_path.join)("assets", filename));
|
|
109
|
+
await new Promise((resolve, reject) => import_stream.Readable.from(response.body).pipe(file).on("finish", resolve).on("error", reject));
|
|
110
|
+
}
|
|
111
|
+
const url2 = base ? new URL(`/${filename}`, base).toString() : `/${filename}`;
|
|
112
|
+
downloadMap.set(url, url2);
|
|
113
|
+
errors.delete(url);
|
|
114
|
+
if (filename.endsWith(".js")) {
|
|
115
|
+
await replace((0, import_path.join)("assets", filename), url);
|
|
116
|
+
}
|
|
117
|
+
return url2;
|
|
118
|
+
} catch (error) {
|
|
119
|
+
import_consola.default.error(error);
|
|
120
|
+
errors.add(url);
|
|
121
|
+
throw error;
|
|
72
122
|
}
|
|
73
|
-
const url2 = new URL(`/${filename}`, base).toString();
|
|
74
|
-
downloadMap.set(url, url2);
|
|
75
|
-
return url2;
|
|
76
123
|
}
|
|
77
|
-
async function getReplaceUrl(url) {
|
|
124
|
+
async function getReplaceUrl(url, source) {
|
|
78
125
|
if (url.startsWith(`href="`)) {
|
|
79
126
|
try {
|
|
80
127
|
const newUrl = url.replace(/^href="/, "http:");
|
|
81
|
-
const replaceUrl = await download(newUrl);
|
|
128
|
+
const replaceUrl = await (0, import_retry.retry)(() => download(newUrl), 4);
|
|
82
129
|
return `href="${replaceUrl}`;
|
|
83
130
|
} catch (error) {
|
|
84
131
|
}
|
|
85
132
|
try {
|
|
86
133
|
const newUrl = url.replace(/^href="/, "https:");
|
|
87
|
-
const replaceUrl = await download(newUrl);
|
|
134
|
+
const replaceUrl = await (0, import_retry.retry)(() => download(newUrl), 4);
|
|
88
135
|
return `href="${replaceUrl}`;
|
|
89
136
|
} catch (error) {
|
|
90
137
|
}
|
|
91
138
|
return url;
|
|
92
139
|
}
|
|
140
|
+
if (url.startsWith("from") || url.startsWith("import")) {
|
|
141
|
+
const match = url.match(reg3);
|
|
142
|
+
if (!match)
|
|
143
|
+
return url;
|
|
144
|
+
let url2 = match[2].trim();
|
|
145
|
+
if (!url2.startsWith("http")) {
|
|
146
|
+
if (url2.startsWith("/"))
|
|
147
|
+
url2 = new URL(url2, source).toString();
|
|
148
|
+
else if (url2.startsWith("./"))
|
|
149
|
+
url2 = (0, import_path.parse)(source).dir + url2.slice(1);
|
|
150
|
+
else if (url2.startsWith("../"))
|
|
151
|
+
url2 = (0, import_path.parse)((0, import_path.parse)(source).dir).dir + url2.slice(2);
|
|
152
|
+
else {
|
|
153
|
+
return url;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const replaceUrl = await (0, import_retry.retry)(() => download(url2), 4);
|
|
157
|
+
if (replaceUrl === url2)
|
|
158
|
+
return url;
|
|
159
|
+
return url.replace(reg3, `$1${replaceUrl.startsWith("/") ? "." : ""}${replaceUrl}$3`);
|
|
160
|
+
}
|
|
93
161
|
try {
|
|
94
|
-
const replaceUrl = await download(url);
|
|
162
|
+
const replaceUrl = await (0, import_retry.retry)(() => download(url), 4);
|
|
95
163
|
return replaceUrl;
|
|
96
164
|
} catch (error) {
|
|
97
165
|
return url;
|
|
98
166
|
}
|
|
99
167
|
}
|
|
100
|
-
async function replace(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const url2 = await getReplaceUrl(url);
|
|
119
|
-
urlsToReplace.push(url2);
|
|
120
|
-
} else {
|
|
121
|
-
urlsToReplace.push(url);
|
|
122
|
-
}
|
|
168
|
+
async function replace(input, source) {
|
|
169
|
+
import_consola.default.start(`scanning ${input.replace(/\\/g, "/")}`);
|
|
170
|
+
const status = await (0, import_promises.stat)(input);
|
|
171
|
+
if (status.isFile()) {
|
|
172
|
+
const path = (0, import_path.parse)(input);
|
|
173
|
+
if (path.ext === ".js" || path.ext === ".html" || path.ext === ".css" || path.ext === ".json") {
|
|
174
|
+
const data = await (0, import_promises.readFile)(input, "utf-8");
|
|
175
|
+
const match = data.match(source ? getReg2() : getReg());
|
|
176
|
+
if (!match)
|
|
177
|
+
return;
|
|
178
|
+
const urlsToReplace = [];
|
|
179
|
+
let index = 0;
|
|
180
|
+
for (const url of match) {
|
|
181
|
+
if ((0, import_isAsset.isAsset)(url) || getReg2().test(url)) {
|
|
182
|
+
const url2 = await getReplaceUrl(url, source);
|
|
183
|
+
urlsToReplace.push(url2);
|
|
184
|
+
} else {
|
|
185
|
+
urlsToReplace.push(url);
|
|
123
186
|
}
|
|
124
|
-
const newData = data.replace(reg, () => urlsToReplace.shift());
|
|
125
|
-
await (0, import_promises.writeFile)((0, import_path.join)(dir2, item), newData, "utf-8");
|
|
126
187
|
}
|
|
188
|
+
const newData = data.replace(source ? getReg2() : getReg(), () => urlsToReplace[index++]);
|
|
189
|
+
if (source) {
|
|
190
|
+
urlsToReplace.forEach((url) => {
|
|
191
|
+
if (!reg4.test(url))
|
|
192
|
+
console.log(url);
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
await (0, import_promises.writeFile)(input, newData, "utf-8");
|
|
196
|
+
}
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (status.isDirectory()) {
|
|
200
|
+
const dir2 = await (0, import_promises.readdir)(input);
|
|
201
|
+
for (const item of dir2) {
|
|
202
|
+
await replace((0, import_path.join)(input, item));
|
|
127
203
|
}
|
|
128
204
|
}
|
|
129
205
|
}
|
|
130
206
|
await replace(dir);
|
|
207
|
+
errors.forEach((url) => import_consola.default.error(url));
|
|
131
208
|
}
|
|
132
209
|
// Annotate the CommonJS export names for ESM import in node:
|
|
133
210
|
0 && (module.exports = {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/replaceAssets.ts"],
|
|
4
|
-
"sourcesContent": ["import consola from \"consola\"\r\nimport { createWriteStream } from \"fs\"\r\nimport { mkdir, readdir, readFile, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport md5 from \"md5\"\r\nimport { Response } from \"node-fetch\"\r\nimport { join, parse } from \"path\"\r\nimport { Readable } from \"stream\"\r\nimport { isAsset } from \"./isAsset\"\r\n\r\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAoB;AACpB,gBAAkC;AAClC,sBAA0D;AAC1D,+BAAgC;AAChC,iBAAgB;AAEhB,kBAA4B;AAC5B,oBAAyB;AACzB,qBAAwB;
|
|
6
|
-
"names": ["consola", "md5", "dir"
|
|
4
|
+
"sourcesContent": ["import consola from \"consola\"\r\nimport { createWriteStream } from \"fs\"\r\nimport { mkdir, readdir, readFile, stat, writeFile } from \"fs/promises\"\r\nimport { HttpsProxyAgent } from \"https-proxy-agent\"\r\nimport md5 from \"md5\"\r\nimport { Response } from \"node-fetch\"\r\nimport { join, parse } from \"path\"\r\nimport { Readable } from \"stream\"\r\nimport { isAsset } from \"./isAsset\"\r\nimport { retry } from \"./retry\"\r\n\r\nfunction getReg() {\r\n return /(https?:|href=\")\\/\\/[a-zA-Z0-9\\.\\-\\*_\\/\\&\\=\\:\\,\\%\\@]+/gm\r\n}\r\n\r\nfunction getReg2() {\r\n return /((from|import) *?[\"'])([a-zA-Z0-9\\.\\-\\*_\\/\\&\\=\\:\\,\\%\\@]+\\.js)([\"'])/gm\r\n}\r\n\r\nconst reg3 = /([\"'])([a-zA-Z0-9\\.\\-\\*_\\/\\&\\=\\:\\,\\%\\@]+\\.js)([\"'])/\r\n\r\nconst reg4 = /[a-z0-9]{32}\\.js/\r\n\r\nexport type ReplaceAssetsOptions = {\r\n base: string\r\n dir: string\r\n proxy?: boolean\r\n}\r\n\r\nexport async function replaceAssets(options: ReplaceAssetsOptions) {\r\n const { base, dir, proxy } = options\r\n\r\n if (base) new URL(base)\r\n\r\n await mkdir(\"assets\", { recursive: true })\r\n\r\n const agent = new HttpsProxyAgent(\"http://localhost:7890\")\r\n\r\n const { default: fetch, Headers } = await import(\"node-fetch\")\r\n\r\n const headers = new Headers()\r\n headers.set(\r\n \"accept\",\r\n `text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`\r\n )\r\n headers.set(\"accept-encoding\", `gzip, deflate, br, zstd`)\r\n headers.set(\"accept-language\", `en,zh-CN;q=0.9,zh;q=0.8`)\r\n headers.set(\"cache-control\", `no-cache`)\r\n headers.set(\"dnt\", `1`)\r\n headers.set(\"pragma\", `no-cache`)\r\n headers.set(\"priority\", `u=0, i`)\r\n headers.set(\"sec-ch-ua\", `\"Not)A;Brand\";v=\"99\", \"Google Chrome\";v=\"127\", \"Chromium\";v=\"127\"`)\r\n headers.set(\"sec-ch-ua-mobile\", `?0`)\r\n headers.set(\"sec-ch-ua-platform\", `\"Windows\"`)\r\n headers.set(\"sec-fetch-dest\", `document`)\r\n headers.set(\"sec-fetch-mode\", `navigate`)\r\n headers.set(\"sec-fetch-site\", `none`)\r\n headers.set(\"sec-fetch-user\", `?1`)\r\n headers.set(\"upgrade-insecure-requests\", `1`)\r\n headers.set(\"user-agent\", `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36`)\r\n\r\n const downloadMap: Map<string, string> = new Map()\r\n\r\n const errors: Set<string> = new Set()\r\n\r\n async function download(url: string) {\r\n try {\r\n if (downloadMap.has(url)) return downloadMap.get(url)!\r\n if (url.startsWith(base) || new URL(url).hostname === \"private-alipayobjects.alipay.com\") {\r\n downloadMap.set(url, url)\r\n return url\r\n }\r\n consola.start(`download ${url}`)\r\n const { ext } = parse(new URL(url).pathname)\r\n let response: Response\r\n let filename: string\r\n if (ext) {\r\n filename = `${md5(url)}${ext}`\r\n } else {\r\n response = await fetch(url, {\r\n agent: proxy ? agent : undefined,\r\n headers\r\n })\r\n filename = `${md5(url)}.${response.headers.get(\"content-type\")?.split(\"/\")[1].split(\"+\")[0]}`\r\n }\r\n const dir = await readdir(\"assets\")\r\n if (!dir.includes(filename)) {\r\n response ??= await fetch(url, {\r\n agent: proxy ? agent : undefined,\r\n headers\r\n })\r\n const file = createWriteStream(join(\"assets\", filename))\r\n await new Promise((resolve, reject) => Readable.from(response.body!).pipe(file).on(\"finish\", resolve).on(\"error\", reject))\r\n }\r\n const url2 = base ? new URL(`/${filename}`, base).toString() : `/${filename}`\r\n // consola.success(`${url} -> ${url2}`)\r\n downloadMap.set(url, url2)\r\n errors.delete(url)\r\n if (filename.endsWith(\".js\")) {\r\n await replace(join(\"assets\", filename), url)\r\n }\r\n return url2\r\n } catch (error) {\r\n consola.error(error)\r\n errors.add(url)\r\n throw error\r\n }\r\n }\r\n\r\n async function getReplaceUrl(url: string, source?: string) {\r\n if (url.startsWith(`href=\"`)) {\r\n try {\r\n const newUrl = url.replace(/^href=\"/, \"http:\")\r\n const replaceUrl = await retry(() => download(newUrl), 4)\r\n return `href=\"${replaceUrl}`\r\n } catch (error) {}\r\n try {\r\n const newUrl = url.replace(/^href=\"/, \"https:\")\r\n const replaceUrl = await retry(() => download(newUrl), 4)\r\n return `href=\"${replaceUrl}`\r\n } catch (error) {}\r\n return url\r\n }\r\n if (url.startsWith(\"from\") || url.startsWith(\"import\")) {\r\n const match = url.match(reg3)\r\n if (!match) return url\r\n let url2 = match[2].trim()\r\n if (!url2.startsWith(\"http\")) {\r\n if (url2.startsWith(\"/\")) url2 = new URL(url2, source).toString()\r\n else if (url2.startsWith(\"./\")) url2 = parse(source!).dir + url2.slice(1)\r\n else if (url2.startsWith(\"../\")) url2 = parse(parse(source!).dir).dir + url2.slice(2)\r\n else {\r\n return url\r\n }\r\n }\r\n const replaceUrl = await retry(() => download(url2), 4)\r\n if (replaceUrl === url2) return url\r\n return url.replace(reg3, `$1${replaceUrl.startsWith(\"/\") ? \".\" : \"\"}${replaceUrl}$3`)\r\n }\r\n try {\r\n const replaceUrl = await retry(() => download(url), 4)\r\n return replaceUrl\r\n } catch (error) {\r\n return url\r\n }\r\n }\r\n\r\n async function replace(input: string, source?: string) {\r\n consola.start(`scanning ${input.replace(/\\\\/g, \"/\")}`)\r\n const status = await stat(input)\r\n if (status.isFile()) {\r\n const path = parse(input)\r\n if (path.ext === \".js\" || path.ext === \".html\" || path.ext === \".css\" || path.ext === \".json\") {\r\n const data = await readFile(input, \"utf-8\")\r\n const match = data.match(source ? getReg2() : getReg())\r\n if (!match) return\r\n const urlsToReplace: string[] = []\r\n let index = 0\r\n for (const url of match) {\r\n if (isAsset(url) || getReg2().test(url)) {\r\n const url2 = await getReplaceUrl(url, source)\r\n urlsToReplace.push(url2)\r\n } else {\r\n urlsToReplace.push(url)\r\n }\r\n }\r\n const newData = data.replace(source ? getReg2() : getReg(), () => urlsToReplace[index++])\r\n if (source) {\r\n urlsToReplace.forEach(url => {\r\n if (!reg4.test(url)) console.log(url)\r\n })\r\n }\r\n await writeFile(input, newData, \"utf-8\")\r\n }\r\n return\r\n }\r\n if (status.isDirectory()) {\r\n const dir2 = await readdir(input)\r\n for (const item of dir2) {\r\n await replace(join(input, item))\r\n }\r\n }\r\n }\r\n\r\n await replace(dir)\r\n\r\n errors.forEach(url => consola.error(url))\r\n}\r\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["consola", "md5", "dir"]
|
|
7
7
|
}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -40,11 +40,13 @@ import { addNextScript } from "./utils/addNextScript"
|
|
|
40
40
|
import { createBrowserlistrc } from "./utils/createBrowserlistrc"
|
|
41
41
|
import { getCommitMessage } from "./utils/getCommitMessage"
|
|
42
42
|
import { readPackageJsonSync } from "./utils/readPackageJsonSync"
|
|
43
|
+
import { removeTailwindCssPreflight } from "./utils/removeTailwindCssPreset"
|
|
43
44
|
import { replaceAssets } from "./utils/replaceAssets"
|
|
44
45
|
import { setGlobal } from "./utils/setGlobal"
|
|
45
46
|
import { upgradeRsbuild } from "./utils/upgradeRsbuild"
|
|
46
47
|
import { upgradeWorkspaceDependceny } from "./utils/upgradeWorkspaceDependceny"
|
|
47
|
-
import {
|
|
48
|
+
import { addExpressScript } from "./utils/addExpressScript"
|
|
49
|
+
import { getHeaders } from "./utils/getHeaders"
|
|
48
50
|
|
|
49
51
|
const program = new Command()
|
|
50
52
|
|
|
@@ -203,9 +205,9 @@ program
|
|
|
203
205
|
.command("asset")
|
|
204
206
|
.description("替换文件中的资源地址")
|
|
205
207
|
.argument("dir", "静态文件夹路径")
|
|
206
|
-
.
|
|
208
|
+
.option("-b, --base <base>", "资源地址 BaseUrl")
|
|
207
209
|
.option("-p, --proxy", "是否使用代理")
|
|
208
|
-
.action((dir,
|
|
210
|
+
.action((dir, { proxy, base }) => replaceAssets({ base, dir, proxy }))
|
|
209
211
|
|
|
210
212
|
program
|
|
211
213
|
.command("upgrade-rsbuild")
|
|
@@ -218,8 +220,32 @@ program
|
|
|
218
220
|
await actionWithBackup(() => upgradeRsbuild())()
|
|
219
221
|
})
|
|
220
222
|
|
|
221
|
-
program
|
|
223
|
+
program
|
|
224
|
+
.command("add-express-script")
|
|
225
|
+
.alias("aes")
|
|
226
|
+
.option("-p, --port <port>", "端口地址")
|
|
227
|
+
.option("-c, --core <core>", "实例数")
|
|
228
|
+
.option("-l, --localhost", "是否只开启本地监听")
|
|
229
|
+
.option("-pem, --pemPath <pemPath>", "证书目录")
|
|
230
|
+
.description("添加 express 启动脚本")
|
|
231
|
+
.action(actionWithBackup(addExpressScript))
|
|
232
|
+
|
|
233
|
+
program
|
|
234
|
+
.command("add-next-script")
|
|
235
|
+
.alias("ans")
|
|
236
|
+
.option("-p, --port <port>", "端口地址")
|
|
237
|
+
.option("-c, --core <core>", "实例数")
|
|
238
|
+
.option("-l, --localhost", "是否只开启本地监听")
|
|
239
|
+
.option("-pem, --pemPath <pemPath>", "证书目录")
|
|
240
|
+
.description("添加 next 启动脚本")
|
|
241
|
+
.action(actionWithBackup(addNextScript))
|
|
242
|
+
|
|
243
|
+
program
|
|
244
|
+
.command("removeTailwindCssPreflight")
|
|
245
|
+
.alias("rtp")
|
|
246
|
+
.description("删除 tailwindcss 的 preflight.css 中的 img 和 video 样式")
|
|
247
|
+
.action(actionWithBackup(() => removeTailwindCssPreflight()))
|
|
222
248
|
|
|
223
|
-
program.command("
|
|
249
|
+
program.command("headers").description("将浏览器中直接复制的 headers 转换为对象").action(getHeaders)
|
|
224
250
|
|
|
225
251
|
program.parse()
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import consola from "consola"
|
|
2
|
+
import { mkdir, readFile, writeFile } from "fs/promises"
|
|
3
|
+
import { addDependency } from "./addDependency"
|
|
4
|
+
import { installDependceny } from "./installDependceny"
|
|
5
|
+
import { readPackageJson } from "./readPackageJson"
|
|
6
|
+
import { writePackageJson } from "./writePackageJson"
|
|
7
|
+
import { getCommitMessage } from "./getCommitMessage"
|
|
8
|
+
import { CommitType } from "@src/constant"
|
|
9
|
+
|
|
10
|
+
const script = `// @ts-check
|
|
11
|
+
import { spawn } from "child_process"
|
|
12
|
+
import { config } from "dotenv"
|
|
13
|
+
import { readFile } from "fs/promises"
|
|
14
|
+
import { cpus } from "os"
|
|
15
|
+
|
|
16
|
+
config()
|
|
17
|
+
|
|
18
|
+
async function main() {
|
|
19
|
+
let core = parseInt(process.env.CORE || "1")
|
|
20
|
+
if (!Number.isInteger(core)) core = 1
|
|
21
|
+
if (core < 1) core = 1
|
|
22
|
+
if (core > cpus().length) core = cpus().length
|
|
23
|
+
const packageJson = JSON.parse(await readFile("package.json", "utf-8"))
|
|
24
|
+
|
|
25
|
+
spawn(\`pm2 start scripts/server.mjs --name \${packageJson.name} -i \${core}\`, { shell: true, stdio: "inherit" })
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
main()
|
|
29
|
+
`
|
|
30
|
+
|
|
31
|
+
const script2 = `// @ts-check
|
|
32
|
+
import cors from "cors"
|
|
33
|
+
import { config } from "dotenv"
|
|
34
|
+
import express from "express"
|
|
35
|
+
import { readFile } from "fs/promises"
|
|
36
|
+
import { createServer as createHttpServer } from "http"
|
|
37
|
+
import { createServer as createHttpsServer } from "https"
|
|
38
|
+
import { join, resolve } from "path"
|
|
39
|
+
|
|
40
|
+
config()
|
|
41
|
+
|
|
42
|
+
async function main() {
|
|
43
|
+
const PEM_PATH = process.env.PEM_PATH
|
|
44
|
+
const https = !!PEM_PATH
|
|
45
|
+
const PORT = process.env.PORT ? Number(process.env.PORT) : https ? 443 : 80
|
|
46
|
+
const LOCALHOST = process.env.LOCALHOST === "true"
|
|
47
|
+
|
|
48
|
+
const app = express()
|
|
49
|
+
|
|
50
|
+
app.use(cors())
|
|
51
|
+
|
|
52
|
+
app.use("/", express.static("dist"))
|
|
53
|
+
|
|
54
|
+
app.get("/*", async (request, response) => {
|
|
55
|
+
response.sendFile(resolve("dist", "index.html"))
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
if (!https) {
|
|
59
|
+
const server = createHttpServer(app)
|
|
60
|
+
if (LOCALHOST) server.listen(PORT, "127.0.0.1")
|
|
61
|
+
else server.listen(PORT)
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
const key = await readFile(join(PEM_PATH, "privkey.pem"), "utf8")
|
|
65
|
+
const cert = await readFile(join(PEM_PATH, "cert.pem"), "utf8")
|
|
66
|
+
const ca = await readFile(join(PEM_PATH, "chain.pem"), "utf8")
|
|
67
|
+
const server = createHttpsServer({ key, cert, ca }, app)
|
|
68
|
+
if (LOCALHOST) server.listen(PORT, "127.0.0.1")
|
|
69
|
+
else server.listen(PORT)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
main()
|
|
73
|
+
`
|
|
74
|
+
|
|
75
|
+
export type AddExpressScriptOptions = {
|
|
76
|
+
pemPath?: string
|
|
77
|
+
port?: string
|
|
78
|
+
core?: string
|
|
79
|
+
localhost?: boolean
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export async function addExpressScript({ pemPath, port, core, localhost }: AddExpressScriptOptions = {}) {
|
|
83
|
+
await addDependency({
|
|
84
|
+
package: ["cors", "dotenv", "express"],
|
|
85
|
+
type: "devDependencies"
|
|
86
|
+
})
|
|
87
|
+
await mkdir("scripts", { recursive: true })
|
|
88
|
+
await writeFile("scripts/start.mjs", script, "utf-8")
|
|
89
|
+
consola.success("已添加 scripts/start.js")
|
|
90
|
+
await writeFile("scripts/server.mjs", script2, "utf-8")
|
|
91
|
+
consola.success("已添加 scripts/server.js")
|
|
92
|
+
let env = ""
|
|
93
|
+
try {
|
|
94
|
+
env = await readFile(".env", "utf-8")
|
|
95
|
+
} catch (error) {}
|
|
96
|
+
|
|
97
|
+
// 添加证书目录
|
|
98
|
+
if (/^ *PEM_PATH=/m.test(env)) env = env.replace(/^ *PEM_PATH=.*$/m, `PEM_PATH="${pemPath ?? ""}"`)
|
|
99
|
+
else env += `\nPEM_PATH="${pemPath ?? ""}"`
|
|
100
|
+
|
|
101
|
+
// 添加端口号
|
|
102
|
+
if (/^ *PORT=/m.test(env)) env = env.replace(/^ *PORT=.*$/m, `PORT="${port ?? ""}"`)
|
|
103
|
+
else env += `\nPORT="${port ?? ""}"`
|
|
104
|
+
|
|
105
|
+
// 添加实例数
|
|
106
|
+
if (/^ *CORE=/m.test(env)) env = env.replace(/^ *CORE=.*$/m, `CORE="${core ?? ""}"`)
|
|
107
|
+
else env += `\nCORE="${core ?? ""}"`
|
|
108
|
+
|
|
109
|
+
// 添加是否只监听本地
|
|
110
|
+
if (/^ *LOCALHOST=/m.test(env)) env = env.replace(/^ *LOCALHOST=.*$/m, `LOCALHOST="${localhost ? "true" : "false"}"`)
|
|
111
|
+
else env += `\nLOCALHOST="${localhost ? "true" : "false"}"`
|
|
112
|
+
|
|
113
|
+
await writeFile(".env", env, "utf-8")
|
|
114
|
+
const packageJson = await readPackageJson()
|
|
115
|
+
packageJson.scripts ??= {}
|
|
116
|
+
packageJson.scripts.start = "node scripts/start.mjs"
|
|
117
|
+
await writePackageJson({ data: packageJson })
|
|
118
|
+
consola.success("已添加启动命令 start")
|
|
119
|
+
await installDependceny()
|
|
120
|
+
return getCommitMessage(CommitType.feature, "添加启动命令")
|
|
121
|
+
}
|
|
@@ -25,7 +25,8 @@ async function main() {
|
|
|
25
25
|
spawn(\`pm2 start scripts/server.mjs --name \${packageJson.name} -i \${core}\`, { shell: true, stdio: "inherit" })
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
main()
|
|
28
|
+
main()
|
|
29
|
+
`
|
|
29
30
|
|
|
30
31
|
const script2 = `// @ts-check
|
|
31
32
|
import { config } from "dotenv"
|
|
@@ -61,7 +62,8 @@ async function main() {
|
|
|
61
62
|
else server.listen(PORT)
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
main()
|
|
65
|
+
main()
|
|
66
|
+
`
|
|
65
67
|
|
|
66
68
|
export type AddNextScriptOptions = {
|
|
67
69
|
pemPath?: string
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 将浏览器中直接复制的 headers 转换为对象
|
|
5
|
+
* @param str 复制的 headers
|
|
6
|
+
* @returns headers 对象
|
|
7
|
+
*/
|
|
8
|
+
export async function getHeaders() {
|
|
9
|
+
const { default: clipboard } = await import("clipboardy")
|
|
10
|
+
const str = await clipboard.read()
|
|
11
|
+
const reg = /^(.+?):$[\n\r]*^(.+?)$/gm
|
|
12
|
+
const reg2 = new RegExp(reg.source, "m")
|
|
13
|
+
const result = [`const headers = new Headers()`]
|
|
14
|
+
const match = str.match(reg)
|
|
15
|
+
if (!match) throw new Error("headers 格式错误")
|
|
16
|
+
Array.from(match).forEach(item => {
|
|
17
|
+
const match2 = item.match(reg2)
|
|
18
|
+
result.push (`headers.set("${match2![1].trim()}", \`${match2![2].trim()}\`)`)
|
|
19
|
+
})
|
|
20
|
+
await clipboard.write(result.join("\n"))
|
|
21
|
+
}
|
|
@@ -7,8 +7,19 @@ import { Response } from "node-fetch"
|
|
|
7
7
|
import { join, parse } from "path"
|
|
8
8
|
import { Readable } from "stream"
|
|
9
9
|
import { isAsset } from "./isAsset"
|
|
10
|
+
import { retry } from "./retry"
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
function getReg() {
|
|
13
|
+
return /(https?:|href=")\/\/[a-zA-Z0-9\.\-\*_\/\&\=\:\,\%\@]+/gm
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function getReg2() {
|
|
17
|
+
return /((from|import) *?["'])([a-zA-Z0-9\.\-\*_\/\&\=\:\,\%\@]+\.js)(["'])/gm
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const reg3 = /(["'])([a-zA-Z0-9\.\-\*_\/\&\=\:\,\%\@]+\.js)(["'])/
|
|
21
|
+
|
|
22
|
+
const reg4 = /[a-z0-9]{32}\.js/
|
|
12
23
|
|
|
13
24
|
export type ReplaceAssetsOptions = {
|
|
14
25
|
base: string
|
|
@@ -19,92 +30,159 @@ export type ReplaceAssetsOptions = {
|
|
|
19
30
|
export async function replaceAssets(options: ReplaceAssetsOptions) {
|
|
20
31
|
const { base, dir, proxy } = options
|
|
21
32
|
|
|
33
|
+
if (base) new URL(base)
|
|
34
|
+
|
|
22
35
|
await mkdir("assets", { recursive: true })
|
|
23
36
|
|
|
24
|
-
const agent =
|
|
37
|
+
const agent = new HttpsProxyAgent("http://localhost:7890")
|
|
38
|
+
|
|
39
|
+
const { default: fetch, Headers } = await import("node-fetch")
|
|
25
40
|
|
|
26
|
-
const
|
|
41
|
+
const headers = new Headers()
|
|
42
|
+
headers.set(
|
|
43
|
+
"accept",
|
|
44
|
+
`text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7`
|
|
45
|
+
)
|
|
46
|
+
headers.set("accept-encoding", `gzip, deflate, br, zstd`)
|
|
47
|
+
headers.set("accept-language", `en,zh-CN;q=0.9,zh;q=0.8`)
|
|
48
|
+
headers.set("cache-control", `no-cache`)
|
|
49
|
+
headers.set("dnt", `1`)
|
|
50
|
+
headers.set("pragma", `no-cache`)
|
|
51
|
+
headers.set("priority", `u=0, i`)
|
|
52
|
+
headers.set("sec-ch-ua", `"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"`)
|
|
53
|
+
headers.set("sec-ch-ua-mobile", `?0`)
|
|
54
|
+
headers.set("sec-ch-ua-platform", `"Windows"`)
|
|
55
|
+
headers.set("sec-fetch-dest", `document`)
|
|
56
|
+
headers.set("sec-fetch-mode", `navigate`)
|
|
57
|
+
headers.set("sec-fetch-site", `none`)
|
|
58
|
+
headers.set("sec-fetch-user", `?1`)
|
|
59
|
+
headers.set("upgrade-insecure-requests", `1`)
|
|
60
|
+
headers.set("user-agent", `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36`)
|
|
27
61
|
|
|
28
62
|
const downloadMap: Map<string, string> = new Map()
|
|
29
63
|
|
|
64
|
+
const errors: Set<string> = new Set()
|
|
65
|
+
|
|
30
66
|
async function download(url: string) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
67
|
+
try {
|
|
68
|
+
if (downloadMap.has(url)) return downloadMap.get(url)!
|
|
69
|
+
if (url.startsWith(base) || new URL(url).hostname === "private-alipayobjects.alipay.com") {
|
|
70
|
+
downloadMap.set(url, url)
|
|
71
|
+
return url
|
|
72
|
+
}
|
|
73
|
+
consola.start(`download ${url}`)
|
|
74
|
+
const { ext } = parse(new URL(url).pathname)
|
|
75
|
+
let response: Response
|
|
76
|
+
let filename: string
|
|
77
|
+
if (ext) {
|
|
78
|
+
filename = `${md5(url)}${ext}`
|
|
79
|
+
} else {
|
|
80
|
+
response = await fetch(url, {
|
|
81
|
+
agent: proxy ? agent : undefined,
|
|
82
|
+
headers
|
|
83
|
+
})
|
|
84
|
+
filename = `${md5(url)}.${response.headers.get("content-type")?.split("/")[1].split("+")[0]}`
|
|
85
|
+
}
|
|
86
|
+
const dir = await readdir("assets")
|
|
87
|
+
if (!dir.includes(filename)) {
|
|
88
|
+
response ??= await fetch(url, {
|
|
89
|
+
agent: proxy ? agent : undefined,
|
|
90
|
+
headers
|
|
91
|
+
})
|
|
92
|
+
const file = createWriteStream(join("assets", filename))
|
|
93
|
+
await new Promise((resolve, reject) => Readable.from(response.body!).pipe(file).on("finish", resolve).on("error", reject))
|
|
94
|
+
}
|
|
95
|
+
const url2 = base ? new URL(`/${filename}`, base).toString() : `/${filename}`
|
|
96
|
+
// consola.success(`${url} -> ${url2}`)
|
|
97
|
+
downloadMap.set(url, url2)
|
|
98
|
+
errors.delete(url)
|
|
99
|
+
if (filename.endsWith(".js")) {
|
|
100
|
+
await replace(join("assets", filename), url)
|
|
101
|
+
}
|
|
102
|
+
return url2
|
|
103
|
+
} catch (error) {
|
|
104
|
+
consola.error(error)
|
|
105
|
+
errors.add(url)
|
|
106
|
+
throw error
|
|
51
107
|
}
|
|
52
|
-
const url2 = new URL(`/${filename}`, base).toString()
|
|
53
|
-
downloadMap.set(url, url2)
|
|
54
|
-
return url2
|
|
55
108
|
}
|
|
56
109
|
|
|
57
|
-
async function getReplaceUrl(url: string) {
|
|
110
|
+
async function getReplaceUrl(url: string, source?: string) {
|
|
58
111
|
if (url.startsWith(`href="`)) {
|
|
59
112
|
try {
|
|
60
113
|
const newUrl = url.replace(/^href="/, "http:")
|
|
61
|
-
const replaceUrl = await download(newUrl)
|
|
114
|
+
const replaceUrl = await retry(() => download(newUrl), 4)
|
|
62
115
|
return `href="${replaceUrl}`
|
|
63
116
|
} catch (error) {}
|
|
64
117
|
try {
|
|
65
118
|
const newUrl = url.replace(/^href="/, "https:")
|
|
66
|
-
const replaceUrl = await download(newUrl)
|
|
119
|
+
const replaceUrl = await retry(() => download(newUrl), 4)
|
|
67
120
|
return `href="${replaceUrl}`
|
|
68
121
|
} catch (error) {}
|
|
69
122
|
return url
|
|
70
123
|
}
|
|
124
|
+
if (url.startsWith("from") || url.startsWith("import")) {
|
|
125
|
+
const match = url.match(reg3)
|
|
126
|
+
if (!match) return url
|
|
127
|
+
let url2 = match[2].trim()
|
|
128
|
+
if (!url2.startsWith("http")) {
|
|
129
|
+
if (url2.startsWith("/")) url2 = new URL(url2, source).toString()
|
|
130
|
+
else if (url2.startsWith("./")) url2 = parse(source!).dir + url2.slice(1)
|
|
131
|
+
else if (url2.startsWith("../")) url2 = parse(parse(source!).dir).dir + url2.slice(2)
|
|
132
|
+
else {
|
|
133
|
+
return url
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
const replaceUrl = await retry(() => download(url2), 4)
|
|
137
|
+
if (replaceUrl === url2) return url
|
|
138
|
+
return url.replace(reg3, `$1${replaceUrl.startsWith("/") ? "." : ""}${replaceUrl}$3`)
|
|
139
|
+
}
|
|
71
140
|
try {
|
|
72
|
-
const replaceUrl = await download(url)
|
|
141
|
+
const replaceUrl = await retry(() => download(url), 4)
|
|
73
142
|
return replaceUrl
|
|
74
143
|
} catch (error) {
|
|
75
144
|
return url
|
|
76
145
|
}
|
|
77
146
|
}
|
|
78
147
|
|
|
79
|
-
async function replace(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
const url2 = await getReplaceUrl(url)
|
|
97
|
-
urlsToReplace.push(url2)
|
|
98
|
-
} else {
|
|
99
|
-
urlsToReplace.push(url)
|
|
100
|
-
}
|
|
148
|
+
async function replace(input: string, source?: string) {
|
|
149
|
+
consola.start(`scanning ${input.replace(/\\/g, "/")}`)
|
|
150
|
+
const status = await stat(input)
|
|
151
|
+
if (status.isFile()) {
|
|
152
|
+
const path = parse(input)
|
|
153
|
+
if (path.ext === ".js" || path.ext === ".html" || path.ext === ".css" || path.ext === ".json") {
|
|
154
|
+
const data = await readFile(input, "utf-8")
|
|
155
|
+
const match = data.match(source ? getReg2() : getReg())
|
|
156
|
+
if (!match) return
|
|
157
|
+
const urlsToReplace: string[] = []
|
|
158
|
+
let index = 0
|
|
159
|
+
for (const url of match) {
|
|
160
|
+
if (isAsset(url) || getReg2().test(url)) {
|
|
161
|
+
const url2 = await getReplaceUrl(url, source)
|
|
162
|
+
urlsToReplace.push(url2)
|
|
163
|
+
} else {
|
|
164
|
+
urlsToReplace.push(url)
|
|
101
165
|
}
|
|
102
|
-
const newData = data.replace(reg, () => urlsToReplace.shift()!)
|
|
103
|
-
await writeFile(join(dir, item), newData, "utf-8")
|
|
104
166
|
}
|
|
167
|
+
const newData = data.replace(source ? getReg2() : getReg(), () => urlsToReplace[index++])
|
|
168
|
+
if (source) {
|
|
169
|
+
urlsToReplace.forEach(url => {
|
|
170
|
+
if (!reg4.test(url)) console.log(url)
|
|
171
|
+
})
|
|
172
|
+
}
|
|
173
|
+
await writeFile(input, newData, "utf-8")
|
|
174
|
+
}
|
|
175
|
+
return
|
|
176
|
+
}
|
|
177
|
+
if (status.isDirectory()) {
|
|
178
|
+
const dir2 = await readdir(input)
|
|
179
|
+
for (const item of dir2) {
|
|
180
|
+
await replace(join(input, item))
|
|
105
181
|
}
|
|
106
182
|
}
|
|
107
183
|
}
|
|
108
184
|
|
|
109
185
|
await replace(dir)
|
|
186
|
+
|
|
187
|
+
errors.forEach(url => consola.error(url))
|
|
110
188
|
}
|