anl 26.325.0 → 26.326.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/git-local-config/index.cjs +1 -1
- package/lib/git-local-config/utils.cjs +1 -1
- package/lib/index.cjs +1 -1
- package/lib/package.cjs +1 -1
- package/lib/skill-init/index.cjs +6 -6
- package/lib/standard/install-commitlint.cjs +1 -1
- package/lib/standard/install-eslint.cjs +1 -1
- package/lib/standard/install-stylelint.cjs +1 -1
- package/lib/standard/prettier.cjs +1 -1
- package/lib/standard/vscode.cjs +1 -1
- package/lib/swagger-codegen/components/enum-parser.cjs +6 -6
- package/lib/swagger-codegen/components/schema-resolver.cjs +3 -3
- package/lib/swagger-codegen/components/writer.cjs +1 -1
- package/lib/swagger-codegen/get-data.cjs +1 -1
- package/lib/swagger-codegen/index.cjs +9 -9
- package/lib/swagger-codegen/path/index.cjs +3 -3
- package/lib/swagger-codegen/path/writer.cjs +4 -4
- package/lib/swagger-codegen/shared/constants.cjs +1 -0
- package/lib/utils/index.cjs +1 -1
- package/lib/utils/logger.cjs +1 -0
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`)
|
|
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/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`./_virtual/rolldown_runtime.cjs`),t=require(`./package.cjs`),n=require(`./git-local-config/index.cjs`),r=require(`./skill-init/index.cjs`),i=require(`./standard/lint-init.cjs`),a=require(`./swagger-codegen/index.cjs`);let o=require(`commander`),s=require(`inquirer`);s=e.__toESM(s),o.program.version(`${t.version}`,`-v --version`).usage(`<command> [options]`),o.program.command(`type`).description(`auto interface`).option(`-s, --show <what>`,`show interface list after generation: miss | gen`).action(e=>{let t=(e.show??``).toLowerCase().trim(),n=t===`miss`||t===`missing`||t===`m`||t===`exclude`||t===`x`?`miss`:t===`gen`||t===`generated`||t===`g`||t===`include`||t===`i`?`gen`:void 0;new a.Main().initialize(n).catch(e=>{console.error(e)})}),o.program.command(`lint`).description(`install linting tools (eslint, stylelint, prettier, commitlint, vscode)`).action(()=>i.lintHandle()),o.program.command(`git`).description(`config git Local custom command`).action(async()=>{let{features:e}=await s.default.prompt([{type:`checkbox`,name:`features`,message:`Select the required Git features (multi-select):`,choices:[{name:`gitflow standard branch creation`,value:`gitflow`},{name:`automatically set commit subject`,value:`commitSubject`},{name:`custom git command`,value:`customGitCommand`}],pageSize:10}]);n.gitHandle(e).catch(e=>{console.error(e)})}),o.program.command(`skill`).description(`initialize an agent skill into the current project`).action(()=>{r.skillHandle().catch(e=>{console.error(e)})}),o.program.parse(process.argv);
|
|
1
|
+
const e=require(`./_virtual/rolldown_runtime.cjs`),t=require(`./package.cjs`),n=require(`./git-local-config/index.cjs`),r=require(`./skill-init/index.cjs`),i=require(`./standard/lint-init.cjs`),a=require(`./swagger-codegen/index.cjs`);let o=require(`commander`),s=require(`inquirer`);s=e.__toESM(s),o.program.version(`${t.version}`,`-v --version`).usage(`<command> [options]`),o.program.command(`type`).description(`auto interface`).option(`-s, --show <what>`,`show interface list after generation: miss | gen`).option(`-f, --format [config]`,`enable prettier formatting after generation; optionally specify a prettier config file path (e.g. --format .prettierrc.mjs)`).action(e=>{let t=(e.show??``).toLowerCase().trim(),n=t===`miss`||t===`missing`||t===`m`||t===`exclude`||t===`x`?`miss`:t===`gen`||t===`generated`||t===`g`||t===`include`||t===`i`?`gen`:void 0;new a.Main().initialize(n,e.format).catch(e=>{console.error(e)})}),o.program.command(`lint`).description(`install linting tools (eslint, stylelint, prettier, commitlint, vscode)`).action(()=>i.lintHandle()),o.program.command(`git`).description(`config git Local custom command`).action(async()=>{let{features:e}=await s.default.prompt([{type:`checkbox`,name:`features`,message:`Select the required Git features (multi-select):`,choices:[{name:`gitflow standard branch creation`,value:`gitflow`},{name:`automatically set commit subject`,value:`commitSubject`},{name:`custom git command`,value:`customGitCommand`}],pageSize:10}]);n.gitHandle(e).catch(e=>{console.error(e)})}),o.program.command(`skill`).description(`initialize an agent skill into the current project`).action(()=>{r.skillHandle().catch(e=>{console.error(e)})}),o.program.parse(process.argv);
|
package/lib/package.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=`26.
|
|
1
|
+
var e=`26.326.1`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
|
package/lib/skill-init/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/index.cjs`);let
|
|
2
|
-
- `)},e,
|
|
3
|
-
- `)},e,
|
|
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(),
|
|
6
|
-
📋 已从 an.config.json 读取配置:`)),console.log(
|
|
7
|
-
✅ Skill 初始化完成!`),
|
|
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`)
|
|
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`)
|
|
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`)
|
|
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`)
|
|
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;
|
package/lib/standard/vscode.cjs
CHANGED
|
@@ -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/
|
|
2
|
-
`)}\n} as const;\n\nexport type ${
|
|
3
|
-
`)}\n}`}catch(
|
|
4
|
-
`):`${
|
|
5
|
-
`)}:{headerRef:``,renderStr:[`export enum ${
|
|
6
|
-
`)}:null}handleEnum(
|
|
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/
|
|
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
|
|
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(
|
|
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/
|
|
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
|
|
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(e){let{swaggerJsonUrl:n=``,headers:r={}}=e,o=e.timeout??6e4;return new Promise((e,s)=>{let c,l=n.startsWith(`https`)?a.default.request:i.default.request;t.log.verbose(`Request Start: ${n}`);let u=l(n,{method:`GET`,rejectUnauthorized:!1,headers:{Accept:`*/*`,"Accept-Encoding":`utf-8`,"Content-Type":`application/x-www-form-urlencoded`,...r}},r=>{r.setEncoding(`utf-8`);let i=``;r.on(`data`,e=>{i+=e.toString()}),r.on(`end`,()=>{clearTimeout(c);try{let r=JSON.parse(i);t.log.verbose(`Request Successful: ${n}`),e(r)}catch(e){t.log.error(`Request Failed: ${n}`),s(Error(String(e)))}}),r.on(`error`,e=>{t.log.error(`Request Failed: ${n}`),s(e)})});u.on(`timeout`,e=>{t.log.error(`Request Timeout:`+String(e)),s(e)}),c=setTimeout(()=>{let e=Error();e.name=`Request Timeout`,e.message=n,u.emit(`timeout`,e)},o),u.end()})}exports.getSwaggerJson=o;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/
|
|
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
|
|
3
|
-
`),
|
|
4
|
-
`)),t.
|
|
5
|
-
`)}catch(e){
|
|
6
|
-
检测到旧版配置,请更新 an.config.json:`),
|
|
7
|
-
Legacy configuration detected, please update an.config.json:`),
|
|
8
|
-
`),e&&
|
|
9
|
-
`)}}catch(e){let n=e instanceof Error?e.message:`Unknown error`;t.log.error(`Initialization failed: ${n}`)}}};
|
|
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 resolvePrettierExecutable(){let e=process.platform===`win32`,n=s.default.join(process.cwd(),`node_modules`,`.bin`,e?`prettier.cmd`:`prettier`);try{return await o.default.promises.access(n,o.default.constants.X_OK),t.log.info(`Using local prettier: ${n}`),`"${n}"`}catch{return`npx prettier`}}async detectPrettierConfig(){for(let e of[`.prettierrc`,`.prettierrc.json`,`.prettierrc.json5`,`.prettierrc.yaml`,`.prettierrc.yml`,`.prettierrc.js`,`.prettierrc.cjs`,`.prettierrc.mjs`,`.prettierrc.ts`,`.prettierrc.cts`,`.prettierrc.mts`,`prettier.config.js`,`prettier.config.cjs`,`prettier.config.mjs`,`prettier.config.ts`,`prettier.config.cts`,`prettier.config.mts`]){let n=s.default.join(process.cwd(),e);try{return await o.default.promises.access(n),t.log.info(`Auto-detected prettier config: ${e}`),n}catch{}}try{let e=await o.default.promises.readFile(s.default.join(process.cwd(),`package.json`),`utf8`);if(JSON.parse(e).prettier)return t.log.info(`Using prettier config from package.json`),s.default.join(process.cwd(),`package.json`)}catch{}return null}async formatGeneratedFiles(e,n){let r=await this.resolvePrettierExecutable(),i=``;if(typeof n==`string`&&n.trim()){let e=s.default.resolve(process.cwd(),n.trim());try{await o.default.promises.access(e),i=` --config "${e}"`}catch{t.log.warning(`Prettier config file not found: ${n}, falling back to auto-detection...`);let e=await this.detectPrettierConfig();e&&(i=` --config "${e}"`)}}else{let e=await this.detectPrettierConfig();e&&(i=` --config "${e}"`)}let a=[],u=async(e,t)=>{try{await o.default.promises.access(e),a.push(`"${e}/${t}"`)}catch{}};if(await u(e.saveTypeFolderPath,`**/*.{ts,d.ts}`),await u(e.saveApiListFolderPath,`**/*.ts`),await u(e.saveEnumFolderPath,`**/*.ts`),a.length===0){t.log.warning(`No generated directories found to format.`);return}let d=`${r} --write ${a.join(` `)}${i}`;try{t.spinner.start(`Formatting generated files...`);let{stderr:e}=await new Promise((e,t)=>{(0,c.exec)(d,(n,r,i)=>{n?t(Error(String(n))):e({stdout:r,stderr:i})})});e&&(t.log.print(`
|
|
3
|
+
`),t.log.print(`$`,l.default.yellow(d)),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(d)),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,timeout:t.timeout??e.timeout};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,timeout:t.timeout??e.timeout,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,r){let i=process.cwd()+`/an.config.json`;try{let a=await this.getConfig(i),s={...f,...a};s.logLevel&&t.setLogLevel(s.logLevel);let c=Object.prototype.hasOwnProperty.call(a,`swaggerConfig`),d=this.normalizeswaggerConfig(s,c);if(!u)return;await o.default.promises.mkdir(s.saveApiListFolderPath,{recursive:!0}),await this.copyAjaxConfigFiles(s.saveApiListFolderPath),await n.clearDirExcept(s.saveApiListFolderPath,[`config`]),await n.clearDir(s.saveTypeFolderPath),await n.clearDir(s.saveEnumFolderPath);let p=[];for(let t=0;t<d.length;t++){let n=this.buildServerConfig(s,d[t]),r=t>0,i=await this.handle(n,r,e);e&&i&&p.push({serverUrl:d[t].url,list:i})}if(r!==void 0&&r!==!1&&await this.formatGeneratedFiles(s,r),t.log.success(`Successfully, all done, see you next time!`),t.log.print(`
|
|
8
|
+
`),e&&p.length>0){let n=e===`miss`?`excludeInterface`:`includeInterface`;for(let{serverUrl:e,list:r}of p)d.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`)
|
|
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(
|
|
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
|
|
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/
|
|
2
|
-
`)).then(()=>{e.log.info(`${
|
|
3
|
-
`);let
|
|
4
|
-
`)),e.log.success(`Path parse & write done!`)}};exports.PathWriter=
|
|
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;
|
package/lib/utils/index.cjs
CHANGED
|
@@ -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(`
|
|
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;
|