anl 26.326.1 → 26.327.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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`).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);
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)`).option(`-l, --log-level <level>`,`set log output level: silent | error | warn | info | verbose`).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,e.logLevel).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.326.1`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
1
+ var e=`26.327.0`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
@@ -1 +1 @@
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
+ 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: ${n}`),s(e??Error(`Request Timeout: ${n}`))}),c=setTimeout(()=>{let e=Error();e.name=`Request Timeout`,e.message=n,u.emit(`timeout`,e)},o),u.end()})}exports.getSwaggerJson=o;
@@ -4,6 +4,6 @@ const e=require(`../_virtual/rolldown_runtime.cjs`),t=require(`../utils/logger.c
4
4
  `)),t.spinner.success(`File formatting successful`),t.log.print(`
5
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
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(`
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,i){let a=process.cwd()+`/an.config.json`;try{let s=await this.getConfig(a),c={...f,...s},d=i??c.logLevel;d&&t.setLogLevel(d);let p=Object.prototype.hasOwnProperty.call(s,`swaggerConfig`),m=this.normalizeswaggerConfig(c,p);if(!u)return;await o.default.promises.mkdir(c.saveApiListFolderPath,{recursive:!0}),await this.copyAjaxConfigFiles(c.saveApiListFolderPath),await n.clearDirExcept(c.saveApiListFolderPath,[`config`]),await n.clearDir(c.saveTypeFolderPath),await n.clearDir(c.saveEnumFolderPath);let h=[];for(let t=0;t<m.length;t++){let n=this.buildServerConfig(c,m[t]),r=t>0,i=await this.handle(n,r,e);e&&i&&h.push({serverUrl:m[t].url,list:i})}if(r!==void 0&&r!==!1&&await this.formatGeneratedFiles(c,r),t.log.success(`Successfully, all done, see you next time!`),t.log.print(`
8
+ `),e&&h.length>0){let n=e===`miss`?`excludeInterface`:`includeInterface`;for(let{serverUrl:e,list:r}of h)m.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
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "anl",
3
- "version": "26.326.1",
3
+ "version": "26.327.0",
4
4
  "description": "FE command line tool",
5
5
  "main": "bin/an-cli.js",
6
6
  "publishConfig": {