anl 26.326.1 → 26.331.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/config.d.ts ADDED
@@ -0,0 +1,120 @@
1
+ export type TDatalevel = 'data' | 'serve' | 'axios';
2
+
3
+ /** 终端日志输出级别 */
4
+ export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'verbose';
5
+
6
+ /** 响应模型转换配置 */
7
+ export interface IResponseModelTransform {
8
+ /** 转换类型:unwrap-剔除响应模型,wrap-添加响应模型,replace-替换响应模型 */
9
+ type: 'unwrap' | 'wrap' | 'replace';
10
+ /** 当 type 为 unwrap 时,指定要提取的字段名,默认为 'data' */
11
+ dataField?: string;
12
+ /** 当 type 为 wrap 或 replace 时,指定响应模型的类型定义 */
13
+ wrapperType?: string;
14
+ /** 响应模型中的字段映射关系,key为字段名,value为字段类型 */
15
+ wrapperFields?: Record<string, string>;
16
+ /** 响应模型名称匹配正则,只有匹配的类型才会被转换,不匹配则跳过。例如 "^ResultMessage" 只转换 ResultMessage 开头的类型 */
17
+ modelPattern?: string;
18
+ }
19
+
20
+ export interface IIncludeInterface {
21
+ path: string;
22
+ method: string;
23
+ dataLevel?: TDatalevel;
24
+ }
25
+
26
+ export interface IConfigSwaggerServer {
27
+ /** swagger json 的 url */
28
+ url: string;
29
+ /** 公共前缀 */
30
+ publicPrefix?: string;
31
+ /** 生成接口默认返回数据层级(服务级配置) */
32
+ dataLevel?: TDatalevel;
33
+ /** 参数分隔符(服务级配置) */
34
+ parameterSeparator?: '$' | '_';
35
+ /** api list 的文件名称 */
36
+ apiListFileName?: string;
37
+ /** 追加请求头 */
38
+ headers?: Record<string, string>;
39
+ /** 包含的接口(服务级配置) */
40
+ includeInterface?: IIncludeInterface[];
41
+ /** 排除的接口(服务级配置) */
42
+ excludeInterface?: Omit<IIncludeInterface, 'dataLevel'>[];
43
+ /** 包含的模块(tag)列表,与 excludeTags 互斥,优先级低于 includeInterface/excludeInterface(在单接口过滤之后应用) */
44
+ includeTags?: string[];
45
+ /** 排除的模块(tag)列表,与 includeTags 互斥,优先级低于 includeInterface/excludeInterface(在单接口过滤之后应用) */
46
+ excludeTags?: string[];
47
+ /** path 前缀 */
48
+ modulePrefix?: string;
49
+ /** 响应模型转换配置 */
50
+ responseModelTransform?: IResponseModelTransform;
51
+ /** 请求超时时间(毫秒),默认 60000 */
52
+ timeout?: number;
53
+ }
54
+
55
+ export interface ConfigType {
56
+ /** 存放生成的类型文件的文件夹路径 */
57
+ saveTypeFolderPath: string;
58
+ /** 存放生成的 api 文件的文件夹路径 */
59
+ saveApiListFolderPath: string;
60
+ /** 兼容旧配置的 swagger json 地址(已迁移到 swaggerConfig 中) */
61
+ swaggerJsonUrl?: string;
62
+ /** swagger 服务器列表 */
63
+ swaggerConfig: IConfigSwaggerServer[] | IConfigSwaggerServer;
64
+ /** api list 生成文件名,单个 swaggerServer 可省略,默认 index.ts */
65
+ apiListFileName?: string;
66
+ /** 请求方法导入路径 */
67
+ requestMethodsImportPath: string;
68
+ /** 追加请求头 */
69
+ headers?: Record<string, string>;
70
+ /** 公共前缀(仅为兼容旧配置,最终以服务级配置为准) */
71
+ publicPrefix?: string;
72
+ /** 生成接口默认返回数据层级(服务级配置注入) */
73
+ dataLevel?: TDatalevel;
74
+ /** 参数分隔符(服务级配置注入) */
75
+ parameterSeparator?: '$' | '_';
76
+ /** 包含的接口(服务级配置注入) */
77
+ includeInterface?: IIncludeInterface[];
78
+ /** 排除的接口(服务级配置注入) */
79
+ excludeInterface?: Omit<IIncludeInterface, 'dataLevel'>[];
80
+ /** 包含的模块(tag)列表(服务级配置注入) */
81
+ includeTags?: string[];
82
+ /** 排除的模块(tag)列表(服务级配置注入) */
83
+ excludeTags?: string[];
84
+ /** path 前缀(服务级配置注入) */
85
+ modulePrefix?: string;
86
+ /** 响应模型转换配置(服务级配置注入) */
87
+ responseModelTransform?: IResponseModelTransform;
88
+ /** 请求超时时间(毫秒),默认 60000 */
89
+ timeout?: number;
90
+ /** 格式化配置 */
91
+ formatting?: {
92
+ /** 缩进字符 */
93
+ indentation: string;
94
+ /** 换行符(行结束符) */
95
+ lineEnding: string;
96
+ };
97
+ /** 终端日志输出级别,默认 'info'。silent-无输出, error-仅错误, warn-警告+错误, info-常规信息, verbose-详细输出 */
98
+ logLevel?: LogLevel;
99
+ /** 枚举数据保存路径 */
100
+ saveEnumFolderPath: string;
101
+ /** enum 导入路径 */
102
+ importEnumPath: string;
103
+ /** enum 配置 */
104
+ enmuConfig: {
105
+ /** 该选项与项目中 tsconfig.json 中 compilerOptions.erasableSyntaxOnly 选项一致 */
106
+ erasableSyntaxOnly: boolean;
107
+ /** 枚举变量名 */
108
+ varnames: string;
109
+ /** 枚举描述 */
110
+ comment: string;
111
+ };
112
+ }
113
+
114
+ /** 用户配置类型(所有字段均为可选,未指定的使用默认值) */
115
+ export type UserConfig = Partial<ConfigType>;
116
+
117
+ /**
118
+ * 定义 an-cli 配置(提供类型提示支持)
119
+ */
120
+ export declare function defineConfig(config: UserConfig): UserConfig;
package/config.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+
5
+ /**
6
+ * 定义 an-cli 配置(提供类型提示支持)
7
+ * @param {import('./config').UserConfig} config
8
+ * @returns {import('./config').UserConfig}
9
+ */
10
+ exports.defineConfig = function defineConfig(config) {
11
+ return config;
12
+ };
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.331.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/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(`
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);let s=require(`jiti`);const c=[{name:`api-report - API 变更检测报告`,value:`api-report`},{name:`api-mock - Mock 数据生成`,value:`api-mock`}];function l(){return a.default.join(__dirname,`..`,`skills`)}function u(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>n in t?t[n]:`{{${n}}}`)}function d(e){let t=a.default.join(e,`an.config.ts`),n=a.default.join(e,`an.config.json`);if(i.default.existsSync(t))try{let e=(0,s.createJiti)(__filename,{interopDefault:!0}).import(t);return(`default`in e&&e.default?e.default:e)??null}catch{return null}if(!i.default.existsSync(n))return null;try{return JSON.parse(i.default.readFileSync(n,`utf-8`))}catch{return null}}function f(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 p(e,t,n,r){return r===`command`?a.default.join(e,t,`${n}.md`):a.default.join(e,t,n,`SKILL.md`)}async function m(e,r,o,s,c){let d=a.default.join(l(),e,`SKILL.md`);if(!i.default.existsSync(d))throw Error(`找不到模板文件: ${d}`);let f=u(i.default.readFileSync(d,`utf-8`),r),m=p(o,s,e,c);await n.writeFileRecursive(m,f),t.log.success(`Skill 文件已写入: ${a.default.relative(o,m)}`)}async function h(e,t,n,i){let{scanDirs:a}=await r.default.prompt([{type:`input`,name:`scanDirs`,message:`需要扫描 API 使用的目录(逗号分隔,支持 glob):`,default:`src/pages/**,src/components/**`}]);await m(`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 g(e,t,n,i){let{mockOutput:a}=await r.default.prompt([{type:`input`,name:`mockOutput`,message:`Mock 数据输出目录:`,default:`mocks/`}]);await m(`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 _(){console.log(o.default.bold.blue(`
4
4
  🛡️ an skill - Agent 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;
5
+ `));let e=process.cwd(),n=d(e);if(!n){t.log.error(`未找到配置文件,请先在项目根目录配置 an.config.ts an.config.json`);return}let i=f(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:c,pageSize:10}]);if(a.length===0){t.log.warning(`未选择任何 Skill,已退出`);return}let{platform:s}=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,u;if(s===`cursor`)l=`.cursor/skills`,u=`skill`;else if(s===`claude`)l=`.claude/commands`,u=`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(),u=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} (${u===`command`?`/command 模式`:`Skill 模式`})\n`));for(let t of a)t===`api-report`?await h(e,i,l,u):t===`api-mock`&&await g(e,i,l,u);let p=u===`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=_;
@@ -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;
@@ -1,9 +1,38 @@
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(`
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=require(`jiti`),d;const f=process.env.NODE_ENV===`debug`,p={saveTypeFolderPath:f?`apps/types`:`src/types`,saveApiListFolderPath:f?`apps/types`:`src/apis`,saveEnumFolderPath:f?`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 m=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
3
  `),t.log.print(`$`,l.default.yellow(d)),t.log.print(`
4
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(`
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=f?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(`
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;
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 loadTsConfig(e){try{let t=await(0,u.createJiti)(__filename,{interopDefault:!0}).import(e),n=`default`in t&&t.default?t.default:t;return d=!0,n}catch(e){d=!0;let t=e instanceof Error?e.message:String(e);throw Error(`配置文件加载失败,请检查 an.config.ts 文件: ${t}`)}}async loadJsonConfig(e){try{let t=await o.default.promises.readFile(e,`utf8`);d=!0;try{return JSON.parse(t)}catch(e){throw d=!0,Error(`配置文件格式错误,请检查 an.config.json 的 JSON 格式是否正确: ${e instanceof Error?e.message:String(e)}`)}}catch(e){throw e instanceof Error&&`code`in e&&e.code,e}}async getConfig(e){let r=s.default.join(e,`an.config.ts`),i=s.default.join(e,`an.config.json`);return o.default.existsSync(r)?(t.log.info(`检测到 an.config.ts 配置文件。`),this.loadTsConfig(r)):o.default.existsSync(i)?this.loadJsonConfig(i):(d=!1,t.log.warning(`配置文件不存在,将自动创建配置文件。`),await n.writeFileRecursive(r,this.generateTsConfigContent()),t.log.success(`配置文件已创建,请检查项目根目录下的 an.config.ts 文件并配置后重新运行。`),p)}generateTsConfigContent(){return`import { defineConfig } from 'anl/config';
8
+
9
+ export default defineConfig({
10
+ saveTypeFolderPath: 'src/types',
11
+ saveApiListFolderPath: 'src/apis',
12
+ saveEnumFolderPath: 'src/enums',
13
+ importEnumPath: '../../../enums',
14
+ requestMethodsImportPath: './config/fetch',
15
+ formatting: {
16
+ indentation: '\\t',
17
+ lineEnding: '\\n',
18
+ },
19
+ swaggerConfig: [
20
+ {
21
+ url: 'https://generator3.swagger.io/openapi.json',
22
+ apiListFileName: 'index.ts',
23
+ headers: {},
24
+ dataLevel: 'serve',
25
+ parameterSeparator: '_',
26
+ includeInterface: [],
27
+ excludeInterface: [],
28
+ },
29
+ ],
30
+ enmuConfig: {
31
+ erasableSyntaxOnly: false,
32
+ varnames: 'enum-varnames',
33
+ comment: 'enum-descriptions',
34
+ },
35
+ });
36
+ `}async initialize(e,r,i){let a=process.cwd();try{let s=await this.getConfig(a),c={...p,...s},u=i??c.logLevel;u&&t.setLogLevel(u);let f=Object.prototype.hasOwnProperty.call(s,`swaggerConfig`),m=this.normalizeswaggerConfig(c,f);if(!d)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(`
37
+ `),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(`
38
+ `)}}catch(e){let n=e instanceof Error?e.message:`Unknown error`;t.log.error(`Initialization failed: ${n}`)}}};f&&new m().initialize().catch(e=>{console.error(e)}),exports.Main=m;
package/package.json CHANGED
@@ -1,8 +1,22 @@
1
1
  {
2
2
  "name": "anl",
3
- "version": "26.326.1",
3
+ "version": "26.331.0",
4
4
  "description": "FE command line tool",
5
5
  "main": "bin/an-cli.js",
6
+ "exports": {
7
+ ".": "./bin/an-cli.js",
8
+ "./config": {
9
+ "types": "./config.d.ts",
10
+ "default": "./config.js"
11
+ }
12
+ },
13
+ "typesVersions": {
14
+ "*": {
15
+ "config": [
16
+ "./config.d.ts"
17
+ ]
18
+ }
19
+ },
6
20
  "publishConfig": {
7
21
  "registry": "https://registry.npmjs.org"
8
22
  },
@@ -56,6 +70,7 @@
56
70
  "commander": "14.0.1",
57
71
  "figures": "^6.1.0",
58
72
  "inquirer": "^10.1.8",
73
+ "jiti": "^2.6.1",
59
74
  "log-symbols": "^5.1.0",
60
75
  "ora": "5.*",
61
76
  "pinyin-pro": "^3.28.0",
@@ -91,7 +106,9 @@
91
106
  "package.json",
92
107
  "README.md",
93
108
  "lib",
94
- "template"
109
+ "template",
110
+ "config.js",
111
+ "config.d.ts"
95
112
  ],
96
113
  "repository": {
97
114
  "type": "git",