anl 26.509.0 → 26.510.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 +15 -0
- package/lib/package.cjs +1 -1
- package/lib/swagger-codegen/components/enum-parser.cjs +1 -1
- package/lib/swagger-codegen/components/schema-resolver.cjs +1 -1
- package/lib/swagger-codegen/components/writer.cjs +1 -1
- package/lib/swagger-codegen/index.cjs +10 -6
- package/lib/swagger-codegen/path/naming.cjs +1 -1
- package/lib/swagger-codegen/path/schema-resolver.cjs +1 -1
- package/lib/swagger-codegen/shared/naming.cjs +1 -1
- package/package.json +1 -1
package/config.d.ts
CHANGED
|
@@ -53,6 +53,17 @@ export interface IConfigSwaggerServer {
|
|
|
53
53
|
responseModelTransform?: IResponseModelTransform;
|
|
54
54
|
/** 请求超时时间(毫秒),默认 60000 */
|
|
55
55
|
timeout?: number;
|
|
56
|
+
/** 命名空间隔离策略(服务级配置):
|
|
57
|
+
* - 'segment'(默认):以服务 segment 派生 PascalCase 前缀(如 op → `Op_`),避免多服务同 path 的全局 namespace 合并污染。
|
|
58
|
+
* - 'none':不加前缀(仅推荐单服务项目使用)。
|
|
59
|
+
*/
|
|
60
|
+
namespaceIsolation?: 'segment' | 'none';
|
|
61
|
+
/** 枚举数据隔离策略(服务级配置,多服务时生效):
|
|
62
|
+
* - 'segment'(默认):将该服务的 enum 写入 `${saveEnumFolderPath}/<segment>/`,与 connectors / models 对称隔离,避免不同服务同名枚举互相覆盖。
|
|
63
|
+
* - 'none':与其他服务共享 `${saveEnumFolderPath}` 顶层目录,存在同名时后写者覆盖前者(与历史行为一致)。
|
|
64
|
+
* 单服务模式下该选项无效,始终扁平写入顶层。
|
|
65
|
+
*/
|
|
66
|
+
enumIsolation?: 'segment' | 'none';
|
|
56
67
|
}
|
|
57
68
|
|
|
58
69
|
export interface ConfigType {
|
|
@@ -90,6 +101,10 @@ export interface ConfigType {
|
|
|
90
101
|
responseModelTransform?: IResponseModelTransform;
|
|
91
102
|
/** 请求超时时间(毫秒),默认 60000 */
|
|
92
103
|
timeout?: number;
|
|
104
|
+
/** 命名空间隔离策略(服务级配置注入),默认 'segment' */
|
|
105
|
+
namespaceIsolation?: 'segment' | 'none';
|
|
106
|
+
/** 枚举数据隔离策略(服务级配置注入),默认 'segment'。仅多服务时生效 */
|
|
107
|
+
enumIsolation?: 'segment' | 'none';
|
|
93
108
|
/** 格式化配置 */
|
|
94
109
|
formatting?: {
|
|
95
110
|
/** 缩进字符 */
|
package/lib/package.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=`26.
|
|
1
|
+
var e=`26.510.0`;Object.defineProperty(exports,`version`,{enumerable:!0,get:function(){return e}});
|
|
@@ -3,4 +3,4 @@ const e=require(`../../utils/logger.cjs`),t=require(`../../utils/index.cjs`),n=r
|
|
|
3
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
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
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),l=r.adjustImportPathForSegment(this.config.importEnumPath??``,r.getServerSegment(this.config));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 '${l}';`,renderStr:`${n.getIndentation(this.config)}${i}${a?``:`?`}: ${s}${this.nullable(e.nullable)};`,comment:t,typeName:s}}let u=this.parseEnum(e,o);return u?(this.enumsMap.has(c)||this.enumsMap.set(c,{fileName:c,content:u.renderStr}),{headerRef:`import type { ${s} } from '${l}';`,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 '${r.adjustImportPathForSegment(this.config.importEnumPath??``,r.getServerSegment(this.config))}';`}};exports.EnumParser=a;
|
|
6
|
+
`)}:null}handleEnum(e,i,a=!1){let o=r.wordsToPascalCase(r.resolveSchemaName(i)),s=r.getEnumTypeName(this.config,o),c=r.typeNameToFileName(o),l=r.appendEnumSegment(r.adjustImportPathForSegment(this.config.importEnumPath??``,r.getServerSegment(this.config)),r.getEnumSegment(this.config));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 '${l}';`,renderStr:`${n.getIndentation(this.config)}${i}${a?``:`?`}: ${s}${this.nullable(e.nullable)};`,comment:t,typeName:s}}let u=this.parseEnum(e,o);return u?(this.enumsMap.has(c)||this.enumsMap.set(c,{fileName:c,content:u.renderStr}),{headerRef:`import type { ${s} } from '${l}';`,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 '${r.appendEnumSegment(r.adjustImportPathForSegment(this.config.importEnumPath??``,r.getServerSegment(this.config)),r.getEnumSegment(this.config))}';`}};exports.EnumParser=a;
|
|
@@ -2,6 +2,6 @@ const e=require(`../../utils/logger.cjs`),t=require(`../../utils/index.cjs`),n=r
|
|
|
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/`,``),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;if(i===`enum`){let e=r.getEnumTypeName(this.config,n),t=r.getServerSegment(this.config);a=`import type { ${e} } from '${r.adjustImportPathForSegment(this.config.importEnumPath??``,t)}';`}else a=`import type { ${n} } from './${t}';`;return{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(`
|
|
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;if(i===`enum`){let e=r.getEnumTypeName(this.config,n),t=r.getServerSegment(this.config);a=`import type { ${e} } from '${r.appendEnumSegment(r.adjustImportPathForSegment(this.config.importEnumPath??``,t),r.getEnumSegment(this.config))}';`}else a=`import type { ${n} } from './${t}';`;return{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
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(`../../_virtual/rolldown_runtime.cjs`),t=require(`../../utils/logger.cjs`),n=require(`../../utils/index.cjs`),r=require(`../shared/naming.cjs`),i=require(`../shared/constants.cjs`),a=require(`../shared/writer.cjs`);let o=require(`fs`);o=e.__toESM(o);var s=class{config;appendMode;constructor(e,t){this.config=e,this.appendMode=t?.appendMode??!1}async writeSchemas(e){let o=[],s=r.getServerSegment(this.config),c=s?`${s}/`:``,l=`${this.config.saveTypeFolderPath}/models/${c}`;await n.runWithConcurrency(Array.from(e.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName)),32,async({fileName:e,content:r})=>{o.push(`export * from './${e}';`);let a=`${l}${e}.ts`;try{await n.writeFileRecursive(a,r),t.log.info(`${a.padEnd(i.PAD_END)} - Write done!`)}catch(e){t.log.warning(`${a} - Write failed: ${e instanceof Error?e.message:String(e)}`)}}),o.sort(),await a.writeIndexFileWithDedup(`${l}index.ts`,o,{appendMode:this.appendMode}),t.log.step(`Components parsed & written`)}async writeEnums(e){let
|
|
1
|
+
const e=require(`../../_virtual/rolldown_runtime.cjs`),t=require(`../../utils/logger.cjs`),n=require(`../../utils/index.cjs`),r=require(`../shared/naming.cjs`),i=require(`../shared/constants.cjs`),a=require(`../shared/writer.cjs`);let o=require(`fs`);o=e.__toESM(o);var s=class{config;appendMode;constructor(e,t){this.config=e,this.appendMode=t?.appendMode??!1}async writeSchemas(e){let o=[],s=r.getServerSegment(this.config),c=s?`${s}/`:``,l=`${this.config.saveTypeFolderPath}/models/${c}`;await n.runWithConcurrency(Array.from(e.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName)),32,async({fileName:e,content:r})=>{o.push(`export * from './${e}';`);let a=`${l}${e}.ts`;try{await n.writeFileRecursive(a,r),t.log.info(`${a.padEnd(i.PAD_END)} - Write done!`)}catch(e){t.log.warning(`${a} - Write failed: ${e instanceof Error?e.message:String(e)}`)}}),o.sort(),await a.writeIndexFileWithDedup(`${l}index.ts`,o,{appendMode:this.appendMode}),t.log.step(`Components parsed & written`)}async writeEnums(e){let s=[],c=r.getEnumSegment(this.config),l=c?`${c}/`:``,u=`${this.config.saveEnumFolderPath}/${l}`;await n.runWithConcurrency(Array.from(e.values()).sort((e,t)=>e.fileName.localeCompare(t.fileName)),32,async({fileName:e,content:r})=>{s.push(`export * from './${e}';`);let a=`${u}${e}.ts`;if(this.appendMode&&!c)try{await o.default.promises.readFile(a,`utf8`)!==r&&t.log.warning(`Enum 文件冲突:${a} 已存在且内容不同,将被当前服务覆盖。请检查不同 swagger 服务是否定义了同名但语义不一致的枚举,或开启 enumIsolation: 'segment'。`)}catch{}await n.writeFileRecursive(a,r),t.log.info(`${a.padEnd(i.PAD_END)} - Write done!`)}),s.sort(),await a.writeIndexFileWithDedup(`${u}index.ts`,s,{appendMode:this.appendMode}),t.log.step(`Enums written`)}};exports.ComponentWriter=s;
|
|
@@ -4,7 +4,7 @@ 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(`$`,d.default.yellow(s)),t.log.print(``)}}async copyAjaxConfigFiles(e){let n=[`dio.ts`,`error-message.ts`,`fetch.ts`,`api-type.d.ts`],r=m?l.default.join(__dirname,`..`,`..`,`postbuild-assets`,`ajax-config`):l.default.join(__dirname,`..`,`ajax-config`),i=l.default.join(e,`config`);try{await c.default.promises.access(i),t.log.info(`config folder already exists at ${i}, skipping generation.`);return}catch{await c.default.promises.mkdir(i,{recursive:!0})}for(let e of n){let n=l.default.join(r,e),a=l.default.join(i,e);try{await c.default.promises.access(n),await c.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`;if(/[\\/]/.test(o)||o.includes(`..`))throw Error(`swaggerConfig[${r}].apiListFileName 非法:"${o}",请使用单个文件名(如 "bff.ts"),不要包含路径分隔符或 ".."。`);let 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 t.name?.trim()&&(m.name=t.name.trim()),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)});let t=new Set;a.forEach(e=>{if(e.name){if(t.has(e.name))throw Error(`swaggerConfig 中 name 重复:${e.name},请为每个服务设置唯一名称。`);t.add(e.name)}})}return n&&this.showLegacyConfigHint(e),a}buildServerConfig(e,t,n){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,__segment:n}}async loadTsConfig(e){try{let t=await(0,f.createJiti)(__filename,{interopDefault:!0}).import(e),n=`default`in t&&t.default?t.default:t;return p=!0,n}catch(e){p=!0;let t=e instanceof Error?e.message:String(e);throw Error(`配置文件加载失败,请检查 an.config.ts 文件: ${t}`)}}async loadJsonConfig(e){try{let t=await c.default.promises.readFile(e,`utf8`);p=!0;try{return JSON.parse(t)}catch(e){throw p=!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=l.default.join(e,`an.config.ts`),i=l.default.join(e,`an.config.json`);return c.default.existsSync(r)?(t.log.info(`检测到 an.config.ts 配置文件。`),this.loadTsConfig(r)):c.default.existsSync(i)?this.loadJsonConfig(i):(p=!1,t.log.warning(`配置文件不存在,将自动创建配置文件。`),await n.writeFileRecursive(r,this.generateTsConfigContent()),t.log.success(`配置文件已创建,请检查项目根目录下的 an.config.ts 文件并配置后重新运行。`),h)}generateTsConfigContent(){return`import { defineConfig } from 'anl/config';
|
|
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`;if(/[\\/]/.test(o)||o.includes(`..`))throw Error(`swaggerConfig[${r}].apiListFileName 非法:"${o}",请使用单个文件名(如 "bff.ts"),不要包含路径分隔符或 ".."。`);let 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,namespaceIsolation:t.namespaceIsolation??e.namespaceIsolation??`segment`,enumIsolation:t.enumIsolation??e.enumIsolation??`segment`};return t.name?.trim()&&(m.name=t.name.trim()),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)});let t=new Set;a.forEach(e=>{if(e.name){if(t.has(e.name))throw Error(`swaggerConfig 中 name 重复:${e.name},请为每个服务设置唯一名称。`);t.add(e.name)}})}return n&&this.showLegacyConfigHint(e),a}buildServerConfig(e,t,n,r){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,namespaceIsolation:t.namespaceIsolation??e.namespaceIsolation??`segment`,enumIsolation:t.enumIsolation??e.enumIsolation??`segment`,swaggerConfig:t,__segment:n,__namespacePrefix:r}}async loadTsConfig(e){try{let t=await(0,f.createJiti)(__filename,{interopDefault:!0}).import(e),n=`default`in t&&t.default?t.default:t;return p=!0,n}catch(e){p=!0;let t=e instanceof Error?e.message:String(e);throw Error(`配置文件加载失败,请检查 an.config.ts 文件: ${t}`)}}async loadJsonConfig(e){try{let t=await c.default.promises.readFile(e,`utf8`);p=!0;try{return JSON.parse(t)}catch(e){throw p=!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=l.default.join(e,`an.config.ts`),i=l.default.join(e,`an.config.json`);return c.default.existsSync(r)?(t.log.info(`检测到 an.config.ts 配置文件。`),this.loadTsConfig(r)):c.default.existsSync(i)?this.loadJsonConfig(i):(p=!1,t.log.warning(`配置文件不存在,将自动创建配置文件。`),await n.writeFileRecursive(r,this.generateTsConfigContent()),t.log.success(`配置文件已创建,请检查项目根目录下的 an.config.ts 文件并配置后重新运行。`),h)}generateTsConfigContent(){return`import { defineConfig } from 'anl/config';
|
|
8
8
|
|
|
9
9
|
export default defineConfig({
|
|
10
10
|
saveTypeFolderPath: 'src/types',
|
|
@@ -33,12 +33,16 @@ export default defineConfig({
|
|
|
33
33
|
comment: 'enum-descriptions',
|
|
34
34
|
},
|
|
35
35
|
});
|
|
36
|
-
`}resolveSelectedServiceIndices(e,t){let n=new Map;e.forEach((e,t)=>{e.name&&n.set(e.name.toLowerCase(),t)}),e.forEach((e,t)=>{let i=r.computeSegment(e.apiListFileName).toLowerCase();i&&!n.has(i)&&n.set(i,t)});let i=new Set,a=[];for(let e of t){let t=e.toLowerCase(),r=n.get(t);r===void 0?a.push(e):i.add(r)}if(a.length){let t=e.map(e=>e.name||r.computeSegment(e.apiListFileName)).filter(Boolean).join(`, `);throw Error(`未找到匹配的 swagger 服务:${a.join(`, `)}。可用服务:${t||`<无>`}`)}return Array.from(i).sort((e,t)=>e-t)}async promptSelectServices(e){let t=e.map((e,t)=>{let n=e.name||r.computeSegment(e.apiListFileName)||`#${t}`;return{name:`${n} (${e.apiListFileName} ← ${e.url})`,value:t,short:n}}),{picked:n}=await s.default.prompt([{type:`checkbox`,name:`picked`,message:`请选择需要重新生成的 swagger 服务(空选 = 全部):`,choices:t,pageSize:Math.min(20,t.length)}]);return!n||n.length===0?e.map((e,t)=>t):n.sort((e,t)=>e-t)}async initialize(e,i,a,o){let s=process.cwd();try{let l=await this.getConfig(s),u={...h,...l},f=a??u.logLevel;f&&t.setLogLevel(f);let m=Object.prototype.hasOwnProperty.call(l,`swaggerConfig`),g=this.normalizeswaggerConfig(u,m);if(!p)return;let _=g.length>1,v=_?g.map(e=>r.computeSegment(e.apiListFileName)):g.map(()=>``);if(_){let e=new Map;v.forEach((t,n)=>{if(!t)throw Error(`swaggerConfig[${n}].apiListFileName="${g[n].apiListFileName}" 无法派生有效 segment(清洗后为空),请使用包含字母/数字的文件名。`);if(e.has(t))throw Error(`swaggerConfig 多个服务的 apiListFileName 在派生 segment 时冲突:"${g[e.get(t)].apiListFileName}" 与 "${g[n].apiListFileName}" 都解析为 "${t}",请改名以避免目录覆盖。`);e.set(t,n)})}let y,b;o?.length?(
|
|
37
|
-
检测到多个 swagger 服务,请选择本次要重新生成的服务:`)),
|
|
36
|
+
`}resolveSelectedServiceIndices(e,t){let n=new Map;e.forEach((e,t)=>{e.name&&n.set(e.name.toLowerCase(),t)}),e.forEach((e,t)=>{let i=r.computeSegment(e.apiListFileName).toLowerCase();i&&!n.has(i)&&n.set(i,t)});let i=new Set,a=[];for(let e of t){let t=e.toLowerCase(),r=n.get(t);r===void 0?a.push(e):i.add(r)}if(a.length){let t=e.map(e=>e.name||r.computeSegment(e.apiListFileName)).filter(Boolean).join(`, `);throw Error(`未找到匹配的 swagger 服务:${a.join(`, `)}。可用服务:${t||`<无>`}`)}return Array.from(i).sort((e,t)=>e-t)}async promptSelectServices(e){let t=e.map((e,t)=>{let n=e.name||r.computeSegment(e.apiListFileName)||`#${t}`;return{name:`${n} (${e.apiListFileName} ← ${e.url})`,value:t,short:n}}),{picked:n}=await s.default.prompt([{type:`checkbox`,name:`picked`,message:`请选择需要重新生成的 swagger 服务(空选 = 全部):`,choices:t,pageSize:Math.min(20,t.length)}]);return!n||n.length===0?e.map((e,t)=>t):n.sort((e,t)=>e-t)}async initialize(e,i,a,o){let s=process.cwd();try{let l=await this.getConfig(s),u={...h,...l},f=a??u.logLevel;f&&t.setLogLevel(f);let m=Object.prototype.hasOwnProperty.call(l,`swaggerConfig`),g=this.normalizeswaggerConfig(u,m);if(!p)return;let _=g.length>1,v=_?g.map(e=>r.computeSegment(e.apiListFileName)):g.map(()=>``);if(_){let e=new Map;v.forEach((t,n)=>{if(!t)throw Error(`swaggerConfig[${n}].apiListFileName="${g[n].apiListFileName}" 无法派生有效 segment(清洗后为空),请使用包含字母/数字的文件名。`);if(t.toLowerCase()===`index`)throw Error(`swaggerConfig[${n}].apiListFileName="${g[n].apiListFileName}" 派生 segment 为 "index",会与顶层 models/index.ts 形成自引用,请改为其他文件名(如 "main.ts" / "default.ts")。`);if(e.has(t))throw Error(`swaggerConfig 多个服务的 apiListFileName 在派生 segment 时冲突:"${g[e.get(t)].apiListFileName}" 与 "${g[n].apiListFileName}" 都解析为 "${t}",请改名以避免目录覆盖。`);e.set(t,n)})}let y=g.map(e=>(e.namespaceIsolation??u.namespaceIsolation??`segment`)===`none`?``:r.segmentToNamespacePrefix(r.computeSegment(e.apiListFileName)));if(_){let e=g.map((e,t)=>({s:e,idx:t})).filter(({s:e})=>(e.namespaceIsolation??u.namespaceIsolation??`segment`)===`none`).map(({s:e})=>e.apiListFileName);e.length>0&&t.log.warning(`检测到多服务场景下以下服务关闭了 namespace 前缀(namespaceIsolation: 'none'):${e.join(`, `)}。 不同服务若存在同名 path,将会因 declare namespace 全局合并而互相污染类型,请确认是否符合预期。`);let n=new Map;y.forEach((e,t)=>{if(e){if(n.has(e))throw Error(`swaggerConfig 多个服务派生的 namespace 前缀冲突:"${g[n.get(e)].apiListFileName}" 与 "${g[t].apiListFileName}" 都解析为前缀 "${e}",请改名以避免类型同名合并。`);n.set(e,t)}})}let b,x;o?.length?(b=this.resolveSelectedServiceIndices(g,o),x=b.length!==g.length):g.length>1&&process.stdin.isTTY&&process.stdout.isTTY?(t.log.print(d.default.cyan(`
|
|
37
|
+
检测到多个 swagger 服务,请选择本次要重新生成的服务:`)),b=await this.promptSelectServices(g),x=b.length!==g.length):(b=g.map((e,t)=>t),x=!1),this.printExecutionPlan(g,b,x),await c.default.promises.mkdir(u.saveApiListFolderPath,{recursive:!0}),await this.copyAjaxConfigFiles(u.saveApiListFolderPath),x?await this.cleanSelectedTargets(u,g,b,v,_):(await n.clearDirExcept(u.saveApiListFolderPath,[`config`]),await n.clearDir(u.saveTypeFolderPath),await n.clearDir(u.saveEnumFolderPath));let S=[];for(let t=0;t<b.length;t++){let n=b[t],r=this.buildServerConfig(u,g[n],v[n],y[n]),i=x?!0:t>0,a=await this.handle(r,i,e);e&&a&&S.push({serverUrl:g[n].url,list:a})}if(_&&(await this.writeTopLevelModelsBarrel(u,v,b,x),b.filter(e=>(g[e].enumIsolation??`segment`)===`segment`).map(e=>v[e]).filter(Boolean).length>0&&await this.writeTopLevelEnumsBarrel(u,v,g,b,x),g.every(e=>(e.enumIsolation??`segment`)===`segment`)&&await this.warnLegacyTopLevelEnums(u)),i!==void 0&&i!==!1&&(x?await this.formatSelectedFiles(u,g,b,v,_,i):await this.formatGeneratedFiles(u,i)),t.log.banner(`All done — see you next time!`),e&&S.length>0){let n=e===`miss`?`excludeInterface`:`includeInterface`;for(let{serverUrl:e,list:r}of S)b.length>1?t.log.print(d.default.cyan(`\n[${n}] ${e}`)):t.log.print(d.default.cyan(`\n[${n}]`)),t.log.print(JSON.stringify(r,null,2));t.log.print(`
|
|
38
38
|
`)}}catch(e){let n=e instanceof Error?e.message:`Unknown error`;t.log.error(`Initialization failed: ${n}`),process.exitCode=1}}printExecutionPlan(e,n,i){let a=new Set(n);t.log.print(d.default.cyan(i?`
|
|
39
39
|
[anl type] 选择型生成,仅处理以下服务:`:`
|
|
40
|
-
[anl type] 全量生成,将处理所有服务:`)),e.forEach((e,n)=>{let i=e.name||r.computeSegment(e.apiListFileName)||`#${n}`;a.has(n)?t.log.print(` ${d.default.green(`●`)} ${i} (${e.apiListFileName}) ${d.default.gray(e.url)}`):t.log.print(` ${d.default.gray(`○ skip `)}${i} (${e.apiListFileName}) ${d.default.gray(e.url)}`)}),t.log.print(``)}async cleanSelectedTargets(e,t,r,i,a){for(let o of r)if(await n.clearDir(`${e.saveApiListFolderPath}/${t[o].apiListFileName}`),a){let
|
|
41
|
-
`).filter(e=>e.trim()!==``)}catch{e=[]}let t=new Set(
|
|
40
|
+
[anl type] 全量生成,将处理所有服务:`)),e.forEach((e,n)=>{let i=e.name||r.computeSegment(e.apiListFileName)||`#${n}`;a.has(n)?t.log.print(` ${d.default.green(`●`)} ${i} (${e.apiListFileName}) ${d.default.gray(e.url)}`):t.log.print(` ${d.default.gray(`○ skip `)}${i} (${e.apiListFileName}) ${d.default.gray(e.url)}`)}),t.log.print(``)}async cleanSelectedTargets(e,t,r,i,a){for(let o of r)if(await n.clearDir(`${e.saveApiListFolderPath}/${t[o].apiListFileName}`),a){let r=i[o];r&&(await n.clearDir(`${e.saveTypeFolderPath}/connectors/${r}`),await n.clearDir(`${e.saveTypeFolderPath}/models/${r}`),(t[o].enumIsolation??`segment`)===`segment`&&await n.clearDir(`${e.saveEnumFolderPath}/${r}`))}else await n.clearDir(`${e.saveTypeFolderPath}/connectors`),await n.clearDir(`${e.saveTypeFolderPath}/models`)}async writeTopLevelModelsBarrel(e,i,a,o){let s=`${e.saveTypeFolderPath}/models/index.ts`,l=e=>{let t=r.segmentToNamespacePrefix(e);if(!t)throw Error(`无法为 segment "${e}" 生成 namespace 别名,请改用包含字母/数字的 apiListFileName。`);return`export * as ${t} from './${e}';`},u=o?a.map(e=>i[e]).filter(Boolean):i.filter(Boolean),d=u.map(e=>l(e)),f=e=>{let t=e.match(/from\s+['"]\.\/([^'\"]+)['"]/);return t?t[1]:null},p;if(o){let e=[];try{e=(await c.default.promises.readFile(s,`utf8`)).split(`
|
|
41
|
+
`).filter(e=>e.trim()!==``)}catch{e=[]}let t=new Set(u);p=[...e.filter(e=>{let n=f(e);return!(n&&t.has(n))}).map(e=>{let t=f(e);if(!t||/export\s+\*\s+as\s+/.test(e))return e;try{return l(t)}catch{return e}}),...d]}else p=d;await n.writeFileRecursive(s,p.join(`
|
|
42
42
|
`)+`
|
|
43
|
-
`),t.log.info(`${
|
|
43
|
+
`),t.log.info(`${s} - Top-level models barrel ${o?`merged`:`written`}.`)}async writeTopLevelEnumsBarrel(e,i,a,o,s){let l=`${e.saveEnumFolderPath}/index.ts`,u=e=>{let t=r.segmentToNamespacePrefix(e);if(!t)throw Error(`无法为 segment "${e}" 生成 namespace 别名,请改用包含字母/数字的 apiListFileName。`);return`export * as ${t} from './${e}';`},d=e=>(a[e].enumIsolation??`segment`)===`segment`,f=s?o.filter(e=>d(e)).map(e=>i[e]).filter(Boolean):i.map((e,t)=>({seg:e,i:t})).filter(({seg:e,i:t})=>!!e&&d(t)).map(({seg:e})=>e),p=f.map(e=>u(e)),m=e=>{let t=e.match(/from\s+['"]\.\/([^'\"]+)['"]/);return t?t[1]:null},h;if(s){let e=[];try{e=(await c.default.promises.readFile(l,`utf8`)).split(`
|
|
44
|
+
`).filter(e=>e.trim()!==``)}catch{e=[]}let t=new Set(f);h=[...e.filter(e=>{let n=m(e);return!(n&&t.has(n))}),...p]}else{let e=[];try{e=(await c.default.promises.readFile(l,`utf8`)).split(`
|
|
45
|
+
`).filter(e=>e.trim()!==``)}catch{e=[]}let t=new Set(f);h=[...e.filter(e=>{let n=m(e);return!(n&&t.has(n))}),...p]}await n.writeFileRecursive(l,h.join(`
|
|
46
|
+
`)+`
|
|
47
|
+
`),t.log.info(`${l} - Top-level enums barrel ${s?`merged`:`written`}.`)}async warnLegacyTopLevelEnums(e){let n=e.saveEnumFolderPath;try{let e=(await c.default.promises.readdir(n,{withFileTypes:!0})).filter(e=>e.isFile()&&e.name.endsWith(`.ts`)&&e.name!==`index.ts`).map(e=>e.name);e.length>0&&t.log.warning(`检测到 ${n} 顶层仍存在历史枚举文件(${e.slice(0,5).join(`, `)}${e.length>5?` ...`:``}),共 ${e.length} 个。\n若已切换到 enumIsolation: 'segment'(默认),建议执行 \`anl type\` 全量重生成或手动清理这些文件,避免与 ${n}/<segment>/ 下的隔离枚举混用。`)}catch{}}async formatSelectedFiles(e,n,r,i,a,o){let s=[];for(let t of r){let r=`${e.saveApiListFolderPath}/${n[t].apiListFileName}`;try{await c.default.promises.access(r),s.push(`"${r}"`)}catch{}let o=a&&i[t]?[`${e.saveTypeFolderPath}/connectors/${i[t]}`,`${e.saveTypeFolderPath}/models/${i[t]}`]:[`${e.saveTypeFolderPath}/connectors`,`${e.saveTypeFolderPath}/models`];for(let e of o)try{await c.default.promises.access(e),s.push(`"${e}/**/*.{ts,d.ts}"`)}catch{}if(a&&i[t]&&(n[t].enumIsolation??`segment`)===`segment`){let n=`${e.saveEnumFolderPath}/${i[t]}`;try{await c.default.promises.access(n),s.push(`"${n}/**/*.{ts,d.ts}"`)}catch{}}else{let t=e.saveEnumFolderPath;try{await c.default.promises.access(t),s.push(`"${t}/*.ts"`)}catch{}}}if(s.length===0){t.log.warning(`No files to format for the selected services.`);return}let f=await this.resolvePrettierExecutable(),p=``;if(typeof o==`string`&&o.trim()){let e=l.default.resolve(process.cwd(),o.trim());try{await c.default.promises.access(e),p=` --config "${e}"`}catch{let e=await this.detectPrettierConfig();e&&(p=` --config "${e}"`)}}else{let e=await this.detectPrettierConfig();e&&(p=` --config "${e}"`)}let m=`${f} --write ${s.join(` `)}${p}`;try{t.spinner.start(`Formatting selected files...`),await new Promise((e,t)=>{(0,u.exec)(m,n=>{n?t(Error(String(n))):e()})}),t.spinner.success(`File formatting successful`),t.log.print(`
|
|
44
48
|
`)}catch(e){t.spinner.error(`Format failed`),t.log.print(e),t.log.error(`Format failed, please manually execute the following command:`),t.log.print(`$`,d.default.yellow(m))}}};m&&new g().initialize().catch(e=>{console.error(e)}),exports.Main=g;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const e=require(`../shared/naming.cjs`);function t(e){let t=e.replace(/^[0-9]+/,``);return t?(t=t.replace(/[^a-zA-Z0-9_.-]/g,``),t):`num`+e}function n(e,n=!1){let r=t(e).split(/[-_.]+/).filter(e=>e.length>0);return r.length===0?``:r.map((e,t)=>t===0&&n?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function r(e){let n=t(e).split(/[-_.]+/).filter(e=>e.length>0);return n.length===0?``:n.map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(``)}function i(e){return e?e.replace(/^\/+|\/+$/g,``):``}function a(e,t){let n=t.replace(/^\/+/,``),r=i(e.publicPrefix);if(r&&n.startsWith(r+`/`))n=n.slice(r.length+1);else if(r&&n===r)n=``;else if(r&&n.startsWith(r)){let e=n.slice(r.length);(e.startsWith(`/`)||e===``)&&(n=e.replace(/^\/+/,``))}return n}function o(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];i.type===`normal`&&a?.type===`param`&&t(i.normalized).toLowerCase().replace(/[-_.]/g,``)===t(a.normalized).toLowerCase().replace(/[-_.]/g,``)||n.push(i)}return n}function s(i,s){let c=i;i.startsWith(`/`)||(c=`/`+i);let[l,u]=c.split(`|`),d=a(s,l),f=d?d.split(`/`).filter(e=>e):[],p=o(f.map(e=>e.startsWith(`{`)&&e.endsWith(`}`)?{type:`param`,original:e,normalized:e.slice(1,-1)}:{type:`normal`,original:e,normalized:e})),m=s.parameterSeparator??`_`,h=``,g=[],_=e=>{if(g.length>0){let t=g.map((t,r)=>n(t,e&&r===0)).join(``);h+=(h&&g.length>0?m:``)+t,g=[]}};for(let e of p)if(e.type===`normal`)g.push(e.normalized);else{_(h===``);let n=t(e.normalized);h+=(h?m:``)+n}_(h===``);let v=``;g=[];let y=()=>{if(g.length>0){let e=g.map(e=>r(e)).join(``);v+=(v&&g.length>0?m:``)+e,g=[]}};for(let e of p)if(e.type===`normal`)g.push(e.normalized);else{y();let t=r(e.normalized);v+=(v?m:``)+t}y();let b=``;f.length>0?(b=f.map(e=>e.replace(/[{}]/g,``)).join(`-`),b=`${b}-${u}`.toLowerCase()):b=`${u}`.toLowerCase();let x=`/`+d;d||(x=`/`),x=x.replace(/\{(\w+)\}/g,(e,t)=>`\${${t}}`);let S=v?`${v}_${u}`:u,C=e.getNamespacePrefix(s),w=C?`${C}_${S}`:S;return{apiName:h?`${h}_${u}`:u,fileName:b,typeName:w,path:x}}exports.convertEndpointString=s;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const e=require(`../shared/format.cjs`),t=require(`../shared/naming.cjs`),n=require(`../shared/schema-utils.cjs`),r=require(`../shared/http.cjs`),i={schemas:`#/components/schemas/`,parameters:`#/components/parameters/`,definitions:`#/definitions/`};var a=class{config;schemas;parameters;referenceCache=new Map;resolvedToOriginalName=new Map;handleError;constructor(e,t,n,r){this.config=e,this.schemas=t??{},this.parameters=n??{},this.handleError=r}stringifySchemaResult(t){if(Array.isArray(t)){let n=e.getLineEnding(this.config),r=e.getIndentation(this.config);return`{${n}${t.join(n)}${n}${r}}`}return t}handleComplexType(e){try{return e.oneOf?e.oneOf.map(e=>this.stringifySchemaResult(this.main(e))).join(` | `):e.allOf?e.allOf.map(e=>this.stringifySchemaResult(this.main(e))).join(` & `):e.anyOf?e.anyOf.map(e=>this.stringifySchemaResult(this.main(e))).join(` | `):e.enum?e.type===`number`||e.type===`integer`?e.enum.join(` | `):e.enum.map(e=>`'${e}'`).join(` | `):`unknown`}catch(e){return this.handleError({type:`SCHEMA`,message:`Failed to handle complex type`,details:e}),`unknown`}}referenceObjectParse(e){try{let n=e.$ref,r=this.referenceCache.get(n);if(r)return r;let a=n;n.startsWith(i.schemas)&&(a=n.replace(i.schemas,``)),n.startsWith(i.parameters)&&(a=n.replace(i.parameters,``)),n.startsWith(i.definitions)&&(a=n.replace(i.definitions,``));let o=t.resolveSchemaName(a),s=t.typeNameToFileName(o),c=this.schemas?.[a];t.containsChinese(a)&&this.resolvedToOriginalName.set(o,a);let l=!1;if(c&&!(`$ref`in c)){let e=`properties`in c||c.type===`object`,t=c.type===`array`||`items`in c;`enum`in c&&Array.isArray(c.enum)&&!e&&!t&&(l=!0)}else l=/Enum$/i.test(a);let u=l?t.getEnumTypeName(this.config,o):o,d=t.getServerSegment(this.config),f=t.adjustImportPathForSegment(this.config.importEnumPath??``,d),p=d?`../../models/${d}`:`../models`,m=l?`import('${f}/${s}').${u}`:`import('${p}/${s}').${o}`;return this.referenceCache.set(n,m),m}catch(e){return this.handleError({type:`REFERENCE`,message:`Failed to parse reference object`,details:e}),`unknown`}}nonArraySchemaObjectParse(e){if(!e)return`unknown`;if(e.format===`binary`||e.type===`string`&&e.format===`binary`)return`File`;switch(e.type){case`boolean`:return`boolean`;case`integer`:case`number`:return`number`;case`object`:return this.propertiesParse(e.properties);case`string`:return e.format===`binary`?`File`:`string`;default:return`unknown`}}arraySchemaObjectParse(e){if(e.type!==`array`)return``;let{items:t}=e,n=`$ref`in t?t:null,r=t;if(n)return`Array<${this.referenceObjectParse(n)}>`;if(r){let e=this.main(t);return Array.isArray(e)?`Array<{${e.join(`
|
|
1
|
+
const e=require(`../shared/format.cjs`),t=require(`../shared/naming.cjs`),n=require(`../shared/schema-utils.cjs`),r=require(`../shared/http.cjs`),i={schemas:`#/components/schemas/`,parameters:`#/components/parameters/`,definitions:`#/definitions/`};var a=class{config;schemas;parameters;referenceCache=new Map;resolvedToOriginalName=new Map;handleError;constructor(e,t,n,r){this.config=e,this.schemas=t??{},this.parameters=n??{},this.handleError=r}stringifySchemaResult(t){if(Array.isArray(t)){let n=e.getLineEnding(this.config),r=e.getIndentation(this.config);return`{${n}${t.join(n)}${n}${r}}`}return t}handleComplexType(e){try{return e.oneOf?e.oneOf.map(e=>this.stringifySchemaResult(this.main(e))).join(` | `):e.allOf?e.allOf.map(e=>this.stringifySchemaResult(this.main(e))).join(` & `):e.anyOf?e.anyOf.map(e=>this.stringifySchemaResult(this.main(e))).join(` | `):e.enum?e.type===`number`||e.type===`integer`?e.enum.join(` | `):e.enum.map(e=>`'${e}'`).join(` | `):`unknown`}catch(e){return this.handleError({type:`SCHEMA`,message:`Failed to handle complex type`,details:e}),`unknown`}}referenceObjectParse(e){try{let n=e.$ref,r=this.referenceCache.get(n);if(r)return r;let a=n;n.startsWith(i.schemas)&&(a=n.replace(i.schemas,``)),n.startsWith(i.parameters)&&(a=n.replace(i.parameters,``)),n.startsWith(i.definitions)&&(a=n.replace(i.definitions,``));let o=t.resolveSchemaName(a),s=t.typeNameToFileName(o),c=this.schemas?.[a];t.containsChinese(a)&&this.resolvedToOriginalName.set(o,a);let l=!1;if(c&&!(`$ref`in c)){let e=`properties`in c||c.type===`object`,t=c.type===`array`||`items`in c;`enum`in c&&Array.isArray(c.enum)&&!e&&!t&&(l=!0)}else l=/Enum$/i.test(a);let u=l?t.getEnumTypeName(this.config,o):o,d=t.getServerSegment(this.config),f=t.appendEnumSegment(t.adjustImportPathForSegment(this.config.importEnumPath??``,d),t.getEnumSegment(this.config)),p=d?`../../models/${d}`:`../models`,m=l?`import('${f}/${s}').${u}`:`import('${p}/${s}').${o}`;return this.referenceCache.set(n,m),m}catch(e){return this.handleError({type:`REFERENCE`,message:`Failed to parse reference object`,details:e}),`unknown`}}nonArraySchemaObjectParse(e){if(!e)return`unknown`;if(e.format===`binary`||e.type===`string`&&e.format===`binary`)return`File`;switch(e.type){case`boolean`:return`boolean`;case`integer`:case`number`:return`number`;case`object`:return this.propertiesParse(e.properties);case`string`:return e.format===`binary`?`File`:`string`;default:return`unknown`}}arraySchemaObjectParse(e){if(e.type!==`array`)return``;let{items:t}=e,n=`$ref`in t?t:null,r=t;if(n)return`Array<${this.referenceObjectParse(n)}>`;if(r){let e=this.main(t);return Array.isArray(e)?`Array<{${e.join(`
|
|
2
2
|
`)}}>`:`Array<${e}>`}return``}propertiesParse(e){return n.formatObjectProperties(e,this.config,e=>this.main(e))}transformResponseModel(t,n){if(!n)return t;if(n.modelPattern&&typeof t==`string`){let e=/^import\('[^']+'\)\.(\w+)$/.exec(t),r=e?e[1]:t;if(!new RegExp(n.modelPattern).test(r))return t}try{switch(n.type){case`unwrap`:{let e=n.dataField??`data`;if(Array.isArray(t))return this.handleError({type:`RESPONSE`,message:`Response model unwrap is not supported for inline object response types`}),t;let r=/^import\('([^']+)'\)\.(\w+)$/.exec(t);if(r){let[,t,n]=r,i=this.resolvedToOriginalName.get(n)??n,a=this.schemas?.[i];if(a&&!(`$ref`in a)){let t=a;if(t.properties?.[e]){let n=t.properties[e];return this.main(n)}else this.handleError({type:`RESPONSE`,message:`Field "${e}" not found in response type "${n}"`})}}return t}case`wrap`:{if(!n.wrapperFields)return this.handleError({type:`RESPONSE`,message:`wrapperFields is required when using wrap transform`}),t;let r=e.getIndentation(this.config),i=r+r,a=[],o=n.dataField??`data`;for(let[e,r]of Object.entries(n.wrapperFields))if(e===o)if(Array.isArray(t)){let n=t.join(`
|
|
3
3
|
`);a.push(`${i}${e}?: {${n}\n${i}};`)}else a.push(`${i}${e}?: ${t};`);else a.push(`${i}${e}?: ${r};`);return a}case`replace`:return n.wrapperType?n.wrapperType:(this.handleError({type:`RESPONSE`,message:`wrapperType is required when using replace transform`}),t);default:return t}}catch(e){return this.handleError({type:`RESPONSE`,message:`Failed to transform response model`,details:e}),t}}responseObjectParse(e){try{let t=e.content;if(!t)return``;let n;for(let e of r.SUPPORTED_REQUEST_TYPES_ALL)if(t[e]?.schema){n=t[e].schema;break}return n?this.main(n):``}catch(e){return this.handleError({type:`RESPONSE`,message:`Failed to parse response object`,details:e}),``}}main(e){try{if(!e)return`unknown`;if(`oneOf`in e||`allOf`in e||`anyOf`in e||`enum`in e)return this.handleComplexType(e);if(`$ref`in e)return this.referenceObjectParse(e);let t=e,r=t.type,i=n.nullableSuffix(t.nullable),a=n.applyTypeMapping(this.config,t);if(a)return a;if(r===`array`&&t.items)return n.stringifyArrayType(this.main(t.items),this.config);if(r===`object`||typeof t==`object`){if(t.properties){let e=this.propertiesParse(t.properties);return e.length?e:[`unknown`]}if(t.additionalProperties===!0)return`Record<string, unknown>`+i;if(typeof t.additionalProperties==`object`)return`Record<string, ${this.main(t.additionalProperties)}>`+i}return`unknown`}catch(e){return this.handleError({type:`SCHEMA`,message:`Failed to parse schema`,details:e}),`unknown`}}};exports.SchemaResolver=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require(`../../_virtual/rolldown_runtime.cjs`);const e=require(`../../utils/logger.cjs`);require(`../../utils/index.cjs`);let t=require(`pinyin-pro`);function n(e){return/[\u4e00-\u9fff]/.test(e)}function r(e){return e?e.charAt(0).toUpperCase()+e.slice(1):``}function i(e){return e.split(/[^a-zA-Z0-9_]+/).filter(Boolean).map(e=>r(e)).join(``)}function a(e){return n(e)?(e.match(/[\u4e00-\u9fff]+|[^\u4e00-\u9fff]+/g)??[]).map(e=>n(e)?(0,t.pinyin)(e,{toneType:`none`,type:`array`}).map(e=>r(e)).join(``):i(e)).join(``):e}function o(e){return e?/^[0-9]/.test(e)?`_${e}`:e:`Unknown`}function s(e){return e?n(e)?o(a(e)):/[^a-zA-Z0-9_$]/.test(e)?o(i(e)):o(e):`Unknown`}function c(e){return e.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/([a-z])([A-Z])/g,`$1-$2`).toLowerCase().replace(/-+/g,`-`).replace(/^-|-$/g,``)}function l(e){let t=(e??``).trim();return t?(t.split(/[\\/]/).pop()??``).replace(/\.[^.]+$/,``).replace(/[^a-zA-Z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``):``}function u(e){return e.__segment??``}function d(e){let t=e.apiListFileName?.replace(/\.[^/.]+$/,``).trim();if(t)return`【${t}】`;let n=u(e);if(n)return`【${n}】`;let r=e.swaggerJsonUrl;if(r)try{let e=new URL(r).host;if(e)return`【${e}】`}catch{}return``}function
|
|
1
|
+
require(`../../_virtual/rolldown_runtime.cjs`);const e=require(`../../utils/logger.cjs`);require(`../../utils/index.cjs`);let t=require(`pinyin-pro`);function n(e){return/[\u4e00-\u9fff]/.test(e)}function r(e){return e?e.charAt(0).toUpperCase()+e.slice(1):``}function i(e){return e.split(/[^a-zA-Z0-9_]+/).filter(Boolean).map(e=>r(e)).join(``)}function a(e){return n(e)?(e.match(/[\u4e00-\u9fff]+|[^\u4e00-\u9fff]+/g)??[]).map(e=>n(e)?(0,t.pinyin)(e,{toneType:`none`,type:`array`}).map(e=>r(e)).join(``):i(e)).join(``):e}function o(e){return e?/^[0-9]/.test(e)?`_${e}`:e:`Unknown`}function s(e){return e?n(e)?o(a(e)):/[^a-zA-Z0-9_$]/.test(e)?o(i(e)):o(e):`Unknown`}function c(e){return e.replace(/[^a-zA-Z0-9]+/g,`-`).replace(/([a-z])([A-Z])/g,`$1-$2`).toLowerCase().replace(/-+/g,`-`).replace(/^-|-$/g,``)}function l(e){let t=(e??``).trim();return t?(t.split(/[\\/]/).pop()??``).replace(/\.[^.]+$/,``).replace(/[^a-zA-Z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``):``}function u(e){return e.__segment??``}function d(e){if(!e)return``;let t=e.split(/[-_.]+/).filter(Boolean).map(e=>r(e.toLowerCase())).join(``);return t?/^[0-9]/.test(t)?`_${t}`:t:``}function f(e){let t=e.__namespacePrefix;return typeof t==`string`?t:(e.namespaceIsolation??`segment`)===`none`?``:d(u(e))}function p(e){let t=e.apiListFileName?.replace(/\.[^/.]+$/,``).trim();if(t)return`【${t}】`;let n=u(e);if(n)return`【${n}】`;let r=e.swaggerJsonUrl;if(r)try{let e=new URL(r).host;if(e)return`【${e}】`}catch{}return``}function m(t,n){return!n||!t?t:t.startsWith(`./`)||t.startsWith(`../`)?`../`+t:(t.startsWith(`/`)||/^[a-zA-Z@]/.test(t)||e.log.warning(`importEnumPath="${t}" 形态不明确,建议以 "./" 或 "../" 开头。多服务隔离已开启,工具未自动补偿层级,请自行确认 enum 引用是否正确。`),t)}function h(e){let t=u(e);return!t||(e.enumIsolation??`segment`)===`none`?``:t}function g(e,t){return t?e?`${e.replace(/\/+$/,``)}/${t}`:t:e}function _(e,t){return e.enmuConfig.erasableSyntaxOnly?`${t}Type`:t}function v(e){return!/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(e)}function y(e){return v(e)?`"${e}"`:e}exports.adjustImportPathForSegment=m,exports.appendEnumSegment=g,exports.computeSegment=l,exports.containsChinese=n,exports.formatPropertyName=y,exports.getEnumSegment=h,exports.getEnumTypeName=_,exports.getNamespacePrefix=f,exports.getServerSegment=u,exports.getServiceTag=p,exports.resolveSchemaName=s,exports.segmentToNamespacePrefix=d,exports.typeNameToFileName=c,exports.wordsToPascalCase=i;
|