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 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 import_removeTailwindCssPreset = require("./utils/removeTailwindCssPreset");
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", "静态文件夹路径").argument("base", "资源地址 BaseUrl").option("-p, --proxy", "是否使用代理").action((dir, base, { proxy }) => (0, import_replaceAssets.replaceAssets)({ base, dir, proxy }));
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": "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",
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,7 @@
1
+ export type AddExpressScriptOptions = {
2
+ pemPath?: string;
3
+ port?: string;
4
+ core?: string;
5
+ localhost?: boolean;
6
+ };
7
+ export declare function addExpressScript({ pemPath, port, core, localhost }?: AddExpressScriptOptions): Promise<string>;
@@ -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;AAoBf,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;AA2ChB,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;",
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,6 @@
1
+ /**
2
+ * 将浏览器中直接复制的 headers 转换为对象
3
+ * @param str 复制的 headers
4
+ * @returns headers 对象
5
+ */
6
+ export declare function getHeaders(): Promise<void>;
@@ -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 reg = /(https?:|href=")\/\/[a-zA-Z0-9\.\-\*_\/\&\=\:\,\%]+/g;
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 = proxy ? new import_https_proxy_agent.HttpsProxyAgent("http://localhost:7890") : void 0;
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
- import_consola.default.start(url);
52
- if (downloadMap.has(url))
53
- return downloadMap.get(url);
54
- if (url.startsWith(base) || new URL(url).hostname === "private-alipayobjects.alipay.com") {
55
- downloadMap.set(url, url);
56
- return url;
57
- }
58
- const { ext } = (0, import_path.parse)(new URL(url).pathname);
59
- let response;
60
- let filename;
61
- if (ext) {
62
- filename = `${(0, import_md5.default)(url)}${ext}`;
63
- } else {
64
- response = await fetch(url, { agent: url.includes("github") ? agent : void 0 });
65
- filename = `${(0, import_md5.default)(url)}.${response.headers.get("content-type")?.split("/")[1].split("+")[0]}`;
66
- }
67
- const dir2 = await (0, import_promises.readdir)("assets");
68
- if (!dir2.includes(filename)) {
69
- response ??= await fetch(url, { agent: url.includes("github") ? agent : void 0 });
70
- const file = (0, import_fs.createWriteStream)((0, import_path.join)("assets", filename));
71
- await new Promise((resolve, reject) => import_stream.Readable.from(response.body).pipe(file).on("finish", resolve).on("error", reject));
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(dir2) {
101
- const dir22 = await (0, import_promises.readdir)(dir2);
102
- for (const item of dir22) {
103
- const status = await (0, import_promises.stat)((0, import_path.join)(dir2, item));
104
- if (status.isDirectory()) {
105
- await replace((0, import_path.join)(dir2, item));
106
- continue;
107
- }
108
- if (status.isFile()) {
109
- const path = (0, import_path.parse)(item);
110
- if (path.ext === ".js" || path.ext === ".html" || path.ext === ".css" || path.ext === ".json") {
111
- const data = await (0, import_promises.readFile)((0, import_path.join)(dir2, item), "utf-8");
112
- const match = data.match(reg);
113
- if (!match)
114
- continue;
115
- const urlsToReplace = [];
116
- for (const url of match) {
117
- if ((0, import_isAsset.isAsset)(url)) {
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\nconst reg = /(https?:|href=\")\\/\\/[a-zA-Z0-9\\.\\-\\*_\\/\\&\\=\\:\\,\\%]+/g\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 await mkdir(\"assets\", { recursive: true })\r\n\r\n const agent = proxy ? new HttpsProxyAgent(\"http://localhost:7890\") : undefined\r\n\r\n const { default: fetch } = await import(\"node-fetch\")\r\n\r\n const downloadMap: Map<string, string> = new Map()\r\n\r\n async function download(url: string) {\r\n consola.start(url)\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 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, { agent: url.includes(\"github\") ? agent : undefined })\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, { agent: url.includes(\"github\") ? agent : undefined })\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 = new URL(`/${filename}`, base).toString()\r\n downloadMap.set(url, url2)\r\n return url2\r\n }\r\n\r\n async function getReplaceUrl(url: string) {\r\n if (url.startsWith(`href=\"`)) {\r\n try {\r\n const newUrl = url.replace(/^href=\"/, \"http:\")\r\n const replaceUrl = await download(newUrl)\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 download(newUrl)\r\n return `href=\"${replaceUrl}`\r\n } catch (error) {}\r\n return url\r\n }\r\n try {\r\n const replaceUrl = await download(url)\r\n return replaceUrl\r\n } catch (error) {\r\n return url\r\n }\r\n }\r\n\r\n async function replace(dir: string) {\r\n const dir2 = await readdir(dir)\r\n for (const item of dir2) {\r\n const status = await stat(join(dir, item))\r\n if (status.isDirectory()) {\r\n await replace(join(dir, item))\r\n continue\r\n }\r\n if (status.isFile()) {\r\n const path = parse(item)\r\n if (path.ext === \".js\" || path.ext === \".html\" || path.ext === \".css\" || path.ext === \".json\") {\r\n const data = await readFile(join(dir, item), \"utf-8\")\r\n const match = data.match(reg)\r\n if (!match) continue\r\n const urlsToReplace: string[] = []\r\n for (const url of match) {\r\n if (isAsset(url)) {\r\n const url2 = await getReplaceUrl(url)\r\n urlsToReplace.push(url2)\r\n } else {\r\n urlsToReplace.push(url)\r\n }\r\n }\r\n const newData = data.replace(reg, () => urlsToReplace.shift()!)\r\n await writeFile(join(dir, item), newData, \"utf-8\")\r\n }\r\n }\r\n }\r\n }\r\n\r\n await replace(dir)\r\n}\r\n"],
5
- "mappings": "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",
6
- "names": ["consola", "md5", "dir", "dir2"]
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.40.1",
3
+ "version": "1.40.2",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": {
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 { removeTailwindCssPreflight } from "./utils/removeTailwindCssPreset"
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
- .argument("base", "资源地址 BaseUrl")
208
+ .option("-b, --base <base>", "资源地址 BaseUrl")
207
209
  .option("-p, --proxy", "是否使用代理")
208
- .action((dir, base, { proxy }) => replaceAssets({ base, dir, proxy }))
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.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))
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("removeTailwindCssPreflight").alias("rtp").description("删除 tailwindcss 的 preflight.css 中的 img 和 video 样式").action(actionWithBackup(() => removeTailwindCssPreflight()))
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
- const reg = /(https?:|href=")\/\/[a-zA-Z0-9\.\-\*_\/\&\=\:\,\%]+/g
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 = proxy ? new HttpsProxyAgent("http://localhost:7890") : undefined
37
+ const agent = new HttpsProxyAgent("http://localhost:7890")
38
+
39
+ const { default: fetch, Headers } = await import("node-fetch")
25
40
 
26
- const { default: fetch } = await import("node-fetch")
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
- consola.start(url)
32
- if (downloadMap.has(url)) return downloadMap.get(url)!
33
- if (url.startsWith(base) || new URL(url).hostname === "private-alipayobjects.alipay.com") {
34
- downloadMap.set(url, url)
35
- return url
36
- }
37
- const { ext } = parse(new URL(url).pathname)
38
- let response: Response
39
- let filename: string
40
- if (ext) {
41
- filename = `${md5(url)}${ext}`
42
- } else {
43
- response = await fetch(url, { agent: url.includes("github") ? agent : undefined })
44
- filename = `${md5(url)}.${response.headers.get("content-type")?.split("/")[1].split("+")[0]}`
45
- }
46
- const dir = await readdir("assets")
47
- if (!dir.includes(filename)) {
48
- response ??= await fetch(url, { agent: url.includes("github") ? agent : undefined })
49
- const file = createWriteStream(join("assets", filename))
50
- await new Promise((resolve, reject) => Readable.from(response.body!).pipe(file).on("finish", resolve).on("error", reject))
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(dir: string) {
80
- const dir2 = await readdir(dir)
81
- for (const item of dir2) {
82
- const status = await stat(join(dir, item))
83
- if (status.isDirectory()) {
84
- await replace(join(dir, item))
85
- continue
86
- }
87
- if (status.isFile()) {
88
- const path = parse(item)
89
- if (path.ext === ".js" || path.ext === ".html" || path.ext === ".css" || path.ext === ".json") {
90
- const data = await readFile(join(dir, item), "utf-8")
91
- const match = data.match(reg)
92
- if (!match) continue
93
- const urlsToReplace: string[] = []
94
- for (const url of match) {
95
- if (isAsset(url)) {
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
  }