zixulu 1.63.3 → 1.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -63,6 +63,7 @@ var import_upgradeDependency = require("./utils/upgradeDependency");
63
63
  var import_vite = require("./utils/vite");
64
64
  var import_actionWithBackup = require("./utils/actionWithBackup");
65
65
  var import_addApi = require("./utils/addApi");
66
+ var import_addBuildDocker = require("./utils/addBuildDocker");
66
67
  var import_addStartScript = require("./utils/addStartScript");
67
68
  var import_addSyncPackageScript = require("./utils/addSyncPackageScript");
68
69
  var import_addZipDist = require("./utils/addZipDist");
@@ -204,5 +205,6 @@ program.command("set-env").description("设置环境变量").argument("key", "
204
205
  program.command("add-api").description("添加 api 文件").argument("type", "api 类型").option("-a, --api <api>", "api 文件夹路径").option("-h, --hook <hook>", "hook 文件夹路径").action(async (type, { api, hook }) => (0, import_addApi.addApi)({ type, api, hook }));
205
206
  program.command("rslib").description("rslib 配置").action(import_rslib.rslib);
206
207
  program.command("init-node").description("初始化 node 项目").action(import_initNode.initNode);
208
+ program.command("add-build-docker").alias("abd").description("添加构建 docker 镜像的脚本").action(import_addBuildDocker.addBuildDocker);
207
209
  program.parse();
208
210
  //# 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\nimport { resolve } from \"path\"\nimport { Command } from \"commander\"\nimport consola from \"consola\"\nimport { emailReg } from \"deepsea-tools\"\nimport { setDefaultOptions } from \"soda-nodejs\"\n\nimport { CommitType } from \"@constant/index\"\n\nimport { addTailwind } from \"@src/utils/addTailwind\"\n\nimport { addAntd } from \"@utils/addAntd\"\nimport { addGitignore } from \"@utils/addGitignore\"\nimport { addFolderPathAlias, replacePathAlias } from \"@utils/addPathAlias\"\nimport { addPrettier } from \"@utils/addPrettier\"\nimport { addPrisma } from \"@utils/addPrisma\"\nimport { arrowToFunction } from \"@utils/arrowToFunction\"\nimport { betaVersion } from \"@utils/betaVersion\"\nimport { checkType } from \"@utils/checkType\"\nimport { code2Snippet } from \"@utils/code2Snippet\"\nimport { downloadLatestSoftware } from \"@utils/downloadLatestSoftware\"\nimport { downloadNpm } from \"@utils/downloadNpm\"\nimport { generatePrisma } from \"@utils/generatePrisma\"\nimport { initProject } from \"@utils/initProject\"\nimport { interfaceToType } from \"@utils/interfaceToType\"\nimport { killProcessByPort } from \"@utils/killProcessByPort\"\nimport { next } from \"@utils/next\"\nimport { pnpm } from \"@utils/pnpm\"\nimport { reinstall } from \"@utils/reinstall\"\nimport { removeComment } from \"@utils/removeComment\"\nimport { removeESLint } from \"@utils/removeESLint\"\nimport { removeFileOrFolderFromGit } from \"@utils/removeFileOrFolderFromGit\"\nimport { rollup } from \"@utils/rollup\"\nimport { rsbuild } from \"@utils/rsbuild\"\nimport { setFatherConfig } from \"@utils/setFatherConfig\"\nimport { setGitProxy } from \"@utils/setGitProxy\"\nimport { setRegistry } from \"@utils/setRegistry\"\nimport { setShellProxy } from \"@utils/setShellProxy\"\nimport { sortPackageJson } from \"@utils/sortPackageJson\"\nimport { syncVscode } from \"@utils/syncVscode\"\nimport { upgradeDependency } from \"@utils/upgradeDependency\"\nimport { vite } from \"@utils/vite\"\n\nimport { actionWithBackup } from \"./utils/actionWithBackup\"\nimport { addApi } from \"./utils/addApi\"\nimport { addStartScript } from \"./utils/addStartScript\"\nimport { addSyncPackageScript } from \"./utils/addSyncPackageScript\"\nimport { addZipDist } from \"./utils/addZipDist\"\nimport { createBrowserlistrc } from \"./utils/createBrowserlistrc\"\nimport { getCommitMessage } from \"./utils/getCommitMessage\"\nimport { getHeaders } from \"./utils/getHeaders\"\nimport { initNode } from \"./utils/initNode\"\nimport { installDocker } from \"./utils/installDocker\"\nimport { readPackageJsonSync } from \"./utils/readPackageJsonSync\"\nimport { removeLock } from \"./utils/removeLock\"\nimport { replaceAssets } from \"./utils/replaceAssets\"\nimport { CommitAuthor, replaceCommitAuthor } from \"./utils/replaceCommitAuthor\"\nimport { rslib } from \"./utils/rslib\"\nimport { serverToAction } from \"./utils/serverToAction\"\nimport { setBun } from \"./utils/setBun\"\nimport { setDockerRegistry } from \"./utils/setDockerRegistry\"\nimport { setEnv } from \"./utils/setEnv\"\nimport { setGlobalConfig } from \"./utils/setGlobalConfig\"\nimport { syncEditorSetting } from \"./utils/syncEditorSetting\"\nimport { tailwindPatch } from \"./utils/tailwindPatch\"\nimport { tar } from \"./utils/tar\"\nimport { test } from \"./utils/test\"\nimport { upgradeRsbuild } from \"./utils/upgradeRsbuild\"\nimport { upgradeTailwind } from \"./utils/upgradeTailwind\"\nimport { upgradeWorkspaceDependceny } from \"./utils/upgradeWorkspaceDependceny\"\nimport { winget } from \"./utils/winget\"\n\nsetDefaultOptions({\n shell: true,\n stdio: \"inherit\",\n})\n\nconst program = new Command()\n\nconst pkg = readPackageJsonSync(resolve(__dirname, \"../\"))\n\nprogram.name(\"格数科技\").version(pkg.version)\n\nprogram\n .command(\"eslint\")\n .description(\"删除 ESLint 相关配置\")\n .action(actionWithBackup(removeESLint, getCommitMessage(CommitType.feature, \"删除 ESLint 相关配置\")))\n\nprogram\n .command(\"prettier\")\n .description(\"添加 prettier 配置\")\n .action(actionWithBackup(addPrettier, getCommitMessage(CommitType.feature, \"添加 prettier 配置文件\")))\n\nprogram\n .command(\"vite\")\n .description(\"初始化 vite 配置\")\n .action(actionWithBackup(vite, getCommitMessage(CommitType.feature, \"初始化 vite 配置\")))\n\nprogram\n .command(\"rsbuild\")\n .description(\"初始化 rsbuild 配置\")\n .action(actionWithBackup(rsbuild, getCommitMessage(CommitType.feature, \"初始化 rsbuild 配置\")))\n\nprogram\n .command(\"next\")\n .description(\"初始化 next 配置\")\n .action(actionWithBackup(next, getCommitMessage(CommitType.feature, \"初始化 next 配置\")))\n\nprogram\n .command(\"tailwind\")\n .description(\"添加 tailwind 配置\")\n .action(actionWithBackup(addTailwind, getCommitMessage(CommitType.feature, \"添加 tailwind 配置\")))\n\nprogram\n .command(\"remove-comment\")\n .description(\"删除文件注释\")\n .argument(\"path\", \"文件路径\")\n .action(actionWithBackup(removeComment, getCommitMessage(CommitType.feature, \"删除文件注释\")))\n\nprogram\n .command(\"father\")\n .alias(\"fs\")\n .description(\"初始化 father 项目配置\")\n .action(actionWithBackup(setFatherConfig, getCommitMessage(CommitType.feature, \"初始化 father 项目配置\")))\n\nprogram\n .command(\"upgrade-dependency\")\n .alias(\"ud\")\n .description(\"升级项目依赖\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async optios => {\n setGlobalConfig(optios)\n await actionWithBackup(() => upgradeDependency())()\n })\n\nprogram\n .command(\"upgrade-workspace-dependency\")\n .alias(\"uwd\")\n .description(\"升级工作区项目依赖\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async options => {\n setGlobalConfig(options)\n await upgradeWorkspaceDependceny()\n })\n\nprogram.command(\"registry\").description(\"设置 npm registry\").action(setRegistry)\n\nprogram\n .command(\"sort-package-json\")\n .alias(\"spj\")\n .description(\"对 package.json 中的依赖进行排序\")\n .action(actionWithBackup(sortPackageJson, getCommitMessage(CommitType.feature, \"对 package.json 中的依赖进行排序\")))\n\nprogram\n .command(\"arrow-to-function\")\n .alias(\"a2f\")\n .description(\"将箭头函数组件转换为函数组件\")\n .action(actionWithBackup(arrowToFunction, getCommitMessage(CommitType.feature, \"将箭头函数组件转换为函数组件\")))\n\nprogram\n .command(\"interface-to-type\")\n .alias(\"i2t\")\n .description(\"将 interface 转换为 type\")\n .action(actionWithBackup(interfaceToType, getCommitMessage(CommitType.feature, \"将 interface 转换为 type\")))\n\nprogram.command(\"gitignore\").description(\"添加 .gitignore 配置\").action(actionWithBackup(addGitignore))\n\nprogram.command(\"git-proxy\").alias(\"gp\").description(\"设置 git 代理\").action(setGitProxy)\n\nprogram.command(\"shell-proxy\").alias(\"sp\").description(\"设置 Shell 代理\").action(setShellProxy)\n\nprogram.command(\"download-software\").alias(\"ds\").description(\"下载最新版软件\").action(downloadLatestSoftware)\n\nprogram.command(\"vscode\").alias(\"vsc\").description(\"同步 VS Code 配置\").action(syncVscode)\n\nprogram.command(\"kill-port\").description(\"根据端口号杀死进程\").argument(\"port\", \"端口号\").action(killProcessByPort)\n\nprogram.command(\"rm-git\").argument(\"path\", \"要移除的文件或文件夹\").action(removeFileOrFolderFromGit)\n\nprogram.command(\"npm-download\").alias(\"nd\").description(\"下载 npm 包\").argument(\"name\", \"包名\").action(downloadNpm)\n\nprogram\n .command(\"prisma\")\n .description(\"添加 prisma 配置\")\n .action(actionWithBackup(() => addPrisma(), getCommitMessage(CommitType.feature, \"添加 prisma 配置\")))\n\nprogram.command(\"prisma-generate\").alias(\"pg\").description(\"生成 prisma client\").action(generatePrisma)\n\nprogram\n .command(\"antd\")\n .description(\"添加 antd 配置\")\n .action(actionWithBackup(addAntd, getCommitMessage(CommitType.feature, \"添加 antd 配置\")))\n\nprogram\n .command(\"init\")\n .description(\"初始化项目\")\n .action(actionWithBackup(initProject, getCommitMessage(CommitType.feature, \"初始化项目\")))\n\nprogram.command(\"tsc\").description(\"类型检查\").action(checkType)\n\nprogram.command(\"beta-version\").alias(\"bv\").description(\"设置版本号\").action(betaVersion)\n\nprogram\n .command(\"reinstall\")\n .alias(\"ri\")\n .description(\"重新安装依赖\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .action(async options => {\n setGlobalConfig(options)\n reinstall()\n })\n\nprogram.command(\"snippet\").alias(\"sn\").description(\"生成 vscode snippet\").argument(\"path\", \"文件路径\").action(code2Snippet)\n\nprogram.command(\"add-alias\").alias(\"aa\").description(\"添加路径别名\").action(actionWithBackup(addFolderPathAlias))\n\nprogram.command(\"replace-alias\").alias(\"ra\").description(\"替换路径别名\").action(actionWithBackup(replacePathAlias))\n\nprogram.command(\"pnpm\").description(\"设置 pnpm 配置\").action(pnpm)\n\nprogram.command(\"rollup\").description(\"rollup 打包\").action(rollup)\n\nprogram.command(\"browserlistrc\").alias(\"blr\").description(\"添加 browserlistrc 配置\").action(createBrowserlistrc)\n\nprogram\n .command(\"asset\")\n .description(\"替换文件中的资源地址\")\n .argument(\"input\", \"静态文件夹路径\")\n .option(\"-b, --base <base>\", \"资源地址 BaseUrl\")\n .option(\"-o, --output <output>\", \"输出文件夹\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action((input, { proxy, base, output }) => replaceAssets({ base, input, proxy, output }))\n\nprogram\n .command(\"upgrade-rsbuild\")\n .alias(\"ur\")\n .description(\"升级 rsbuild\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async options => {\n setGlobalConfig(options)\n await actionWithBackup(() => upgradeRsbuild())()\n })\n\nprogram\n .command(\"add-start-script\")\n .alias(\"ass\")\n .argument(\"type\", \"启动脚本类型:express、next\")\n .option(\"-p, --port <port>\", \"端口地址\")\n .option(\"-c, --core <core>\", \"实例数\")\n .option(\"-h, --hostname <hostname>\", \"主机名\")\n .option(\"-pem, --pemPath <pemPath>\", \"证书目录\")\n .description(\"添加 express 启动脚本\")\n .action(async (type, { port, core, pemPath }) => actionWithBackup(addStartScript)({ type, port, core, pemPath }))\n\nprogram.command(\"headers\").description(\"将浏览器中直接复制的 headers 转换为对象\").action(getHeaders)\n\nprogram\n .command(\"add-zip-dist\")\n .alias(\"azd\")\n .description(\"添加将 dist 压缩的脚本\")\n .action(actionWithBackup(() => addZipDist({ install: true })))\n\nprogram\n .command(\"upgrade-tailwind\")\n .alias(\"ut\")\n .description(\"升级 tailwind\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async options => {\n setGlobalConfig(options)\n await actionWithBackup(() => upgradeTailwind())()\n })\n\nprogram.command(\"bun\").description(\"设置 bun\").action(setBun)\n\nprogram.command(\"tailwind-patch\").alias(\"tp\").description(\"tailwind 补丁\").action(tailwindPatch)\n\nprogram\n .command(\"remove-lock\")\n .alias(\"rl\")\n .description(\"删除 lock 文件\")\n .action(actionWithBackup(() => removeLock()))\n\nprogram\n .command(\"rename-commit-author\")\n .alias(\"rca\")\n .description(\"重写 Git 提交历史的作者信息\")\n .arguments(\"[infos...]\")\n .action(async (infos: string[]) => {\n let prev: CommitAuthor | undefined\n let next: CommitAuthor | undefined\n infos = infos.slice(0, 2)\n function getUsernameAndEmail(info: string): CommitAuthor {\n const index = info.indexOf(\":\")\n if (index === -1) {\n if (emailReg.test(info)) return { email: info }\n return { name: info }\n }\n return {\n name: info.slice(0, index),\n email: info.slice(index + 1),\n }\n }\n if (infos.length === 0) throw new Error(\"请输入作者信息!\")\n else if (infos.length === 1) next = getUsernameAndEmail(infos[0])\n else {\n prev = getUsernameAndEmail(infos[0])\n next = getUsernameAndEmail(infos[1])\n }\n await replaceCommitAuthor({ prev, next })\n })\n\nprogram.command(\"install-docker\").alias(\"id\").description(\"安装 Docker\").action(installDocker)\n\nprogram.command(\"set-docker-registry\").alias(\"sdr\").description(\"设置 Docker 镜像地址\").action(setDockerRegistry)\n\nprogram\n .command(\"add-sync\")\n .alias(\"asp\")\n .option(\"-m, --monorepo\", \"是否是 monorepo\")\n .description(\"添加同步包脚本\")\n .action(actionWithBackup(addSyncPackageScript))\n\nprogram\n .command(\"winget\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .description(\"使用 winget 更新软件\")\n .action(async options => {\n setGlobalConfig(options)\n await winget()\n })\n\nprogram\n .command(\"test\")\n .description(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n .action(async () => {\n consola.warn(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n consola.warn(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n consola.warn(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n await test()\n })\n\nprogram.command(\"sync-editor\").alias(\"se\").description(\"同步编辑器配置\").action(syncEditorSetting)\n\nprogram.command(\"server-to-action\").alias(\"sta\").description(\"将 server 文件夹下的文件转换为 action\").action(serverToAction)\n\nprogram\n .command(\"tar\")\n .description(\"压缩文件\")\n .argument(\"input\", \"输入文件夹\")\n .option(\"-o, --output <output>\", \"输出文件\")\n .action(async (input, { output }) => tar({ input, output }))\n\nprogram\n .command(\"set-env\")\n .description(\"设置环境变量\")\n .argument(\"key\", \"环境变量 key\")\n .argument(\"[value]\", \"环境变量 value\")\n .action(async (key, value) => {\n await setEnv(key, value)\n consola.success(\"设置环境变量成功\")\n })\n\nprogram\n .command(\"add-api\")\n .description(\"添加 api 文件\")\n .argument(\"type\", \"api 类型\")\n .option(\"-a, --api <api>\", \"api 文件夹路径\")\n .option(\"-h, --hook <hook>\", \"hook 文件夹路径\")\n .action(async (type, { api, hook }) => addApi({ type, api, hook }))\n\nprogram.command(\"rslib\").description(\"rslib 配置\").action(rslib)\n\nprogram.command(\"init-node\").description(\"初始化 node 项目\").action(initNode)\n\nprogram.parse()\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\nimport { resolve } from \"path\"\nimport { Command } from \"commander\"\nimport consola from \"consola\"\nimport { emailReg } from \"deepsea-tools\"\nimport { setDefaultOptions } from \"soda-nodejs\"\n\nimport { CommitType } from \"@constant/index\"\n\nimport { addTailwind } from \"@src/utils/addTailwind\"\n\nimport { addAntd } from \"@utils/addAntd\"\nimport { addGitignore } from \"@utils/addGitignore\"\nimport { addFolderPathAlias, replacePathAlias } from \"@utils/addPathAlias\"\nimport { addPrettier } from \"@utils/addPrettier\"\nimport { addPrisma } from \"@utils/addPrisma\"\nimport { arrowToFunction } from \"@utils/arrowToFunction\"\nimport { betaVersion } from \"@utils/betaVersion\"\nimport { checkType } from \"@utils/checkType\"\nimport { code2Snippet } from \"@utils/code2Snippet\"\nimport { downloadLatestSoftware } from \"@utils/downloadLatestSoftware\"\nimport { downloadNpm } from \"@utils/downloadNpm\"\nimport { generatePrisma } from \"@utils/generatePrisma\"\nimport { initProject } from \"@utils/initProject\"\nimport { interfaceToType } from \"@utils/interfaceToType\"\nimport { killProcessByPort } from \"@utils/killProcessByPort\"\nimport { next } from \"@utils/next\"\nimport { pnpm } from \"@utils/pnpm\"\nimport { reinstall } from \"@utils/reinstall\"\nimport { removeComment } from \"@utils/removeComment\"\nimport { removeESLint } from \"@utils/removeESLint\"\nimport { removeFileOrFolderFromGit } from \"@utils/removeFileOrFolderFromGit\"\nimport { rollup } from \"@utils/rollup\"\nimport { rsbuild } from \"@utils/rsbuild\"\nimport { setFatherConfig } from \"@utils/setFatherConfig\"\nimport { setGitProxy } from \"@utils/setGitProxy\"\nimport { setRegistry } from \"@utils/setRegistry\"\nimport { setShellProxy } from \"@utils/setShellProxy\"\nimport { sortPackageJson } from \"@utils/sortPackageJson\"\nimport { syncVscode } from \"@utils/syncVscode\"\nimport { upgradeDependency } from \"@utils/upgradeDependency\"\nimport { vite } from \"@utils/vite\"\n\nimport { actionWithBackup } from \"./utils/actionWithBackup\"\nimport { addApi } from \"./utils/addApi\"\nimport { addBuildDocker } from \"./utils/addBuildDocker\"\nimport { addStartScript } from \"./utils/addStartScript\"\nimport { addSyncPackageScript } from \"./utils/addSyncPackageScript\"\nimport { addZipDist } from \"./utils/addZipDist\"\nimport { backupFirst } from \"./utils/backupFirst\"\nimport { createBrowserlistrc } from \"./utils/createBrowserlistrc\"\nimport { getCommitMessage } from \"./utils/getCommitMessage\"\nimport { getHeaders } from \"./utils/getHeaders\"\nimport { initNode } from \"./utils/initNode\"\nimport { installDocker } from \"./utils/installDocker\"\nimport { readPackageJsonSync } from \"./utils/readPackageJsonSync\"\nimport { removeLock } from \"./utils/removeLock\"\nimport { replaceAssets } from \"./utils/replaceAssets\"\nimport { CommitAuthor, replaceCommitAuthor } from \"./utils/replaceCommitAuthor\"\nimport { rslib } from \"./utils/rslib\"\nimport { serverToAction } from \"./utils/serverToAction\"\nimport { setBun } from \"./utils/setBun\"\nimport { setDockerRegistry } from \"./utils/setDockerRegistry\"\nimport { setEnv } from \"./utils/setEnv\"\nimport { setGlobalConfig } from \"./utils/setGlobalConfig\"\nimport { syncEditorSetting } from \"./utils/syncEditorSetting\"\nimport { tailwindPatch } from \"./utils/tailwindPatch\"\nimport { tar } from \"./utils/tar\"\nimport { test } from \"./utils/test\"\nimport { upgradeRsbuild } from \"./utils/upgradeRsbuild\"\nimport { upgradeTailwind } from \"./utils/upgradeTailwind\"\nimport { upgradeWorkspaceDependceny } from \"./utils/upgradeWorkspaceDependceny\"\nimport { winget } from \"./utils/winget\"\n\nsetDefaultOptions({\n shell: true,\n stdio: \"inherit\",\n})\n\nconst program = new Command()\n\nconst pkg = readPackageJsonSync(resolve(__dirname, \"../\"))\n\nprogram.name(\"格数科技\").version(pkg.version)\n\nprogram\n .command(\"eslint\")\n .description(\"删除 ESLint 相关配置\")\n .action(actionWithBackup(removeESLint, getCommitMessage(CommitType.feature, \"删除 ESLint 相关配置\")))\n\nprogram\n .command(\"prettier\")\n .description(\"添加 prettier 配置\")\n .action(actionWithBackup(addPrettier, getCommitMessage(CommitType.feature, \"添加 prettier 配置文件\")))\n\nprogram\n .command(\"vite\")\n .description(\"初始化 vite 配置\")\n .action(actionWithBackup(vite, getCommitMessage(CommitType.feature, \"初始化 vite 配置\")))\n\nprogram\n .command(\"rsbuild\")\n .description(\"初始化 rsbuild 配置\")\n .action(actionWithBackup(rsbuild, getCommitMessage(CommitType.feature, \"初始化 rsbuild 配置\")))\n\nprogram\n .command(\"next\")\n .description(\"初始化 next 配置\")\n .action(actionWithBackup(next, getCommitMessage(CommitType.feature, \"初始化 next 配置\")))\n\nprogram\n .command(\"tailwind\")\n .description(\"添加 tailwind 配置\")\n .action(actionWithBackup(addTailwind, getCommitMessage(CommitType.feature, \"添加 tailwind 配置\")))\n\nprogram\n .command(\"remove-comment\")\n .description(\"删除文件注释\")\n .argument(\"path\", \"文件路径\")\n .action(actionWithBackup(removeComment, getCommitMessage(CommitType.feature, \"删除文件注释\")))\n\nprogram\n .command(\"father\")\n .alias(\"fs\")\n .description(\"初始化 father 项目配置\")\n .action(actionWithBackup(setFatherConfig, getCommitMessage(CommitType.feature, \"初始化 father 项目配置\")))\n\nprogram\n .command(\"upgrade-dependency\")\n .alias(\"ud\")\n .description(\"升级项目依赖\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async optios => {\n setGlobalConfig(optios)\n await actionWithBackup(() => upgradeDependency())()\n })\n\nprogram\n .command(\"upgrade-workspace-dependency\")\n .alias(\"uwd\")\n .description(\"升级工作区项目依赖\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async options => {\n setGlobalConfig(options)\n await upgradeWorkspaceDependceny()\n })\n\nprogram.command(\"registry\").description(\"设置 npm registry\").action(setRegistry)\n\nprogram\n .command(\"sort-package-json\")\n .alias(\"spj\")\n .description(\"对 package.json 中的依赖进行排序\")\n .action(actionWithBackup(sortPackageJson, getCommitMessage(CommitType.feature, \"对 package.json 中的依赖进行排序\")))\n\nprogram\n .command(\"arrow-to-function\")\n .alias(\"a2f\")\n .description(\"将箭头函数组件转换为函数组件\")\n .action(actionWithBackup(arrowToFunction, getCommitMessage(CommitType.feature, \"将箭头函数组件转换为函数组件\")))\n\nprogram\n .command(\"interface-to-type\")\n .alias(\"i2t\")\n .description(\"将 interface 转换为 type\")\n .action(actionWithBackup(interfaceToType, getCommitMessage(CommitType.feature, \"将 interface 转换为 type\")))\n\nprogram.command(\"gitignore\").description(\"添加 .gitignore 配置\").action(actionWithBackup(addGitignore))\n\nprogram.command(\"git-proxy\").alias(\"gp\").description(\"设置 git 代理\").action(setGitProxy)\n\nprogram.command(\"shell-proxy\").alias(\"sp\").description(\"设置 Shell 代理\").action(setShellProxy)\n\nprogram.command(\"download-software\").alias(\"ds\").description(\"下载最新版软件\").action(downloadLatestSoftware)\n\nprogram.command(\"vscode\").alias(\"vsc\").description(\"同步 VS Code 配置\").action(syncVscode)\n\nprogram.command(\"kill-port\").description(\"根据端口号杀死进程\").argument(\"port\", \"端口号\").action(killProcessByPort)\n\nprogram.command(\"rm-git\").argument(\"path\", \"要移除的文件或文件夹\").action(removeFileOrFolderFromGit)\n\nprogram.command(\"npm-download\").alias(\"nd\").description(\"下载 npm 包\").argument(\"name\", \"包名\").action(downloadNpm)\n\nprogram\n .command(\"prisma\")\n .description(\"添加 prisma 配置\")\n .action(actionWithBackup(() => addPrisma(), getCommitMessage(CommitType.feature, \"添加 prisma 配置\")))\n\nprogram.command(\"prisma-generate\").alias(\"pg\").description(\"生成 prisma client\").action(generatePrisma)\n\nprogram\n .command(\"antd\")\n .description(\"添加 antd 配置\")\n .action(actionWithBackup(addAntd, getCommitMessage(CommitType.feature, \"添加 antd 配置\")))\n\nprogram\n .command(\"init\")\n .description(\"初始化项目\")\n .action(actionWithBackup(initProject, getCommitMessage(CommitType.feature, \"初始化项目\")))\n\nprogram.command(\"tsc\").description(\"类型检查\").action(checkType)\n\nprogram.command(\"beta-version\").alias(\"bv\").description(\"设置版本号\").action(betaVersion)\n\nprogram\n .command(\"reinstall\")\n .alias(\"ri\")\n .description(\"重新安装依赖\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .action(async options => {\n setGlobalConfig(options)\n reinstall()\n })\n\nprogram.command(\"snippet\").alias(\"sn\").description(\"生成 vscode snippet\").argument(\"path\", \"文件路径\").action(code2Snippet)\n\nprogram.command(\"add-alias\").alias(\"aa\").description(\"添加路径别名\").action(actionWithBackup(addFolderPathAlias))\n\nprogram.command(\"replace-alias\").alias(\"ra\").description(\"替换路径别名\").action(actionWithBackup(replacePathAlias))\n\nprogram.command(\"pnpm\").description(\"设置 pnpm 配置\").action(pnpm)\n\nprogram.command(\"rollup\").description(\"rollup 打包\").action(rollup)\n\nprogram.command(\"browserlistrc\").alias(\"blr\").description(\"添加 browserlistrc 配置\").action(createBrowserlistrc)\n\nprogram\n .command(\"asset\")\n .description(\"替换文件中的资源地址\")\n .argument(\"input\", \"静态文件夹路径\")\n .option(\"-b, --base <base>\", \"资源地址 BaseUrl\")\n .option(\"-o, --output <output>\", \"输出文件夹\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action((input, { proxy, base, output }) => replaceAssets({ base, input, proxy, output }))\n\nprogram\n .command(\"upgrade-rsbuild\")\n .alias(\"ur\")\n .description(\"升级 rsbuild\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async options => {\n setGlobalConfig(options)\n await actionWithBackup(() => upgradeRsbuild())()\n })\n\nprogram\n .command(\"add-start-script\")\n .alias(\"ass\")\n .argument(\"type\", \"启动脚本类型:express、next\")\n .option(\"-p, --port <port>\", \"端口地址\")\n .option(\"-c, --core <core>\", \"实例数\")\n .option(\"-h, --hostname <hostname>\", \"主机名\")\n .option(\"-pem, --pemPath <pemPath>\", \"证书目录\")\n .description(\"添加 express 启动脚本\")\n .action(async (type, { port, core, pemPath }) => actionWithBackup(addStartScript)({ type, port, core, pemPath }))\n\nprogram.command(\"headers\").description(\"将浏览器中直接复制的 headers 转换为对象\").action(getHeaders)\n\nprogram\n .command(\"add-zip-dist\")\n .alias(\"azd\")\n .description(\"添加将 dist 压缩的脚本\")\n .action(actionWithBackup(() => addZipDist({ install: true })))\n\nprogram\n .command(\"upgrade-tailwind\")\n .alias(\"ut\")\n .description(\"升级 tailwind\")\n .option(\"-r, --registry <registry>\", \"npm 源地址,可以是 npm、taobao、tencent 或者自定义地址\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .action(async options => {\n setGlobalConfig(options)\n await actionWithBackup(() => upgradeTailwind())()\n })\n\nprogram.command(\"bun\").description(\"设置 bun\").action(setBun)\n\nprogram.command(\"tailwind-patch\").alias(\"tp\").description(\"tailwind 补丁\").action(tailwindPatch)\n\nprogram\n .command(\"remove-lock\")\n .alias(\"rl\")\n .description(\"删除 lock 文件\")\n .action(actionWithBackup(() => removeLock()))\n\nprogram\n .command(\"rename-commit-author\")\n .alias(\"rca\")\n .description(\"重写 Git 提交历史的作者信息\")\n .arguments(\"[infos...]\")\n .action(async (infos: string[]) => {\n let prev: CommitAuthor | undefined\n let next: CommitAuthor | undefined\n infos = infos.slice(0, 2)\n function getUsernameAndEmail(info: string): CommitAuthor {\n const index = info.indexOf(\":\")\n if (index === -1) {\n if (emailReg.test(info)) return { email: info }\n return { name: info }\n }\n return {\n name: info.slice(0, index),\n email: info.slice(index + 1),\n }\n }\n if (infos.length === 0) throw new Error(\"请输入作者信息!\")\n else if (infos.length === 1) next = getUsernameAndEmail(infos[0])\n else {\n prev = getUsernameAndEmail(infos[0])\n next = getUsernameAndEmail(infos[1])\n }\n await replaceCommitAuthor({ prev, next })\n })\n\nprogram.command(\"install-docker\").alias(\"id\").description(\"安装 Docker\").action(installDocker)\n\nprogram.command(\"set-docker-registry\").alias(\"sdr\").description(\"设置 Docker 镜像地址\").action(setDockerRegistry)\n\nprogram\n .command(\"add-sync\")\n .alias(\"asp\")\n .option(\"-m, --monorepo\", \"是否是 monorepo\")\n .description(\"添加同步包脚本\")\n .action(actionWithBackup(addSyncPackageScript))\n\nprogram\n .command(\"winget\")\n .option(\"-p, --proxy\", \"是否使用代理\")\n .description(\"使用 winget 更新软件\")\n .action(async options => {\n setGlobalConfig(options)\n await winget()\n })\n\nprogram\n .command(\"test\")\n .description(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n .action(async () => {\n consola.warn(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n consola.warn(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n consola.warn(\"这是一个测试命令,生产环境中使用,非开发人员请勿使用!\")\n await test()\n })\n\nprogram.command(\"sync-editor\").alias(\"se\").description(\"同步编辑器配置\").action(syncEditorSetting)\n\nprogram.command(\"server-to-action\").alias(\"sta\").description(\"将 server 文件夹下的文件转换为 action\").action(serverToAction)\n\nprogram\n .command(\"tar\")\n .description(\"压缩文件\")\n .argument(\"input\", \"输入文件夹\")\n .option(\"-o, --output <output>\", \"输出文件\")\n .action(async (input, { output }) => tar({ input, output }))\n\nprogram\n .command(\"set-env\")\n .description(\"设置环境变量\")\n .argument(\"key\", \"环境变量 key\")\n .argument(\"[value]\", \"环境变量 value\")\n .action(async (key, value) => {\n await setEnv(key, value)\n consola.success(\"设置环境变量成功\")\n })\n\nprogram\n .command(\"add-api\")\n .description(\"添加 api 文件\")\n .argument(\"type\", \"api 类型\")\n .option(\"-a, --api <api>\", \"api 文件夹路径\")\n .option(\"-h, --hook <hook>\", \"hook 文件夹路径\")\n .action(async (type, { api, hook }) => addApi({ type, api, hook }))\n\nprogram.command(\"rslib\").description(\"rslib 配置\").action(rslib)\n\nprogram.command(\"init-node\").description(\"初始化 node 项目\").action(initNode)\n\nprogram.command(\"add-build-docker\").alias(\"abd\").description(\"添加构建 docker 镜像的脚本\").action(addBuildDocker)\n\nprogram.parse()\n"],
5
+ "mappings": "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",
6
6
  "names": ["next", "consola"]
7
7
  }
@@ -0,0 +1,7 @@
1
+ export declare const ApplicationType: {
2
+ readonly Frontend: "Frontend";
3
+ readonly Backend: "Backend";
4
+ readonly FullStack: "FullStack";
5
+ };
6
+ export type ApplicationType = (typeof ApplicationType)[keyof typeof ApplicationType];
7
+ export declare function addBuildDocker(): Promise<void>;
@@ -0,0 +1,358 @@
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/addBuildDocker.ts
30
+ var addBuildDocker_exports = {};
31
+ __export(addBuildDocker_exports, {
32
+ ApplicationType: () => ApplicationType,
33
+ addBuildDocker: () => addBuildDocker
34
+ });
35
+ module.exports = __toCommonJS(addBuildDocker_exports);
36
+ var import_promises = require("fs/promises");
37
+ var import_consola = __toESM(require("consola"));
38
+ var import_deepsea_tools = require("deepsea-tools");
39
+ var import_constant = require("../constant");
40
+ var import_addDependency = require("./addDependency");
41
+ var import_addRuleToGitIgnore = require("./addRuleToGitIgnore");
42
+ var import_backupFirst = require("./backupFirst");
43
+ var import_getPackageManager = require("./getPackageManager");
44
+ var import_hasDependency = require("./hasDependency");
45
+ var import_insertWhen = require("./insertWhen");
46
+ var import_readPackageJson = require("./readPackageJson");
47
+ var import_writePackageJson = require("./writePackageJson");
48
+ var ApplicationType = {
49
+ Frontend: "Frontend",
50
+ Backend: "Backend",
51
+ FullStack: "FullStack"
52
+ };
53
+ async function addBuildDocker() {
54
+ await (0, import_backupFirst.backupFirst)();
55
+ const { default: inquirer } = await import("inquirer");
56
+ const json = await (0, import_readPackageJson.readPackageJson)();
57
+ const isFullStack = await (0, import_hasDependency.hasDependency)(/^(next|@remix-run\/|@react-router\/|@tanstack\/react-start$)/);
58
+ const isBackend = await (0, import_hasDependency.hasDependency)(/^(express$|hono$|@nestjs\/|koa$)/);
59
+ const defaultType = isFullStack ? ApplicationType.FullStack : isBackend ? ApplicationType.Backend : ApplicationType.Frontend;
60
+ const defaultManager = await (0, import_getPackageManager.getPackageManager)();
61
+ const defaultBuild = json.scripts?.build ? "build" : Object.keys(json.scripts ?? {}).find((item) => /\bbuild\b/i.test(item)) ?? "build";
62
+ const { type, name, local, versions } = await inquirer.prompt([
63
+ {
64
+ type: "list",
65
+ name: "type",
66
+ message: "Please select the application type",
67
+ choices: Object.entries(ApplicationType).map(([name2, value]) => ({ name: name2, value })),
68
+ default: defaultType
69
+ },
70
+ {
71
+ type: "input",
72
+ name: "name",
73
+ message: "Please enter the application name",
74
+ default: json.name?.trim()
75
+ },
76
+ {
77
+ type: "confirm",
78
+ name: "local",
79
+ message: "Do you want to save the docker image locally?",
80
+ default: false
81
+ },
82
+ {
83
+ type: "checkbox",
84
+ name: "versions",
85
+ message: "Please select the image versions",
86
+ choices: ["latest", "custom"],
87
+ default: ["latest", "custom"]
88
+ }
89
+ ]);
90
+ if (versions.length === 0) {
91
+ import_consola.default.error("Please select at least one image version");
92
+ process.exit(1);
93
+ }
94
+ const { port } = await inquirer.prompt({
95
+ type: "input",
96
+ name: "port",
97
+ message: "Please enter the application port",
98
+ default: type === ApplicationType.Frontend ? "80" : "3000"
99
+ });
100
+ let versionSource;
101
+ if (versions.includes("custom")) {
102
+ const { versionSource: versionSource2 } = await inquirer.prompt({
103
+ type: "list",
104
+ name: "versionSource",
105
+ message: "Please select the custom image version source",
106
+ choices: ["Day.js version", "package.json version", "input"],
107
+ default: "Day.js version"
108
+ });
109
+ versionSource = versionSource2;
110
+ }
111
+ let docker;
112
+ if (local) {
113
+ const { docker: docker2 } = await inquirer.prompt({
114
+ type: "input",
115
+ name: "docker",
116
+ message: "Please enter the directory to save images",
117
+ default: "docker"
118
+ });
119
+ docker = docker2;
120
+ }
121
+ let format;
122
+ if (versionSource === "Day.js version") {
123
+ const { format: format2 } = await inquirer.prompt({
124
+ type: "input",
125
+ name: "format",
126
+ message: "Please enter the format",
127
+ default: "YYMMDDHHmm"
128
+ });
129
+ format = format2;
130
+ }
131
+ const dir = await (0, import_promises.readdir)(".");
132
+ if (type === ApplicationType.Frontend) {
133
+ const { manager } = await inquirer.prompt({
134
+ type: "list",
135
+ name: "manager",
136
+ message: "Please select the package manager",
137
+ choices: (0, import_deepsea_tools.getEnumValues)(import_constant.PackageManager),
138
+ default: defaultManager
139
+ });
140
+ const { build } = await inquirer.prompt({
141
+ type: "input",
142
+ name: "build",
143
+ message: "Please enter the build command",
144
+ default: `${manager} run ${defaultBuild}`
145
+ });
146
+ const defaultDist = dir.includes("build") ? "build" : "dist";
147
+ const { dist } = await inquirer.prompt({
148
+ type: "input",
149
+ name: "dist",
150
+ message: "Please enter the dist directory",
151
+ default: defaultDist
152
+ });
153
+ const buildLatest = versions.includes("latest");
154
+ const buildCustom = versions.includes("custom");
155
+ const script = `// @ts-check
156
+ ${(0, import_insertWhen.insertWhen)(versions.includes("custom"), `import consola from "consola"`, { breakBefore: true })}${(0, import_insertWhen.insertWhen)(
157
+ versionSource === "Day.js version",
158
+ `import dayjs from "dayjs"`,
159
+ { breakBefore: true }
160
+ )}${(0, import_insertWhen.insertWhen)(versionSource === "package.json version", `import { readFile } from "fs/promises"`, {
161
+ breakBefore: true
162
+ })}${(0, import_insertWhen.insertWhen)(local, `import { join } from "path"`, { breakBefore: true })}
163
+ import { spawnAsync } from "soda-nodejs"
164
+ ${(0, import_insertWhen.insertWhen)(
165
+ versionSource === "package.json version",
166
+ `
167
+ const str = await readFile("package.json", "utf-8")
168
+ const json = JSON.parse(str)
169
+ `
170
+ )}
171
+ const name = "${name}"
172
+
173
+ ${(0, import_insertWhen.insertWhen)(
174
+ buildCustom,
175
+ `let customTag = ${(0, import_insertWhen.insertWhen)(versionSource === "package.json version", "json.version")}${(0, import_insertWhen.insertWhen)(versionSource === "Day.js version", `dayjs().format("${format}")`)}${(0, import_insertWhen.insertWhen)(
176
+ versionSource === "input",
177
+ `await consola.prompt("Please enter the image tag", { type: "text" })`
178
+ )}`
179
+ )}
180
+
181
+ console.log()
182
+
183
+ /** @type {import("child_process").SpawnOptions} */
184
+ const options = {
185
+ shell: true,
186
+ stdio: "inherit",
187
+ }
188
+
189
+ await spawnAsync("${build}", options)
190
+
191
+ console.log()
192
+
193
+ await spawnAsync(\`docker build${(0, import_insertWhen.insertWhen)(buildCustom, ` -t \${name}:\${customTag}`)}${(0, import_insertWhen.insertWhen)(buildLatest, ` -t \${name}:latest`)} .\`, options)
194
+ ${(0, import_insertWhen.insertWhen)(
195
+ local,
196
+ `${(0, import_insertWhen.insertWhen)(
197
+ buildCustom,
198
+ `
199
+ console.log()
200
+
201
+ await spawnAsync(\`docker save \${name}:\${customTag} > \${join("${docker ?? "docker"}", \`\${name}-\${customTag}.tar\`)}\`, options)`
202
+ )}
203
+ ${(0, import_insertWhen.insertWhen)(
204
+ buildLatest,
205
+ `
206
+ console.log()
207
+ await spawnAsync(\`docker save \${name}:latest > \${join("${docker ?? "docker"}", \`\${name}-latest.tar\`)}\`, options)`
208
+ )}`
209
+ )}`;
210
+ const dockerFile = `# 使用官方 nginx 镜像作为基础镜像
211
+ FROM nginx:alpine
212
+
213
+ # 设置工作目录
214
+ WORKDIR /usr/share/nginx/html
215
+
216
+ # 删除默认的 nginx 静态资源
217
+ RUN rm -rf ./*
218
+
219
+ # 将 dist 文件夹中的内容复制到 nginx 的 html 目录下
220
+ COPY ${dist} .
221
+
222
+ # 可选:复制自定义的 nginx 配置
223
+ COPY nginx.conf /etc/nginx/nginx.conf
224
+
225
+ # 暴露端口
226
+ EXPOSE ${port}
227
+
228
+ # 启动 nginx
229
+ CMD ["nginx", "-g", "daemon off;"]
230
+ `;
231
+ const nginxFile = `worker_processes 1;
232
+
233
+ events {
234
+ worker_connections 1024;
235
+ }
236
+
237
+
238
+ http {
239
+ include mime.types;
240
+ # default_type application/octet-stream;
241
+
242
+ sendfile on;
243
+ keepalive_timeout 65;
244
+
245
+ server {
246
+ listen ${port};
247
+ server_name localhost;
248
+
249
+ root /usr/share/nginx/html;
250
+ index index.html index.htm;
251
+ location / {
252
+ try_files $uri $uri/ /index.html; # 对于 SPA 应用的路由支持
253
+ }
254
+ }
255
+ }
256
+ `;
257
+ if (local)
258
+ await (0, import_promises.mkdir)(docker, { recursive: true });
259
+ await (0, import_promises.mkdir)("scripts", { recursive: true });
260
+ await (0, import_promises.writeFile)("scripts/build-docker.mjs", script);
261
+ await (0, import_promises.writeFile)("Dockerfile", dockerFile);
262
+ await (0, import_promises.writeFile)("nginx.conf", nginxFile);
263
+ await (0, import_writePackageJson.writePackageJson)({
264
+ data: {
265
+ ...json,
266
+ scripts: {
267
+ ...json.scripts,
268
+ "build:docker": `${manager === "bun" ? "bun" : "node"} scripts/build-docker.mjs`
269
+ }
270
+ }
271
+ });
272
+ } else {
273
+ let created = false;
274
+ if (dir.includes(".gitignore")) {
275
+ const { useGitignore } = await inquirer.prompt({
276
+ type: "confirm",
277
+ name: "useGitignore",
278
+ message: "Do you want to use the .gitignore as the dockerignore file?",
279
+ default: true
280
+ });
281
+ if (useGitignore) {
282
+ await (0, import_promises.copyFile)(".gitignore", ".dockerignore");
283
+ created = true;
284
+ }
285
+ }
286
+ if (!created) {
287
+ const { rules } = await inquirer.prompt({
288
+ type: "checkbox",
289
+ name: "rules",
290
+ message: "Please select the rules",
291
+ choices: dir,
292
+ default: dir.filter((item) => !["node_modules", "dist", "build", docker?.split("/").at(0)].includes(item))
293
+ });
294
+ await (0, import_promises.writeFile)(".dockerignore", rules.join("\n"));
295
+ }
296
+ if (type === ApplicationType.Backend) {
297
+ const dockerFile = `# 使用 bun 的 alpine 版本作为基础镜像
298
+ FROM oven/bun:alpine
299
+
300
+ # 设置工作目录
301
+ WORKDIR /app
302
+
303
+ # 复制源代码
304
+ COPY . .
305
+
306
+ # 安装依赖
307
+ RUN bun install --registry=https://registry.npmmirror.com
308
+
309
+ # 暴露端口(根据你的应用需要调整)
310
+ EXPOSE ${port}
311
+
312
+ # 运行应用
313
+ CMD ["bun", "run", "index.ts"]
314
+ `;
315
+ await (0, import_promises.writeFile)("Dockerfile", dockerFile);
316
+ } else {
317
+ const dockerFile = `FROM oven/bun:alpine AS deps
318
+ WORKDIR /app
319
+ COPY . .
320
+ RUN bun install --registry=https://registry.npmmirror.com
321
+
322
+ FROM oven/bun:alpine AS builder
323
+ WORKDIR /app
324
+ COPY . .
325
+ COPY --from=deps /app/node_modules ./node_modules
326
+ RUN bun run build
327
+
328
+ FROM oven/bun:alpine AS runner
329
+ WORKDIR /app
330
+ COPY --from=builder /app/node_modules ./node_modules
331
+ COPY --from=builder /app/package.json ./package.json
332
+
333
+ EXPOSE ${port}
334
+
335
+ CMD ["bun", "run", "start"]
336
+ `;
337
+ await (0, import_promises.writeFile)("Dockerfile", dockerFile);
338
+ }
339
+ import_consola.default.warn("Please confirm the Dockerfile is correct");
340
+ }
341
+ if (docker)
342
+ await (0, import_addRuleToGitIgnore.addRuleToGitIgnore)(docker);
343
+ const packages = ["soda-nodejs"];
344
+ if (versionSource === "Day.js version")
345
+ packages.push("dayjs");
346
+ if (versions.includes("custom"))
347
+ packages.push("consola");
348
+ await (0, import_addDependency.addDependency)({
349
+ package: packages,
350
+ type: "devDependencies"
351
+ });
352
+ }
353
+ // Annotate the CommonJS export names for ESM import in node:
354
+ 0 && (module.exports = {
355
+ ApplicationType,
356
+ addBuildDocker
357
+ });
358
+ //# sourceMappingURL=addBuildDocker.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/addBuildDocker.ts"],
4
+ "sourcesContent": ["import { copyFile, mkdir, readdir, writeFile } from \"fs/promises\"\r\nimport consola from \"consola\"\r\nimport { getEnumValues } from \"deepsea-tools\"\r\n\r\nimport { PackageManager } from \"@src/constant\"\r\n\r\nimport { addDependency } from \"./addDependency\"\r\nimport { addRuleToGitIgnore } from \"./addRuleToGitIgnore\"\r\nimport { backupFirst } from \"./backupFirst\"\r\nimport { getPackageManager } from \"./getPackageManager\"\r\nimport { hasDependency } from \"./hasDependency\"\r\nimport { insertWhen } from \"./insertWhen\"\r\nimport { readPackageJson } from \"./readPackageJson\"\r\nimport { writePackageJson } from \"./writePackageJson\"\r\n\r\nexport const ApplicationType = {\r\n Frontend: \"Frontend\",\r\n Backend: \"Backend\",\r\n FullStack: \"FullStack\",\r\n} as const\r\n\r\nexport type ApplicationType = (typeof ApplicationType)[keyof typeof ApplicationType]\r\n\r\nexport async function addBuildDocker() {\r\n await backupFirst()\r\n\r\n const { default: inquirer } = await import(\"inquirer\")\r\n\r\n interface Answer {\r\n type: ApplicationType\r\n manager: PackageManager\r\n name: string\r\n versions: string[]\r\n versionSource: string\r\n local: boolean\r\n docker: string\r\n format: string\r\n build: string\r\n dist: string\r\n useGitignore: string\r\n rules: string[]\r\n runtime: string\r\n port: string\r\n }\r\n\r\n const json = await readPackageJson()\r\n\r\n const isFullStack = await hasDependency(/^(next|@remix-run\\/|@react-router\\/|@tanstack\\/react-start$)/)\r\n\r\n const isBackend = await hasDependency(/^(express$|hono$|@nestjs\\/|koa$)/)\r\n\r\n const defaultType = isFullStack ? ApplicationType.FullStack : isBackend ? ApplicationType.Backend : ApplicationType.Frontend\r\n\r\n const defaultManager = await getPackageManager()\r\n\r\n const defaultBuild = json.scripts?.build ? \"build\" : (Object.keys(json.scripts ?? {}).find(item => /\\bbuild\\b/i.test(item)) ?? \"build\")\r\n\r\n const { type, name, local, versions } = await inquirer.prompt<Answer>([\r\n {\r\n type: \"list\",\r\n name: \"type\",\r\n message: \"Please select the application type\",\r\n choices: Object.entries(ApplicationType).map(([name, value]) => ({ name, value })),\r\n default: defaultType,\r\n },\r\n {\r\n type: \"input\",\r\n name: \"name\",\r\n message: \"Please enter the application name\",\r\n default: json.name?.trim(),\r\n },\r\n {\r\n type: \"confirm\",\r\n name: \"local\",\r\n message: \"Do you want to save the docker image locally?\",\r\n default: false,\r\n },\r\n {\r\n type: \"checkbox\",\r\n name: \"versions\",\r\n message: \"Please select the image versions\",\r\n choices: [\"latest\", \"custom\"],\r\n default: [\"latest\", \"custom\"],\r\n },\r\n ])\r\n\r\n if (versions.length === 0) {\r\n consola.error(\"Please select at least one image version\")\r\n process.exit(1)\r\n }\r\n\r\n const { port } = await inquirer.prompt<Answer>({\r\n type: \"input\",\r\n name: \"port\",\r\n message: \"Please enter the application port\",\r\n default: type === ApplicationType.Frontend ? \"80\" : \"3000\",\r\n })\r\n\r\n let versionSource: string | undefined\r\n\r\n if (versions.includes(\"custom\")) {\r\n const { versionSource: versionSource2 } = await inquirer.prompt<Answer>({\r\n type: \"list\",\r\n name: \"versionSource\",\r\n message: \"Please select the custom image version source\",\r\n choices: [\"Day.js version\", \"package.json version\", \"input\"],\r\n default: \"Day.js version\",\r\n })\r\n\r\n versionSource = versionSource2\r\n }\r\n\r\n let docker: string | undefined\r\n\r\n if (local) {\r\n const { docker: docker2 } = await inquirer.prompt<Answer>({\r\n type: \"input\",\r\n name: \"docker\",\r\n message: \"Please enter the directory to save images\",\r\n default: \"docker\",\r\n })\r\n\r\n docker = docker2\r\n }\r\n\r\n let format: string | undefined\r\n\r\n if (versionSource === \"Day.js version\") {\r\n const { format: format2 } = await inquirer.prompt<Answer>({\r\n type: \"input\",\r\n name: \"format\",\r\n message: \"Please enter the format\",\r\n default: \"YYMMDDHHmm\",\r\n })\r\n\r\n format = format2\r\n }\r\n\r\n const dir = await readdir(\".\")\r\n\r\n if (type === ApplicationType.Frontend) {\r\n const { manager } = await inquirer.prompt<Answer>({\r\n type: \"list\",\r\n name: \"manager\",\r\n message: \"Please select the package manager\",\r\n choices: getEnumValues(PackageManager),\r\n default: defaultManager,\r\n })\r\n\r\n const { build } = await inquirer.prompt<Answer>({\r\n type: \"input\",\r\n name: \"build\",\r\n message: \"Please enter the build command\",\r\n default: `${manager} run ${defaultBuild}`,\r\n })\r\n\r\n const defaultDist = dir.includes(\"build\") ? \"build\" : \"dist\"\r\n\r\n const { dist } = await inquirer.prompt<Answer>({\r\n type: \"input\",\r\n name: \"dist\",\r\n message: \"Please enter the dist directory\",\r\n default: defaultDist,\r\n })\r\n\r\n const buildLatest = versions.includes(\"latest\")\r\n const buildCustom = versions.includes(\"custom\")\r\n\r\n const script = `// @ts-check\r\n${insertWhen(versions.includes(\"custom\"), `import consola from \"consola\"`, { breakBefore: true })}${insertWhen(\r\n versionSource === \"Day.js version\",\r\n `import dayjs from \"dayjs\"`,\r\n { breakBefore: true },\r\n )}${insertWhen(versionSource === \"package.json version\", `import { readFile } from \"fs/promises\"`, {\r\n breakBefore: true,\r\n })}${insertWhen(local, `import { join } from \"path\"`, { breakBefore: true })}\r\nimport { spawnAsync } from \"soda-nodejs\"\r\n${insertWhen(\r\n versionSource === \"package.json version\",\r\n `\r\nconst str = await readFile(\"package.json\", \"utf-8\")\r\nconst json = JSON.parse(str)\r\n`,\r\n)}\r\nconst name = \"${name}\"\r\n\r\n${insertWhen(\r\n buildCustom,\r\n `let customTag = ${insertWhen(versionSource === \"package.json version\", \"json.version\")}${insertWhen(versionSource === \"Day.js version\", `dayjs().format(\"${format}\")`)}${insertWhen(\r\n versionSource === \"input\",\r\n `await consola.prompt(\"Please enter the image tag\", { type: \"text\" })`,\r\n )}`,\r\n)}\r\n\r\nconsole.log()\r\n\r\n/** @type {import(\"child_process\").SpawnOptions} */\r\nconst options = {\r\n shell: true,\r\n stdio: \"inherit\",\r\n}\r\n\r\nawait spawnAsync(\"${build}\", options)\r\n\r\nconsole.log()\r\n\r\nawait spawnAsync(\\`docker build${insertWhen(buildCustom, ` -t \\${name}:\\${customTag}`)}${insertWhen(buildLatest, ` -t \\${name}:latest`)} .\\`, options)\r\n${insertWhen(\r\n local,\r\n `${insertWhen(\r\n buildCustom,\r\n `\r\nconsole.log()\r\n\r\nawait spawnAsync(\\`docker save \\${name}:\\${customTag} > \\${join(\"${docker ?? \"docker\"}\", \\`\\${name}-\\${customTag}.tar\\`)}\\`, options)`,\r\n )}\r\n${insertWhen(\r\n buildLatest,\r\n `\r\nconsole.log()\r\nawait spawnAsync(\\`docker save \\${name}:latest > \\${join(\"${docker ?? \"docker\"}\", \\`\\${name}-latest.tar\\`)}\\`, options)`,\r\n)}`,\r\n)}`\r\n\r\n const dockerFile = `# 使用官方 nginx 镜像作为基础镜像\r\nFROM nginx:alpine\r\n\r\n# 设置工作目录\r\nWORKDIR /usr/share/nginx/html\r\n\r\n# 删除默认的 nginx 静态资源\r\nRUN rm -rf ./*\r\n\r\n# 将 dist 文件夹中的内容复制到 nginx 的 html 目录下\r\nCOPY ${dist} .\r\n\r\n# 可选:复制自定义的 nginx 配置\r\nCOPY nginx.conf /etc/nginx/nginx.conf\r\n\r\n# 暴露端口\r\nEXPOSE ${port}\r\n\r\n# 启动 nginx\r\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\r\n`\r\n const nginxFile = `worker_processes 1;\r\n\r\nevents {\r\n worker_connections 1024;\r\n}\r\n\r\n\r\nhttp {\r\n include mime.types;\r\n # default_type application/octet-stream;\r\n\r\n sendfile on;\r\n keepalive_timeout 65;\r\n\r\n server {\r\n listen ${port};\r\n server_name localhost;\r\n\r\n root /usr/share/nginx/html;\r\n index index.html index.htm;\r\n location / {\r\n try_files $uri $uri/ /index.html; # 对于 SPA 应用的路由支持\r\n }\r\n }\r\n}\r\n`\r\n if (local) await mkdir(docker!, { recursive: true })\r\n await mkdir(\"scripts\", { recursive: true })\r\n await writeFile(\"scripts/build-docker.mjs\", script)\r\n await writeFile(\"Dockerfile\", dockerFile)\r\n await writeFile(\"nginx.conf\", nginxFile)\r\n await writePackageJson({\r\n data: {\r\n ...json,\r\n scripts: {\r\n ...json.scripts,\r\n \"build:docker\": `${manager === \"bun\" ? \"bun\" : \"node\"} scripts/build-docker.mjs`,\r\n },\r\n },\r\n })\r\n } else {\r\n let created = false\r\n\r\n if (dir.includes(\".gitignore\")) {\r\n const { useGitignore } = await inquirer.prompt<Answer>({\r\n type: \"confirm\",\r\n name: \"useGitignore\",\r\n message: \"Do you want to use the .gitignore as the dockerignore file?\",\r\n default: true,\r\n })\r\n\r\n if (useGitignore) {\r\n await copyFile(\".gitignore\", \".dockerignore\")\r\n created = true\r\n }\r\n }\r\n\r\n if (!created) {\r\n const { rules } = await inquirer.prompt<Answer>({\r\n type: \"checkbox\",\r\n name: \"rules\",\r\n message: \"Please select the rules\",\r\n choices: dir,\r\n default: dir.filter(item => ![\"node_modules\", \"dist\", \"build\", docker?.split(\"/\").at(0)].includes(item)),\r\n })\r\n\r\n await writeFile(\".dockerignore\", rules.join(\"\\n\"))\r\n }\r\n\r\n if (type === ApplicationType.Backend) {\r\n const dockerFile = `# 使用 bun 的 alpine 版本作为基础镜像\r\nFROM oven/bun:alpine\r\n\r\n# 设置工作目录\r\nWORKDIR /app\r\n\r\n# 复制源代码\r\nCOPY . .\r\n\r\n# 安装依赖\r\nRUN bun install --registry=https://registry.npmmirror.com\r\n\r\n# 暴露端口(根据你的应用需要调整)\r\nEXPOSE ${port}\r\n\r\n# 运行应用\r\nCMD [\"bun\", \"run\", \"index.ts\"]\r\n`\r\n await writeFile(\"Dockerfile\", dockerFile)\r\n } else {\r\n const dockerFile = `FROM oven/bun:alpine AS deps\r\nWORKDIR /app\r\nCOPY . .\r\nRUN bun install --registry=https://registry.npmmirror.com\r\n\r\nFROM oven/bun:alpine AS builder\r\nWORKDIR /app\r\nCOPY . .\r\nCOPY --from=deps /app/node_modules ./node_modules\r\nRUN bun run build\r\n\r\nFROM oven/bun:alpine AS runner\r\nWORKDIR /app\r\nCOPY --from=builder /app/node_modules ./node_modules\r\nCOPY --from=builder /app/package.json ./package.json\r\n\r\nEXPOSE ${port}\r\n\r\nCMD [\"bun\", \"run\", \"start\"]\r\n`\r\n await writeFile(\"Dockerfile\", dockerFile)\r\n }\r\n\r\n consola.warn(\"Please confirm the Dockerfile is correct\")\r\n }\r\n\r\n if (docker) await addRuleToGitIgnore(docker)\r\n\r\n const packages = [\"soda-nodejs\"]\r\n\r\n if (versionSource === \"Day.js version\") packages.push(\"dayjs\")\r\n\r\n if (versions.includes(\"custom\")) packages.push(\"consola\")\r\n\r\n await addDependency({\r\n package: packages,\r\n type: \"devDependencies\",\r\n })\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": ["name", "consola"]
7
+ }
@@ -0,0 +1,5 @@
1
+ export interface InsertWhenParams {
2
+ breakBefore?: boolean;
3
+ breakAfter?: boolean;
4
+ }
5
+ export declare function insertWhen(condition: any, str: string | string[], params?: InsertWhenParams): string;
@@ -0,0 +1,38 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/utils/insertWhen.ts
20
+ var insertWhen_exports = {};
21
+ __export(insertWhen_exports, {
22
+ insertWhen: () => insertWhen
23
+ });
24
+ module.exports = __toCommonJS(insertWhen_exports);
25
+ function insertWhen(condition, str, params = {}) {
26
+ const { breakBefore, breakAfter } = params;
27
+ const strs = Array.isArray(str) ? str : [str];
28
+ if (breakBefore)
29
+ strs.unshift("");
30
+ if (breakAfter)
31
+ strs.push("");
32
+ return condition ? strs.join("\n") : "";
33
+ }
34
+ // Annotate the CommonJS export names for ESM import in node:
35
+ 0 && (module.exports = {
36
+ insertWhen
37
+ });
38
+ //# sourceMappingURL=insertWhen.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/insertWhen.ts"],
4
+ "sourcesContent": ["export interface InsertWhenParams {\r\n breakBefore?: boolean\r\n breakAfter?: boolean\r\n}\r\n\r\nexport function insertWhen(condition: any, str: string | string[], params: InsertWhenParams = {}) {\r\n const { breakBefore, breakAfter } = params\r\n const strs = Array.isArray(str) ? str : [str]\r\n if (breakBefore) strs.unshift(\"\")\r\n if (breakAfter) strs.push(\"\")\r\n return condition ? strs.join(\"\\n\") : \"\"\r\n}\r\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,SAAS,WAAW,WAAgB,KAAwB,SAA2B,CAAC,GAAG;AAC9F,QAAM,EAAE,aAAa,WAAW,IAAI;AACpC,QAAM,OAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;AAC5C,MAAI;AAAa,SAAK,QAAQ,EAAE;AAChC,MAAI;AAAY,SAAK,KAAK,EAAE;AAC5B,SAAO,YAAY,KAAK,KAAK,IAAI,IAAI;AACzC;",
6
+ "names": []
7
+ }
@@ -25,12 +25,12 @@ module.exports = __toCommonJS(serverToAction_exports);
25
25
  var import_promises = require("fs/promises");
26
26
  var import_path = require("path");
27
27
  async function serverToAction() {
28
- const dir = await (0, import_promises.readdir)("server");
28
+ const dir = await (0, import_promises.readdir)("shared");
29
29
  await (0, import_promises.rm)("actions", { recursive: true, force: true });
30
30
  const actions = dir.filter((item) => item.toLowerCase().endsWith(".ts"));
31
31
  const actions2 = [];
32
32
  for (const item of actions) {
33
- const content = await (0, import_promises.readFile)((0, import_path.join)("server", item), "utf-8");
33
+ const content = await (0, import_promises.readFile)((0, import_path.join)("shared", item), "utf-8");
34
34
  if (/^"no export"$/m.test(content))
35
35
  continue;
36
36
  actions2.push(item);
@@ -43,12 +43,12 @@ async function serverToAction() {
43
43
  (0, import_path.join)("actions", item),
44
44
  `"use server"
45
45
 
46
- import { ${base} } from "@/server/${base}"
46
+ import { ${base} } from "@/shared/${base}"
47
47
 
48
- import { getDataResponse } from "@/utils/getDataResponse"
48
+ import { createResponseFn } from "@/utils/createResponseFn"
49
49
 
50
50
  export async function ${base}Action(...args: Parameters<typeof ${base}>) {
51
- return await getDataResponse(${base}, ...args)
51
+ return await createResponseFn(${base}, ...args)
52
52
  }
53
53
  `
54
54
  );
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils/serverToAction.ts"],
4
- "sourcesContent": ["import { mkdir, readFile, readdir, rm, writeFile } from \"fs/promises\"\nimport { join } from \"path\"\n\nexport async function serverToAction() {\n const dir = await readdir(\"server\")\n await rm(\"actions\", { recursive: true, force: true })\n const actions = dir.filter(item => item.toLowerCase().endsWith(\".ts\"))\n const actions2: string[] = []\n for (const item of actions) {\n const content = await readFile(join(\"server\", item), \"utf-8\")\n if (/^\"no export\"$/m.test(content)) continue\n actions2.push(item)\n }\n await mkdir(\"actions\", { recursive: true })\n await Promise.all(\n actions2.map(async item => {\n const base = item.replace(/\\.ts$/i, \"\")\n await writeFile(\n join(\"actions\", item),\n `\"use server\"\n\nimport { ${base} } from \"@/server/${base}\"\n\nimport { getDataResponse } from \"@/utils/getDataResponse\"\n\nexport async function ${base}Action(...args: Parameters<typeof ${base}>) {\n return await getDataResponse(${base}, ...args)\n}\n`,\n )\n }),\n )\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAwD;AACxD,kBAAqB;AAErB,eAAsB,iBAAiB;AACnC,QAAM,MAAM,UAAM,yBAAQ,QAAQ;AAClC,YAAM,oBAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpD,QAAM,UAAU,IAAI,OAAO,UAAQ,KAAK,YAAY,EAAE,SAAS,KAAK,CAAC;AACrE,QAAM,WAAqB,CAAC;AAC5B,aAAW,QAAQ,SAAS;AACxB,UAAM,UAAU,UAAM,8BAAS,kBAAK,UAAU,IAAI,GAAG,OAAO;AAC5D,QAAI,iBAAiB,KAAK,OAAO;AAAG;AACpC,aAAS,KAAK,IAAI;AAAA,EACtB;AACA,YAAM,uBAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,QAAM,QAAQ;AAAA,IACV,SAAS,IAAI,OAAM,SAAQ;AACvB,YAAM,OAAO,KAAK,QAAQ,UAAU,EAAE;AACtC,gBAAM;AAAA,YACF,kBAAK,WAAW,IAAI;AAAA,QACpB;AAAA;AAAA,WAEL,yBAAyB;AAAA;AAAA;AAAA;AAAA,wBAIZ,yCAAyC;AAAA,mCAC9B;AAAA;AAAA;AAAA,MAGvB;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;",
4
+ "sourcesContent": ["import { mkdir, readFile, readdir, rm, writeFile } from \"fs/promises\"\nimport { join } from \"path\"\n\nexport async function serverToAction() {\n const dir = await readdir(\"shared\")\n await rm(\"actions\", { recursive: true, force: true })\n const actions = dir.filter(item => item.toLowerCase().endsWith(\".ts\"))\n const actions2: string[] = []\n for (const item of actions) {\n const content = await readFile(join(\"shared\", item), \"utf-8\")\n if (/^\"no export\"$/m.test(content)) continue\n actions2.push(item)\n }\n await mkdir(\"actions\", { recursive: true })\n await Promise.all(\n actions2.map(async item => {\n const base = item.replace(/\\.ts$/i, \"\")\n await writeFile(\n join(\"actions\", item),\n `\"use server\"\n\nimport { ${base} } from \"@/shared/${base}\"\n\nimport { createResponseFn } from \"@/utils/createResponseFn\"\n\nexport async function ${base}Action(...args: Parameters<typeof ${base}>) {\n return await createResponseFn(${base}, ...args)\n}\n`,\n )\n }),\n )\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAwD;AACxD,kBAAqB;AAErB,eAAsB,iBAAiB;AACnC,QAAM,MAAM,UAAM,yBAAQ,QAAQ;AAClC,YAAM,oBAAG,WAAW,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AACpD,QAAM,UAAU,IAAI,OAAO,UAAQ,KAAK,YAAY,EAAE,SAAS,KAAK,CAAC;AACrE,QAAM,WAAqB,CAAC;AAC5B,aAAW,QAAQ,SAAS;AACxB,UAAM,UAAU,UAAM,8BAAS,kBAAK,UAAU,IAAI,GAAG,OAAO;AAC5D,QAAI,iBAAiB,KAAK,OAAO;AAAG;AACpC,aAAS,KAAK,IAAI;AAAA,EACtB;AACA,YAAM,uBAAM,WAAW,EAAE,WAAW,KAAK,CAAC;AAC1C,QAAM,QAAQ;AAAA,IACV,SAAS,IAAI,OAAM,SAAQ;AACvB,YAAM,OAAO,KAAK,QAAQ,UAAU,EAAE;AACtC,gBAAM;AAAA,YACF,kBAAK,WAAW,IAAI;AAAA,QACpB;AAAA;AAAA,WAEL,yBAAyB;AAAA;AAAA;AAAA;AAAA,wBAIZ,yCAAyC;AAAA,oCAC7B;AAAA;AAAA;AAAA,MAGxB;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zixulu",
3
- "version": "1.63.3",
3
+ "version": "1.64.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "bin": "dist/index.js",
package/src/index.ts CHANGED
@@ -43,9 +43,11 @@ import { vite } from "@utils/vite"
43
43
 
44
44
  import { actionWithBackup } from "./utils/actionWithBackup"
45
45
  import { addApi } from "./utils/addApi"
46
+ import { addBuildDocker } from "./utils/addBuildDocker"
46
47
  import { addStartScript } from "./utils/addStartScript"
47
48
  import { addSyncPackageScript } from "./utils/addSyncPackageScript"
48
49
  import { addZipDist } from "./utils/addZipDist"
50
+ import { backupFirst } from "./utils/backupFirst"
49
51
  import { createBrowserlistrc } from "./utils/createBrowserlistrc"
50
52
  import { getCommitMessage } from "./utils/getCommitMessage"
51
53
  import { getHeaders } from "./utils/getHeaders"
@@ -376,4 +378,6 @@ program.command("rslib").description("rslib 配置").action(rslib)
376
378
 
377
379
  program.command("init-node").description("初始化 node 项目").action(initNode)
378
380
 
381
+ program.command("add-build-docker").alias("abd").description("添加构建 docker 镜像的脚本").action(addBuildDocker)
382
+
379
383
  program.parse()
@@ -0,0 +1,374 @@
1
+ import { copyFile, mkdir, readdir, writeFile } from "fs/promises"
2
+ import consola from "consola"
3
+ import { getEnumValues } from "deepsea-tools"
4
+
5
+ import { PackageManager } from "@src/constant"
6
+
7
+ import { addDependency } from "./addDependency"
8
+ import { addRuleToGitIgnore } from "./addRuleToGitIgnore"
9
+ import { backupFirst } from "./backupFirst"
10
+ import { getPackageManager } from "./getPackageManager"
11
+ import { hasDependency } from "./hasDependency"
12
+ import { insertWhen } from "./insertWhen"
13
+ import { readPackageJson } from "./readPackageJson"
14
+ import { writePackageJson } from "./writePackageJson"
15
+
16
+ export const ApplicationType = {
17
+ Frontend: "Frontend",
18
+ Backend: "Backend",
19
+ FullStack: "FullStack",
20
+ } as const
21
+
22
+ export type ApplicationType = (typeof ApplicationType)[keyof typeof ApplicationType]
23
+
24
+ export async function addBuildDocker() {
25
+ await backupFirst()
26
+
27
+ const { default: inquirer } = await import("inquirer")
28
+
29
+ interface Answer {
30
+ type: ApplicationType
31
+ manager: PackageManager
32
+ name: string
33
+ versions: string[]
34
+ versionSource: string
35
+ local: boolean
36
+ docker: string
37
+ format: string
38
+ build: string
39
+ dist: string
40
+ useGitignore: string
41
+ rules: string[]
42
+ runtime: string
43
+ port: string
44
+ }
45
+
46
+ const json = await readPackageJson()
47
+
48
+ const isFullStack = await hasDependency(/^(next|@remix-run\/|@react-router\/|@tanstack\/react-start$)/)
49
+
50
+ const isBackend = await hasDependency(/^(express$|hono$|@nestjs\/|koa$)/)
51
+
52
+ const defaultType = isFullStack ? ApplicationType.FullStack : isBackend ? ApplicationType.Backend : ApplicationType.Frontend
53
+
54
+ const defaultManager = await getPackageManager()
55
+
56
+ const defaultBuild = json.scripts?.build ? "build" : (Object.keys(json.scripts ?? {}).find(item => /\bbuild\b/i.test(item)) ?? "build")
57
+
58
+ const { type, name, local, versions } = await inquirer.prompt<Answer>([
59
+ {
60
+ type: "list",
61
+ name: "type",
62
+ message: "Please select the application type",
63
+ choices: Object.entries(ApplicationType).map(([name, value]) => ({ name, value })),
64
+ default: defaultType,
65
+ },
66
+ {
67
+ type: "input",
68
+ name: "name",
69
+ message: "Please enter the application name",
70
+ default: json.name?.trim(),
71
+ },
72
+ {
73
+ type: "confirm",
74
+ name: "local",
75
+ message: "Do you want to save the docker image locally?",
76
+ default: false,
77
+ },
78
+ {
79
+ type: "checkbox",
80
+ name: "versions",
81
+ message: "Please select the image versions",
82
+ choices: ["latest", "custom"],
83
+ default: ["latest", "custom"],
84
+ },
85
+ ])
86
+
87
+ if (versions.length === 0) {
88
+ consola.error("Please select at least one image version")
89
+ process.exit(1)
90
+ }
91
+
92
+ const { port } = await inquirer.prompt<Answer>({
93
+ type: "input",
94
+ name: "port",
95
+ message: "Please enter the application port",
96
+ default: type === ApplicationType.Frontend ? "80" : "3000",
97
+ })
98
+
99
+ let versionSource: string | undefined
100
+
101
+ if (versions.includes("custom")) {
102
+ const { versionSource: versionSource2 } = await inquirer.prompt<Answer>({
103
+ type: "list",
104
+ name: "versionSource",
105
+ message: "Please select the custom image version source",
106
+ choices: ["Day.js version", "package.json version", "input"],
107
+ default: "Day.js version",
108
+ })
109
+
110
+ versionSource = versionSource2
111
+ }
112
+
113
+ let docker: string | undefined
114
+
115
+ if (local) {
116
+ const { docker: docker2 } = await inquirer.prompt<Answer>({
117
+ type: "input",
118
+ name: "docker",
119
+ message: "Please enter the directory to save images",
120
+ default: "docker",
121
+ })
122
+
123
+ docker = docker2
124
+ }
125
+
126
+ let format: string | undefined
127
+
128
+ if (versionSource === "Day.js version") {
129
+ const { format: format2 } = await inquirer.prompt<Answer>({
130
+ type: "input",
131
+ name: "format",
132
+ message: "Please enter the format",
133
+ default: "YYMMDDHHmm",
134
+ })
135
+
136
+ format = format2
137
+ }
138
+
139
+ const dir = await readdir(".")
140
+
141
+ if (type === ApplicationType.Frontend) {
142
+ const { manager } = await inquirer.prompt<Answer>({
143
+ type: "list",
144
+ name: "manager",
145
+ message: "Please select the package manager",
146
+ choices: getEnumValues(PackageManager),
147
+ default: defaultManager,
148
+ })
149
+
150
+ const { build } = await inquirer.prompt<Answer>({
151
+ type: "input",
152
+ name: "build",
153
+ message: "Please enter the build command",
154
+ default: `${manager} run ${defaultBuild}`,
155
+ })
156
+
157
+ const defaultDist = dir.includes("build") ? "build" : "dist"
158
+
159
+ const { dist } = await inquirer.prompt<Answer>({
160
+ type: "input",
161
+ name: "dist",
162
+ message: "Please enter the dist directory",
163
+ default: defaultDist,
164
+ })
165
+
166
+ const buildLatest = versions.includes("latest")
167
+ const buildCustom = versions.includes("custom")
168
+
169
+ const script = `// @ts-check
170
+ ${insertWhen(versions.includes("custom"), `import consola from "consola"`, { breakBefore: true })}${insertWhen(
171
+ versionSource === "Day.js version",
172
+ `import dayjs from "dayjs"`,
173
+ { breakBefore: true },
174
+ )}${insertWhen(versionSource === "package.json version", `import { readFile } from "fs/promises"`, {
175
+ breakBefore: true,
176
+ })}${insertWhen(local, `import { join } from "path"`, { breakBefore: true })}
177
+ import { spawnAsync } from "soda-nodejs"
178
+ ${insertWhen(
179
+ versionSource === "package.json version",
180
+ `
181
+ const str = await readFile("package.json", "utf-8")
182
+ const json = JSON.parse(str)
183
+ `,
184
+ )}
185
+ const name = "${name}"
186
+
187
+ ${insertWhen(
188
+ buildCustom,
189
+ `let customTag = ${insertWhen(versionSource === "package.json version", "json.version")}${insertWhen(versionSource === "Day.js version", `dayjs().format("${format}")`)}${insertWhen(
190
+ versionSource === "input",
191
+ `await consola.prompt("Please enter the image tag", { type: "text" })`,
192
+ )}`,
193
+ )}
194
+
195
+ console.log()
196
+
197
+ /** @type {import("child_process").SpawnOptions} */
198
+ const options = {
199
+ shell: true,
200
+ stdio: "inherit",
201
+ }
202
+
203
+ await spawnAsync("${build}", options)
204
+
205
+ console.log()
206
+
207
+ await spawnAsync(\`docker build${insertWhen(buildCustom, ` -t \${name}:\${customTag}`)}${insertWhen(buildLatest, ` -t \${name}:latest`)} .\`, options)
208
+ ${insertWhen(
209
+ local,
210
+ `${insertWhen(
211
+ buildCustom,
212
+ `
213
+ console.log()
214
+
215
+ await spawnAsync(\`docker save \${name}:\${customTag} > \${join("${docker ?? "docker"}", \`\${name}-\${customTag}.tar\`)}\`, options)`,
216
+ )}
217
+ ${insertWhen(
218
+ buildLatest,
219
+ `
220
+ console.log()
221
+ await spawnAsync(\`docker save \${name}:latest > \${join("${docker ?? "docker"}", \`\${name}-latest.tar\`)}\`, options)`,
222
+ )}`,
223
+ )}`
224
+
225
+ const dockerFile = `# 使用官方 nginx 镜像作为基础镜像
226
+ FROM nginx:alpine
227
+
228
+ # 设置工作目录
229
+ WORKDIR /usr/share/nginx/html
230
+
231
+ # 删除默认的 nginx 静态资源
232
+ RUN rm -rf ./*
233
+
234
+ # 将 dist 文件夹中的内容复制到 nginx 的 html 目录下
235
+ COPY ${dist} .
236
+
237
+ # 可选:复制自定义的 nginx 配置
238
+ COPY nginx.conf /etc/nginx/nginx.conf
239
+
240
+ # 暴露端口
241
+ EXPOSE ${port}
242
+
243
+ # 启动 nginx
244
+ CMD ["nginx", "-g", "daemon off;"]
245
+ `
246
+ const nginxFile = `worker_processes 1;
247
+
248
+ events {
249
+ worker_connections 1024;
250
+ }
251
+
252
+
253
+ http {
254
+ include mime.types;
255
+ # default_type application/octet-stream;
256
+
257
+ sendfile on;
258
+ keepalive_timeout 65;
259
+
260
+ server {
261
+ listen ${port};
262
+ server_name localhost;
263
+
264
+ root /usr/share/nginx/html;
265
+ index index.html index.htm;
266
+ location / {
267
+ try_files $uri $uri/ /index.html; # 对于 SPA 应用的路由支持
268
+ }
269
+ }
270
+ }
271
+ `
272
+ if (local) await mkdir(docker!, { recursive: true })
273
+ await mkdir("scripts", { recursive: true })
274
+ await writeFile("scripts/build-docker.mjs", script)
275
+ await writeFile("Dockerfile", dockerFile)
276
+ await writeFile("nginx.conf", nginxFile)
277
+ await writePackageJson({
278
+ data: {
279
+ ...json,
280
+ scripts: {
281
+ ...json.scripts,
282
+ "build:docker": `${manager === "bun" ? "bun" : "node"} scripts/build-docker.mjs`,
283
+ },
284
+ },
285
+ })
286
+ } else {
287
+ let created = false
288
+
289
+ if (dir.includes(".gitignore")) {
290
+ const { useGitignore } = await inquirer.prompt<Answer>({
291
+ type: "confirm",
292
+ name: "useGitignore",
293
+ message: "Do you want to use the .gitignore as the dockerignore file?",
294
+ default: true,
295
+ })
296
+
297
+ if (useGitignore) {
298
+ await copyFile(".gitignore", ".dockerignore")
299
+ created = true
300
+ }
301
+ }
302
+
303
+ if (!created) {
304
+ const { rules } = await inquirer.prompt<Answer>({
305
+ type: "checkbox",
306
+ name: "rules",
307
+ message: "Please select the rules",
308
+ choices: dir,
309
+ default: dir.filter(item => !["node_modules", "dist", "build", docker?.split("/").at(0)].includes(item)),
310
+ })
311
+
312
+ await writeFile(".dockerignore", rules.join("\n"))
313
+ }
314
+
315
+ if (type === ApplicationType.Backend) {
316
+ const dockerFile = `# 使用 bun 的 alpine 版本作为基础镜像
317
+ FROM oven/bun:alpine
318
+
319
+ # 设置工作目录
320
+ WORKDIR /app
321
+
322
+ # 复制源代码
323
+ COPY . .
324
+
325
+ # 安装依赖
326
+ RUN bun install --registry=https://registry.npmmirror.com
327
+
328
+ # 暴露端口(根据你的应用需要调整)
329
+ EXPOSE ${port}
330
+
331
+ # 运行应用
332
+ CMD ["bun", "run", "index.ts"]
333
+ `
334
+ await writeFile("Dockerfile", dockerFile)
335
+ } else {
336
+ const dockerFile = `FROM oven/bun:alpine AS deps
337
+ WORKDIR /app
338
+ COPY . .
339
+ RUN bun install --registry=https://registry.npmmirror.com
340
+
341
+ FROM oven/bun:alpine AS builder
342
+ WORKDIR /app
343
+ COPY . .
344
+ COPY --from=deps /app/node_modules ./node_modules
345
+ RUN bun run build
346
+
347
+ FROM oven/bun:alpine AS runner
348
+ WORKDIR /app
349
+ COPY --from=builder /app/node_modules ./node_modules
350
+ COPY --from=builder /app/package.json ./package.json
351
+
352
+ EXPOSE ${port}
353
+
354
+ CMD ["bun", "run", "start"]
355
+ `
356
+ await writeFile("Dockerfile", dockerFile)
357
+ }
358
+
359
+ consola.warn("Please confirm the Dockerfile is correct")
360
+ }
361
+
362
+ if (docker) await addRuleToGitIgnore(docker)
363
+
364
+ const packages = ["soda-nodejs"]
365
+
366
+ if (versionSource === "Day.js version") packages.push("dayjs")
367
+
368
+ if (versions.includes("custom")) packages.push("consola")
369
+
370
+ await addDependency({
371
+ package: packages,
372
+ type: "devDependencies",
373
+ })
374
+ }
@@ -0,0 +1,12 @@
1
+ export interface InsertWhenParams {
2
+ breakBefore?: boolean
3
+ breakAfter?: boolean
4
+ }
5
+
6
+ export function insertWhen(condition: any, str: string | string[], params: InsertWhenParams = {}) {
7
+ const { breakBefore, breakAfter } = params
8
+ const strs = Array.isArray(str) ? str : [str]
9
+ if (breakBefore) strs.unshift("")
10
+ if (breakAfter) strs.push("")
11
+ return condition ? strs.join("\n") : ""
12
+ }
@@ -2,12 +2,12 @@ import { mkdir, readFile, readdir, rm, writeFile } from "fs/promises"
2
2
  import { join } from "path"
3
3
 
4
4
  export async function serverToAction() {
5
- const dir = await readdir("server")
5
+ const dir = await readdir("shared")
6
6
  await rm("actions", { recursive: true, force: true })
7
7
  const actions = dir.filter(item => item.toLowerCase().endsWith(".ts"))
8
8
  const actions2: string[] = []
9
9
  for (const item of actions) {
10
- const content = await readFile(join("server", item), "utf-8")
10
+ const content = await readFile(join("shared", item), "utf-8")
11
11
  if (/^"no export"$/m.test(content)) continue
12
12
  actions2.push(item)
13
13
  }
@@ -19,12 +19,12 @@ export async function serverToAction() {
19
19
  join("actions", item),
20
20
  `"use server"
21
21
 
22
- import { ${base} } from "@/server/${base}"
22
+ import { ${base} } from "@/shared/${base}"
23
23
 
24
- import { getDataResponse } from "@/utils/getDataResponse"
24
+ import { createResponseFn } from "@/utils/createResponseFn"
25
25
 
26
26
  export async function ${base}Action(...args: Parameters<typeof ${base}>) {
27
- return await getDataResponse(${base}, ...args)
27
+ return await createResponseFn(${base}, ...args)
28
28
  }
29
29
  `,
30
30
  )