anl 26.325.0 → 26.326.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.
@@ -1,4 +1,4 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`),n=require(`./utils.cjs`);let r=require(`child_process`),i=require(`fs`);i=e.__toESM(i);let a=require(`path`);a=e.__toESM(a);const o=e=>{try{return(0,r.execSync)(`git rev-parse --is-inside-work-tree`,{cwd:e,stdio:`ignore`}),!0}catch{return!1}},s=(e,n,i)=>{try{return(0,r.execFileSync)(`git`,e,{cwd:n,stdio:`ignore`}),!0}catch(e){return console.log(e),t.log.error(i),!1}},c=e=>{let t=process.platform===`win32`?`where`:`command -v`;try{return(0,r.execSync)(`${t} ${e}`,{stdio:`ignore`}),!0}catch{return!1}},l=e=>i.default.existsSync(a.default.join(e,`pnpm-lock.yaml`))?`pnpm`:i.default.existsSync(a.default.join(e,`yarn.lock`))?`yarn`:`npm`,u=e=>{let t=`@commitlint/cli @commitlint/config-conventional lint-staged`;return e===`pnpm`?`pnpm add -D ${t}`:e===`yarn`?`yarn add -D ${t}`:`npm install -D ${t}`},d=(e,n)=>{let r=[];if(e.includes(`gitflow`)&&!c(`jq`)&&(r.push(`Missing dependency: jq (required by git nb branch generator).`),r.push(`Quick fix (macOS): brew install jq`)),e.includes(`commitSubject`)){let e=i.default.existsSync(a.default.join(n,`node_modules`,`.bin`,process.platform===`win32`?`commitlint.cmd`:`commitlint`))||c(`commitlint`),t=i.default.existsSync(a.default.join(n,`node_modules`,`.bin`,process.platform===`win32`?`lint-staged.cmd`:`lint-staged`))||c(`lint-staged`);if(!e||!t){let e=l(n);r.push(`Missing dependencies for hooks: commitlint and/or lint-staged.`),r.push(`Quick fix (${e}): ${u(e)}`)}}if(r.length>0){console.log(`
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);const n=require(`./utils.cjs`);let r=require(`child_process`),i=require(`fs`);i=e.__toESM(i);let a=require(`path`);a=e.__toESM(a);const o=e=>{try{return(0,r.execSync)(`git rev-parse --is-inside-work-tree`,{cwd:e,stdio:`ignore`}),!0}catch{return!1}},s=(e,n,i)=>{try{return(0,r.execFileSync)(`git`,e,{cwd:n,stdio:`ignore`}),!0}catch(e){return console.log(e),t.log.error(i),!1}},c=e=>{let t=process.platform===`win32`?`where`:`command -v`;try{return(0,r.execSync)(`${t} ${e}`,{stdio:`ignore`}),!0}catch{return!1}},l=e=>i.default.existsSync(a.default.join(e,`pnpm-lock.yaml`))?`pnpm`:i.default.existsSync(a.default.join(e,`yarn.lock`))?`yarn`:`npm`,u=e=>{let t=`@commitlint/cli @commitlint/config-conventional lint-staged`;return e===`pnpm`?`pnpm add -D ${t}`:e===`yarn`?`yarn add -D ${t}`:`npm install -D ${t}`},d=(e,n)=>{let r=[];if(e.includes(`gitflow`)&&!c(`jq`)&&(r.push(`Missing dependency: jq (required by git nb branch generator).`),r.push(`Quick fix (macOS): brew install jq`)),e.includes(`commitSubject`)){let e=i.default.existsSync(a.default.join(n,`node_modules`,`.bin`,process.platform===`win32`?`commitlint.cmd`:`commitlint`))||c(`commitlint`),t=i.default.existsSync(a.default.join(n,`node_modules`,`.bin`,process.platform===`win32`?`lint-staged.cmd`:`lint-staged`))||c(`lint-staged`);if(!e||!t){let e=l(n);r.push(`Missing dependencies for hooks: commitlint and/or lint-staged.`),r.push(`Quick fix (${e}): ${u(e)}`)}}if(r.length>0){console.log(`
2
2
  `);for(let e of r)t.log.warning(e);console.log(`
3
3
  `)}},f=async(e,r)=>{let i=a.default.join(e,`.commit-type.cjs`),o=a.default.join(r,`.commit-type.cjs`);if(!await n.pathExists(i)){t.log.error(`source file ${i} does not exist`);return}await n.copyFileIfMissing(i,o)},p=async()=>{let e=__dirname,r=process.cwd(),o=a.default.join(e,`.gitscripts`),c=a.default.join(r,`.gitscripts`);await n.pathExists(o)?(await n.copyDirectoryRecursive(o,c),t.log.success(`.gitscripts create done.`)):t.log.error(`source directory ${o} does not exist`);for(let i of[`.gitconfig`]){let o=a.default.join(e,i),s=a.default.join(r,i);await n.pathExists(o)?await n.copyFileIfMissing(o,s):t.log.error(`source file ${o} does not exist`)}await f(e,r);try{i.default.chmodSync(a.default.join(c,`random-branch.sh`),493),t.log.success(`random-branch.sh Raise power`)}catch(e){console.log(e),t.log.error(`Set .gitscripts/random-branch.sh executable permission failed: ${e instanceof Error?e.message:String(e)}`)}let l=a.default.resolve(r,`.gitconfig`);s([`config`,`--local`,`--replace-all`,`include.path`,l],r,`Execute [git config --local --replace-all include.path ${l}] failed, please execute the command manually`)&&t.log.success(`.gitconfig git set`)},m=async()=>{let e=a.default.join(__dirname,`.githooks`),r=process.cwd(),o=a.default.join(r,`.githooks`);if(!await n.pathExists(e)){t.log.error(`source directory ${e} does not exist`);return}await n.copyDirectoryRecursive(e,o,!0),t.log.success(`.githooks create done.`),await f(__dirname,r);try{i.default.chmodSync(a.default.join(o,`commit-msg`),493),i.default.chmodSync(a.default.join(o,`pre-commit`),493),t.log.success(`commit-msg/pre-commit raise power done.`)}catch(e){console.log(e),t.log.error(`Set .githooks hooks executable permission failed: ${e instanceof Error?e.message:String(e)}`)}s([`config`,`--local`,`--replace-all`,`core.hooksPath`,`.githooks`],r,`Execute [git config --local --replace-all core.hooksPath .githooks] failed, please execute the command manually`)&&t.log.success(`git set .githooks done.`)},h=async()=>{let e=__dirname,r=process.cwd(),i=a.default.join(e,`.gitattributes`),o=a.default.join(r,`.gitattributes`);if(!await n.pathExists(i)){t.log.error(`source file ${i} does not exist`);return}await n.copyFileIfMissing(i,o)},g=async(e=[])=>{if(e.length===0){t.log.warning(`No Git feature selected, nothing to initialize.`);return}let n=process.cwd();if((e.includes(`gitflow`)||e.includes(`commitSubject`))&&!o(n)){t.log.error(`Current directory is not a Git repository. Please run this command in a Git project.`);return}d(e,n),e.includes(`gitflow`)&&await p(),e.includes(`commitSubject`)&&await m(),e.includes(`customGitCommand`)&&await h(),e.includes(`gitflow`)&&(console.log(`
4
4
  `),t.log.warning(`please run [git nb] command to create a new branch.`),console.log(`
@@ -1 +1 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`);let n=require(`fs`);n=e.__toESM(n);let r=require(`path`);r=e.__toESM(r);const i=async e=>{await n.default.promises.mkdir(e,{recursive:!0})},a=async e=>{try{return await n.default.promises.access(e),!0}catch{return!1}},o=async(e,o)=>{if(await a(o)){t.log.info(`${r.default.basename(o)} Already exists, skip generation.`);return}await i(r.default.dirname(o)),await n.default.promises.copyFile(e,o),t.log.success(`${r.default.basename(o)} create done.`)},s=async(e,o,s=!1)=>{let c=await a(o);if(c&&!s){t.log.info(`${r.default.basename(o)} Already exists, skip generation.`);return}await i(r.default.dirname(o)),await n.default.promises.copyFile(e,o),t.log.success(`${r.default.basename(o)} ${c?`update done.`:`create done.`}`)},c=async(e,t,a=!1)=>{if(!(await n.default.promises.stat(e)).isDirectory())throw Error(`${e} is not a directory`);await i(t);let o=await n.default.promises.readdir(e,{withFileTypes:!0});for(let n of o){let i=r.default.join(e,n.name),o=r.default.join(t,n.name);n.isDirectory()?await c(i,o,a):n.isFile()&&await s(i,o,a)}};exports.copyDirectoryRecursive=c,exports.copyFileIfMissing=o,exports.pathExists=a;
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);let n=require(`fs`);n=e.__toESM(n);let r=require(`path`);r=e.__toESM(r);const i=async e=>{await n.default.promises.mkdir(e,{recursive:!0})},a=async e=>{try{return await n.default.promises.access(e),!0}catch{return!1}},o=async(e,o)=>{if(await a(o)){t.log.info(`${r.default.basename(o)} Already exists, skip generation.`);return}await i(r.default.dirname(o)),await n.default.promises.copyFile(e,o),t.log.success(`${r.default.basename(o)} create done.`)},s=async(e,o,s=!1)=>{let c=await a(o);if(c&&!s){t.log.info(`${r.default.basename(o)} Already exists, skip generation.`);return}await i(r.default.dirname(o)),await n.default.promises.copyFile(e,o),t.log.success(`${r.default.basename(o)} ${c?`update done.`:`create done.`}`)},c=async(e,t,a=!1)=>{if(!(await n.default.promises.stat(e)).isDirectory())throw Error(`${e} is not a directory`);await i(t);let o=await n.default.promises.readdir(e,{withFileTypes:!0});for(let n of o){let i=r.default.join(e,n.name),o=r.default.join(t,n.name);n.isDirectory()?await c(i,o,a):n.isFile()&&await s(i,o,a)}};exports.copyDirectoryRecursive=c,exports.copyFileIfMissing=o,exports.pathExists=a;
package/lib/package.cjs CHANGED
@@ -1 +1 @@
1
- var e=`26.325.0`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
1
+ var e=`26.326.0`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
@@ -1,7 +1,7 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`);let n=require(`inquirer`);n=e.__toESM(n);let r=require(`fs`);r=e.__toESM(r);let i=require(`path`);i=e.__toESM(i);let a=require(`chalk`);a=e.__toESM(a);const o=[{name:`api-report - API 变更检测报告`,value:`api-report`},{name:`api-mock - Mock 数据生成`,value:`api-mock`}];function s(){return i.default.join(__dirname,`..`,`skills`)}function c(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>n in t?t[n]:`{{${n}}}`)}function l(e){let t=i.default.join(e,`an.config.json`);if(!r.default.existsSync(t))return null;try{return JSON.parse(r.default.readFileSync(t,`utf-8`))}catch{return null}}function u(e){let t=e.saveApiListFolderPath??`src/api`,n=e.saveTypeFolderPath??`src/types`,r=[],i=[];if(Array.isArray(e.swaggerConfig))for(let t of e.swaggerConfig)t.apiListFileName&&r.push(t.apiListFileName),t.url&&i.push(t.url);return{apiDir:t,typesDir:n,apiFiles:r,swaggerUrls:i}}function d(e,t,n,r){return r===`command`?i.default.join(e,t,`${n}.md`):i.default.join(e,t,n,`SKILL.md`)}async function f(e,n,a,o,l){let u=i.default.join(s(),e,`SKILL.md`);if(!r.default.existsSync(u))throw Error(`找不到模板文件: ${u}`);let f=c(r.default.readFileSync(u,`utf-8`),n),p=d(a,o,e,l);await t.writeFileRecursive(p,f),t.log.success(`Skill 文件已写入: ${i.default.relative(a,p)}`)}async function p(e,t,r,i){let{scanDirs:a}=await n.default.prompt([{type:`input`,name:`scanDirs`,message:`需要扫描 API 使用的目录(逗号分隔,支持 glob):`,default:`src/pages/**,src/components/**`}]);await f(`api-report`,{API_DIR:t.apiDir,API_FILES:t.apiFiles.join(`, `),TYPES_DIR:t.typesDir,SCAN_DIRS:a.trim(),SWAGGER_URLS:t.swaggerUrls.join(`
2
- - `)},e,r,i)}async function m(e,t,r,i){let{mockOutput:a}=await n.default.prompt([{type:`input`,name:`mockOutput`,message:`Mock 数据输出目录:`,default:`mocks/`}]);await f(`api-mock`,{API_DIR:t.apiDir,API_FILES:t.apiFiles.join(`, `),TYPES_DIR:t.typesDir,MOCK_OUTPUT:a.trim(),SWAGGER_URLS:t.swaggerUrls.join(`
3
- - `)},e,r,i)}async function h(){console.log(a.default.bold.blue(`
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`),n=require(`../utils/index.cjs`);let r=require(`inquirer`);r=e.__toESM(r);let i=require(`fs`);i=e.__toESM(i);let a=require(`path`);a=e.__toESM(a);let o=require(`chalk`);o=e.__toESM(o);const s=[{name:`api-report - API 变更检测报告`,value:`api-report`},{name:`api-mock - Mock 数据生成`,value:`api-mock`}];function c(){return a.default.join(__dirname,`..`,`skills`)}function l(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>n in t?t[n]:`{{${n}}}`)}function u(e){let t=a.default.join(e,`an.config.json`);if(!i.default.existsSync(t))return null;try{return JSON.parse(i.default.readFileSync(t,`utf-8`))}catch{return null}}function d(e){let t=e.saveApiListFolderPath??`src/api`,n=e.saveTypeFolderPath??`src/types`,r=[],i=[];if(Array.isArray(e.swaggerConfig))for(let t of e.swaggerConfig)t.apiListFileName&&r.push(t.apiListFileName),t.url&&i.push(t.url);return{apiDir:t,typesDir:n,apiFiles:r,swaggerUrls:i}}function f(e,t,n,r){return r===`command`?a.default.join(e,t,`${n}.md`):a.default.join(e,t,n,`SKILL.md`)}async function p(e,r,o,s,u){let d=a.default.join(c(),e,`SKILL.md`);if(!i.default.existsSync(d))throw Error(`找不到模板文件: ${d}`);let p=l(i.default.readFileSync(d,`utf-8`),r),m=f(o,s,e,u);await n.writeFileRecursive(m,p),t.log.success(`Skill 文件已写入: ${a.default.relative(o,m)}`)}async function m(e,t,n,i){let{scanDirs:a}=await r.default.prompt([{type:`input`,name:`scanDirs`,message:`需要扫描 API 使用的目录(逗号分隔,支持 glob):`,default:`src/pages/**,src/components/**`}]);await p(`api-report`,{API_DIR:t.apiDir,API_FILES:t.apiFiles.join(`, `),TYPES_DIR:t.typesDir,SCAN_DIRS:a.trim(),SWAGGER_URLS:t.swaggerUrls.join(`
2
+ - `)},e,n,i)}async function h(e,t,n,i){let{mockOutput:a}=await r.default.prompt([{type:`input`,name:`mockOutput`,message:`Mock 数据输出目录:`,default:`mocks/`}]);await p(`api-mock`,{API_DIR:t.apiDir,API_FILES:t.apiFiles.join(`, `),TYPES_DIR:t.typesDir,MOCK_OUTPUT:a.trim(),SWAGGER_URLS:t.swaggerUrls.join(`
3
+ - `)},e,n,i)}async function g(){console.log(o.default.bold.blue(`
4
4
  🛡️ an skill - Agent Skill 初始化工具
5
- `));let e=process.cwd(),r=l(e);if(!r){t.log.error(`未找到 an.config.json,请先在项目根目录配置 an.config.json`);return}let i=u(r);if(i.apiFiles.length===0){t.log.error(`an.config.json 中未找到 swaggerConfig 配置`);return}let{skills:s}=await n.default.prompt([{type:`checkbox`,name:`skills`,message:`选择要初始化的 Skill(可多选):`,choices:o,pageSize:10}]);if(s.length===0){t.log.warning(`未选择任何 Skill,已退出`);return}let{platform:c}=await n.default.prompt([{type:`list`,name:`platform`,message:`Skill 输出目标:`,choices:[{name:`.cursor/skills (Cursor Skill)`,value:`cursor`},{name:`.claude/commands (Claude Code /command)`,value:`claude`},{name:`自定义路径...`,value:`__custom__`}]}]),d,f;if(c===`cursor`)d=`.cursor/skills`,f=`skill`;else if(c===`claude`)d=`.claude/commands`,f=`command`;else{let{customDir:e}=await n.default.prompt([{type:`input`,name:`customDir`,message:`请输入自定义输出目录:`,validate:e=>e.trim().length>0||`路径不能为空`}]),{customMode:t}=await n.default.prompt([{type:`list`,name:`customMode`,message:`文件组织方式:`,choices:[{name:`<name>/SKILL.md (Cursor 风格)`,value:`skill`},{name:`<name>.md (Claude Code 风格)`,value:`command`}]}]);d=e.trim(),f=t}console.log(a.default.dim(`\n目标项目目录: ${e}`)),console.log(a.default.cyan(`
6
- 📋 已从 an.config.json 读取配置:`)),console.log(a.default.dim(` - API 目录: ${i.apiDir}`)),console.log(a.default.dim(` - API 文件: ${i.apiFiles.join(`, `)}`)),console.log(a.default.dim(` - 类型目录: ${i.typesDir}`)),console.log(a.default.dim(` - 输出目录: ${d} (${f===`command`?`/command 模式`:`Skill 模式`})\n`));for(let t of s)t===`api-report`?await p(e,i,d,f):t===`api-mock`&&await m(e,i,d,f);let h=f===`command`?`在 Claude Code 中使用 /api-report 或 /api-mock 命令调用。`:`在 Cursor 中即可使用该 Skill。`;console.log(a.default.bold.green(`
7
- ✅ Skill 初始化完成!`),a.default.dim(`\n${h}\n`))}exports.skillHandle=h;
5
+ `));let e=process.cwd(),n=u(e);if(!n){t.log.error(`未找到 an.config.json,请先在项目根目录配置 an.config.json`);return}let i=d(n);if(i.apiFiles.length===0){t.log.error(`an.config.json 中未找到 swaggerConfig 配置`);return}let{skills:a}=await r.default.prompt([{type:`checkbox`,name:`skills`,message:`选择要初始化的 Skill(可多选):`,choices:s,pageSize:10}]);if(a.length===0){t.log.warning(`未选择任何 Skill,已退出`);return}let{platform:c}=await r.default.prompt([{type:`list`,name:`platform`,message:`Skill 输出目标:`,choices:[{name:`.cursor/skills (Cursor Skill)`,value:`cursor`},{name:`.claude/commands (Claude Code /command)`,value:`claude`},{name:`自定义路径...`,value:`__custom__`}]}]),l,f;if(c===`cursor`)l=`.cursor/skills`,f=`skill`;else if(c===`claude`)l=`.claude/commands`,f=`command`;else{let{customDir:e}=await r.default.prompt([{type:`input`,name:`customDir`,message:`请输入自定义输出目录:`,validate:e=>e.trim().length>0||`路径不能为空`}]),{customMode:t}=await r.default.prompt([{type:`list`,name:`customMode`,message:`文件组织方式:`,choices:[{name:`<name>/SKILL.md (Cursor 风格)`,value:`skill`},{name:`<name>.md (Claude Code 风格)`,value:`command`}]}]);l=e.trim(),f=t}console.log(o.default.dim(`\n目标项目目录: ${e}`)),console.log(o.default.cyan(`
6
+ 📋 已从 an.config.json 读取配置:`)),console.log(o.default.dim(` - API 目录: ${i.apiDir}`)),console.log(o.default.dim(` - API 文件: ${i.apiFiles.join(`, `)}`)),console.log(o.default.dim(` - 类型目录: ${i.typesDir}`)),console.log(o.default.dim(` - 输出目录: ${l} (${f===`command`?`/command 模式`:`Skill 模式`})\n`));for(let t of a)t===`api-report`?await m(e,i,l,f):t===`api-mock`&&await h(e,i,l,f);let p=f===`command`?`在 Claude Code 中使用 /api-report 或 /api-mock 命令调用。`:`在 Cursor 中即可使用该 Skill。`;console.log(o.default.bold.green(`
7
+ ✅ Skill 初始化完成!`),o.default.dim(`\n${p}\n`))}exports.skillHandle=g;
@@ -1 +1 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`),n=require(`./const.cjs`);let r=require(`fs`),i=require(`path`),a=require(`shelljs`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,i.join)(__dirname,`.progress-estimator`)}),c=async()=>{(0,a.which)(`git`)||(t.log.warning(`Sorry, this script requires git`),(0,a.exit)(1));let e=new Promise((e,t)=>{try{(0,a.exec)(n.COMMIT_VERIFY,{silent:!0}),e({success:!0})}catch(e){t(Error(String(e)))}}),i=new Promise((e,i)=>{try{(0,a.exec)(n.NPM_HUSK,{silent:!0}),(0,a.exec)(n.HUSKY_INSTALL,{silent:!0}),(0,a.exec)(n.ADD_COMMIT_MSG,{silent:!0}),(0,r.writeFileSync)(`${process.cwd()}/commitlint.config.js`,n.COMMIT_CONFIG_CONTENT),e({success:!0})}catch(e){t.spinner.error(`Commitlint installation failed!`),i(Error(String(e)))}});try{await s(e,`Install Commitlint`,{estimate:1e4}),await s(i,`Setup Commitlint hooks and config`)}catch(e){console.log(`commitlintHanlde=====>`,e)}};exports.commitlintHanlde=c;
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);const n=require(`./const.cjs`);let r=require(`fs`),i=require(`path`),a=require(`shelljs`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,i.join)(__dirname,`.progress-estimator`)}),c=async()=>{(0,a.which)(`git`)||(t.log.warning(`Sorry, this script requires git`),(0,a.exit)(1));let e=new Promise((e,t)=>{try{(0,a.exec)(n.COMMIT_VERIFY,{silent:!0}),e({success:!0})}catch(e){t(Error(String(e)))}}),i=new Promise((e,i)=>{try{(0,a.exec)(n.NPM_HUSK,{silent:!0}),(0,a.exec)(n.HUSKY_INSTALL,{silent:!0}),(0,a.exec)(n.ADD_COMMIT_MSG,{silent:!0}),(0,r.writeFileSync)(`${process.cwd()}/commitlint.config.js`,n.COMMIT_CONFIG_CONTENT),e({success:!0})}catch(e){t.spinner.error(`Commitlint installation failed!`),i(Error(String(e)))}});try{await s(e,`Install Commitlint`,{estimate:1e4}),await s(i,`Setup Commitlint hooks and config`)}catch(e){console.log(`commitlintHanlde=====>`,e)}};exports.commitlintHanlde=c;
@@ -1,2 +1,2 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`),n=require(`./const.cjs`);let r=require(`child_process`),i=require(`fs`);i=e.__toESM(i);let a=require(`path`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,a.join)(__dirname,`.progress-estimator`)}),c={env:{browser:!0,es2021:!0},extends:[`eslint:recommended`,`plugin:react/recommended`,`plugin:@typescript-eslint/recommended`,`prettier`],overrides:[],parser:`@typescript-eslint/parser`,parserOptions:{ecmaVersion:`latest`,sourceType:`module`},plugins:[`react`,`@typescript-eslint`],rules:{}},l={env:{browser:!0,es2021:!0},extends:[`eslint:recommended`,`plugin:vue/vue3-essential`,`plugin:@typescript-eslint/recommended`,`prettier`],overrides:[],parser:`@typescript-eslint/parser`,parserOptions:{ecmaVersion:`latest`,sourceType:`module`},plugins:[`vue`,`@typescript-eslint`],rules:{}},u=async e=>{let a=e===`vue`?n.VUE_ESLINT:n.REACT_ESLINT,o=e===`vue`?l:c,u=new Promise((e,n)=>{let i=(0,r.exec)(a,e=>{e&&(t.spinner.error(e.message),n(e))});i.stdout?.on(`data`,()=>{e({success:!0})}),i.stderr?.on(`data`,()=>{t.spinner.error(`ESLint installation failed!`),n(Error(`ESLint installation failed!`))})}),d=new Promise((e,n)=>{try{let t=[`.eslintrc.js`,`.prettierrc.js`,`commitlint.config.js`].join(`
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);const n=require(`./const.cjs`);let r=require(`child_process`),i=require(`fs`);i=e.__toESM(i);let a=require(`path`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,a.join)(__dirname,`.progress-estimator`)}),c={env:{browser:!0,es2021:!0},extends:[`eslint:recommended`,`plugin:react/recommended`,`plugin:@typescript-eslint/recommended`,`prettier`],overrides:[],parser:`@typescript-eslint/parser`,parserOptions:{ecmaVersion:`latest`,sourceType:`module`},plugins:[`react`,`@typescript-eslint`],rules:{}},l={env:{browser:!0,es2021:!0},extends:[`eslint:recommended`,`plugin:vue/vue3-essential`,`plugin:@typescript-eslint/recommended`,`prettier`],overrides:[],parser:`@typescript-eslint/parser`,parserOptions:{ecmaVersion:`latest`,sourceType:`module`},plugins:[`vue`,`@typescript-eslint`],rules:{}},u=async e=>{let a=e===`vue`?n.VUE_ESLINT:n.REACT_ESLINT,o=e===`vue`?l:c,u=new Promise((e,n)=>{let i=(0,r.exec)(a,e=>{e&&(t.spinner.error(e.message),n(e))});i.stdout?.on(`data`,()=>{e({success:!0})}),i.stderr?.on(`data`,()=>{t.spinner.error(`ESLint installation failed!`),n(Error(`ESLint installation failed!`))})}),d=new Promise((e,n)=>{try{let t=[`.eslintrc.js`,`.prettierrc.js`,`commitlint.config.js`].join(`
2
2
  `);i.default.writeFileSync(`${process.cwd()}/.eslintignore`,t),i.default.writeFileSync(`${process.cwd()}/.eslintrc.js`,`module.exports = ${JSON.stringify(o,null,2)}`),e({success:!0})}catch(e){t.spinner.error(`.eslintrc file creation failed!`),n(Error(String(e)))}});try{await s(u,`Install ESLint`,{estimate:3e4}),await s(d,`Create ESLint config files`)}catch(e){console.error(`eslintHandle=====>`,e)}};exports.eslintHandle=u;
@@ -1,4 +1,4 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`),n=require(`./const.cjs`);let r=require(`child_process`),i=require(`fs`);i=e.__toESM(i);let a=require(`path`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,a.join)(__dirname,`.progress-estimator`)}),c=async e=>{let a=new Promise((i,a)=>{let o=(0,r.exec)(n.StyleLint(e),e=>{e&&(t.spinner.error(`Stylelint installation failed: ${e.message}`),a(e))});o.stdout?.on(`data`,function(){i({success:!0})}),o.stderr?.on(`data`,function(e){t.spinner.error(String(e)),a(Error(String(e)))})}),o=new Promise((n,r)=>{let a=`module.exports = {
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);const n=require(`./const.cjs`);let r=require(`child_process`),i=require(`fs`);i=e.__toESM(i);let a=require(`path`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,a.join)(__dirname,`.progress-estimator`)}),c=async e=>{let a=new Promise((i,a)=>{let o=(0,r.exec)(n.StyleLint(e),e=>{e&&(t.spinner.error(`Stylelint installation failed: ${e.message}`),a(e))});o.stdout?.on(`data`,function(){i({success:!0})}),o.stderr?.on(`data`,function(e){t.spinner.error(String(e)),a(Error(String(e)))})}),o=new Promise((n,r)=>{let a=`module.exports = {
2
2
  plugins: ['stylelint-${e}', 'stylelint-prettier'],
3
3
  extends: ['stylelint-config-standard', 'stylelint-prettier/recommended'],
4
4
  rules: {
@@ -1,2 +1,2 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`),n=require(`./const.cjs`);let r=require(`child_process`),i=require(`fs`),a=require(`path`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,a.join)(__dirname,`.progress-estimator`)}),c=async()=>{let e=new Promise((e,i)=>{let a=(0,r.exec)(n.Prettier,e=>{e&&(t.spinner.error(e.message),i(e))});a.stdout?.on(`data`,function(){e({success:!0})}),a.stderr?.on(`data`,function(e){t.spinner.error(String(e)),i(Error(String(e)))})}),o=new Promise((e,n)=>{try{(0,i.writeFileSync)((0,a.join)(process.cwd(),`.prettierrc.js`),[`module.exports = {`,`printWidth: 80,`,`tabWidth: 2,`,`useTabs: true,`,`semi: true,`,`singleQuote: true,`,`quoteProps: "as-needed",`,`trailingComma: "none",`,`bracketSpacing: true,`,`arrowParens: "always",`,`rangeStart: 0,`,`proseWrap: "preserve",`,`htmlWhitespaceSensitivity: "css"`,`};`].join(`
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);const n=require(`./const.cjs`);let r=require(`child_process`),i=require(`fs`),a=require(`path`),o=require(`progress-estimator`);o=e.__toESM(o);const s=(0,o.default)({storagePath:(0,a.join)(__dirname,`.progress-estimator`)}),c=async()=>{let e=new Promise((e,i)=>{let a=(0,r.exec)(n.Prettier,e=>{e&&(t.spinner.error(e.message),i(e))});a.stdout?.on(`data`,function(){e({success:!0})}),a.stderr?.on(`data`,function(e){t.spinner.error(String(e)),i(Error(String(e)))})}),o=new Promise((e,n)=>{try{(0,i.writeFileSync)((0,a.join)(process.cwd(),`.prettierrc.js`),[`module.exports = {`,`printWidth: 80,`,`tabWidth: 2,`,`useTabs: true,`,`semi: true,`,`singleQuote: true,`,`quoteProps: "as-needed",`,`trailingComma: "none",`,`bracketSpacing: true,`,`arrowParens: "always",`,`rangeStart: 0,`,`proseWrap: "preserve",`,`htmlWhitespaceSensitivity: "css"`,`};`].join(`
2
2
  `),`utf8`),e({success:!0})}catch(e){t.spinner.error(`.prettierrc file write failed!`),n(Error(String(e)))}});try{await s(e,`Install Prettier`,{estimate:1e4}),await s(o,`Create .prettierrc file`)}catch(e){console.error(`prettierHanlde======>`,e)}};exports.prettierHanlde=c;
@@ -1 +1 @@
1
- require(`../_virtual/rolldown_runtime.cjs`);const e=require(`../utils/index.cjs`);let t=require(`fs`);const n={"editor.formatOnSave":!0,"[javascript]":{"editor.defaultFormatter":`vscode.typescript-language-features`},"[typescript]":{"editor.defaultFormatter":`esbenp.prettier-vscode`},"[json]":{"editor.quickSuggestions":{strings:!0},"editor.suggest.insertMode":`replace`,"gitlens.codeLens.scopes":[`document`],"editor.defaultFormatter":`esbenp.prettier-vscode`}};var r=()=>{let r=`${process.cwd()}/.vscode/settings.json`;try{if((0,t.existsSync)(r)){let n=(0,t.readFileSync)(r,`utf-8`),i=JSON.parse(n);i[`editor.formatOnSave`]=!0,i[`editor.defaultFormatter`]=`esbenp.prettier-vscode`,(0,t.writeFileSync)(r,JSON.stringify(i,null,` `)),e.spinner.success(`VSCode settings updated!`)}else{let r=`${process.cwd()}/.vscode`;(0,t.mkdirSync)(r),(0,t.writeFileSync)(`${r}/settings.json`,JSON.stringify(n,null,` `)),e.spinner.success(`VSCode settings file created!`)}}catch(t){e.spinner.error(`VSCode settings file creation failed!`),console.error(t)}return Promise.resolve()};exports.default=r;
1
+ require(`../_virtual/rolldown_runtime.cjs`);const e=require(`../utils/logger.cjs`);require(`../utils/index.cjs`);let t=require(`fs`);const n={"editor.formatOnSave":!0,"[javascript]":{"editor.defaultFormatter":`vscode.typescript-language-features`},"[typescript]":{"editor.defaultFormatter":`esbenp.prettier-vscode`},"[json]":{"editor.quickSuggestions":{strings:!0},"editor.suggest.insertMode":`replace`,"gitlens.codeLens.scopes":[`document`],"editor.defaultFormatter":`esbenp.prettier-vscode`}};var r=()=>{let r=`${process.cwd()}/.vscode/settings.json`;try{if((0,t.existsSync)(r)){let n=(0,t.readFileSync)(r,`utf-8`),i=JSON.parse(n);i[`editor.formatOnSave`]=!0,i[`editor.defaultFormatter`]=`esbenp.prettier-vscode`,(0,t.writeFileSync)(r,JSON.stringify(i,null,` `)),e.spinner.success(`VSCode settings updated!`)}else{let r=`${process.cwd()}/.vscode`;(0,t.mkdirSync)(r),(0,t.writeFileSync)(`${r}/settings.json`,JSON.stringify(n,null,` `)),e.spinner.success(`VSCode settings file created!`)}}catch(t){e.spinner.error(`VSCode settings file creation failed!`),console.error(t)}return Promise.resolve()};exports.default=r;
@@ -1,6 +1,6 @@
1
- const e=require(`../../utils/index.cjs`),t=require(`../shared/format.cjs`),n=require(`../shared/naming.cjs`),r=require(`../shared/schema-utils.cjs`);var i=class{config;enumsMap=new Map;constructor(e){this.config=e}nullable(e){return r.nullableSuffix(e)}extractEnumMetadata(t){let n={},{enmuConfig:r}=this.config,i=t;if(t.example&&e.isValidJSON(t.example)&&(n.rawEnumJson=t.example),r?.varnames){let e=i[r.varnames];Array.isArray(e)&&(n.customNames=e.map(e=>`${e}`))}if(r?.comment){let e=i[r.comment];if(e&&typeof e==`object`&&!Array.isArray(e)){let t={};Object.entries(e).sort((e,t)=>e[0].localeCompare(t[0])).forEach(([e,n])=>{typeof n==`string`&&(t[e]=n)}),Object.keys(t).length&&(n.descriptionMap=t)}}return n}resolveEnumMemberName(e,t,n){let{customNames:r,isNumericEnum:i,treatStringAsNumeric:a}=n,o=r?.[t];return typeof o==`string`&&o.trim()?o:i||typeof e==`string`&&a?`NUMBER_${e}`:typeof e==`string`&&e?e.toUpperCase():`ENUM_${t}`}convertJsonToEnumString(e,r){try{let i=JSON.parse(e);return this.config.enmuConfig.erasableSyntaxOnly?`export const ${r} = {\n${Object.entries(i).sort((e,t)=>e[0].localeCompare(t[0])).map(([e,n])=>`${t.getIndentation(this.config)}${e}: '${String(n)}'`).join(`,
2
- `)}\n} as const;\n\nexport type ${n.getEnumTypeName(this.config,r)} = typeof ${r}[keyof typeof ${r}];`:`export enum ${r} {\n${Object.entries(i).sort((e,t)=>e[0].localeCompare(t[0])).map(([e,n])=>`${t.getIndentation(this.config)}${e} = '${String(n)}'`).join(`,
3
- `)}\n}`}catch(e){return console.error(`JSON 解析失败:`,e),``}}normalizeEnumValues(e){return e.map((e,t)=>{if(typeof e==`string`||typeof e==`number`)return e;if(e&&typeof e==`object`){let n=e;if(n.value!==void 0&&(typeof n.value==`string`||typeof n.value==`number`))return n.value;if(n.key!==void 0&&(typeof n.key==`string`||typeof n.key==`number`))return n.key;if(n.id!==void 0&&(typeof n.id==`string`||typeof n.id==`number`))return n.id;try{return JSON.stringify(n)}catch{return`ENUM_${t}`}}return`ENUM_${t}`})}parseEnum(e,r){if(!Array.isArray(e.enum))return null;let i=[`integer`,`number`],a=this.normalizeEnumValues(e.enum),o=!!(e.type&&i.includes(e.type)),s=e.type===`string`&&a.every(e=>typeof e==`string`&&!isNaN(Number(e))),{customNames:c,descriptionMap:l,rawEnumJson:u}=this.extractEnumMetadata(e),d=this.config.enmuConfig.erasableSyntaxOnly;if(u){let e=this.convertJsonToEnumString(u,r);if(e)return{headerRef:``,renderStr:e}}let f=a.map((e,n)=>{let r=this.resolveEnumMemberName(e,n,{customNames:c,isNumericEnum:o,treatStringAsNumeric:s}),i=o?`${e}`:`'${String(e)}'`,a=d?`${r}: ${i},`:`${r} = ${i},`,u=l?.[String(e)];return u?[`${t.getIndentation(this.config)}/** ${u} */`,`${t.getIndentation(this.config)}${a}`].join(`
4
- `):`${t.getIndentation(this.config)}${a}`});return f.length?d?{headerRef:``,renderStr:[`export const ${r} = {`,...f,`} as const;`,``,`export type ${n.getEnumTypeName(this.config,r)} = typeof ${r}[keyof typeof ${r}];`].join(`
5
- `)}:{headerRef:``,renderStr:[`export enum ${r} {`,...f,`}`].join(`
6
- `)}:null}handleEnum(r,i,a=!1){let o=n.wordsToPascalCase(n.resolveSchemaName(i)),s=n.getEnumTypeName(this.config,o),c=n.typeNameToFileName(o);if(e.isValidJSON(r.example)){let e=this.convertJsonToEnumString(r.example,o);return this.enumsMap.has(c)||this.enumsMap.set(c,{fileName:c,content:e}),{headerRef:`import type { ${s} } from '${this.config.importEnumPath}';`,renderStr:`${t.getIndentation(this.config)}${i}${a?``:`?`}: ${s}${this.nullable(r.nullable)};`,comment:e,typeName:s}}let l=this.parseEnum(r,o);return l?(this.enumsMap.has(c)||this.enumsMap.set(c,{fileName:c,content:l.renderStr}),{headerRef:`import type { ${s} } from '${this.config.importEnumPath}';`,renderStr:`${t.getIndentation(this.config)}${i}${a?``:`?`}: ${s}${this.nullable(r.nullable)};`,typeName:s}):null}addEnumByName(e,t){let r=n.typeNameToFileName(e);this.enumsMap.has(r)||this.enumsMap.set(r,{fileName:r,content:t})}hasEnum(e){let t=n.typeNameToFileName(e);return this.enumsMap.has(t)}getEnumTypeName(e){return n.getEnumTypeName(this.config,e)}getEnumImport(e){return`import type { ${n.getEnumTypeName(this.config,e)} } from '${this.config.importEnumPath}';`}};exports.EnumParser=i;
1
+ const e=require(`../../utils/logger.cjs`),t=require(`../../utils/index.cjs`),n=require(`../shared/format.cjs`),r=require(`../shared/naming.cjs`),i=require(`../shared/schema-utils.cjs`);var a=class{config;enumsMap=new Map;constructor(e){this.config=e}nullable(e){return i.nullableSuffix(e)}extractEnumMetadata(e){let n={},{enmuConfig:r}=this.config,i=e;if(e.example&&t.isValidJSON(e.example)&&(n.rawEnumJson=e.example),r?.varnames){let e=i[r.varnames];Array.isArray(e)&&(n.customNames=e.map(e=>`${e}`))}if(r?.comment){let e=i[r.comment];if(e&&typeof e==`object`&&!Array.isArray(e)){let t={};Object.entries(e).sort((e,t)=>e[0].localeCompare(t[0])).forEach(([e,n])=>{typeof n==`string`&&(t[e]=n)}),Object.keys(t).length&&(n.descriptionMap=t)}}return n}resolveEnumMemberName(e,t,n){let{customNames:r,isNumericEnum:i,treatStringAsNumeric:a}=n,o=r?.[t];return typeof o==`string`&&o.trim()?o:i||typeof e==`string`&&a?`NUMBER_${e}`:typeof e==`string`&&e?e.toUpperCase():`ENUM_${t}`}convertJsonToEnumString(t,i){try{let e=JSON.parse(t);return this.config.enmuConfig.erasableSyntaxOnly?`export const ${i} = {\n${Object.entries(e).sort((e,t)=>e[0].localeCompare(t[0])).map(([e,t])=>`${n.getIndentation(this.config)}${e}: '${String(t)}'`).join(`,
2
+ `)}\n} as const;\n\nexport type ${r.getEnumTypeName(this.config,i)} = typeof ${i}[keyof typeof ${i}];`:`export enum ${i} {\n${Object.entries(e).sort((e,t)=>e[0].localeCompare(t[0])).map(([e,t])=>`${n.getIndentation(this.config)}${e} = '${String(t)}'`).join(`,
3
+ `)}\n}`}catch(t){return e.log.error(`JSON 解析失败: ${t instanceof Error?t.message:String(t)}`),``}}normalizeEnumValues(e){return e.map((e,t)=>{if(typeof e==`string`||typeof e==`number`)return e;if(e&&typeof e==`object`){let n=e;if(n.value!==void 0&&(typeof n.value==`string`||typeof n.value==`number`))return n.value;if(n.key!==void 0&&(typeof n.key==`string`||typeof n.key==`number`))return n.key;if(n.id!==void 0&&(typeof n.id==`string`||typeof n.id==`number`))return n.id;try{return JSON.stringify(n)}catch{return`ENUM_${t}`}}return`ENUM_${t}`})}parseEnum(e,t){if(!Array.isArray(e.enum))return null;let i=[`integer`,`number`],a=this.normalizeEnumValues(e.enum),o=!!(e.type&&i.includes(e.type)),s=e.type===`string`&&a.every(e=>typeof e==`string`&&!isNaN(Number(e))),{customNames:c,descriptionMap:l,rawEnumJson:u}=this.extractEnumMetadata(e),d=this.config.enmuConfig.erasableSyntaxOnly;if(u){let e=this.convertJsonToEnumString(u,t);if(e)return{headerRef:``,renderStr:e}}let f=a.map((e,t)=>{let r=this.resolveEnumMemberName(e,t,{customNames:c,isNumericEnum:o,treatStringAsNumeric:s}),i=o?`${e}`:`'${String(e)}'`,a=d?`${r}: ${i},`:`${r} = ${i},`,u=l?.[String(e)];return u?[`${n.getIndentation(this.config)}/** ${u} */`,`${n.getIndentation(this.config)}${a}`].join(`
4
+ `):`${n.getIndentation(this.config)}${a}`});return f.length?d?{headerRef:``,renderStr:[`export const ${t} = {`,...f,`} as const;`,``,`export type ${r.getEnumTypeName(this.config,t)} = typeof ${t}[keyof typeof ${t}];`].join(`
5
+ `)}:{headerRef:``,renderStr:[`export enum ${t} {`,...f,`}`].join(`
6
+ `)}:null}handleEnum(e,i,a=!1){let o=r.wordsToPascalCase(r.resolveSchemaName(i)),s=r.getEnumTypeName(this.config,o),c=r.typeNameToFileName(o);if(t.isValidJSON(e.example)){let t=this.convertJsonToEnumString(e.example,o);return this.enumsMap.has(c)||this.enumsMap.set(c,{fileName:c,content:t}),{headerRef:`import type { ${s} } from '${this.config.importEnumPath}';`,renderStr:`${n.getIndentation(this.config)}${i}${a?``:`?`}: ${s}${this.nullable(e.nullable)};`,comment:t,typeName:s}}let l=this.parseEnum(e,o);return l?(this.enumsMap.has(c)||this.enumsMap.set(c,{fileName:c,content:l.renderStr}),{headerRef:`import type { ${s} } from '${this.config.importEnumPath}';`,renderStr:`${n.getIndentation(this.config)}${i}${a?``:`?`}: ${s}${this.nullable(e.nullable)};`,typeName:s}):null}addEnumByName(e,t){let n=r.typeNameToFileName(e);this.enumsMap.has(n)||this.enumsMap.set(n,{fileName:n,content:t})}hasEnum(e){let t=r.typeNameToFileName(e);return this.enumsMap.has(t)}getEnumTypeName(e){return r.getEnumTypeName(this.config,e)}getEnumImport(e){return`import type { ${r.getEnumTypeName(this.config,e)} } from '${this.config.importEnumPath}';`}};exports.EnumParser=a;
@@ -1,7 +1,7 @@
1
- const e=require(`../../utils/index.cjs`),t=require(`../shared/format.cjs`),n=require(`../shared/naming.cjs`),r=require(`../shared/schema-utils.cjs`),i=require(`./enum-parser.cjs`);var a=class{schemas;config;requiredFieldSet=new Set;defaultReturn={headerRef:``,renderStr:``,comment:``,typeName:``};enumParser;schemasMap=new Map;constructor(e,t){this.schemas=e,this.config=t,this.enumParser=new i.EnumParser(t)}nullable(e){return r.nullableSuffix(e)}isRequired(e){return this.requiredFieldSet.has(e)}stringifyValue(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}buildDocComment(e,n){let r=t.getIndentation(this.config),i=[],a=e,o=a.title,s=a.description;o&&i.push(`@title ${o}`),s&&s.split(`
1
+ const e=require(`../../utils/logger.cjs`),t=require(`../../utils/index.cjs`),n=require(`../shared/format.cjs`),r=require(`../shared/naming.cjs`),i=require(`../shared/schema-utils.cjs`),a=require(`./enum-parser.cjs`);var o=class{schemas;config;requiredFieldSet=new Set;defaultReturn={headerRef:``,renderStr:``,comment:``,typeName:``};enumParser;schemasMap=new Map;constructor(e,t){this.schemas=e,this.config=t,this.enumParser=new a.EnumParser(t)}nullable(e){return i.nullableSuffix(e)}isRequired(e){return this.requiredFieldSet.has(e)}stringifyValue(e){if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}buildDocComment(e,t){let r=n.getIndentation(this.config),i=[],a=e,o=a.title,s=a.description;o&&i.push(`@title ${o}`),s&&s.split(`
2
2
  `).forEach((e,t)=>i.push(t===0?`@description ${e}`:e)),`deprecated`in e&&e.deprecated&&i.push(`@deprecated`),`default`in e&&e.default!==void 0&&i.push(`@default ${this.stringifyValue(e.default)}`),`example`in e&&e.example!==void 0&&i.push(`@example ${this.stringifyValue(e.example)}`),`format`in e&&e.format&&i.push(`@format ${e.format}`);let c=[[`pattern`,`@pattern`],[`minimum`,`@minimum`],[`maximum`,`@maximum`],[`exclusiveMinimum`,`@exclusiveMinimum`],[`exclusiveMaximum`,`@exclusiveMaximum`],[`minLength`,`@minLength`],[`maxLength`,`@maxLength`],[`minItems`,`@minItems`],[`maxItems`,`@maxItems`]],l=e;if(c.some(([e])=>l[e]!==void 0)){let e=c.map(([e,t])=>l[e]===void 0?``:`${t} ${this.stringifyValue(l[e])}`).filter(Boolean);i.push(...e)}if(!i.length)return``;let u=[`${r}/**`];return i.forEach(e=>{e&&(e.includes(`
3
3
  `)?e.split(`
4
4
  `).forEach(e=>u.push(`${r} * ${e}`)):u.push(`${r} * ${e}`))}),u.push(`${r} */`),u.join(`
5
- `)}nameTheHumpCenterStroke(e){let t=e.replace(`#/components/schemas/`,``),r=n.resolveSchemaName(t),i={typeName:r,fileName:n.typeNameToFileName(r),dataType:``};if(this.schemas){let e=this.schemas[t];e?.enum?i.dataType=`enum`:i.dataType=e?.type}return i}parseRef(e){if(!e?.trim())return{headerRefStr:``,typeName:``,dataType:``};let{fileName:t,typeName:r,dataType:i=``}=this.nameTheHumpCenterStroke(e),a;return a=i===`enum`?`import type { ${n.getEnumTypeName(this.config,r)} } from '${this.config.importEnumPath}';`:`import type { ${r} } from './${t}';`,{headerRefStr:a,typeName:r,dataType:i}}parseArray(r,i){let a=r,{items:o={},nullable:s}=a,c=o?.$ref;if(c){let{headerRefStr:r,typeName:o,dataType:l}=this.parseRef(c),u=a.example;if(l===`enum`&&typeof u==`string`&&e.isValidJSON(u)){let e=this.enumParser.convertJsonToEnumString(u,o);this.enumParser.addEnumByName(o,e)}let d=l===`enum`?n.getEnumTypeName(this.config,o):o;return{headerRef:r,renderStr:`${t.getIndentation(this.config)}${i}${this.isRequired(i)?``:`?`}: Array<${d}>${this.nullable(s)};`,typeName:d}}let l=o?.type,u=l===`integer`?`number`:l;return l===`object`&&(u=`Record<string, unknown>`),{headerRef:``,renderStr:`${t.getIndentation(this.config)}${i}${this.isRequired(i)?``:`?`}: Array<${u}>${this.nullable(s)};`,typeName:u}}parseBoolean(e,n){return e.type===`boolean`?`${t.getIndentation(this.config)}${n}${this.isRequired(n)?``:`?`}: boolean${this.nullable(e.nullable)};`:``}parseInteger(e,n){return Array.isArray(e.enum)?this.enumParser.handleEnum(e,n,this.isRequired(n))?.renderStr??``:`${t.getIndentation(this.config)}${n}${this.isRequired(n)?``:`?`}: number${this.nullable(e.nullable)};`}parseNumber(e,n){if(e.type!==`number`)return null;if(e.enum){let t=this.enumParser.handleEnum(e,n,this.isRequired(n));if(t)return t}return{headerRef:``,renderStr:`${t.getIndentation(this.config)}${n}${this.isRequired(n)?``:`?`}: number${this.nullable(e.nullable)};`}}getStringTypeByFormat(e){if(!e)return`string`;switch(e){case`date-time`:case`date`:case`time`:return`Date`;case`email`:case`idn-email`:case`uuid`:case`uri`:case`uri-reference`:case`iri`:case`iri-reference`:case`hostname`:case`idn-hostname`:case`ipv4`:case`ipv6`:return`string`;case`binary`:return`File`;default:return`string`}}parseString(e,n){if(e.type!==`string`)return null;if(e.enum){let t=this.enumParser.handleEnum(e,n,this.isRequired(n));if(t)return t}let r=this.getStringTypeByFormat(e.format);return{headerRef:``,renderStr:`${t.getIndentation(this.config)}${n}${this.isRequired(n)?``:`?`}: ${r}${this.nullable(e.nullable)};`}}parseObject(e,n){let r=``,i=``;if(e.type===`object`){let a=e;if(typeof a.additionalProperties==`object`){let e=this.parseArray(a.additionalProperties,n)??this.defaultReturn;r=e?.headerRef??``,i=e?.renderStr??``}i=typeof a.additionalProperties==`boolean`?`${t.getIndentation(this.config)}${n}${this.isRequired(n)?``:`?`}: Record<string, unknown>${this.nullable(a.nullable)};`:`${t.getIndentation(this.config)}${n}${this.isRequired(n)?``:`?`}: ${e.type}${this.nullable(e.nullable)};`}return{headerRef:r,renderStr:i}}parseProperties(r,i){let a=[],o=[];if(!r)return{headerRef:``,renderStr:`export interface ${i} {}`};let s=Object.keys(r).sort();for(let c of s){let s=r[c];if(s?.$ref){let{headerRefStr:r,typeName:l,dataType:u}=this.parseRef(s.$ref);!o.includes(r)&&l!==i&&o.push(r);let d=s,f=this.buildDocComment(d,c);f!==``&&a.push(f);let p=u===`enum`?n.getEnumTypeName(this.config,l):l;a.push(`${t.getIndentation(this.config)}${c}${this.isRequired(c)?``:`?`}: ${p};`);let m=s.example;if(u===`enum`&&m&&e.isValidJSON(m)){let e=this.enumParser.convertJsonToEnumString(m,l);this.enumParser.addEnumByName(l,e)}continue}if(`allOf`in s||`anyOf`in s||`oneOf`in s){let e=s.allOf?.length?`allOf`:s.anyOf?.length?`anyOf`:s.oneOf?.length?`oneOf`:null;if(e){let r=e===`allOf`?` & `:` | `,l=s[e],u=[];for(let e of l)if(e?.$ref){let{headerRefStr:t,typeName:r,dataType:a}=this.parseRef(e.$ref),s=a===`enum`?n.getEnumTypeName(this.config,r):r;!o.includes(t)&&r!==i&&o.push(t),u.push(s)}else switch(e.type){case`string`:u.push(`string`);break;case`number`:case`integer`:u.push(`number`);break;case`boolean`:u.push(`boolean`);break;case`array`:u.push(`unknown[]`);break;case`object`:u.push(`Record<string, unknown>`);break;default:u.push(`unknown`);break}if(u.length>0){let e=this.buildDocComment(s,c);e!==``&&a.push(e);let n=u.join(r),i=u.length>1&&s.nullable?`(${n})`:n;a.push(`${t.getIndentation(this.config)}${c}${this.isRequired(c)?``:`?`}: ${i}${this.nullable(s.nullable)};`);continue}}}let l=s,u=this.buildDocComment(l,c);switch(u!==``&&a.push(u),l.type){case`array`:{let e=this.parseArray(l,c)??this.defaultReturn;a.push(e?.renderStr??``),!o.includes(e.headerRef)&&i!==e.typeName&&o.push(e.headerRef)}break;case`boolean`:a.push(this.parseBoolean(l,c));break;case`integer`:a.push(this.parseInteger(l,c));break;case`number`:{let e=this.parseNumber(l,c);e&&(e.headerRef&&!o.includes(e.headerRef)&&o.push(e.headerRef),a.push(e.renderStr))}break;case`string`:if(l.enum){let e=this.enumParser.handleEnum(l,c,this.isRequired(c));e&&(e.headerRef&&!o.includes(e.headerRef)&&o.push(e.headerRef),e.renderStr&&a.push(e.renderStr))}else a.push(this.parseString(l,c)?.renderStr??``);break;case`object`:{let{headerRef:e,renderStr:t}=this.parseObject(l,c)??this.defaultReturn;a.push(t),o.includes(e)||o.push(e)}break}}let c=[`export interface ${i} {`,...a,`}`];if(o.length>0){let e=o.filter(e=>e!==``);e.length>0&&e.push(``),c.unshift(...e)}let l=c.join(`
5
+ `)}nameTheHumpCenterStroke(e){let t=e.replace(`#/components/schemas/`,``),n=r.resolveSchemaName(t),i={typeName:n,fileName:r.typeNameToFileName(n),dataType:``};if(this.schemas){let e=this.schemas[t];e?.enum?i.dataType=`enum`:i.dataType=e?.type}return i}parseRef(e){if(!e?.trim())return{headerRefStr:``,typeName:``,dataType:``};let{fileName:t,typeName:n,dataType:i=``}=this.nameTheHumpCenterStroke(e),a;return a=i===`enum`?`import type { ${r.getEnumTypeName(this.config,n)} } from '${this.config.importEnumPath}';`:`import type { ${n} } from './${t}';`,{headerRefStr:a,typeName:n,dataType:i}}parseArray(e,i){let a=e,{items:o={},nullable:s}=a,c=o?.$ref;if(c){let{headerRefStr:e,typeName:o,dataType:l}=this.parseRef(c),u=a.example;if(l===`enum`&&typeof u==`string`&&t.isValidJSON(u)){let e=this.enumParser.convertJsonToEnumString(u,o);this.enumParser.addEnumByName(o,e)}let d=l===`enum`?r.getEnumTypeName(this.config,o):o;return{headerRef:e,renderStr:`${n.getIndentation(this.config)}${i}${this.isRequired(i)?``:`?`}: Array<${d}>${this.nullable(s)};`,typeName:d}}let l=o?.type,u=l===`integer`?`number`:l;return l===`object`&&(u=`Record<string, unknown>`),{headerRef:``,renderStr:`${n.getIndentation(this.config)}${i}${this.isRequired(i)?``:`?`}: Array<${u}>${this.nullable(s)};`,typeName:u}}parseBoolean(e,t){return e.type===`boolean`?`${n.getIndentation(this.config)}${t}${this.isRequired(t)?``:`?`}: boolean${this.nullable(e.nullable)};`:``}parseInteger(e,t){return Array.isArray(e.enum)?this.enumParser.handleEnum(e,t,this.isRequired(t))?.renderStr??``:`${n.getIndentation(this.config)}${t}${this.isRequired(t)?``:`?`}: number${this.nullable(e.nullable)};`}parseNumber(e,t){if(e.type!==`number`)return null;if(e.enum){let n=this.enumParser.handleEnum(e,t,this.isRequired(t));if(n)return n}return{headerRef:``,renderStr:`${n.getIndentation(this.config)}${t}${this.isRequired(t)?``:`?`}: number${this.nullable(e.nullable)};`}}getStringTypeByFormat(e){if(!e)return`string`;switch(e){case`date-time`:case`date`:case`time`:return`Date`;case`email`:case`idn-email`:case`uuid`:case`uri`:case`uri-reference`:case`iri`:case`iri-reference`:case`hostname`:case`idn-hostname`:case`ipv4`:case`ipv6`:return`string`;case`binary`:return`File`;default:return`string`}}parseString(e,t){if(e.type!==`string`)return null;if(e.enum){let n=this.enumParser.handleEnum(e,t,this.isRequired(t));if(n)return n}let r=this.getStringTypeByFormat(e.format);return{headerRef:``,renderStr:`${n.getIndentation(this.config)}${t}${this.isRequired(t)?``:`?`}: ${r}${this.nullable(e.nullable)};`}}parseObject(e,t){let r=``,i=``;if(e.type===`object`){let a=e;if(typeof a.additionalProperties==`object`){let e=this.parseArray(a.additionalProperties,t)??this.defaultReturn;r=e?.headerRef??``,i=e?.renderStr??``}i=typeof a.additionalProperties==`boolean`?`${n.getIndentation(this.config)}${t}${this.isRequired(t)?``:`?`}: Record<string, unknown>${this.nullable(a.nullable)};`:`${n.getIndentation(this.config)}${t}${this.isRequired(t)?``:`?`}: ${e.type}${this.nullable(e.nullable)};`}return{headerRef:r,renderStr:i}}parseProperties(e,i){let a=[],o=[];if(!e)return{headerRef:``,renderStr:`export interface ${i} {}`};let s=Object.keys(e).sort();for(let c of s){let s=e[c];if(s?.$ref){let{headerRefStr:e,typeName:l,dataType:u}=this.parseRef(s.$ref);!o.includes(e)&&l!==i&&o.push(e);let d=s,f=this.buildDocComment(d,c);f!==``&&a.push(f);let p=u===`enum`?r.getEnumTypeName(this.config,l):l;a.push(`${n.getIndentation(this.config)}${c}${this.isRequired(c)?``:`?`}: ${p};`);let m=s.example;if(u===`enum`&&m&&t.isValidJSON(m)){let e=this.enumParser.convertJsonToEnumString(m,l);this.enumParser.addEnumByName(l,e)}continue}if(`allOf`in s||`anyOf`in s||`oneOf`in s){let e=s.allOf?.length?`allOf`:s.anyOf?.length?`anyOf`:s.oneOf?.length?`oneOf`:null;if(e){let t=e===`allOf`?` & `:` | `,l=s[e],u=[];for(let e of l)if(e?.$ref){let{headerRefStr:t,typeName:n,dataType:a}=this.parseRef(e.$ref),s=a===`enum`?r.getEnumTypeName(this.config,n):n;!o.includes(t)&&n!==i&&o.push(t),u.push(s)}else switch(e.type){case`string`:u.push(`string`);break;case`number`:case`integer`:u.push(`number`);break;case`boolean`:u.push(`boolean`);break;case`array`:u.push(`unknown[]`);break;case`object`:u.push(`Record<string, unknown>`);break;default:u.push(`unknown`);break}if(u.length>0){let e=this.buildDocComment(s,c);e!==``&&a.push(e);let r=u.join(t),i=u.length>1&&s.nullable?`(${r})`:r;a.push(`${n.getIndentation(this.config)}${c}${this.isRequired(c)?``:`?`}: ${i}${this.nullable(s.nullable)};`);continue}}}let l=s,u=this.buildDocComment(l,c);switch(u!==``&&a.push(u),l.type){case`array`:{let e=this.parseArray(l,c)??this.defaultReturn;a.push(e?.renderStr??``),!o.includes(e.headerRef)&&i!==e.typeName&&o.push(e.headerRef)}break;case`boolean`:a.push(this.parseBoolean(l,c));break;case`integer`:a.push(this.parseInteger(l,c));break;case`number`:{let e=this.parseNumber(l,c);e&&(e.headerRef&&!o.includes(e.headerRef)&&o.push(e.headerRef),a.push(e.renderStr))}break;case`string`:if(l.enum){let e=this.enumParser.handleEnum(l,c,this.isRequired(c));e&&(e.headerRef&&!o.includes(e.headerRef)&&o.push(e.headerRef),e.renderStr&&a.push(e.renderStr))}else a.push(this.parseString(l,c)?.renderStr??``);break;case`object`:{let{headerRef:e,renderStr:t}=this.parseObject(l,c)??this.defaultReturn;a.push(t),o.includes(e)||o.push(e)}break}}let c=[`export interface ${i} {`,...a,`}`];if(o.length>0){let e=o.filter(e=>e!==``);e.length>0&&e.push(``),c.unshift(...e)}let l=c.join(`
6
6
  `);return{headerRef:o.join(`
7
- `),renderStr:l}}generateContent(e,t){if(`items`in e)return console.warn(`数组类型未处理: ${t}`,e.items),``;switch(e.type){case`boolean`:return this.parseBoolean(e,t);case`integer`:return this.parseInteger(e,t);case`number`:return this.parseNumber(e,t)?.renderStr??``;case`object`:return this.parseProperties(e.properties,t)?.renderStr??``;case`string`:return this.parseString(e,t)?.renderStr??``;default:return``}}main(){if(!this.schemas)return console.warn(`schemas 为空`),{enumsMap:this.enumParser.enumsMap,schemasMap:this.schemasMap};let e=Object.keys(this.schemas).sort();for(let t of e){let e=this.schemas[t];if(`$ref`in e){console.warn(`跳过 ReferenceObject: ${t}`);continue}let r=`type`in e?e:null;if(!r?.type){console.warn(`无效的 schema 对象: ${t}`);continue}if(Array.isArray(e.enum)){let r=n.resolveSchemaName(t),i=this.enumParser.parseEnum(e,r);i?.renderStr&&!this.enumParser.hasEnum(r)&&this.enumParser.addEnumByName(r,i.renderStr);continue}this.requiredFieldSet=new Set(e.required??[]);let i=n.resolveSchemaName(t),a=n.typeNameToFileName(i),o=this.generateContent(r,i);o&&((o.includes(`export enum `)||o.includes(`export const `)&&o.includes(`as const`))&&!this.enumParser.hasEnum(i)?this.enumParser.addEnumByName(i,o):this.schemasMap.set(i,{fileName:a,content:o}))}return{enumsMap:this.enumParser.enumsMap,schemasMap:this.schemasMap}}};exports.ComponentSchemaResolver=a;
7
+ `),renderStr:l}}generateContent(t,n){if(`items`in t)return e.log.warn(`数组类型未处理: ${n}`),``;switch(t.type){case`boolean`:return this.parseBoolean(t,n);case`integer`:return this.parseInteger(t,n);case`number`:return this.parseNumber(t,n)?.renderStr??``;case`object`:return this.parseProperties(t.properties,n)?.renderStr??``;case`string`:return this.parseString(t,n)?.renderStr??``;default:return``}}main(){if(!this.schemas)return e.log.warn(`schemas 为空`),{enumsMap:this.enumParser.enumsMap,schemasMap:this.schemasMap};let t=Object.keys(this.schemas).sort();for(let n of t){let t=this.schemas[n];if(`$ref`in t){e.log.warn(`跳过 ReferenceObject: ${n}`);continue}let i=`type`in t?t:null;if(!i?.type){e.log.warn(`无效的 schema 对象: ${n}`);continue}if(Array.isArray(t.enum)){let e=r.resolveSchemaName(n),i=this.enumParser.parseEnum(t,e);i?.renderStr&&!this.enumParser.hasEnum(e)&&this.enumParser.addEnumByName(e,i.renderStr);continue}this.requiredFieldSet=new Set(t.required??[]);let a=r.resolveSchemaName(n),o=r.typeNameToFileName(a),s=this.generateContent(i,a);s&&((s.includes(`export enum `)||s.includes(`export const `)&&s.includes(`as const`))&&!this.enumParser.hasEnum(a)?this.enumParser.addEnumByName(a,s):this.schemasMap.set(a,{fileName:o,content:s}))}return{enumsMap:this.enumParser.enumsMap,schemasMap:this.schemasMap}}};exports.ComponentSchemaResolver=o;
@@ -1 +1 @@
1
- const e=require(`../../utils/index.cjs`),t=require(`../shared/writer.cjs`);var n=class{config;appendMode;constructor(e,t){this.config=e,this.appendMode=t?.appendMode??!1}async writeSchemas(n){let r=[],i=[],a=`${this.config.saveTypeFolderPath}/models/`,o=Array.from(n.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName));for(let t of o)r.push((async({fileName:t,content:n})=>{i.push(`export * from './${t}';`);let r=`${a}${t}.ts`;await e.writeFileRecursive(r,n),e.log.info(`${r.padEnd(80)} - Write done!`)})(t));await Promise.allSettled(r),i.sort(),await t.writeIndexFileWithDedup(`${a}index.ts`,i,{appendMode:this.appendMode}),e.log.success(`Component parse & write done!`)}async writeEnums(n){let r=[],i=[],a=Array.from(n.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName));for(let t of a)r.push((async({fileName:t,content:n})=>{i.push(`export * from './${t}';`);let r=`${this.config.saveEnumFolderPath}/${t}.ts`;await e.writeFileRecursive(r,n),e.log.info(`${r.padEnd(80)} - Write done!`)})(t));await Promise.all(r),i.sort(),await t.writeIndexFileWithDedup(`${this.config.saveEnumFolderPath}/index.ts`,i,{appendMode:this.appendMode}),e.log.success(`Enums write done!`)}};exports.ComponentWriter=n;
1
+ const e=require(`../../utils/logger.cjs`),t=require(`../../utils/index.cjs`),n=require(`../shared/constants.cjs`),r=require(`../shared/writer.cjs`);var i=class{config;appendMode;constructor(e,t){this.config=e,this.appendMode=t?.appendMode??!1}async writeSchemas(i){let a=[],o=[],s=`${this.config.saveTypeFolderPath}/models/`,c=Array.from(i.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName));for(let r of c)a.push((async({fileName:r,content:i})=>{o.push(`export * from './${r}';`);let a=`${s}${r}.ts`;await t.writeFileRecursive(a,i),e.log.info(`${a.padEnd(n.PAD_END)} - Write done!`)})(r));await Promise.allSettled(a),o.sort(),await r.writeIndexFileWithDedup(`${s}index.ts`,o,{appendMode:this.appendMode}),e.log.success(`Component parse & write done!`)}async writeEnums(i){let a=[],o=[],s=Array.from(i.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName));for(let r of s)a.push((async({fileName:r,content:i})=>{o.push(`export * from './${r}';`);let a=`${this.config.saveEnumFolderPath}/${r}.ts`;await t.writeFileRecursive(a,i),e.log.info(`${a.padEnd(n.PAD_END)} - Write done!`)})(r));await Promise.all(a),o.sort(),await r.writeIndexFileWithDedup(`${this.config.saveEnumFolderPath}/index.ts`,o,{appendMode:this.appendMode}),e.log.success(`Enums write done!`)}};exports.ComponentWriter=i;
@@ -1 +1 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`);let n=require(`path`);n=e.__toESM(n);let r=require(`http`);r=e.__toESM(r);let i=require(`https`);i=e.__toESM(i);async function a(e){if(!e.swaggerJsonUrl)return Promise.reject(Error(`swaggerJsonUrl 未配置,请检查 swaggerConfig.url`));if(/^https?:\/\//.test(e.swaggerJsonUrl))return o(e);try{let r=t.requireModule(n.default.isAbsolute(e.swaggerJsonUrl)?e.swaggerJsonUrl:n.default.resolve(process.cwd(),e.swaggerJsonUrl));return Promise.resolve(r)}catch(e){return console.error(e,!0),Promise.reject(Error(String(e)))}}function o({swaggerJsonUrl:e=``,headers:t={}}){return new Promise((n,a)=>{let o,s=e.startsWith(`https`)?i.default.request:r.default.request;console.info(`Request Start: ${e}`);let c=s(e,{method:`GET`,rejectUnauthorized:!1,headers:{Accept:`*/*`,"Accept-Encoding":`utf-8`,"Content-Type":`application/x-www-form-urlencoded`,...t}},t=>{t.setEncoding(`utf-8`);let r=``;t.on(`data`,e=>{r+=e.toString()}),t.on(`end`,()=>{clearTimeout(o);try{let t=JSON.parse(r);console.info(`Request Successful: ${e}`),n(t)}catch(t){console.error(`Request Failed: ${e}`,!0),a(Error(String(t)))}}),t.on(`error`,t=>{console.error(`Request Failed: ${e}`,!0),a(t)})});c.on(`timeout`,e=>{console.error(e,!0),a(e)}),o=setTimeout(()=>{let t=Error();t.name=`Request Timeout`,t.message=e,c.emit(`timeout`,t)},15e3),c.end()})}exports.getSwaggerJson=a;
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`),n=require(`../utils/index.cjs`);let r=require(`path`);r=e.__toESM(r);let i=require(`http`);i=e.__toESM(i);let a=require(`https`);a=e.__toESM(a);async function o(e){if(!e.swaggerJsonUrl)return Promise.reject(Error(`swaggerJsonUrl 未配置,请检查 swaggerConfig.url`));if(/^https?:\/\//.test(e.swaggerJsonUrl))return s(e);try{let t=n.requireModule(r.default.isAbsolute(e.swaggerJsonUrl)?e.swaggerJsonUrl:r.default.resolve(process.cwd(),e.swaggerJsonUrl));return Promise.resolve(t)}catch(e){return t.log.error(String(e)),Promise.reject(Error(String(e)))}}function s({swaggerJsonUrl:e=``,headers:n={}}){return new Promise((r,o)=>{let s,c=e.startsWith(`https`)?a.default.request:i.default.request;t.log.verbose(`Request Start: ${e}`);let l=c(e,{method:`GET`,rejectUnauthorized:!1,headers:{Accept:`*/*`,"Accept-Encoding":`utf-8`,"Content-Type":`application/x-www-form-urlencoded`,...n}},n=>{n.setEncoding(`utf-8`);let i=``;n.on(`data`,e=>{i+=e.toString()}),n.on(`end`,()=>{clearTimeout(s);try{let n=JSON.parse(i);t.log.verbose(`Request Successful: ${e}`),r(n)}catch(n){t.log.error(`Request Failed: ${e}`),o(Error(String(n)))}}),n.on(`error`,n=>{t.log.error(`Request Failed: ${e}`),o(n)})});l.on(`timeout`,e=>{t.log.error(String(e)),o(e)}),s=setTimeout(()=>{let t=Error();t.name=`Request Timeout`,t.message=e,l.emit(`timeout`,t)},15e3),l.end()})}exports.getSwaggerJson=o;
@@ -1,9 +1,9 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`),n=require(`./components/index.cjs`),r=require(`./get-data.cjs`),i=require(`./path/index.cjs`);let a=require(`fs`);a=e.__toESM(a);let o=require(`path`);o=e.__toESM(o);let s=require(`chalk`);s=e.__toESM(s);let c=require(`shelljs`),l;const u=process.env.NODE_ENV===`debug`,d={saveTypeFolderPath:u?`apps/types`:`src/types`,saveApiListFolderPath:u?`apps/types`:`src/apis`,saveEnumFolderPath:u?`apps/enums`:`src/enums`,importEnumPath:`../../../enums`,requestMethodsImportPath:`./config/fetch`,formatting:{indentation:` `,lineEnding:`
2
- `},swaggerConfig:{url:`https://generator3.swagger.io/openapi.json`,apiListFileName:`index.ts`,headers:{},dataLevel:`serve`,parameterSeparator:`_`,includeInterface:[],excludeInterface:[]},enmuConfig:{erasableSyntaxOnly:!1,varnames:`enum-varnames`,comment:`enum-descriptions`}};var f=class{schemas={};paths={};async handle(e,t,a){try{let o=await r.getSwaggerJson(e);if(!o)throw Error(`无法获取 Swagger 数据`);this.schemas=o.components?.schemas??{},this.paths=o.paths??{};let s=new n.default(this.schemas,e,{appendMode:t}),c=new i.default(this.paths,o.components?.parameters,this.schemas,e);return await s.handle(),await c.handle(),a===`gen`?c.getGeneratedInterfacesForOutput():a===`miss`?c.getMissingInterfacesForOutput():null}catch(e){throw e instanceof Error?Error(`Handle Swagger data failed: ${e.message}`):Error(`Handle Swagger data failed: unknown error`)}}async formatGeneratedFiles(e){let n=`npx prettier --write "${e.saveTypeFolderPath}/**/*.{ts,d.ts}"`;try{await a.default.promises.access(e.saveTypeFolderPath);let{stderr:r}=await new Promise((e,t)=>{(0,c.exec)(n,(n,r,i)=>{n?t(Error(String(n))):e({stdout:r,stderr:i})})});r&&(console.log(`
3
- `),console.log(`$`,s.default.yellow(n)),console.log(`
4
- `)),t.log.success(`File formatting successful`),console.log(`
5
- `)}catch(e){console.log(``),console.log(e),t.log.error(`Format failed, please manually execute the following command:`),console.log(`$`,s.default.yellow(n)),console.log(``)}}async copyAjaxConfigFiles(e){let n=[`dio.ts`,`error-message.ts`,`fetch.ts`,`api-type.d.ts`],r=u?o.default.join(__dirname,`..`,`..`,`postbuild-assets`,`ajax-config`):o.default.join(__dirname,`..`,`ajax-config`),i=o.default.join(e,`config`);try{await a.default.promises.access(i),t.log.info(`config folder already exists at ${i}, skipping generation.`);return}catch{await a.default.promises.mkdir(i,{recursive:!0})}for(let e of n){let n=o.default.join(r,e),s=o.default.join(i,e);try{await a.default.promises.access(n),await a.default.promises.copyFile(n,s),t.log.success(`${e} create done.`)}catch(e){throw e instanceof Error?(t.log.error(`Source file ${n} does not exist`),Error(`Source file ${n} does not exist: ${e.message}`)):Error(`Source file ${n} does not exist: unknown error`)}}}getSystemLocale(){try{return Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase()}catch{return(process.env.LANG??process.env.LC_ALL??process.env.LC_MESSAGES??``).toLowerCase()}}showLegacyConfigHint(e){let t={url:e.swaggerJsonUrl??`https://your.swagger.json`,publicPrefix:e.publicPrefix??``,apiListFileName:e.apiListFileName??`index.ts`,headers:e.headers??{}},n=this.getSystemLocale();n.startsWith(`zh`)||n.includes(`chinese`)?(console.log(`
6
- 检测到旧版配置,请更新 an.config.json:`),console.log(`1) 将 swaggerJsonUrl / publicPrefix / headers 移到 swaggerConfig 字段。`),console.log(`2) 单个服务可直接填写对象,多个服务请使用数组,并确保 apiListFileName 唯一。`),console.log(`示例:`),console.log(JSON.stringify({swaggerConfig:t},null,2)),console.log(``)):(console.log(`
7
- Legacy configuration detected, please update an.config.json:`),console.log(`1) Move swaggerJsonUrl / publicPrefix / headers to swaggerConfig field.`),console.log(`2) Single service can be an object directly, multiple services should use an array, and ensure apiListFileName is unique.`),console.log(`Example:`),console.log(JSON.stringify({swaggerConfig:t},null,2)),console.log(``))}normalizeswaggerConfig(e,t){let n=!1,r=t?e.swaggerConfig:void 0;r||=(n=!0,{url:e.swaggerJsonUrl??``,publicPrefix:e.publicPrefix??``,apiListFileName:e.apiListFileName??`index.ts`,headers:e.headers??{},modulePrefix:e.modulePrefix});let i=(t,r)=>{let i=t.url||e.swaggerJsonUrl;if(!i)throw Error(`swaggerConfig[${r}] 缺少 url,请补充后重试。`);let a=t.publicPrefix??e.publicPrefix??``;!t.url&&e.swaggerJsonUrl&&(n=!0);let o=(t.apiListFileName??e.apiListFileName??`index.ts`).trim()||`index.ts`,s=t.headers??e.headers??{},c=t.dataLevel??e.dataLevel??`serve`,l=t.parameterSeparator??e.parameterSeparator??`_`,u=t.includeInterface??e.includeInterface??[],d=t.excludeInterface??e.excludeInterface??[],f=t.includeTags??e.includeTags,p=t.excludeTags??e.excludeTags,m={url:i,publicPrefix:a,apiListFileName:o,headers:s,dataLevel:c,parameterSeparator:l,includeInterface:u,excludeInterface:d,modulePrefix:t.modulePrefix??e.modulePrefix??``,responseModelTransform:t.responseModelTransform??e.responseModelTransform};return f!==void 0&&(m.includeTags=f),p!==void 0&&(m.excludeTags=p),m},a=Array.isArray(r)?r.map((e,t)=>i(e,t)):[i(r,0)];if(a.length===0)throw Error(`swaggerConfig 不能为空,请至少配置一个 swagger 服务。`);if(a.length>1){let e=new Set;a.forEach(t=>{if(e.has(t.apiListFileName))throw Error(`swaggerConfig 中 apiListFileName 重复:${t.apiListFileName},请为每个服务设置唯一文件名。`);e.add(t.apiListFileName)})}return n&&this.showLegacyConfigHint(e),a}buildServerConfig(e,t){return{...e,swaggerJsonUrl:t.url,publicPrefix:t.publicPrefix??e.publicPrefix,headers:t.headers,apiListFileName:t.apiListFileName,dataLevel:t.dataLevel,parameterSeparator:t.parameterSeparator,includeInterface:t.includeInterface,excludeInterface:t.excludeInterface,includeTags:t.includeTags,excludeTags:t.excludeTags,modulePrefix:t.modulePrefix,responseModelTransform:t.responseModelTransform??e.responseModelTransform,swaggerConfig:t}}async getConfig(e){try{let t=await a.default.promises.readFile(e,`utf8`);l=!0;try{return JSON.parse(t)}catch(e){throw l=!0,Error(`配置文件格式错误,请检查 an.config.json 的 JSON 格式是否正确: ${e instanceof Error?e.message:String(e)}`)}}catch(n){if(n instanceof Error&&`code`in n&&n.code===`ENOENT`)return l=!1,t.log.warning(`配置文件不存在,将自动创建配置文件。`),await t.writeFileRecursive(e,JSON.stringify(d,null,2)),t.log.success(`配置文件已创建,请检查项目根目录下的 an.config.json 文件并配置后重新运行。`),d;throw n}}async initialize(e){let n=process.cwd()+`/an.config.json`;try{let r=await this.getConfig(n),i={...d,...r},o=Object.prototype.hasOwnProperty.call(r,`swaggerConfig`),c=this.normalizeswaggerConfig(i,o);if(!l)return;await a.default.promises.mkdir(i.saveApiListFolderPath,{recursive:!0}),await this.copyAjaxConfigFiles(i.saveApiListFolderPath),await t.clearDirExcept(i.saveApiListFolderPath,[`config`]),await t.clearDir(i.saveTypeFolderPath),await t.clearDir(i.saveEnumFolderPath);let u=[];for(let t=0;t<c.length;t++){let n=this.buildServerConfig(i,c[t]),r=t>0,a=await this.handle(n,r,e);e&&a&&u.push({serverUrl:c[t].url,list:a})}if(await this.formatGeneratedFiles(i),t.log.success(`Successfully, all done, see you next time!`),console.log(`
8
- `),e&&u.length>0){let t=e===`miss`?`excludeInterface`:`includeInterface`;for(let{serverUrl:e,list:n}of u)c.length>1?console.log(s.default.cyan(`\n[${t}] ${e}`)):console.log(s.default.cyan(`\n[${t}]`)),console.log(JSON.stringify(n,null,2));console.log(`
9
- `)}}catch(e){let n=e instanceof Error?e.message:`Unknown error`;t.log.error(`Initialization failed: ${n}`)}}};u&&new f().initialize().catch(e=>{console.error(e)}),exports.Main=f;
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.cjs`),n=require(`../utils/index.cjs`),r=require(`./components/index.cjs`),i=require(`./get-data.cjs`),a=require(`./path/index.cjs`);let o=require(`fs`);o=e.__toESM(o);let s=require(`path`);s=e.__toESM(s);let c=require(`shelljs`),l=require(`chalk`);l=e.__toESM(l);let u;const d=process.env.NODE_ENV===`debug`,f={saveTypeFolderPath:d?`apps/types`:`src/types`,saveApiListFolderPath:d?`apps/types`:`src/apis`,saveEnumFolderPath:d?`apps/enums`:`src/enums`,importEnumPath:`../../../enums`,requestMethodsImportPath:`./config/fetch`,formatting:{indentation:` `,lineEnding:`
2
+ `},swaggerConfig:{url:`https://generator3.swagger.io/openapi.json`,apiListFileName:`index.ts`,headers:{},dataLevel:`serve`,parameterSeparator:`_`,includeInterface:[],excludeInterface:[]},enmuConfig:{erasableSyntaxOnly:!1,varnames:`enum-varnames`,comment:`enum-descriptions`}};var p=class{schemas={};paths={};async handle(e,n,o){try{t.spinner.start(`Fetching Swagger data...`);let s=await i.getSwaggerJson(e);if(!s)throw t.spinner.error(`Failed to fetch Swagger data`),Error(`无法获取 Swagger 数据`);t.spinner.success(`Swagger data fetched`),this.schemas=s.components?.schemas??{},this.paths=s.paths??{};let c=new r.default(this.schemas,e,{appendMode:n}),l=new a.default(this.paths,s.components?.parameters,this.schemas,e);return t.spinner.start(`Generating types and APIs...`),await c.handle(),await l.handle(),t.spinner.success(`Types and APIs generated`),o===`gen`?l.getGeneratedInterfacesForOutput():o===`miss`?l.getMissingInterfacesForOutput():null}catch(e){throw e instanceof Error?Error(`Handle Swagger data failed: ${e.message}`):Error(`Handle Swagger data failed: unknown error`)}}async formatGeneratedFiles(e){let n=`npx prettier --write "${e.saveTypeFolderPath}/**/*.{ts,d.ts}"`;try{t.spinner.start(`Formatting generated files...`),await o.default.promises.access(e.saveTypeFolderPath);let{stderr:r}=await new Promise((e,t)=>{(0,c.exec)(n,(n,r,i)=>{n?t(Error(String(n))):e({stdout:r,stderr:i})})});r&&(t.log.print(`
3
+ `),t.log.print(`$`,l.default.yellow(n)),t.log.print(`
4
+ `)),t.spinner.success(`File formatting successful`),t.log.print(`
5
+ `)}catch(e){t.spinner.error(`Format failed`),t.log.print(``),t.log.print(e),t.log.error(`Format failed, please manually execute the following command:`),t.log.print(`$`,l.default.yellow(n)),t.log.print(``)}}async copyAjaxConfigFiles(e){let n=[`dio.ts`,`error-message.ts`,`fetch.ts`,`api-type.d.ts`],r=d?s.default.join(__dirname,`..`,`..`,`postbuild-assets`,`ajax-config`):s.default.join(__dirname,`..`,`ajax-config`),i=s.default.join(e,`config`);try{await o.default.promises.access(i),t.log.info(`config folder already exists at ${i}, skipping generation.`);return}catch{await o.default.promises.mkdir(i,{recursive:!0})}for(let e of n){let n=s.default.join(r,e),a=s.default.join(i,e);try{await o.default.promises.access(n),await o.default.promises.copyFile(n,a),t.log.success(`${e} create done.`)}catch(e){throw e instanceof Error?(t.log.error(`Source file ${n} does not exist`),Error(`Source file ${n} does not exist: ${e.message}`)):Error(`Source file ${n} does not exist: unknown error`)}}}getSystemLocale(){try{return Intl.DateTimeFormat().resolvedOptions().locale.toLowerCase()}catch{return(process.env.LANG??process.env.LC_ALL??process.env.LC_MESSAGES??``).toLowerCase()}}showLegacyConfigHint(e){let n={url:e.swaggerJsonUrl??`https://your.swagger.json`,publicPrefix:e.publicPrefix??``,apiListFileName:e.apiListFileName??`index.ts`,headers:e.headers??{}},r=this.getSystemLocale();r.startsWith(`zh`)||r.includes(`chinese`)?(t.log.print(`
6
+ 检测到旧版配置,请更新 an.config.json:`),t.log.print(`1) 将 swaggerJsonUrl / publicPrefix / headers 移到 swaggerConfig 字段。`),t.log.print(`2) 单个服务可直接填写对象,多个服务请使用数组,并确保 apiListFileName 唯一。`),t.log.print(`示例:`),t.log.print(JSON.stringify({swaggerConfig:n},null,2)),t.log.print(``)):(t.log.print(`
7
+ Legacy configuration detected, please update an.config.json:`),t.log.print(`1) Move swaggerJsonUrl / publicPrefix / headers to swaggerConfig field.`),t.log.print(`2) Single service can be an object directly, multiple services should use an array, and ensure apiListFileName is unique.`),t.log.print(`Example:`),t.log.print(JSON.stringify({swaggerConfig:n},null,2)),t.log.print(``))}normalizeswaggerConfig(e,t){let n=!1,r=t?e.swaggerConfig:void 0;r||=(n=!0,{url:e.swaggerJsonUrl??``,publicPrefix:e.publicPrefix??``,apiListFileName:e.apiListFileName??`index.ts`,headers:e.headers??{},modulePrefix:e.modulePrefix});let i=(t,r)=>{let i=t.url||e.swaggerJsonUrl;if(!i)throw Error(`swaggerConfig[${r}] 缺少 url,请补充后重试。`);let a=t.publicPrefix??e.publicPrefix??``;!t.url&&e.swaggerJsonUrl&&(n=!0);let o=(t.apiListFileName??e.apiListFileName??`index.ts`).trim()||`index.ts`,s=t.headers??e.headers??{},c=t.dataLevel??e.dataLevel??`serve`,l=t.parameterSeparator??e.parameterSeparator??`_`,u=t.includeInterface??e.includeInterface??[],d=t.excludeInterface??e.excludeInterface??[],f=t.includeTags??e.includeTags,p=t.excludeTags??e.excludeTags,m={url:i,publicPrefix:a,apiListFileName:o,headers:s,dataLevel:c,parameterSeparator:l,includeInterface:u,excludeInterface:d,modulePrefix:t.modulePrefix??e.modulePrefix??``,responseModelTransform:t.responseModelTransform??e.responseModelTransform};return f!==void 0&&(m.includeTags=f),p!==void 0&&(m.excludeTags=p),m},a=Array.isArray(r)?r.map((e,t)=>i(e,t)):[i(r,0)];if(a.length===0)throw Error(`swaggerConfig 不能为空,请至少配置一个 swagger 服务。`);if(a.length>1){let e=new Set;a.forEach(t=>{if(e.has(t.apiListFileName))throw Error(`swaggerConfig 中 apiListFileName 重复:${t.apiListFileName},请为每个服务设置唯一文件名。`);e.add(t.apiListFileName)})}return n&&this.showLegacyConfigHint(e),a}buildServerConfig(e,t){return{...e,swaggerJsonUrl:t.url,publicPrefix:t.publicPrefix??e.publicPrefix,headers:t.headers,apiListFileName:t.apiListFileName,dataLevel:t.dataLevel,parameterSeparator:t.parameterSeparator,includeInterface:t.includeInterface,excludeInterface:t.excludeInterface,includeTags:t.includeTags,excludeTags:t.excludeTags,modulePrefix:t.modulePrefix,responseModelTransform:t.responseModelTransform??e.responseModelTransform,swaggerConfig:t}}async getConfig(e){try{let t=await o.default.promises.readFile(e,`utf8`);u=!0;try{return JSON.parse(t)}catch(e){throw u=!0,Error(`配置文件格式错误,请检查 an.config.json 的 JSON 格式是否正确: ${e instanceof Error?e.message:String(e)}`)}}catch(r){if(r instanceof Error&&`code`in r&&r.code===`ENOENT`)return u=!1,t.log.warning(`配置文件不存在,将自动创建配置文件。`),await n.writeFileRecursive(e,JSON.stringify(f,null,2)),t.log.success(`配置文件已创建,请检查项目根目录下的 an.config.json 文件并配置后重新运行。`),f;throw r}}async initialize(e){let r=process.cwd()+`/an.config.json`;try{let i=await this.getConfig(r),a={...f,...i};a.logLevel&&t.setLogLevel(a.logLevel);let s=Object.prototype.hasOwnProperty.call(i,`swaggerConfig`),c=this.normalizeswaggerConfig(a,s);if(!u)return;await o.default.promises.mkdir(a.saveApiListFolderPath,{recursive:!0}),await this.copyAjaxConfigFiles(a.saveApiListFolderPath),await n.clearDirExcept(a.saveApiListFolderPath,[`config`]),await n.clearDir(a.saveTypeFolderPath),await n.clearDir(a.saveEnumFolderPath);let d=[];for(let t=0;t<c.length;t++){let n=this.buildServerConfig(a,c[t]),r=t>0,i=await this.handle(n,r,e);e&&i&&d.push({serverUrl:c[t].url,list:i})}if(await this.formatGeneratedFiles(a),t.log.success(`Successfully, all done, see you next time!`),t.log.print(`
8
+ `),e&&d.length>0){let n=e===`miss`?`excludeInterface`:`includeInterface`;for(let{serverUrl:e,list:r}of d)c.length>1?t.log.print(l.default.cyan(`\n[${n}] ${e}`)):t.log.print(l.default.cyan(`\n[${n}]`)),t.log.print(JSON.stringify(r,null,2));t.log.print(`
9
+ `)}}catch(e){let n=e instanceof Error?e.message:`Unknown error`;t.log.error(`Initialization failed: ${n}`)}}};d&&new p().initialize().catch(e=>{console.error(e)}),exports.Main=p;
@@ -1,10 +1,10 @@
1
- const e=require(`../../utils/index.cjs`),t=require(`../shared/format.cjs`),n=require(`../shared/naming.cjs`),r=require(`../shared/http.cjs`),i=require(`./naming.cjs`),a=require(`./schema-resolver.cjs`),o=require(`./writer.cjs`);var s=function(e){return e.GET=`get`,e.PUT=`put`,e.POST=`post`,e.DELETE=`delete`,e.OPTIONS=`options`,e.HEAD=`head`,e.PATCH=`patch`,e.TRACE=`trace`,e}(s||{});const c={typeMapping:new Map([[`integer`,`number`],[`string`,`string`],[`boolean`,`boolean`],[`binary`,`File`],[`number`,`number`],[`null`,`null`],[`undefined`,`undefined`],[`date`,`Date`],[`time`,`Date`],[`datetime`,`Date`],[`timestamp`,`Date`]]),errorHandling:{throwOnError:!1,logErrors:!0}};var l=class{pathsObject={};nonArrayType=[`boolean`,`object`,`number`,`string`,`integer`];pathKey=``;contentBody={payload:{path:[],query:[],header:[],body:[]},response:``,_response:``,fileName:``,method:``,requestPath:``,summary:``,apiName:``,typeName:``,deprecated:!1,contentType:`application/json`};Map=new Map;config;errors=[];parameters={};schemas={};schemaResolver;writer;apiListFileContent=[];allowedInterfaceKeys=new Set;allInterfaceKeys=new Set;constructor(e,n,r,i){this.pathsObject=e,this.parameters=n??{},this.schemas=r??{},this.config=t.applyFormattingDefaults({...c,...i,typeMapping:new Map([...c.typeMapping??[],...i.typeMapping??[]])}),this.schemaResolver=new a.SchemaResolver(this.config,this.schemas,this.parameters,this.handleError.bind(this)),this.writer=new o.PathWriter(this.config)}handleError(t){if(this.errors.push(t),this.config.errorHandling?.logErrors&&e.log.error(`${t.type}: ${t.message}${t.path?` at ${t.path}`:``}`),this.config.errorHandling?.throwOnError)throw Error(`${t.type}: ${t.message}`)}getIndentation(){return t.getIndentation(this.config)}getDoubleIndentation(){let e=this.getIndentation();return e+e}generateParamComment(e,t){let n=[],r=[];if(e.description&&r.push(e.description),e.deprecated&&r.push(`@deprecated`),e.schema&&typeof e.schema==`object`&&`example`in e.schema){let t=e.schema.example,n=typeof t==`string`?t:JSON.stringify(t);r.push(`@example ${n}`)}if(e.schema&&typeof e.schema==`object`&&`default`in e.schema){let t=e.schema.default,n=typeof t==`string`?t:JSON.stringify(t);r.push(`@default ${n}`)}return r.length>0&&(r.length===1&&!r[0].includes(`
1
+ const e=require(`../../utils/logger.cjs`);require(`../../utils/index.cjs`);const t=require(`../shared/format.cjs`),n=require(`../shared/naming.cjs`),r=require(`../shared/http.cjs`),i=require(`./naming.cjs`),a=require(`./schema-resolver.cjs`),o=require(`./writer.cjs`);var s=function(e){return e.GET=`get`,e.PUT=`put`,e.POST=`post`,e.DELETE=`delete`,e.OPTIONS=`options`,e.HEAD=`head`,e.PATCH=`patch`,e.TRACE=`trace`,e}(s||{});const c={typeMapping:new Map([[`integer`,`number`],[`string`,`string`],[`boolean`,`boolean`],[`binary`,`File`],[`number`,`number`],[`null`,`null`],[`undefined`,`undefined`],[`date`,`Date`],[`time`,`Date`],[`datetime`,`Date`],[`timestamp`,`Date`]]),errorHandling:{throwOnError:!1,logErrors:!0}};var l=class{pathsObject={};nonArrayType=[`boolean`,`object`,`number`,`string`,`integer`];pathKey=``;contentBody={payload:{path:[],query:[],header:[],body:[]},response:``,_response:``,fileName:``,method:``,requestPath:``,summary:``,apiName:``,typeName:``,deprecated:!1,contentType:`application/json`};Map=new Map;config;errors=[];parameters={};schemas={};schemaResolver;writer;apiListFileContent=[];allowedInterfaceKeys=new Set;allInterfaceKeys=new Set;constructor(e,n,r,i){this.pathsObject=e,this.parameters=n??{},this.schemas=r??{},this.config=t.applyFormattingDefaults({...c,...i,typeMapping:new Map([...c.typeMapping??[],...i.typeMapping??[]])}),this.schemaResolver=new a.SchemaResolver(this.config,this.schemas,this.parameters,this.handleError.bind(this)),this.writer=new o.PathWriter(this.config)}handleError(t){if(!t.path&&this.contentBody.requestPath&&(t.path=this.contentBody.requestPath),!t.method&&this.contentBody.method&&(t.method=this.contentBody.method),this.errors.push(t),this.config.errorHandling?.logErrors&&e.log.error(e.formatParseError(t)),this.config.errorHandling?.throwOnError)throw Error(`${t.type}: ${t.message}`)}getIndentation(){return t.getIndentation(this.config)}getDoubleIndentation(){let e=this.getIndentation();return e+e}generateParamComment(e,t){let n=[],r=[];if(e.description&&r.push(e.description),e.deprecated&&r.push(`@deprecated`),e.schema&&typeof e.schema==`object`&&`example`in e.schema){let t=e.schema.example,n=typeof t==`string`?t:JSON.stringify(t);r.push(`@example ${n}`)}if(e.schema&&typeof e.schema==`object`&&`default`in e.schema){let t=e.schema.default,n=typeof t==`string`?t:JSON.stringify(t);r.push(`@default ${n}`)}return r.length>0&&(r.length===1&&!r[0].includes(`
2
2
  `)?n.push(`${t}/** ${r[0]} */`):(n.push(`${t}/**`),r.forEach(e=>{e.includes(`
3
3
  `)?e.split(`
4
- `).forEach(e=>{n.push(`${t} * ${e}`)}):n.push(`${t} * ${e}`)}),n.push(`${t} */`))),n}parametersItemHandle(e,t,r,i){let a=this.getDoubleIndentation(),o=`$ref`in e?e:null,s=`name`in e?e:null;if(o?.$ref&&o.$ref.startsWith(`#/components/parameters/`)&&this.parameters){let e=o.$ref.replace(`#/components/parameters/`,``),n=this.parameters[e];this.parametersItemHandle(n,t,r,i)}if(s){if(!s.schema){console.warn(`Parameter "${s.name}" has no schema defined, skipping...`);return}let e=this.schemaResolver.main(s.schema);if(!e||typeof e!=`string`){console.warn(`Failed to parse schema for parameter "${s.name}", got:`,e);return}if(s.in===`path`)this.generateParamComment(s,a).forEach(e=>t.push(e)),t.push(`${a}type ${s.name} = ${e};`),this.contentBody.payload._path?this.contentBody.payload._path[s.name]=e:this.contentBody.payload._path={[s.name]:e};else if(s.in===`query`){this.generateParamComment(s,a).forEach(e=>r.push(e));let t=s.required===!0?``:`?`,i=n.formatPropertyName(s.name);r.push(`${a}${i}${t}: ${e};`),this.contentBody.payload._query?this.contentBody.payload._query[s.name]=e:this.contentBody.payload._query={[s.name]:e}}else if(s.in===`header`){this.generateParamComment(s,a).forEach(e=>i.push(e));let t=s.required===!0?``:`?`,r=n.formatPropertyName(s.name);i.push(`${a}${r}${t}: ${e};`),this.contentBody.payload._header?this.contentBody.payload._header[s.name]=e:this.contentBody.payload._header={[s.name]:e}}else s.in===`cookie`?console.info(`Cookie parameter "${s.name}" detected but not added to type definition (cookies are typically handled separately)`):console.warn(`Unknown parameter location "${s.in}" for parameter "${s.name}"`)}}requestParametersParse(e){let t=this.getIndentation(),n=[],r=[],i=[];e?.map(e=>this.parametersItemHandle(e,n,r,i)),n.length!==0&&(n.unshift(`${t}namespace Path {`),n.push(`${t}}`)),r.length!==0&&(r.unshift(`${t}interface Query {`),r.push(`${t}}`)),i.length!==0&&(i.unshift(`${t}interface Header {`),i.push(`${t}}`)),this.contentBody.payload.path=n,this.contentBody.payload.query=r,this.contentBody.payload.header=i}pickRequestBodyContent(e){let t=e.content;if(!t||typeof t!=`object`)return{schema:null};for(let e of[`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=t[e];if(n&&typeof n==`object`&&n.schema)return{schema:n.schema}}let n=Object.keys(t)[0],r=n?t[n]:null;return{schema:r&&typeof r==`object`&&r.schema?r.schema:null}}requestBodyObjectParse(e){let t=this.getIndentation(),{schema:n}=this.pickRequestBodyContent(e);if(n){let e=n?.type,r=`$ref`in n?n:null,i=e===`array`?n:null,a=e&&this.nonArrayType.includes(e)?n:null;if(r)return`${t}type Body = ${this.schemaResolver.referenceObjectParse(r)}`;if(i)return`${t}type Body = ${this.schemaResolver.arraySchemaObjectParse(i)}`;if(a){let e=this.schemaResolver.nonArraySchemaObjectParse(a);return Array.isArray(e)?e.length===0?[`${t}type Body = ${a.type};`]:[`${t}interface Body {`,...e,`}`]:[`${t}type Body = ${e}`]}}}requestBodyParse(e){if(!e)return`{}`;let t=`$ref`in e?e:null,n=`content`in e?e:null;if(t){let e=this.schemaResolver.referenceObjectParse(t);return`${this.getIndentation()}type Body = ${e}`}return n&&Object.keys(e).length!==0?this.requestBodyObjectParse(n):`{}`}normalizemodulePrefix(e){if(!e||e.trim()===``)return``;let t=e.trim();return t=t.replace(/\/+$/g,``),t.startsWith(`/`)||(t=`/`+t),t}apiRequestItemHandle(e){let{payload:t,requestPath:n,_response:i,method:a,typeName:o,apiName:s,contentType:c}=e,{_path:l,_query:u,body:d}=t,f=e.dataLevel??this.config.dataLevel??`serve`,p=this.normalizemodulePrefix(this.config.modulePrefix),m=()=>{let e=[],t=Object.keys(l??{}).sort();for(let n of t)e.push(`${n}: ${o}.Path.${n}`);let n=e.join(e.length>1?`,`:``);return n===``?n:n+`,`},h=()=>{let e=u?`query: ${o}.Query,`:``;return e===``?``:`${e}`},g=()=>{let e=d.length>0?`body: ${o}.Body,`:``;return e===``?``:`${e}`},_=m(),v=h(),y=g(),b=()=>{let e=r.SUPPORTED_REQUEST_UPLOAD_TYPES.includes(c)?`headers: { 'Content-Type': '${c}' }`:void 0;return[`{`,e?`${e},`:``,`...params, `,v===``?``:`query,`,y===``?``:`body,`,`},`].join(``)},x=(_+v+y).replace(/,$/,``);return[`export const ${s} = `,`(`,x,x===``?`params?: IRequestFnParams`:`, params?: IRequestFnParams`,`)`,` => `,a,`${i?`<${o}.Response>`:``}`,`(`,`\`${p}${n}\`,`,b(),`'${f}'`,`);`].join(``)}responseHandle(e){let t=e[200];if(!t)return;let n=`content`in t?t:null,r=`$ref`in t?t:null;if(n===null&&r===null&&(this.contentBody.response=`type Response = unknown`,this.contentBody._response=`unknown`),r){let e=this.schemaResolver.referenceObjectParse(r);this.config.responseModelTransform&&(e=this.schemaResolver.transformResponseModel(e,this.config.responseModelTransform)),this.contentBody.response=`type Response = ${e}`,this.contentBody._response=e}if(n){let e=this.schemaResolver.responseObjectParse(n);if(this.config.responseModelTransform&&(e=this.schemaResolver.transformResponseModel(e,this.config.responseModelTransform)),Array.isArray(e)){if(e.length===1&&e[0]===`unknown`)this.contentBody.response=`type Response = ${e.join(`
4
+ `).forEach(e=>{n.push(`${t} * ${e}`)}):n.push(`${t} * ${e}`)}),n.push(`${t} */`))),n}parametersItemHandle(t,r,i,a){let o=this.getDoubleIndentation(),s=`$ref`in t?t:null,c=`name`in t?t:null;if(s?.$ref&&s.$ref.startsWith(`#/components/parameters/`)&&this.parameters){let e=s.$ref.replace(`#/components/parameters/`,``),t=this.parameters[e];this.parametersItemHandle(t,r,i,a)}if(c){if(!c.schema){this.handleError({type:`PARAMETERS`,message:`Parameter "${c.name}" has no schema defined, skipping`});return}let t=this.schemaResolver.main(c.schema);if(!t||typeof t!=`string`){this.handleError({type:`PARAMETERS`,message:`Failed to parse schema for parameter "${c.name}"`,details:t});return}if(c.in===`path`)this.generateParamComment(c,o).forEach(e=>r.push(e)),r.push(`${o}type ${c.name} = ${t};`),this.contentBody.payload._path?this.contentBody.payload._path[c.name]=t:this.contentBody.payload._path={[c.name]:t};else if(c.in===`query`){this.generateParamComment(c,o).forEach(e=>i.push(e));let e=c.required===!0?``:`?`,r=n.formatPropertyName(c.name);i.push(`${o}${r}${e}: ${t};`),this.contentBody.payload._query?this.contentBody.payload._query[c.name]=t:this.contentBody.payload._query={[c.name]:t}}else if(c.in===`header`){this.generateParamComment(c,o).forEach(e=>a.push(e));let e=c.required===!0?``:`?`,r=n.formatPropertyName(c.name);a.push(`${o}${r}${e}: ${t};`),this.contentBody.payload._header?this.contentBody.payload._header[c.name]=t:this.contentBody.payload._header={[c.name]:t}}else c.in===`cookie`?e.log.verbose(`Cookie parameter "${c.name}" detected but not added to type definition`):this.handleError({type:`PARAMETERS`,message:`Unknown parameter location "${c.in}" for parameter "${c.name}"`})}}requestParametersParse(e){let t=this.getIndentation(),n=[],r=[],i=[];e?.map(e=>this.parametersItemHandle(e,n,r,i)),n.length!==0&&(n.unshift(`${t}namespace Path {`),n.push(`${t}}`)),r.length!==0&&(r.unshift(`${t}interface Query {`),r.push(`${t}}`)),i.length!==0&&(i.unshift(`${t}interface Header {`),i.push(`${t}}`)),this.contentBody.payload.path=n,this.contentBody.payload.query=r,this.contentBody.payload.header=i}pickRequestBodyContent(e){let t=e.content;if(!t||typeof t!=`object`)return{schema:null};for(let e of[`multipart/form-data`,`application/x-www-form-urlencoded`]){let n=t[e];if(n&&typeof n==`object`&&n.schema)return{schema:n.schema}}let n=Object.keys(t)[0],r=n?t[n]:null;return{schema:r&&typeof r==`object`&&r.schema?r.schema:null}}requestBodyObjectParse(e){let t=this.getIndentation(),{schema:n}=this.pickRequestBodyContent(e);if(n){let e=n?.type,r=`$ref`in n?n:null,i=e===`array`?n:null,a=e&&this.nonArrayType.includes(e)?n:null;if(r)return`${t}type Body = ${this.schemaResolver.referenceObjectParse(r)}`;if(i)return`${t}type Body = ${this.schemaResolver.arraySchemaObjectParse(i)}`;if(a){let e=this.schemaResolver.nonArraySchemaObjectParse(a);return Array.isArray(e)?e.length===0?[`${t}type Body = ${a.type};`]:[`${t}interface Body {`,...e,`}`]:[`${t}type Body = ${e}`]}}}requestBodyParse(e){if(!e)return`{}`;let t=`$ref`in e?e:null,n=`content`in e?e:null;if(t){let e=this.schemaResolver.referenceObjectParse(t);return`${this.getIndentation()}type Body = ${e}`}return n&&Object.keys(e).length!==0?this.requestBodyObjectParse(n):`{}`}normalizemodulePrefix(e){if(!e||e.trim()===``)return``;let t=e.trim();return t=t.replace(/\/+$/g,``),t.startsWith(`/`)||(t=`/`+t),t}apiRequestItemHandle(e){let{payload:t,requestPath:n,_response:i,method:a,typeName:o,apiName:s,contentType:c}=e,{_path:l,_query:u,body:d}=t,f=e.dataLevel??this.config.dataLevel??`serve`,p=this.normalizemodulePrefix(this.config.modulePrefix),m=()=>{let e=[],t=Object.keys(l??{}).sort();for(let n of t)e.push(`${n}: ${o}.Path.${n}`);let n=e.join(e.length>1?`,`:``);return n===``?n:n+`,`},h=()=>{let e=u?`query: ${o}.Query,`:``;return e===``?``:`${e}`},g=()=>{let e=d.length>0?`body: ${o}.Body,`:``;return e===``?``:`${e}`},_=m(),v=h(),y=g(),b=()=>{let e=r.SUPPORTED_REQUEST_UPLOAD_TYPES.includes(c)?`headers: { 'Content-Type': '${c}' }`:void 0;return[`{`,e?`${e},`:``,`...params, `,v===``?``:`query,`,y===``?``:`body,`,`},`].join(``)},x=(_+v+y).replace(/,$/,``);return[`export const ${s} = `,`(`,x,x===``?`params?: IRequestFnParams`:`, params?: IRequestFnParams`,`)`,` => `,a,`${i?`<${o}.Response>`:``}`,`(`,`\`${p}${n}\`,`,b(),`'${f}'`,`);`].join(``)}responseHandle(e){let t=e[200];if(!t)return;let n=`content`in t?t:null,r=`$ref`in t?t:null;if(n===null&&r===null&&(this.contentBody.response=`type Response = unknown`,this.contentBody._response=`unknown`),r){let e=this.schemaResolver.referenceObjectParse(r);this.config.responseModelTransform&&(e=this.schemaResolver.transformResponseModel(e,this.config.responseModelTransform)),this.contentBody.response=`type Response = ${e}`,this.contentBody._response=e}if(n){let e=this.schemaResolver.responseObjectParse(n);if(this.config.responseModelTransform&&(e=this.schemaResolver.transformResponseModel(e,this.config.responseModelTransform)),Array.isArray(e)){if(e.length===1&&e[0]===`unknown`)this.contentBody.response=`type Response = ${e.join(`
5
5
  `)};`;else{let t=this.config.formatting?.lineEnding,n=this.config.formatting?.indentation;this.contentBody.response=`interface Response {${t}${e.join(`
6
6
  `)}${t}${n}};`}this.contentBody._response=`${e.join(`
7
7
  `)}`}else this.contentBody.response=`type Response = ${e}`,this.contentBody._response=`${e}`}}requestHandle(e){if(e.parameters&&this.requestParametersParse(e.parameters),e.requestBody){let t=this.requestBodyParse(e.requestBody);if(Array.isArray(t))this.contentBody.payload.body=t;else if(t){let e=t?.split(`
8
8
  `)||[];this.contentBody.payload.body=e}}}computeAllowedInterfaceKeys(){let e=[],t=Object.keys(this.pathsObject).sort();for(let n of t){let t=this.pathsObject[n];if(!t)continue;let r=Object.keys(t).sort();for(let i of r){let r=t[i];if(!r||typeof r!=`object`||!Object.values(s).includes(i))continue;let a=`${n}|${String(i).toUpperCase()}`,o=Array.isArray(r.tags)?r.tags:[];e.push({key:a,pathKey:n,method:i,tags:o})}}this.allInterfaceKeys=new Set(e.map(e=>e.key));let n;n=this.config.excludeTags&&this.config.excludeTags.length>0?new Set(e.filter(e=>!e.tags.some(e=>this.config.excludeTags.includes(e))).map(e=>e.key)):new Set(e.map(e=>e.key));let r;if(this.config.excludeInterface&&this.config.excludeInterface.length>0){let e=new Set(this.config.excludeInterface.map(e=>`${e.path}|${e.method.toUpperCase()}`));r=new Set([...n].filter(t=>!e.has(t)))}else r=new Set(n);let i;i=this.config.includeTags&&this.config.includeTags.length>0?new Set(e.filter(e=>r.has(e.key)&&e.tags.some(e=>this.config.includeTags.includes(e))).map(e=>e.key)):new Set;let a;if(this.config.includeInterface&&this.config.includeInterface.length>0){let e=new Set(this.config.includeInterface.map(e=>`${e.path}|${e.method.toUpperCase()}`));a=new Set([...r].filter(t=>e.has(t)))}else a=new Set;return i.size===0&&a.size===0?new Set(r):new Set([...i,...a])}parsePathItemObject(e,t,n){if(!e)return;let a=Object.keys(e).sort();for(let o of a){let a=e[o];if(a){let e=o.toUpperCase(),s=t+`|`+e;if(!this.allowedInterfaceKeys.has(s))continue;let c=this.config.includeInterface?.find(e=>t===e.path&&e.method===o),{apiName:l,typeName:u,fileName:d,path:f}=i.convertEndpointString(s,this.config),p=a.requestBody&&`content`in a.requestBody&&a.requestBody.content,m=typeof p==`object`?Object.keys(p)[0]:`application/json`;this.contentBody={payload:{path:[],query:[],header:[],body:[]},response:``,_response:``,fileName:d,method:e,typeName:u,requestPath:f,apiName:l,summary:a.summary,deprecated:a.deprecated??!1,contentType:r.SUPPORTED_REQUEST_TYPES_ALL.includes(m)?m:`application/json`,dataLevel:c?.dataLevel},this.requestHandle(a),this.responseHandle(a.responses),a.summary&&n.push([`/**`,`
9
9
  `,a.deprecated?` * @deprecated ${a.summary}`:` * ${a.summary}`,`
10
- `,` */`].join(``));let h=this.apiRequestItemHandle(this.contentBody);if(n.push(h,``),!this.Map.has(s)){let{payload:e}=this.contentBody,t={...this.contentBody,payload:{...e,path:[...e.path],query:[...e.query],header:[...e.header],body:[...e.body]}};this.Map.set(s,t)}}}}parseData(){this.allowedInterfaceKeys=this.computeAllowedInterfaceKeys();let e=Object.keys(this.pathsObject).sort();for(let t of e){let e=this.pathsObject[t];e&&this.parsePathItemObject(e,t,this.apiListFileContent)}return this.Map}async writeFile(){await this.writer.write(this.Map,this.apiListFileContent,[]),this.Map=new Map,this.errors.length>0&&e.log.warning(`Completed with ${this.errors.length} errors`)}async handle(){try{this.parseData(),await this.writeFile()}catch(e){if(this.handleError({type:`SCHEMA`,message:`Failed to handle schema`,details:e}),this.config.errorHandling?.throwOnError)throw e}}getGeneratedInterfacesForOutput(){return[...this.allowedInterfaceKeys].sort().map(e=>{let t=e.lastIndexOf(`|`);return{path:e.slice(0,t),method:e.slice(t+1).toLowerCase()}})}getMissingInterfacesForOutput(){return[...this.allInterfaceKeys].filter(e=>!this.allowedInterfaceKeys.has(e)).sort().map(e=>{let t=e.lastIndexOf(`|`);return{path:e.slice(0,t),method:e.slice(t+1).toLowerCase()}})}};exports.default=l;
10
+ `,` */`].join(``));let h=this.apiRequestItemHandle(this.contentBody);if(n.push(h,``),!this.Map.has(s)){let{payload:e}=this.contentBody,t={...this.contentBody,payload:{...e,path:[...e.path],query:[...e.query],header:[...e.header],body:[...e.body]}};this.Map.set(s,t)}}}}parseData(){this.allowedInterfaceKeys=this.computeAllowedInterfaceKeys();let e=Object.keys(this.pathsObject).sort();for(let t of e){let e=this.pathsObject[t];e&&this.parsePathItemObject(e,t,this.apiListFileContent)}return this.Map}async writeFile(){if(await this.writer.write(this.Map,this.apiListFileContent,[]),this.Map=new Map,this.errors.length>0){e.log.warning(`Completed with ${this.errors.length} error(s):`);let t=new Map;for(let e of this.errors){let n=e.type;t.has(n)||t.set(n,[]),t.get(n).push(e)}for(let[n,r]of t){e.log.warning(` ${n}: ${r.length} error(s)`);for(let t of r){let n=[t.method,t.path].filter(Boolean).join(` `);e.log.warn(` ${n?n+` - `:``}${t.message}`)}}}}async handle(){try{this.parseData(),await this.writeFile()}catch(e){if(this.handleError({type:`SCHEMA`,message:`Failed to handle schema`,details:e}),this.config.errorHandling?.throwOnError)throw e}}getGeneratedInterfacesForOutput(){return[...this.allowedInterfaceKeys].sort().map(e=>{let t=e.lastIndexOf(`|`);return{path:e.slice(0,t),method:e.slice(t+1).toLowerCase()}})}getMissingInterfacesForOutput(){return[...this.allInterfaceKeys].filter(e=>!this.allowedInterfaceKeys.has(e)).sort().map(e=>{let t=e.lastIndexOf(`|`);return{path:e.slice(0,t),method:e.slice(t+1).toLowerCase()}})}};exports.default=l;
@@ -1,4 +1,4 @@
1
- const e=require(`../../utils/index.cjs`),t=require(`../shared/format.cjs`);var n=class{config;constructor(e){this.config=e}async write(n,r,i){let a=[],o=this.config.saveTypeFolderPath,s=(n,r)=>new Promise((a,s)=>{try{let{payload:c,response:l,fileName:u}=r,[,d]=n.split(`|`);i.includes(d)||i.push(d);let f=[`declare namespace ${r.typeName} {`,...c.path,...c.query,...c.header,...c.body,`${t.getIndentation(this.config)}${l}`,`}`],p=`${o}/connectors/${u}.d.ts`;e.writeFileRecursive(p,f.join(`
2
- `)).then(()=>{e.log.info(`${p.padEnd(80)} - Write done!`),a(1)}).catch(e=>{s(Error(String(e)))})}catch(e){s(Error(String(e)))}}),c=Array.from(n.entries()).sort((e,t)=>e[0].localeCompare(t[0]));for(let[e,t]of c)a.push(s(e,t));await Promise.all(a),i.sort(),r.unshift(`import { ${i.join(`, `)} } from '${this.config.requestMethodsImportPath||`./api`}';`,`
3
- `);let l=this.config.apiListFileName??`index.ts`,u=`${this.config.saveApiListFolderPath}/${l}`;await e.clearDir(u),await e.writeFileRecursive(u,r.join(`
4
- `)),e.log.success(`Path parse & write done!`)}};exports.PathWriter=n;
1
+ const e=require(`../../utils/logger.cjs`),t=require(`../../utils/index.cjs`),n=require(`../shared/format.cjs`),r=require(`../shared/constants.cjs`);var i=class{config;constructor(e){this.config=e}async write(i,a,o){let s=[],c=this.config.saveTypeFolderPath,l=(i,a)=>new Promise((s,l)=>{try{let{payload:u,response:d,fileName:f}=a,[,p]=i.split(`|`);o.includes(p)||o.push(p);let m=[`declare namespace ${a.typeName} {`,...u.path,...u.query,...u.header,...u.body,`${n.getIndentation(this.config)}${d}`,`}`],h=`${c}/connectors/${f}.d.ts`;t.writeFileRecursive(h,m.join(`
2
+ `)).then(()=>{e.log.info(`${h.padEnd(r.PAD_END)} - Write done!`),s(1)}).catch(e=>{l(Error(String(e)))})}catch(e){l(Error(String(e)))}}),u=Array.from(i.entries()).sort((e,t)=>e[0].localeCompare(t[0]));for(let[e,t]of u)s.push(l(e,t));await Promise.all(s),o.sort(),a.unshift(`import { ${o.join(`, `)} } from '${this.config.requestMethodsImportPath||`./api`}';`,`
3
+ `);let d=this.config.apiListFileName??`index.ts`,f=`${this.config.saveApiListFolderPath}/${d}`;await t.clearDir(f),await t.writeFileRecursive(f,a.join(`
4
+ `)),e.log.success(`Path parse & write done!`)}};exports.PathWriter=i;
@@ -0,0 +1 @@
1
+ exports.PAD_END=100;
@@ -1 +1 @@
1
- const e=require(`../_virtual/rolldown_runtime.cjs`);let t=require(`fs`);t=e.__toESM(t);let n=require(`path`);n=e.__toESM(n);let r=require(`chalk`);r=e.__toESM(r);let i=require(`module`),a=require(`ora`);a=e.__toESM(a);let o=require(`shelljs`);const s=function(e,n){return new Promise((r,i)=>{try{let a=e.substring(0,e.lastIndexOf(`/`));t.default.mkdir(a,{recursive:!0},a=>{if(a)return i(Error(`创建目录失败`));t.default.writeFile(e,n,function(e){if(e)return i(Error(`写入文件失败`));r(!0)})})}catch(e){console.error(e),i(Error(String(e)))}})},c={info:e=>console.log(r.default.dim(e)),error:e=>console.log(r.default.red(`❌ ${e}`)),success:e=>console.log(r.default.green(`🥂 ${e}`)),warning:e=>console.log(r.default.yellow(`❗️ ${e}`)),load:e=>console.log(r.default.dim(`🌐 ${e}`))},l=(0,a.default)(),u={stop:()=>l.stop(),error:e=>l.fail(`❌ ${r.default.red(e)}`),start:e=>{l.text=r.default.blue(e),l.start()},success:e=>{l.stopAndPersist({symbol:r.default.green(`✔`),text:r.default.green(e)})}};function d(e){return new Promise((t,n)=>{try{(0,o.exec)(`rm -rf ${e}`),t(!0)}catch(e){console.error(e),n(Error(String(e)))}})}function f(e,n=[]){return new Promise((r,i)=>{try{if(!t.default.existsSync(e)){r(!0);return}t.default.readdirSync(e).forEach(r=>{if(n.includes(r))return;let i=`${e}/${r}`;t.default.statSync(i).isDirectory()?(0,o.exec)(`rm -rf ${i}`):t.default.unlinkSync(i)}),r(!0)}catch(e){console.error(e),i(Error(String(e)))}})}function p(e){if(typeof e!=`string`)return!1;try{return JSON.parse(e),!0}catch{return!1}}function m(e,t=!0){let n=(0,i.createRequire)(__filename);try{let r=n(e);if(t){let t=setTimeout(()=>{delete n.cache[n.resolve(e)],clearTimeout(t)},200)}return r}catch(e){throw Error(e instanceof Error?e.message:String(e))}}exports.clearDir=d,exports.clearDirExcept=f,exports.isValidJSON=p,exports.log=c,exports.requireModule=m,exports.spinner=u,exports.writeFileRecursive=s;
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`);require(`./logger.cjs`);let t=require(`fs`);t=e.__toESM(t);let n=require(`path`);n=e.__toESM(n);let r=require(`module`),i=require(`shelljs`);const a=function(e,n){return new Promise((r,i)=>{try{let a=e.substring(0,e.lastIndexOf(`/`));t.default.mkdir(a,{recursive:!0},a=>{if(a)return i(Error(`创建目录失败`));t.default.writeFile(e,n,function(e){if(e)return i(Error(`写入文件失败`));r(!0)})})}catch(e){console.error(e),i(Error(String(e)))}})};function o(e){return new Promise((t,n)=>{try{(0,i.exec)(`rm -rf ${e}`),t(!0)}catch(e){console.error(e),n(Error(String(e)))}})}function s(e,n=[]){return new Promise((r,a)=>{try{if(!t.default.existsSync(e)){r(!0);return}t.default.readdirSync(e).forEach(r=>{if(n.includes(r))return;let a=`${e}/${r}`;t.default.statSync(a).isDirectory()?(0,i.exec)(`rm -rf ${a}`):t.default.unlinkSync(a)}),r(!0)}catch(e){console.error(e),a(Error(String(e)))}})}function c(e){if(typeof e!=`string`)return!1;try{return JSON.parse(e),!0}catch{return!1}}function l(e,t=!0){let n=(0,r.createRequire)(__filename);try{let r=n(e);if(t){let t=setTimeout(()=>{delete n.cache[n.resolve(e)],clearTimeout(t)},200)}return r}catch(e){throw Error(e instanceof Error?e.message:String(e))}}exports.clearDir=o,exports.clearDirExcept=s,exports.isValidJSON=c,exports.requireModule=l,exports.writeFileRecursive=a;
@@ -0,0 +1 @@
1
+ const e=require(`../_virtual/rolldown_runtime.cjs`);let t=require(`chalk`);t=e.__toESM(t);let n=require(`ora`);n=e.__toESM(n);const r={silent:0,error:1,warn:2,info:3,verbose:4};let i=`info`;function a(e){i=e}function o(e){return r[i]>=r[e]}function s(e){let t=[`[${e.type}]`];if(e.path||e.method){let n=[e.method,e.path].filter(Boolean).join(` `);t.push(n),t.push(`-`)}return t.push(e.message),t.join(` `)}const c=(0,n.default)();function l(e){c.isSpinning?(c.clear(),e(),c.render()):e()}const u={info:e=>{o(`verbose`)&&l(()=>console.log(t.default.dim(e)))},error:e=>{o(`error`)&&l(()=>console.log(t.default.red(`❌ ${e}`)))},success:e=>{o(`info`)&&l(()=>console.log(t.default.green(`🥂 ${e}`)))},warning:e=>{o(`warn`)&&l(()=>console.log(t.default.yellow(`❗️ ${e}`)))},load:e=>{o(`verbose`)&&l(()=>console.log(t.default.dim(`🌐 ${e}`)))},verbose:e=>{o(`verbose`)&&l(()=>console.log(t.default.dim(e)))},warn:e=>{o(`warn`)&&l(()=>console.log(t.default.yellow(e)))},print:(...e)=>{o(`info`)&&l(()=>console.log(...e))}},d={stop:()=>c.stop(),error:e=>o(`error`)&&c.fail(`❌ ${t.default.red(e)}`),start:e=>{o(`info`)&&(c.text=t.default.blue(e),c.start())},success:e=>{o(`info`)&&c.stopAndPersist({symbol:t.default.green(`✔`),text:t.default.green(e)})}};exports.formatParseError=s,exports.log=u,exports.setLogLevel=a,exports.spinner=d;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anl",
3
- "version": "26.325.0",
3
+ "version": "26.326.0",
4
4
  "description": "FE command line tool",
5
5
  "main": "bin/an-cli.js",
6
6
  "publishConfig": {