@devup-api/generator 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
  import type { DevupApiTypeGeneratorOptions, UrlMapValue } from '@devup-api/core';
2
2
  import type { OpenAPIV3_1 } from 'openapi-types';
3
- export declare function createUrlMap(schema: OpenAPIV3_1.Document, options?: DevupApiTypeGeneratorOptions): Record<string, UrlMapValue>;
3
+ export declare function createUrlMap(schemas: Record<string, OpenAPIV3_1.Document>, options?: DevupApiTypeGeneratorOptions): Record<string, Record<string, UrlMapValue>>;
4
4
  //# sourceMappingURL=create-url-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-url-map.d.ts","sourceRoot":"","sources":["../src/create-url-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,CAAC,QAAQ,EAC5B,OAAO,CAAC,EAAE,4BAA4B,+BAoCvC"}
1
+ {"version":3,"file":"create-url-map.d.ts","sourceRoot":"","sources":["../src/create-url-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC7C,OAAO,CAAC,EAAE,4BAA4B,GACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAwC7C"}
@@ -11,5 +11,5 @@ export interface EndpointDefinition {
11
11
  response?: unknown;
12
12
  error?: unknown;
13
13
  }
14
- export declare function generateInterface(schema: OpenAPIV3_1.Document, options?: DevupApiTypeGeneratorOptions): string;
14
+ export declare function generateInterface(schemas: Record<string, OpenAPIV3_1.Document>, options?: DevupApiTypeGeneratorOptions): string;
15
15
  //# sourceMappingURL=generate-interface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-interface.d.ts","sourceRoot":"","sources":["../src/generate-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAUhD,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnD,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AASD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,QAAQ,EAC5B,OAAO,CAAC,EAAE,4BAA4B,GACrC,MAAM,CA6iBR"}
1
+ {"version":3,"file":"generate-interface.d.ts","sourceRoot":"","sources":["../src/generate-interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AAEnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAUhD,MAAM,WAAW,mBACf,SAAQ,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,QAAQ,CAAC;IACnD,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC5C,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AA+gBD,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAC7C,OAAO,CAAC,EAAE,4BAA4B,GACrC,MAAM,CAwJR"}
@@ -1,13 +1,5 @@
1
1
  import type { OpenAPIV3_1 } from 'openapi-types';
2
2
  import type { ParameterDefinition } from './generate-interface';
3
- /**
4
- * Resolve $ref reference in OpenAPI parameter
5
- */
6
- export declare function resolveParameterRef(ref: string, document: OpenAPIV3_1.Document): OpenAPIV3_1.ParameterObject | null;
7
- /**
8
- * Resolve $ref reference in OpenAPI schema
9
- */
10
- export declare function resolveSchemaRef(ref: string, document: OpenAPIV3_1.Document): OpenAPIV3_1.SchemaObject | null;
11
3
  /**
12
4
  * Convert OpenAPI schema to TypeScript type representation
13
5
  */
@@ -17,14 +9,6 @@ export declare function getTypeFromSchema(schema: OpenAPIV3_1.SchemaObject | Ope
17
9
  type: unknown;
18
10
  default?: unknown;
19
11
  };
20
- /**
21
- * Check if all properties in an object are optional
22
- */
23
- export declare function areAllPropertiesOptional(obj: Record<string, unknown>): boolean;
24
- /**
25
- * Format a type object to TypeScript interface/type string
26
- */
27
- export declare function formatType(obj: Record<string, unknown>, indent?: number): string;
28
12
  /**
29
13
  * Format a type value to TypeScript type string
30
14
  */
@@ -1 +1 @@
1
- {"version":3,"file":"generate-schema.d.ts","sourceRoot":"","sources":["../src/generate-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAE/D;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC7B,WAAW,CAAC,eAAe,GAAG,IAAI,CAqBpC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC7B,WAAW,CAAC,YAAY,GAAG,IAAI,CAqBjC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,eAAe,EAC9D,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAC9B,OAAO,CAAC,EAAE;IACR,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,GACA;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAqItC;AAeD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAqCT;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,GAAE,MAAU,GACjB,MAAM,CAyDR;AAiBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAe1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,CAAC,cAAc,GAAG,SAAS,EAChD,SAAS,EAAE,WAAW,CAAC,eAAe,GAAG,SAAS,EAClD,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC7B;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAClD,CAkEA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EACP,WAAW,CAAC,iBAAiB,GAC7B,WAAW,CAAC,eAAe,GAC3B,SAAS,EACb,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC7B,OAAO,CA+BT"}
1
+ {"version":3,"file":"generate-schema.d.ts","sourceRoot":"","sources":["../src/generate-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AA8B/D;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,CAAC,YAAY,GAAG,WAAW,CAAC,eAAe,EAC9D,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAC9B,OAAO,CAAC,EAAE;IACR,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,GACA;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CA2ItC;AAsID;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAe1E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,CAAC,cAAc,GAAG,SAAS,EAChD,SAAS,EAAE,WAAW,CAAC,eAAe,GAAG,SAAS,EAClD,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC7B;IACD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAC/C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;IAChD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;CAClD,CAqEA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EACP,WAAW,CAAC,iBAAiB,GAC7B,WAAW,CAAC,eAAe,GAC3B,SAAS,EACb,QAAQ,EAAE,WAAW,CAAC,QAAQ,GAC7B,OAAO,CA+BT"}
package/dist/index.cjs CHANGED
@@ -1,36 +1,42 @@
1
- var{defineProperty:p,getOwnPropertyNames:H$,getOwnPropertyDescriptor:J$}=Object,L$=Object.prototype.hasOwnProperty;var o=new WeakMap,U$=($)=>{var L=o.get($),Y;if(L)return L;if(L=p({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")H$($).map((J)=>!L$.call(L,J)&&p(L,J,{get:()=>$[J],enumerable:!(Y=J$($,J))||Y.enumerable}));return o.set($,L),L};var X$=($,L)=>{for(var Y in L)p($,Y,{get:L[Y],enumerable:!0,configurable:!0,set:(J)=>L[Y]=()=>J})};var Q$={};X$(Q$,{generateInterface:()=>W$,createUrlMap:()=>Y$});module.exports=U$(Q$);var i=require("@devup-api/utils");function O($,L="camel"){switch(L){case"snake":return i.toSnake($);case"camel":return i.toCamel($);case"pascal":return i.toPascal($);case"maintain":return $;default:return $}}function Y$($,L){let Y=L?.convertCase??"camel",J={};for(let[H,X]of Object.entries($.paths??{})){if(!X)continue;for(let W of["get","post","put","delete","patch"]){let U=X[W];if(!U)continue;let x=H.replace(/\{([^}]+)\}/g,(P,R)=>{return`{${O(R,Y)}}`});if(U.operationId)J[O(U.operationId,Y)]={method:W.toUpperCase(),url:x};J[x]={method:W.toUpperCase(),url:x}}}return J}var e=require("@devup-api/utils");function Z$($,L){if(!$.startsWith("#/"))return null;let Y=$.slice(2).split("/"),J=L;for(let H of Y)if(J&&typeof J==="object"&&H in J)J=J[H];else return null;if(J&&typeof J==="object"&&!("$ref"in J))return J;return null}function c($,L){if(!$.startsWith("#/"))return null;let Y=$.slice(2).split("/"),J=L;for(let H of Y)if(J&&typeof J==="object"&&H in J)J=J[H];else return null;if(J&&typeof J==="object"&&!("$ref"in J))return J;return null}function D($,L,Y){let J=Y?.defaultNonNullable??!1;if("$ref"in $){let X=c($.$ref,L);if(X)return D(X,L,Y);return{type:"unknown",default:void 0}}let H=$;if(H.allOf){let X=H.allOf.map((W)=>D(W,L,Y));return{type:X.length>0?X.map((W)=>k(W.type)).join(" & "):"unknown",default:H.default}}if(H.anyOf||H.oneOf){let X=(H.anyOf||H.oneOf||[]).map((W)=>D(W,L,Y));return{type:X.length>0?`(${X.map((W)=>k(W.type)).join(" | ")})`:"unknown",default:H.default}}if(H.enum)return{type:H.enum.map((X)=>`"${String(X)}"`).join(" | "),default:H.default};if(H.type==="string"){if(H.format==="date"||H.format==="date-time")return{type:"string",default:H.default};return{type:"string",default:H.default}}if(H.type==="number"||H.type==="integer")return{type:"number",default:H.default};if(H.type==="boolean")return{type:"boolean",default:H.default};if(H.type==="array"){let X=H.items;if(X){let W=D(X,L,Y);return{type:`Array<${k(W.type)}>`,default:H.default}}return{type:"unknown[]",default:H.default}}if(H.type==="object"||H.properties){let X={},W=H.required||[];if(H.properties)for(let[U,x]of Object.entries(H.properties)){let P=D(x,L,Y),R=!1;if("$ref"in x){let G=c(x.$ref,L);if(G)R=G.default!==void 0}else R=x.default!==void 0;let F=W.includes(U);if(J&&R&&!F)X[U]=P;else if(!F)X[`${U}?`]=P;else X[U]=P}if(H.additionalProperties){if(H.additionalProperties===!0)X["[key: string]"]={type:"unknown",default:void 0};else if(typeof H.additionalProperties==="object"){let U=D(H.additionalProperties,L,Y);X["[key: string]"]={type:U.type,default:U.default}}}return{type:{...X},default:H.default}}return{type:"unknown",default:void 0}}function t($){return typeof $==="object"&&$!==null&&"type"in $&&"in"in $&&"name"in $}function m($){let L=Object.entries($);if(L.length===0)return!0;return L.every(([Y,J])=>{if(Y.endsWith("?"))return!0;if(t(J))return J.required===!1;if(n(J)){if(typeof J.type==="object"&&J.type!==null&&!Array.isArray(J.type))return m(J.type);return!1}if(typeof J==="object"&&J!==null&&!Array.isArray(J))return m(J);return!1})}function _$($,L=0){let Y=" ".repeat(L),J=L+1,H=" ".repeat(J),X=Object.entries($).map(([W,U])=>{if(typeof U==="string")return`${H}${W}: ${U}`;if(t(U)){let F=k(U.type,J),S=U.required===!1?`${W}?`:W,g="";if(U.description){if(g+=`${H}/**
2
- ${H} * ${U.description}`,typeof U.default<"u")g+=`
3
- ${H} * @default {${U.default}}`;g=`${g}
1
+ var{defineProperty:h,getOwnPropertyNames:o,getOwnPropertyDescriptor:s}=Object,t=Object.prototype.hasOwnProperty;var p=new WeakMap,a=($)=>{var U=p.get($),Y;if(U)return U;if(U=h({},"__esModule",{value:!0}),$&&typeof $==="object"||typeof $==="function")o($).map((J)=>!t.call(U,J)&&h(U,J,{get:()=>$[J],enumerable:!(Y=s($,J))||Y.enumerable}));return p.set($,U),U};var e=($,U)=>{for(var Y in U)h($,Y,{get:U[Y],enumerable:!0,configurable:!0,set:(J)=>U[Y]=()=>J})};var X$={};e(X$,{generateInterface:()=>U$,createUrlMap:()=>$$});module.exports=a(X$);var i=require("@devup-api/utils");function C($,U="camel"){switch(U){case"snake":return i.toSnake($);case"camel":return i.toCamel($);case"pascal":return i.toPascal($);case"maintain":return $;default:return $}}function $$($,U){let Y=U?.convertCase??"camel",J={};for(let[H,X]of Object.entries($)){let _={};for(let[L,E]of Object.entries(X.paths??{})){if(!E)continue;for(let I of["get","post","put","delete","patch"]){let F=E[I];if(!F)continue;let B=L.replace(/\{([^}]+)\}/g,(w,Q)=>{return`{${C(Q,Y)}}`});if(F.operationId)_[C(F.operationId,Y)]={method:I.toUpperCase(),url:B};_[B]={method:I.toUpperCase(),url:B}}}J[H]=_}return J}var r=require("@devup-api/utils");function v($,U){if(!$.startsWith("#/"))return null;let Y=$.slice(2).split("/"),J=U;for(let H of Y)if(J&&typeof J==="object"&&H in J)J=J[H];else return null;if(J&&typeof J==="object"&&!("$ref"in J))return J;return null}function x($,U,Y){let J=Y?.defaultNonNullable??!1;if("$ref"in $){let X=v($.$ref,U);if(X)return x(X,U,Y);return{type:"unknown",default:void 0}}let H=$;if(H.allOf){let X=H.allOf.map((_)=>x(_,U,Y));return{type:X.length>0?X.map((_)=>T(_.type)).join(" & "):"unknown",default:H.default}}if(H.anyOf||H.oneOf){let X=(H.anyOf||H.oneOf||[]).map((_)=>x(_,U,Y));return{type:X.length>0?`(${X.map((_)=>T(_.type)).join(" | ")})`:"unknown",default:H.default}}if(H.enum)return{type:H.enum.map((X)=>`"${String(X)}"`).join(" | "),default:H.default};if(H.type==="string"){if(H.format==="date"||H.format==="date-time")return{type:"string",default:H.default};return{type:"string",default:H.default}}if(H.type==="number"||H.type==="integer")return{type:"number",default:H.default};if(H.type==="boolean")return{type:"boolean",default:H.default};if(H.type==="array"){let X=H.items;if(X){let _=x(X,U,Y);return{type:`Array<${T(_.type)}>`,default:H.default}}return{type:"unknown[]",default:H.default}}if(H.type==="object"||H.properties){let X={},_=H.required||[];if(H.properties)for(let[L,E]of Object.entries(H.properties)){let I=x(E,U,Y),F=!1;if("$ref"in E){let w=v(E.$ref,U);if(w)F=w.default!==void 0}else F=E.default!==void 0;let B=_.includes(L);if(J&&F&&!B)X[L]=I;else if(!B)X[`${L}?`]=I;else X[L]=I}if(H.additionalProperties){if(H.additionalProperties===!0)X["[key: string]"]={type:"unknown",default:void 0};else if(typeof H.additionalProperties==="object"){let L=x(H.additionalProperties,U,Y);X["[key: string]"]={type:L.type,default:L.default}}}return{type:{...X},default:H.default}}return{type:"unknown",default:void 0}}function c($){return typeof $==="object"&&$!==null&&"type"in $&&"in"in $&&"name"in $}function m($){let U=Object.entries($);if(U.length===0)return!0;return U.every(([Y,J])=>{if(Y.endsWith("?"))return!0;if(c(J))return J.required===!1;if(u(J))return!1;if(typeof J==="object"&&J!==null&&!Array.isArray(J))return m(J);return!1})}function H$($,U=0){let Y=" ".repeat(U),J=U+1,H=" ".repeat(J),X=Object.entries($).map(([_,L])=>{if(typeof L==="string")return`${H}${_}: ${L}`;if(c(L)){let B=T(L.type,J),Q=L.required===!1?`${_}?`:_,W="";if(L.description){if(W+=`${H}/**
2
+ ${H} * ${L.description}`,typeof L.default<"u")W+=`
3
+ ${H} * @default {${L.default}}`;W=`${W}
4
4
  ${H} */
5
- ${H}`}else if(typeof U.default<"u")g+=`${H}/** @default {${U.default}} */
6
- ${H}`;else g=H;return`${g}${S}: ${F}`}if(n(U)){let F=k(U.type,J);return`${H}${W}: ${F}`}let P=typeof U==="object"&&U!==null&&!Array.isArray(U)&&m(U)?"?":"",R=k(U,J);return`${H}${W}${P}: ${R}`}).join(`;
5
+ ${H}`}else if(typeof L.default<"u")W+=`${H}/** @default {${L.default}} */
6
+ ${H}`;else W=H;return`${W}${Q}: ${B}`}if(u(L)){let B=T(L.type,J);return`${H}${_}: ${B}`}let I=typeof L==="object"&&L!==null&&!Array.isArray(L)&&m(L)?"?":"",F=T(L,J);return`${H}${_}${I}: ${F}`}).join(`;
7
7
  `);if(X.length===0)return"{}";return`{
8
8
  ${X};
9
- ${Y}}`}function n($){return typeof $==="object"&&$!==null&&"type"in $&&Object.keys($).length<=2&&(!("default"in $)||Object.keys($).length===2)}function k($,L=0){if(typeof $==="string")return $;if(n($))return k($.type,L);if(typeof $==="object"&&$!==null&&!Array.isArray($))return _$($,L);return String($)}function a($,L,Y){let J={},H={},X={},W=[...$?.parameters||[],...L?.parameters||[]];for(let U of W){if("$ref"in U){let G=Z$(U.$ref,Y);if(G&&"in"in G&&"name"in G&&typeof G.in==="string"&&typeof G.name==="string"){let S="schema"in G&&G.schema?G.schema:{},{type:g,default:d}=D(S,Y,{defaultNonNullable:!1}),N={...G,type:g,default:d};if(G.in==="path")J[G.name]=N;else if(G.in==="query")H[G.name]=N;else if(G.in==="header")X[G.name]=N}continue}let x=U.schema||{},{type:P,default:R}=D(x,Y,{defaultNonNullable:!1}),F={...U,type:P,default:R};if(U.in==="path")J[U.name]=F;else if(U.in==="query")H[U.name]=F;else if(U.in==="header")X[U.name]=F}return{pathParams:J,queryParams:H,headerParams:X}}function l($,L){if(!$)return;if("$ref"in $){let J=c($.$ref,L);if(J&&"content"in J&&J.content){let X=J.content["application/json"];if(X&&"schema"in X&&X.schema)return D(X.schema,L,{defaultNonNullable:!1}).type}return"unknown"}let Y=$.content;if(Y){let J=Y["application/json"];if(J&&"schema"in J&&J.schema)return D(J.schema,L,{defaultNonNullable:!1}).type}return}function v($){if($.includes("/"))return`[\`${$}\`]`;return $}function f($){if($.startsWith("#/components/schemas/"))return $.replace("#/components/schemas/","");return null}function W$($,L){let Y={get:{},post:{},put:{},delete:{},patch:{}},J=L?.convertCase??"camel",H=(Q,z)=>{if("$ref"in Q){let A=f(Q.$ref);if(A)z.add(A);return}let w=Q;if(w.allOf)w.allOf.forEach((A)=>{H(A,z)});if(w.anyOf)w.anyOf.forEach((A)=>{H(A,z)});if(w.oneOf)w.oneOf.forEach((A)=>{H(A,z)});if(w.properties)Object.values(w.properties).forEach((A)=>{H(A,z)});if(w.type==="array"&&"items"in w&&w.items)H(w.items,z)},X=new Set,W=new Set,U=new Set,x=(Q)=>{if(Q==="default")return!0;let z=parseInt(Q,10);return z>=400&&z<600};if($.paths)for(let Q of Object.values($.paths)){if(!Q)continue;let z=["get","post","put","delete","patch"];for(let w of z){let A=Q[w];if(!A)continue;if(A.requestBody)if("$ref"in A.requestBody){let Z=f(A.requestBody.$ref);if(Z)X.add(Z)}else{let M=A.requestBody.content?.["application/json"];if(M&&"schema"in M&&M.schema)H(M.schema,X)}if(A.responses)for(let[Z,M]of Object.entries(A.responses)){let C=x(Z);if("$ref"in M){let j=f(M.$ref);if(j)if(C)U.add(j);else W.add(j)}else if("content"in M){let q=M.content?.["application/json"];if(q&&"schema"in q&&q.schema)if(C)H(q.schema,U);else H(q.schema,W)}}}}if($.paths)for(let[Q,z]of Object.entries($.paths)){if(!z)continue;let w=["get","post","put","delete","patch"];for(let A of w){let Z=z[A];if(!Z)continue;let M={},{pathParams:C,queryParams:j}=a(z,Z,$),q={};for(let[E,B]of Object.entries(C)){let _=O(E,J);q[_]=B}let h={};for(let[E,B]of Object.entries(j)){let _=O(E,J);h[_]=B}if(Object.keys(q).length>0)M.params=q;if(Object.keys(h).length>0)M.query=h;let y;if(Z.requestBody)if("$ref"in Z.requestBody){let E=l(Z.requestBody,$);if(E!==void 0)y=E}else{let B=Z.requestBody.content?.["application/json"];if(B&&"schema"in B&&B.schema)if("$ref"in B.schema){let _=f(B.schema.$ref);if(_&&$.components?.schemas?.[_]&&X.has(_))y=`DevupRequestComponentStruct['${_}']`;else{let K=l(Z.requestBody,$);if(K!==void 0)y=K}}else{let _=l(Z.requestBody,$);if(_!==void 0)y=_}}if(y!==void 0)M.body=y;let b;if(Z.responses){let E=Z.responses["200"]||Z.responses["201"]||Object.values(Z.responses)[0];if(E){if("$ref"in E);else if("content"in E){let _=E.content?.["application/json"];if(_&&"schema"in _&&_.schema)if("$ref"in _.schema){let K=f(_.schema.$ref);if(K&&$.components?.schemas?.[K]&&W.has(K))b=`DevupResponseComponentStruct['${K}']`;else{let V=L?.responseDefaultNonNullable??!0,{type:I}=D(_.schema,$,{defaultNonNullable:V});b=I}}else{let K=_.schema;if(K.type==="array"&&K.items&&"$ref"in K.items){let V=f(K.items.$ref);if(V&&$.components?.schemas?.[V]&&W.has(V))b=`Array<DevupResponseComponentStruct['${V}']>`;else{let I=L?.responseDefaultNonNullable??!0,{type:u}=D(_.schema,$,{defaultNonNullable:I});b=u}}else{let V=L?.responseDefaultNonNullable??!0,{type:I}=D(_.schema,$,{defaultNonNullable:V});b=I}}}}}if(b!==void 0)M.response=b;let T;if(Z.responses){let E=Z.responses["400"]||Z.responses["401"]||Z.responses["403"]||Z.responses["404"]||Z.responses["422"]||Z.responses["500"]||Z.responses.default||Object.entries(Z.responses).find(([B])=>x(B))?.[1];if(E){if("$ref"in E);else if("content"in E){let _=E.content?.["application/json"];if(_&&"schema"in _&&_.schema)if("$ref"in _.schema){let K=f(_.schema.$ref);if(K&&$.components?.schemas?.[K]&&U.has(K))T=`DevupErrorComponentStruct['${K}']`;else{let V=L?.responseDefaultNonNullable??!0,{type:I}=D(_.schema,$,{defaultNonNullable:V});T=I}}else{let K=_.schema;if(K.type==="array"&&K.items&&"$ref"in K.items){let V=f(K.items.$ref);if(V&&$.components?.schemas?.[V]&&U.has(V))T=`Array<DevupErrorComponentStruct['${V}']>`;else{let I=L?.responseDefaultNonNullable??!0,{type:u}=D(_.schema,$,{defaultNonNullable:I});T=u}}else{let V=L?.responseDefaultNonNullable??!0,{type:I}=D(_.schema,$,{defaultNonNullable:V});T=I}}}}}if(T!==void 0)M.error=T;let $$=Q.replace(/\{([^}]+)\}/g,(E,B)=>{return`{${O(B,J)}}`});if(Y[A][$$]=M,Z.operationId){let E=O(Z.operationId,J);Y[A][E]=M}}}let P={},R={},F={};if($.components?.schemas){for(let[Q,z]of Object.entries($.components.schemas))if(z){let w=L?.requestDefaultNonNullable??!1,Z=L?.responseDefaultNonNullable??!0;if(X.has(Q))Z=w;let{type:M}=D(z,$,{defaultNonNullable:Z});if(X.has(Q))P[Q]=M;if(W.has(Q))R[Q]=M;if(U.has(Q))F[Q]=M}}let G=Object.entries(Y).flatMap(([Q,z])=>{let w=Object.entries(z);if(w.length>0){let A=w.map(([Z,M])=>{let C=k(M,2);return` ${v(Z)}: ${C}`}).join(`;
10
- `);return[` interface Devup${e.toPascal(Q)}ApiStruct {
11
- ${A};
12
- }`]}return[]}).join(`
13
- `),S=Object.entries(P).map(([Q,z])=>{let w=k(z,2);return` ${v(Q)}: ${w}`}).join(`;
14
- `),g=S.length>0?` interface DevupRequestComponentStruct {
15
- ${S};
16
- }`:" interface DevupRequestComponentStruct {}",d=Object.entries(R).map(([Q,z])=>{let w=k(z,2);return` ${v(Q)}: ${w}`}).join(`;
17
- `),N=d.length>0?` interface DevupResponseComponentStruct {
18
- ${d};
19
- }`:" interface DevupResponseComponentStruct {}",r=Object.entries(F).map(([Q,z])=>{let w=k(z,2);return` ${v(Q)}: ${w}`}).join(`;
20
- `),s=r.length>0?` interface DevupErrorComponentStruct {
21
- ${r};
9
+ ${Y}}`}function u($){return typeof $==="object"&&$!==null&&"type"in $&&Object.keys($).length<=2&&(!("default"in $)||Object.keys($).length===2)}function T($,U=0){if(typeof $==="string")return $;if(u($))return T($.type,U);if(typeof $==="object"&&$!==null&&!Array.isArray($))return H$($,U);return String($)}function n($,U,Y){let J={},H={},X={},_=[...$?.parameters||[],...U?.parameters||[]];for(let L of _){if("$ref"in L){let w=v(L.$ref,Y);if(w&&"in"in w&&"name"in w&&typeof w.in==="string"&&typeof w.name==="string"){let Q="schema"in w&&w.schema?w.schema:{},{type:W,default:K}=x(Q,Y,{defaultNonNullable:!1}),G={...w,type:W,default:K};if(w.in==="path")J[w.name]=G;else if(w.in==="query")H[w.name]=G;else if(w.in==="header")X[w.name]=G}continue}let E=L.schema||{},{type:I,default:F}=x(E,Y,{defaultNonNullable:!1}),B={...L,type:I,default:F};if(L.in==="path")J[L.name]=B;else if(L.in==="query")H[L.name]=B;else if(L.in==="header")X[L.name]=B}return{pathParams:J,queryParams:H,headerParams:X}}function d($,U){if(!$)return;if("$ref"in $){let J=v($.$ref,U);if(J&&"content"in J&&J.content){let X=J.content["application/json"];if(X&&"schema"in X&&X.schema)return x(X.schema,U,{defaultNonNullable:!1}).type}return"unknown"}let Y=$.content;if(Y){let J=Y["application/json"];if(J&&"schema"in J&&J.schema)return x(J.schema,U,{defaultNonNullable:!1}).type}return}function N($){if($.includes("/")||$.includes("."))return`[\`${$}\`]`;return $}function y($){if($.startsWith("#/components/schemas/"))return $.replace("#/components/schemas/","");return null}function J$($){return $.replace(/^\.\//,"")}function L$($,U,Y){let J={get:{},post:{},put:{},delete:{},patch:{}},H=Y?.convertCase??"camel",X=(Q,W)=>{if("$ref"in Q){let G=y(Q.$ref);if(G)W.add(G);return}let K=Q;if(K.allOf)K.allOf.forEach((G)=>{X(G,W)});if(K.anyOf)K.anyOf.forEach((G)=>{X(G,W)});if(K.oneOf)K.oneOf.forEach((G)=>{X(G,W)});if(K.properties)Object.values(K.properties).forEach((G)=>{X(G,W)});if(K.type==="array"&&"items"in K&&K.items)X(K.items,W)},_=new Set,L=new Set,E=new Set,I=(Q)=>{if(Q==="default")return!0;let W=parseInt(Q,10);return W>=400&&W<600};if($.paths)for(let Q of Object.values($.paths)){if(!Q)continue;let W=["get","post","put","delete","patch"];for(let K of W){let G=Q[K];if(!G)continue;if(G.requestBody)if("$ref"in G.requestBody){let Z=y(G.requestBody.$ref);if(Z)_.add(Z)}else{let D=G.requestBody.content?.["application/json"];if(D&&"schema"in D&&D.schema)X(D.schema,_)}if(G.responses)for(let[Z,D]of Object.entries(G.responses)){let R=I(Z);if("$ref"in D){let q=y(D.$ref);if(q)if(R)E.add(q);else L.add(q)}else if("content"in D){let z=D.content?.["application/json"];if(z&&"schema"in z&&z.schema)if(R)X(z.schema,E);else X(z.schema,L)}}}}if($.paths)for(let[Q,W]of Object.entries($.paths)){if(!W)continue;let K=["get","post","put","delete","patch"];for(let G of K){let Z=W[G];if(!Z)continue;let D={},{pathParams:R,queryParams:q}=n(W,Z,$),z={};for(let[M,O]of Object.entries(R)){let A=C(M,H);z[A]=O}let b={};for(let[M,O]of Object.entries(q)){let A=C(M,H);b[A]=O}if(Object.keys(z).length>0)D.params=z;if(Object.keys(b).length>0)D.query=b;let f;if(Z.requestBody)if("$ref"in Z.requestBody){let M=d(Z.requestBody,$);if(M!==void 0)f=M}else{let O=Z.requestBody.content?.["application/json"];if(O&&"schema"in O&&O.schema)if("$ref"in O.schema){let A=y(O.schema.$ref);if(A&&$.components?.schemas?.[A]&&_.has(A))f=`DevupRequestComponentStruct['${A}']`;else{let V=d(Z.requestBody,$);if(V!==void 0)f=V}}else{let A=d(Z.requestBody,$);if(A!==void 0)f=A}}if(f!==void 0)D.body=f;let g;if(Z.responses){let M=Z.responses["200"]||Z.responses["201"]||Object.values(Z.responses)[0];if(M){if("$ref"in M);else if("content"in M){let A=M.content?.["application/json"];if(A&&"schema"in A&&A.schema)if("$ref"in A.schema){let V=y(A.schema.$ref);if(V&&$.components?.schemas?.[V]&&L.has(V))g=`DevupResponseComponentStruct['${U}']['${V}']`;else{let k=Y?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});g=S}}else{let V=A.schema;if(V.type==="array"&&V.items&&"$ref"in V.items){let k=y(V.items.$ref);if(k&&$.components?.schemas?.[k]&&L.has(k))g=`Array<DevupResponseComponentStruct['${U}']['${k}']>`;else{let S=Y?.responseDefaultNonNullable??!0,{type:l}=x(A.schema,$,{defaultNonNullable:S});g=l}}else{let k=Y?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});g=S}}}}}if(g!==void 0)D.response=g;let P;if(Z.responses){let M=Z.responses["400"]||Z.responses["401"]||Z.responses["403"]||Z.responses["404"]||Z.responses["422"]||Z.responses["500"]||Z.responses.default||Object.entries(Z.responses).find(([O])=>I(O))?.[1];if(M){if("$ref"in M);else if("content"in M){let A=M.content?.["application/json"];if(A&&"schema"in A&&A.schema)if("$ref"in A.schema){let V=y(A.schema.$ref);if(V&&$.components?.schemas?.[V]&&E.has(V))P=`DevupErrorComponentStruct['${V}']`;else{let k=Y?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});P=S}}else{let V=A.schema;if(V.type==="array"&&V.items&&"$ref"in V.items){let k=y(V.items.$ref);if(k&&$.components?.schemas?.[k]&&E.has(k))P=`Array<DevupErrorComponentStruct['${k}']>`;else{let S=Y?.responseDefaultNonNullable??!0,{type:l}=x(A.schema,$,{defaultNonNullable:S});P=l}}else{let k=Y?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});P=S}}}}}if(P!==void 0)D.error=P;let j=Q.replace(/\{([^}]+)\}/g,(M,O)=>{return`{${C(O,H)}}`});if(J[G][j]=D,Z.operationId){let M=C(Z.operationId,H);J[G][M]=D}}}let F={},B={},w={};if($.components?.schemas){for(let[Q,W]of Object.entries($.components.schemas))if(W){let K=Y?.requestDefaultNonNullable??!1,Z=Y?.responseDefaultNonNullable??!0;if(_.has(Q))Z=K;let{type:D}=x(W,$,{defaultNonNullable:Z});if(_.has(Q))F[Q]=D;if(L.has(Q))B[Q]=D;if(E.has(Q))w[Q]=D}}return{endpoints:J,requestComponents:F,responseComponents:B,errorComponents:w}}function U$($,U){let Y=[],J=new Map,H={},X={},_={},L={};for(let[R,q]of Object.entries($)){let z=J$(R);Y.push(z),J.set(z,R);let{endpoints:b,requestComponents:f,responseComponents:g,errorComponents:P}=L$(q,z,U);H[z]=b,X[z]=f,_[z]=g,L[z]=P}let I=` interface DevupApiServers {
10
+ ${Y.map((R)=>` ${N(R)}: never`).join(`;
11
+ `)}
12
+ }`,F=[],B=["get","post","put","delete","patch"];for(let R of B){let q=[];for(let z of Y){let b=H[z]?.[R];if(b&&Object.keys(b).length>0){let f=Object.entries(b).map(([P,j])=>{let M=T(j,3);return` ${N(P)}: ${M}`}).join(`;
13
+ `),g=N(z);q.push(` ${g}: {
14
+ ${f};
15
+ }`)}}if(q.length>0){let z=`Devup${r.toPascal(R)}ApiStruct`;F.push(` interface ${z} {
16
+ ${q.join(`;
17
+ `)}
18
+ }`)}}let w=[],Q=[],W=[];for(let R of Y){let q=N(R),z=X[R]||{};if(Object.keys(z).length>0){let g=Object.entries(z).map(([P,j])=>{let M=T(j,3);return` ${N(P)}: ${M}`}).join(`;
19
+ `);w.push(` ${q}: {
20
+ ${g};
21
+ }`)}let b=_[R]||{};if(Object.keys(b).length>0){let g=Object.entries(b).map(([P,j])=>{let M=T(j,3);return` ${N(P)}: ${M}`}).join(`;
22
+ `);Q.push(` ${q}: {
23
+ ${g};
24
+ }`)}let f=L[R]||{};if(Object.keys(f).length>0){let g=Object.entries(f).map(([P,j])=>{let M=T(j,2);return` ${N(P)}: ${M}`}).join(`;
25
+ `);W.push(` ${q}: {
26
+ ${g};
27
+ }`)}}let K=w.length>0?` interface DevupRequestComponentStruct {
28
+ ${w.join(`;
29
+ `)}
30
+ }`:" interface DevupRequestComponentStruct {}",G=Q.length>0?` interface DevupResponseComponentStruct {
31
+ ${Q.join(`;
32
+ `)}
33
+ }`:" interface DevupResponseComponentStruct {}",Z=W.length>0?` interface DevupErrorComponentStruct {
34
+ ${W.join(`;
35
+ `)}
22
36
  }`:" interface DevupErrorComponentStruct {}";return`import "@devup-api/fetch";
23
37
 
24
38
  declare module "@devup-api/fetch" {
25
- ${G?`${G}
39
+ ${[I,...F,K,G,Z].join(`
26
40
 
27
- ${g}
28
-
29
- ${N}
30
-
31
- ${s}`:`${g}
32
-
33
- ${N}
34
-
35
- ${s}`}
41
+ `)}
36
42
  }`}
package/dist/index.js CHANGED
@@ -1,36 +1,42 @@
1
- import{toCamel as t,toPascal as a,toSnake as e}from"@devup-api/utils";function O($,U="camel"){switch(U){case"snake":return e($);case"camel":return t($);case"pascal":return a($);case"maintain":return $;default:return $}}function Z$($,U){let _=U?.convertCase??"camel",J={};for(let[H,X]of Object.entries($.paths??{})){if(!X)continue;for(let W of["get","post","put","delete","patch"]){let L=X[W];if(!L)continue;let x=H.replace(/\{([^}]+)\}/g,(P,R)=>{return`{${O(R,_)}}`});if(L.operationId)J[O(L.operationId,_)]={method:W.toUpperCase(),url:x};J[x]={method:W.toUpperCase(),url:x}}}return J}import{toPascal as J$}from"@devup-api/utils";function $$($,U){if(!$.startsWith("#/"))return null;let _=$.slice(2).split("/"),J=U;for(let H of _)if(J&&typeof J==="object"&&H in J)J=J[H];else return null;if(J&&typeof J==="object"&&!("$ref"in J))return J;return null}function u($,U){if(!$.startsWith("#/"))return null;let _=$.slice(2).split("/"),J=U;for(let H of _)if(J&&typeof J==="object"&&H in J)J=J[H];else return null;if(J&&typeof J==="object"&&!("$ref"in J))return J;return null}function D($,U,_){let J=_?.defaultNonNullable??!1;if("$ref"in $){let X=u($.$ref,U);if(X)return D(X,U,_);return{type:"unknown",default:void 0}}let H=$;if(H.allOf){let X=H.allOf.map((W)=>D(W,U,_));return{type:X.length>0?X.map((W)=>k(W.type)).join(" & "):"unknown",default:H.default}}if(H.anyOf||H.oneOf){let X=(H.anyOf||H.oneOf||[]).map((W)=>D(W,U,_));return{type:X.length>0?`(${X.map((W)=>k(W.type)).join(" | ")})`:"unknown",default:H.default}}if(H.enum)return{type:H.enum.map((X)=>`"${String(X)}"`).join(" | "),default:H.default};if(H.type==="string"){if(H.format==="date"||H.format==="date-time")return{type:"string",default:H.default};return{type:"string",default:H.default}}if(H.type==="number"||H.type==="integer")return{type:"number",default:H.default};if(H.type==="boolean")return{type:"boolean",default:H.default};if(H.type==="array"){let X=H.items;if(X){let W=D(X,U,_);return{type:`Array<${k(W.type)}>`,default:H.default}}return{type:"unknown[]",default:H.default}}if(H.type==="object"||H.properties){let X={},W=H.required||[];if(H.properties)for(let[L,x]of Object.entries(H.properties)){let P=D(x,U,_),R=!1;if("$ref"in x){let G=u(x.$ref,U);if(G)R=G.default!==void 0}else R=x.default!==void 0;let F=W.includes(L);if(J&&R&&!F)X[L]=P;else if(!F)X[`${L}?`]=P;else X[L]=P}if(H.additionalProperties){if(H.additionalProperties===!0)X["[key: string]"]={type:"unknown",default:void 0};else if(typeof H.additionalProperties==="object"){let L=D(H.additionalProperties,U,_);X["[key: string]"]={type:L.type,default:L.default}}}return{type:{...X},default:H.default}}return{type:"unknown",default:void 0}}function r($){return typeof $==="object"&&$!==null&&"type"in $&&"in"in $&&"name"in $}function p($){let U=Object.entries($);if(U.length===0)return!0;return U.every(([_,J])=>{if(_.endsWith("?"))return!0;if(r(J))return J.required===!1;if(c(J)){if(typeof J.type==="object"&&J.type!==null&&!Array.isArray(J.type))return p(J.type);return!1}if(typeof J==="object"&&J!==null&&!Array.isArray(J))return p(J);return!1})}function H$($,U=0){let _=" ".repeat(U),J=U+1,H=" ".repeat(J),X=Object.entries($).map(([W,L])=>{if(typeof L==="string")return`${H}${W}: ${L}`;if(r(L)){let F=k(L.type,J),S=L.required===!1?`${W}?`:W,g="";if(L.description){if(g+=`${H}/**
2
- ${H} * ${L.description}`,typeof L.default<"u")g+=`
3
- ${H} * @default {${L.default}}`;g=`${g}
1
+ import{toCamel as c,toPascal as m,toSnake as n}from"@devup-api/utils";function C($,Y="camel"){switch(Y){case"snake":return n($);case"camel":return c($);case"pascal":return m($);case"maintain":return $;default:return $}}function H$($,Y){let X=Y?.convertCase??"camel",L={};for(let[H,U]of Object.entries($)){let _={};for(let[J,E]of Object.entries(U.paths??{})){if(!E)continue;for(let I of["get","post","put","delete","patch"]){let F=E[I];if(!F)continue;let B=J.replace(/\{([^}]+)\}/g,(w,Q)=>{return`{${C(Q,X)}}`});if(F.operationId)_[C(F.operationId,X)]={method:I.toUpperCase(),url:B};_[B]={method:I.toUpperCase(),url:B}}}L[H]=_}return L}import{toPascal as o}from"@devup-api/utils";function i($,Y){if(!$.startsWith("#/"))return null;let X=$.slice(2).split("/"),L=Y;for(let H of X)if(L&&typeof L==="object"&&H in L)L=L[H];else return null;if(L&&typeof L==="object"&&!("$ref"in L))return L;return null}function x($,Y,X){let L=X?.defaultNonNullable??!1;if("$ref"in $){let U=i($.$ref,Y);if(U)return x(U,Y,X);return{type:"unknown",default:void 0}}let H=$;if(H.allOf){let U=H.allOf.map((_)=>x(_,Y,X));return{type:U.length>0?U.map((_)=>T(_.type)).join(" & "):"unknown",default:H.default}}if(H.anyOf||H.oneOf){let U=(H.anyOf||H.oneOf||[]).map((_)=>x(_,Y,X));return{type:U.length>0?`(${U.map((_)=>T(_.type)).join(" | ")})`:"unknown",default:H.default}}if(H.enum)return{type:H.enum.map((U)=>`"${String(U)}"`).join(" | "),default:H.default};if(H.type==="string"){if(H.format==="date"||H.format==="date-time")return{type:"string",default:H.default};return{type:"string",default:H.default}}if(H.type==="number"||H.type==="integer")return{type:"number",default:H.default};if(H.type==="boolean")return{type:"boolean",default:H.default};if(H.type==="array"){let U=H.items;if(U){let _=x(U,Y,X);return{type:`Array<${T(_.type)}>`,default:H.default}}return{type:"unknown[]",default:H.default}}if(H.type==="object"||H.properties){let U={},_=H.required||[];if(H.properties)for(let[J,E]of Object.entries(H.properties)){let I=x(E,Y,X),F=!1;if("$ref"in E){let w=i(E.$ref,Y);if(w)F=w.default!==void 0}else F=E.default!==void 0;let B=_.includes(J);if(L&&F&&!B)U[J]=I;else if(!B)U[`${J}?`]=I;else U[J]=I}if(H.additionalProperties){if(H.additionalProperties===!0)U["[key: string]"]={type:"unknown",default:void 0};else if(typeof H.additionalProperties==="object"){let J=x(H.additionalProperties,Y,X);U["[key: string]"]={type:J.type,default:J.default}}}return{type:{...U},default:H.default}}return{type:"unknown",default:void 0}}function h($){return typeof $==="object"&&$!==null&&"type"in $&&"in"in $&&"name"in $}function u($){let Y=Object.entries($);if(Y.length===0)return!0;return Y.every(([X,L])=>{if(X.endsWith("?"))return!0;if(h(L))return L.required===!1;if(l(L))return!1;if(typeof L==="object"&&L!==null&&!Array.isArray(L))return u(L);return!1})}function r($,Y=0){let X=" ".repeat(Y),L=Y+1,H=" ".repeat(L),U=Object.entries($).map(([_,J])=>{if(typeof J==="string")return`${H}${_}: ${J}`;if(h(J)){let B=T(J.type,L),Q=J.required===!1?`${_}?`:_,W="";if(J.description){if(W+=`${H}/**
2
+ ${H} * ${J.description}`,typeof J.default<"u")W+=`
3
+ ${H} * @default {${J.default}}`;W=`${W}
4
4
  ${H} */
5
- ${H}`}else if(typeof L.default<"u")g+=`${H}/** @default {${L.default}} */
6
- ${H}`;else g=H;return`${g}${S}: ${F}`}if(c(L)){let F=k(L.type,J);return`${H}${W}: ${F}`}let P=typeof L==="object"&&L!==null&&!Array.isArray(L)&&p(L)?"?":"",R=k(L,J);return`${H}${W}${P}: ${R}`}).join(`;
7
- `);if(X.length===0)return"{}";return`{
8
- ${X};
9
- ${_}}`}function c($){return typeof $==="object"&&$!==null&&"type"in $&&Object.keys($).length<=2&&(!("default"in $)||Object.keys($).length===2)}function k($,U=0){if(typeof $==="string")return $;if(c($))return k($.type,U);if(typeof $==="object"&&$!==null&&!Array.isArray($))return H$($,U);return String($)}function s($,U,_){let J={},H={},X={},W=[...$?.parameters||[],...U?.parameters||[]];for(let L of W){if("$ref"in L){let G=$$(L.$ref,_);if(G&&"in"in G&&"name"in G&&typeof G.in==="string"&&typeof G.name==="string"){let S="schema"in G&&G.schema?G.schema:{},{type:g,default:v}=D(S,_,{defaultNonNullable:!1}),N={...G,type:g,default:v};if(G.in==="path")J[G.name]=N;else if(G.in==="query")H[G.name]=N;else if(G.in==="header")X[G.name]=N}continue}let x=L.schema||{},{type:P,default:R}=D(x,_,{defaultNonNullable:!1}),F={...L,type:P,default:R};if(L.in==="path")J[L.name]=F;else if(L.in==="query")H[L.name]=F;else if(L.in==="header")X[L.name]=F}return{pathParams:J,queryParams:H,headerParams:X}}function d($,U){if(!$)return;if("$ref"in $){let J=u($.$ref,U);if(J&&"content"in J&&J.content){let X=J.content["application/json"];if(X&&"schema"in X&&X.schema)return D(X.schema,U,{defaultNonNullable:!1}).type}return"unknown"}let _=$.content;if(_){let J=_["application/json"];if(J&&"schema"in J&&J.schema)return D(J.schema,U,{defaultNonNullable:!1}).type}return}function i($){if($.includes("/"))return`[\`${$}\`]`;return $}function f($){if($.startsWith("#/components/schemas/"))return $.replace("#/components/schemas/","");return null}function M$($,U){let _={get:{},post:{},put:{},delete:{},patch:{}},J=U?.convertCase??"camel",H=(Q,z)=>{if("$ref"in Q){let A=f(Q.$ref);if(A)z.add(A);return}let w=Q;if(w.allOf)w.allOf.forEach((A)=>{H(A,z)});if(w.anyOf)w.anyOf.forEach((A)=>{H(A,z)});if(w.oneOf)w.oneOf.forEach((A)=>{H(A,z)});if(w.properties)Object.values(w.properties).forEach((A)=>{H(A,z)});if(w.type==="array"&&"items"in w&&w.items)H(w.items,z)},X=new Set,W=new Set,L=new Set,x=(Q)=>{if(Q==="default")return!0;let z=parseInt(Q,10);return z>=400&&z<600};if($.paths)for(let Q of Object.values($.paths)){if(!Q)continue;let z=["get","post","put","delete","patch"];for(let w of z){let A=Q[w];if(!A)continue;if(A.requestBody)if("$ref"in A.requestBody){let Y=f(A.requestBody.$ref);if(Y)X.add(Y)}else{let M=A.requestBody.content?.["application/json"];if(M&&"schema"in M&&M.schema)H(M.schema,X)}if(A.responses)for(let[Y,M]of Object.entries(A.responses)){let C=x(Y);if("$ref"in M){let j=f(M.$ref);if(j)if(C)L.add(j);else W.add(j)}else if("content"in M){let q=M.content?.["application/json"];if(q&&"schema"in q&&q.schema)if(C)H(q.schema,L);else H(q.schema,W)}}}}if($.paths)for(let[Q,z]of Object.entries($.paths)){if(!z)continue;let w=["get","post","put","delete","patch"];for(let A of w){let Y=z[A];if(!Y)continue;let M={},{pathParams:C,queryParams:j}=s(z,Y,$),q={};for(let[E,B]of Object.entries(C)){let Z=O(E,J);q[Z]=B}let l={};for(let[E,B]of Object.entries(j)){let Z=O(E,J);l[Z]=B}if(Object.keys(q).length>0)M.params=q;if(Object.keys(l).length>0)M.query=l;let y;if(Y.requestBody)if("$ref"in Y.requestBody){let E=d(Y.requestBody,$);if(E!==void 0)y=E}else{let B=Y.requestBody.content?.["application/json"];if(B&&"schema"in B&&B.schema)if("$ref"in B.schema){let Z=f(B.schema.$ref);if(Z&&$.components?.schemas?.[Z]&&X.has(Z))y=`DevupRequestComponentStruct['${Z}']`;else{let K=d(Y.requestBody,$);if(K!==void 0)y=K}}else{let Z=d(Y.requestBody,$);if(Z!==void 0)y=Z}}if(y!==void 0)M.body=y;let b;if(Y.responses){let E=Y.responses["200"]||Y.responses["201"]||Object.values(Y.responses)[0];if(E){if("$ref"in E);else if("content"in E){let Z=E.content?.["application/json"];if(Z&&"schema"in Z&&Z.schema)if("$ref"in Z.schema){let K=f(Z.schema.$ref);if(K&&$.components?.schemas?.[K]&&W.has(K))b=`DevupResponseComponentStruct['${K}']`;else{let V=U?.responseDefaultNonNullable??!0,{type:I}=D(Z.schema,$,{defaultNonNullable:V});b=I}}else{let K=Z.schema;if(K.type==="array"&&K.items&&"$ref"in K.items){let V=f(K.items.$ref);if(V&&$.components?.schemas?.[V]&&W.has(V))b=`Array<DevupResponseComponentStruct['${V}']>`;else{let I=U?.responseDefaultNonNullable??!0,{type:h}=D(Z.schema,$,{defaultNonNullable:I});b=h}}else{let V=U?.responseDefaultNonNullable??!0,{type:I}=D(Z.schema,$,{defaultNonNullable:V});b=I}}}}}if(b!==void 0)M.response=b;let T;if(Y.responses){let E=Y.responses["400"]||Y.responses["401"]||Y.responses["403"]||Y.responses["404"]||Y.responses["422"]||Y.responses["500"]||Y.responses.default||Object.entries(Y.responses).find(([B])=>x(B))?.[1];if(E){if("$ref"in E);else if("content"in E){let Z=E.content?.["application/json"];if(Z&&"schema"in Z&&Z.schema)if("$ref"in Z.schema){let K=f(Z.schema.$ref);if(K&&$.components?.schemas?.[K]&&L.has(K))T=`DevupErrorComponentStruct['${K}']`;else{let V=U?.responseDefaultNonNullable??!0,{type:I}=D(Z.schema,$,{defaultNonNullable:V});T=I}}else{let K=Z.schema;if(K.type==="array"&&K.items&&"$ref"in K.items){let V=f(K.items.$ref);if(V&&$.components?.schemas?.[V]&&L.has(V))T=`Array<DevupErrorComponentStruct['${V}']>`;else{let I=U?.responseDefaultNonNullable??!0,{type:h}=D(Z.schema,$,{defaultNonNullable:I});T=h}}else{let V=U?.responseDefaultNonNullable??!0,{type:I}=D(Z.schema,$,{defaultNonNullable:V});T=I}}}}}if(T!==void 0)M.error=T;let o=Q.replace(/\{([^}]+)\}/g,(E,B)=>{return`{${O(B,J)}}`});if(_[A][o]=M,Y.operationId){let E=O(Y.operationId,J);_[A][E]=M}}}let P={},R={},F={};if($.components?.schemas){for(let[Q,z]of Object.entries($.components.schemas))if(z){let w=U?.requestDefaultNonNullable??!1,Y=U?.responseDefaultNonNullable??!0;if(X.has(Q))Y=w;let{type:M}=D(z,$,{defaultNonNullable:Y});if(X.has(Q))P[Q]=M;if(W.has(Q))R[Q]=M;if(L.has(Q))F[Q]=M}}let G=Object.entries(_).flatMap(([Q,z])=>{let w=Object.entries(z);if(w.length>0){let A=w.map(([Y,M])=>{let C=k(M,2);return` ${i(Y)}: ${C}`}).join(`;
10
- `);return[` interface Devup${J$(Q)}ApiStruct {
11
- ${A};
12
- }`]}return[]}).join(`
13
- `),S=Object.entries(P).map(([Q,z])=>{let w=k(z,2);return` ${i(Q)}: ${w}`}).join(`;
14
- `),g=S.length>0?` interface DevupRequestComponentStruct {
15
- ${S};
16
- }`:" interface DevupRequestComponentStruct {}",v=Object.entries(R).map(([Q,z])=>{let w=k(z,2);return` ${i(Q)}: ${w}`}).join(`;
17
- `),N=v.length>0?` interface DevupResponseComponentStruct {
18
- ${v};
19
- }`:" interface DevupResponseComponentStruct {}",m=Object.entries(F).map(([Q,z])=>{let w=k(z,2);return` ${i(Q)}: ${w}`}).join(`;
20
- `),n=m.length>0?` interface DevupErrorComponentStruct {
21
- ${m};
5
+ ${H}`}else if(typeof J.default<"u")W+=`${H}/** @default {${J.default}} */
6
+ ${H}`;else W=H;return`${W}${Q}: ${B}`}if(l(J)){let B=T(J.type,L);return`${H}${_}: ${B}`}let I=typeof J==="object"&&J!==null&&!Array.isArray(J)&&u(J)?"?":"",F=T(J,L);return`${H}${_}${I}: ${F}`}).join(`;
7
+ `);if(U.length===0)return"{}";return`{
8
+ ${U};
9
+ ${X}}`}function l($){return typeof $==="object"&&$!==null&&"type"in $&&Object.keys($).length<=2&&(!("default"in $)||Object.keys($).length===2)}function T($,Y=0){if(typeof $==="string")return $;if(l($))return T($.type,Y);if(typeof $==="object"&&$!==null&&!Array.isArray($))return r($,Y);return String($)}function p($,Y,X){let L={},H={},U={},_=[...$?.parameters||[],...Y?.parameters||[]];for(let J of _){if("$ref"in J){let w=i(J.$ref,X);if(w&&"in"in w&&"name"in w&&typeof w.in==="string"&&typeof w.name==="string"){let Q="schema"in w&&w.schema?w.schema:{},{type:W,default:K}=x(Q,X,{defaultNonNullable:!1}),G={...w,type:W,default:K};if(w.in==="path")L[w.name]=G;else if(w.in==="query")H[w.name]=G;else if(w.in==="header")U[w.name]=G}continue}let E=J.schema||{},{type:I,default:F}=x(E,X,{defaultNonNullable:!1}),B={...J,type:I,default:F};if(J.in==="path")L[J.name]=B;else if(J.in==="query")H[J.name]=B;else if(J.in==="header")U[J.name]=B}return{pathParams:L,queryParams:H,headerParams:U}}function v($,Y){if(!$)return;if("$ref"in $){let L=i($.$ref,Y);if(L&&"content"in L&&L.content){let U=L.content["application/json"];if(U&&"schema"in U&&U.schema)return x(U.schema,Y,{defaultNonNullable:!1}).type}return"unknown"}let X=$.content;if(X){let L=X["application/json"];if(L&&"schema"in L&&L.schema)return x(L.schema,Y,{defaultNonNullable:!1}).type}return}function N($){if($.includes("/")||$.includes("."))return`[\`${$}\`]`;return $}function y($){if($.startsWith("#/components/schemas/"))return $.replace("#/components/schemas/","");return null}function s($){return $.replace(/^\.\//,"")}function t($,Y,X){let L={get:{},post:{},put:{},delete:{},patch:{}},H=X?.convertCase??"camel",U=(Q,W)=>{if("$ref"in Q){let G=y(Q.$ref);if(G)W.add(G);return}let K=Q;if(K.allOf)K.allOf.forEach((G)=>{U(G,W)});if(K.anyOf)K.anyOf.forEach((G)=>{U(G,W)});if(K.oneOf)K.oneOf.forEach((G)=>{U(G,W)});if(K.properties)Object.values(K.properties).forEach((G)=>{U(G,W)});if(K.type==="array"&&"items"in K&&K.items)U(K.items,W)},_=new Set,J=new Set,E=new Set,I=(Q)=>{if(Q==="default")return!0;let W=parseInt(Q,10);return W>=400&&W<600};if($.paths)for(let Q of Object.values($.paths)){if(!Q)continue;let W=["get","post","put","delete","patch"];for(let K of W){let G=Q[K];if(!G)continue;if(G.requestBody)if("$ref"in G.requestBody){let Z=y(G.requestBody.$ref);if(Z)_.add(Z)}else{let D=G.requestBody.content?.["application/json"];if(D&&"schema"in D&&D.schema)U(D.schema,_)}if(G.responses)for(let[Z,D]of Object.entries(G.responses)){let R=I(Z);if("$ref"in D){let q=y(D.$ref);if(q)if(R)E.add(q);else J.add(q)}else if("content"in D){let z=D.content?.["application/json"];if(z&&"schema"in z&&z.schema)if(R)U(z.schema,E);else U(z.schema,J)}}}}if($.paths)for(let[Q,W]of Object.entries($.paths)){if(!W)continue;let K=["get","post","put","delete","patch"];for(let G of K){let Z=W[G];if(!Z)continue;let D={},{pathParams:R,queryParams:q}=p(W,Z,$),z={};for(let[M,O]of Object.entries(R)){let A=C(M,H);z[A]=O}let b={};for(let[M,O]of Object.entries(q)){let A=C(M,H);b[A]=O}if(Object.keys(z).length>0)D.params=z;if(Object.keys(b).length>0)D.query=b;let f;if(Z.requestBody)if("$ref"in Z.requestBody){let M=v(Z.requestBody,$);if(M!==void 0)f=M}else{let O=Z.requestBody.content?.["application/json"];if(O&&"schema"in O&&O.schema)if("$ref"in O.schema){let A=y(O.schema.$ref);if(A&&$.components?.schemas?.[A]&&_.has(A))f=`DevupRequestComponentStruct['${A}']`;else{let V=v(Z.requestBody,$);if(V!==void 0)f=V}}else{let A=v(Z.requestBody,$);if(A!==void 0)f=A}}if(f!==void 0)D.body=f;let g;if(Z.responses){let M=Z.responses["200"]||Z.responses["201"]||Object.values(Z.responses)[0];if(M){if("$ref"in M);else if("content"in M){let A=M.content?.["application/json"];if(A&&"schema"in A&&A.schema)if("$ref"in A.schema){let V=y(A.schema.$ref);if(V&&$.components?.schemas?.[V]&&J.has(V))g=`DevupResponseComponentStruct['${Y}']['${V}']`;else{let k=X?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});g=S}}else{let V=A.schema;if(V.type==="array"&&V.items&&"$ref"in V.items){let k=y(V.items.$ref);if(k&&$.components?.schemas?.[k]&&J.has(k))g=`Array<DevupResponseComponentStruct['${Y}']['${k}']>`;else{let S=X?.responseDefaultNonNullable??!0,{type:d}=x(A.schema,$,{defaultNonNullable:S});g=d}}else{let k=X?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});g=S}}}}}if(g!==void 0)D.response=g;let P;if(Z.responses){let M=Z.responses["400"]||Z.responses["401"]||Z.responses["403"]||Z.responses["404"]||Z.responses["422"]||Z.responses["500"]||Z.responses.default||Object.entries(Z.responses).find(([O])=>I(O))?.[1];if(M){if("$ref"in M);else if("content"in M){let A=M.content?.["application/json"];if(A&&"schema"in A&&A.schema)if("$ref"in A.schema){let V=y(A.schema.$ref);if(V&&$.components?.schemas?.[V]&&E.has(V))P=`DevupErrorComponentStruct['${V}']`;else{let k=X?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});P=S}}else{let V=A.schema;if(V.type==="array"&&V.items&&"$ref"in V.items){let k=y(V.items.$ref);if(k&&$.components?.schemas?.[k]&&E.has(k))P=`Array<DevupErrorComponentStruct['${k}']>`;else{let S=X?.responseDefaultNonNullable??!0,{type:d}=x(A.schema,$,{defaultNonNullable:S});P=d}}else{let k=X?.responseDefaultNonNullable??!0,{type:S}=x(A.schema,$,{defaultNonNullable:k});P=S}}}}}if(P!==void 0)D.error=P;let j=Q.replace(/\{([^}]+)\}/g,(M,O)=>{return`{${C(O,H)}}`});if(L[G][j]=D,Z.operationId){let M=C(Z.operationId,H);L[G][M]=D}}}let F={},B={},w={};if($.components?.schemas){for(let[Q,W]of Object.entries($.components.schemas))if(W){let K=X?.requestDefaultNonNullable??!1,Z=X?.responseDefaultNonNullable??!0;if(_.has(Q))Z=K;let{type:D}=x(W,$,{defaultNonNullable:Z});if(_.has(Q))F[Q]=D;if(J.has(Q))B[Q]=D;if(E.has(Q))w[Q]=D}}return{endpoints:L,requestComponents:F,responseComponents:B,errorComponents:w}}function W$($,Y){let X=[],L=new Map,H={},U={},_={},J={};for(let[R,q]of Object.entries($)){let z=s(R);X.push(z),L.set(z,R);let{endpoints:b,requestComponents:f,responseComponents:g,errorComponents:P}=t(q,z,Y);H[z]=b,U[z]=f,_[z]=g,J[z]=P}let I=` interface DevupApiServers {
10
+ ${X.map((R)=>` ${N(R)}: never`).join(`;
11
+ `)}
12
+ }`,F=[],B=["get","post","put","delete","patch"];for(let R of B){let q=[];for(let z of X){let b=H[z]?.[R];if(b&&Object.keys(b).length>0){let f=Object.entries(b).map(([P,j])=>{let M=T(j,3);return` ${N(P)}: ${M}`}).join(`;
13
+ `),g=N(z);q.push(` ${g}: {
14
+ ${f};
15
+ }`)}}if(q.length>0){let z=`Devup${o(R)}ApiStruct`;F.push(` interface ${z} {
16
+ ${q.join(`;
17
+ `)}
18
+ }`)}}let w=[],Q=[],W=[];for(let R of X){let q=N(R),z=U[R]||{};if(Object.keys(z).length>0){let g=Object.entries(z).map(([P,j])=>{let M=T(j,3);return` ${N(P)}: ${M}`}).join(`;
19
+ `);w.push(` ${q}: {
20
+ ${g};
21
+ }`)}let b=_[R]||{};if(Object.keys(b).length>0){let g=Object.entries(b).map(([P,j])=>{let M=T(j,3);return` ${N(P)}: ${M}`}).join(`;
22
+ `);Q.push(` ${q}: {
23
+ ${g};
24
+ }`)}let f=J[R]||{};if(Object.keys(f).length>0){let g=Object.entries(f).map(([P,j])=>{let M=T(j,2);return` ${N(P)}: ${M}`}).join(`;
25
+ `);W.push(` ${q}: {
26
+ ${g};
27
+ }`)}}let K=w.length>0?` interface DevupRequestComponentStruct {
28
+ ${w.join(`;
29
+ `)}
30
+ }`:" interface DevupRequestComponentStruct {}",G=Q.length>0?` interface DevupResponseComponentStruct {
31
+ ${Q.join(`;
32
+ `)}
33
+ }`:" interface DevupResponseComponentStruct {}",Z=W.length>0?` interface DevupErrorComponentStruct {
34
+ ${W.join(`;
35
+ `)}
22
36
  }`:" interface DevupErrorComponentStruct {}";return`import "@devup-api/fetch";
23
37
 
24
38
  declare module "@devup-api/fetch" {
25
- ${G?`${G}
39
+ ${[I,...F,K,G,Z].join(`
26
40
 
27
- ${g}
28
-
29
- ${N}
30
-
31
- ${n}`:`${g}
32
-
33
- ${N}
34
-
35
- ${n}`}
36
- }`}export{M$ as generateInterface,Z$ as createUrlMap};
41
+ `)}
42
+ }`}export{W$ as generateInterface,H$ as createUrlMap};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devup-api/generator",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -20,8 +20,8 @@
20
20
  "access": "public"
21
21
  },
22
22
  "dependencies": {
23
- "@devup-api/core": "0.1.3",
24
- "@devup-api/utils": "0.1.3"
23
+ "@devup-api/core": "0.1.4",
24
+ "@devup-api/utils": "0.1.4"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^24.10",