openapi-sync 2.1.15 → 2.1.17
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/dist/index.d.mts +17 -3
- package/dist/index.d.ts +17 -3
- package/dist/index.js +1 -2
- package/dist/index.mjs +44 -36
- package/package.json +6 -2
- package/dist/chunk-RSLDWPYW.mjs +0 -11
- package/dist/chunk-RSLDWPYW.mjs.map +0 -1
- package/dist/chunk-UYNJZXTD.mjs +0 -2
- package/dist/chunk-UYNJZXTD.mjs.map +0 -1
- package/dist/helpers.d.mts +0 -14
- package/dist/helpers.d.ts +0 -14
- package/dist/helpers.js +0 -11
- package/dist/helpers.js.map +0 -1
- package/dist/helpers.mjs +0 -2
- package/dist/helpers.mjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/regex.d.mts +0 -4
- package/dist/regex.d.ts +0 -4
- package/dist/regex.js +0 -2
- package/dist/regex.js.map +0 -1
- package/dist/regex.mjs +0 -2
- package/dist/regex.mjs.map +0 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Method } from 'axios';
|
|
2
|
-
export { JSONStringify, capitalize, getEndpointDetails, getNestedValue, isJson, isYamlString, renderTypeRefMD, yamlStringToJson } from './helpers.mjs';
|
|
3
|
-
export { variableName, variableNameChar } from './regex.mjs';
|
|
4
2
|
|
|
5
3
|
type IOpenApiSpec = Record<"openapi", string> & Record<string, any>;
|
|
6
4
|
type IOpenApSchemaSpec = {
|
|
@@ -151,8 +149,24 @@ type IOpenApiSecuritySchemes = {
|
|
|
151
149
|
};
|
|
152
150
|
};
|
|
153
151
|
|
|
152
|
+
declare const isJson: (value: any) => boolean;
|
|
153
|
+
declare const isYamlString: (fileContent: string) => boolean;
|
|
154
|
+
declare const yamlStringToJson: (fileContent: string) => any;
|
|
155
|
+
declare const capitalize: (text: string) => string;
|
|
156
|
+
declare const getEndpointDetails: (path: string, method: string) => {
|
|
157
|
+
name: string;
|
|
158
|
+
variables: string[];
|
|
159
|
+
pathParts: string[];
|
|
160
|
+
};
|
|
161
|
+
declare const JSONStringify: (obj: Record<string, any>, indent?: number) => string;
|
|
162
|
+
declare const renderTypeRefMD: (typeRef: string, indent?: number) => string;
|
|
163
|
+
declare function getNestedValue<T>(obj: object, path: string): T | undefined;
|
|
164
|
+
|
|
165
|
+
declare const variableName: RegExp;
|
|
166
|
+
declare const variableNameChar: RegExp;
|
|
167
|
+
|
|
154
168
|
declare const Init: (options?: {
|
|
155
169
|
refetchInterval?: number;
|
|
156
170
|
}) => Promise<void>;
|
|
157
171
|
|
|
158
|
-
export { type IConfig, type IConfigDoc, type IConfigExclude, type IConfigFolderSplit, type IConfigInclude, type IConfigReplaceWord, type IOpenApSchemaSpec, type IOpenApiMediaTypeSpec, type IOpenApiParameterSpec, type IOpenApiRequestBodySpec, type IOpenApiResponseSpec, type IOpenApiSecuritySchemes, type IOpenApiSpec, Init };
|
|
172
|
+
export { type IConfig, type IConfigDoc, type IConfigExclude, type IConfigFolderSplit, type IConfigInclude, type IConfigReplaceWord, type IOpenApSchemaSpec, type IOpenApiMediaTypeSpec, type IOpenApiParameterSpec, type IOpenApiRequestBodySpec, type IOpenApiResponseSpec, type IOpenApiSecuritySchemes, type IOpenApiSpec, Init, JSONStringify, capitalize, getEndpointDetails, getNestedValue, isJson, isYamlString, renderTypeRefMD, variableName, variableNameChar, yamlStringToJson };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { Method } from 'axios';
|
|
2
|
-
export { JSONStringify, capitalize, getEndpointDetails, getNestedValue, isJson, isYamlString, renderTypeRefMD, yamlStringToJson } from './helpers.js';
|
|
3
|
-
export { variableName, variableNameChar } from './regex.js';
|
|
4
2
|
|
|
5
3
|
type IOpenApiSpec = Record<"openapi", string> & Record<string, any>;
|
|
6
4
|
type IOpenApSchemaSpec = {
|
|
@@ -151,8 +149,24 @@ type IOpenApiSecuritySchemes = {
|
|
|
151
149
|
};
|
|
152
150
|
};
|
|
153
151
|
|
|
152
|
+
declare const isJson: (value: any) => boolean;
|
|
153
|
+
declare const isYamlString: (fileContent: string) => boolean;
|
|
154
|
+
declare const yamlStringToJson: (fileContent: string) => any;
|
|
155
|
+
declare const capitalize: (text: string) => string;
|
|
156
|
+
declare const getEndpointDetails: (path: string, method: string) => {
|
|
157
|
+
name: string;
|
|
158
|
+
variables: string[];
|
|
159
|
+
pathParts: string[];
|
|
160
|
+
};
|
|
161
|
+
declare const JSONStringify: (obj: Record<string, any>, indent?: number) => string;
|
|
162
|
+
declare const renderTypeRefMD: (typeRef: string, indent?: number) => string;
|
|
163
|
+
declare function getNestedValue<T>(obj: object, path: string): T | undefined;
|
|
164
|
+
|
|
165
|
+
declare const variableName: RegExp;
|
|
166
|
+
declare const variableNameChar: RegExp;
|
|
167
|
+
|
|
154
168
|
declare const Init: (options?: {
|
|
155
169
|
refetchInterval?: number;
|
|
156
170
|
}) => Promise<void>;
|
|
157
171
|
|
|
158
|
-
export { type IConfig, type IConfigDoc, type IConfigExclude, type IConfigFolderSplit, type IConfigInclude, type IConfigReplaceWord, type IOpenApSchemaSpec, type IOpenApiMediaTypeSpec, type IOpenApiParameterSpec, type IOpenApiRequestBodySpec, type IOpenApiResponseSpec, type IOpenApiSecuritySchemes, type IOpenApiSpec, Init };
|
|
172
|
+
export { type IConfig, type IConfigDoc, type IConfigExclude, type IConfigFolderSplit, type IConfigInclude, type IConfigReplaceWord, type IOpenApSchemaSpec, type IOpenApiMediaTypeSpec, type IOpenApiParameterSpec, type IOpenApiRequestBodySpec, type IOpenApiResponseSpec, type IOpenApiSecuritySchemes, type IOpenApiSpec, Init, JSONStringify, capitalize, getEndpointDetails, getNestedValue, isJson, isYamlString, renderTypeRefMD, variableName, variableNameChar, yamlStringToJson };
|
package/dist/index.js
CHANGED
|
@@ -53,5 +53,4 @@ ${curlGenerator.CurlGenerator({url:G+s,method:n.toUpperCase(),headers:B,body:N})
|
|
|
53
53
|
${r.types}`:r.types;yield M__default.default.promises.writeFile(f,n);}}}if(ie.length>0){let s=F__default.default.join(te,h,"endpoints.ts");yield M__default.default.promises.mkdir(F__default.default.dirname(s),{recursive:true}),yield M__default.default.promises.writeFile(s,ie);}if(Object.values(W).length>0){let s=F__default.default.join(te,h,e!=null&&e.folderSplit?"":"types","shared.ts");yield M__default.default.promises.mkdir(F__default.default.dirname(s),{recursive:true}),yield M__default.default.promises.writeFile(s,Object.values(W).join(`
|
|
54
54
|
`));}if(Q.length>0){let s=F__default.default.join(te,h,"types","index.ts");yield M__default.default.promises.mkdir(F__default.default.dirname(s),{recursive:true}),yield M__default.default.promises.writeFile(s,`${Object.values(W).length>0?`import * as Shared from "./shared";
|
|
55
55
|
|
|
56
|
-
`:""}${Q}`);}}),tt=et;var ue=process.cwd(),zt=o=>ne(null,null,function*(){let m;try{D("esbuild-register");}catch(R){throw R}let e=F__default.default.join(ue,"openapi.sync.js"),C=F__default.default.join(ue,"openapi.sync.ts"),A=F__default.default.join(ue,"openapi.sync.json"),b=[e,C,A];try{for(let R of b)M__default.default.existsSync(R)&&(m=D(R),Object.keys(m).length===1&&m.default&&(m=m.default));}catch(R){console.log(R);}typeof m=="function"&&(m=m());let u=m;if(!u)throw new Error("No config found");let h=Object.keys(u.api),O=o&&"refetchInterval"in o&&!isNaN(o==null?void 0:o.refetchInterval)?o.refetchInterval:u.refetchInterval;De();for(let R=0;R<h.length;R+=1){let G=h[R],k=u.api[G];tt(k,G,u,O);}});exports.Init=zt;exports.JSONStringify=_;exports.capitalize=V;exports.getEndpointDetails=Qe;exports.getNestedValue=Ot;exports.isJson=Ye;exports.isYamlString=ot;exports.renderTypeRefMD=ae;exports.variableName=ft;exports.variableNameChar=We;exports.yamlStringToJson=Ge
|
|
57
|
-
//# sourceMappingURL=index.js.map
|
|
56
|
+
`:""}${Q}`);}}),tt=et;var ue=process.cwd(),zt=o=>ne(null,null,function*(){let m;try{D("esbuild-register");}catch(R){throw R}let e=F__default.default.join(ue,"openapi.sync.js"),C=F__default.default.join(ue,"openapi.sync.ts"),A=F__default.default.join(ue,"openapi.sync.json"),b=[e,C,A];try{for(let R of b)M__default.default.existsSync(R)&&(m=D(R),Object.keys(m).length===1&&m.default&&(m=m.default));}catch(R){console.log(R);}typeof m=="function"&&(m=m());let u=m;if(!u)throw new Error("No config found");let h=Object.keys(u.api),O=o&&"refetchInterval"in o&&!isNaN(o==null?void 0:o.refetchInterval)?o.refetchInterval:u.refetchInterval;De();for(let R=0;R<h.length;R+=1){let G=h[R],k=u.api[G];tt(k,G,u,O);}});exports.Init=zt;exports.JSONStringify=_;exports.capitalize=V;exports.getEndpointDetails=Qe;exports.getNestedValue=Ot;exports.isJson=Ye;exports.isYamlString=ot;exports.renderTypeRefMD=ae;exports.variableName=ft;exports.variableNameChar=We;exports.yamlStringToJson=Ge;
|
package/dist/index.mjs
CHANGED
|
@@ -1,48 +1,56 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
${A}
|
|
1
|
+
import M from'fs';import F from'path';import*as g from'js-yaml';import pt from'lodash.isequal';import _e from'lodash.get';import lt from'axios';import mt from'axios-retry';import dt from'@apidevtools/swagger-parser';import {CurlGenerator}from'curl-generator';var D=(o=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(o,{get:(m,e)=>(typeof require!="undefined"?require:m)[e]}):o)(function(o){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var ne=(o,m,e)=>new Promise((C,A)=>{var b=O=>{try{h(e.next(O));}catch(R){A(R);}},u=O=>{try{h(e.throw(O));}catch(R){A(R);}},h=O=>O.done?C(O.value):Promise.resolve(O.value).then(b,u);h((e=e.apply(o,m)).next());});var ft=/^[A-Za-z_$][A-Za-z0-9_$]*$/,We=/[A-Za-z0-9_$]/;var Ye=o=>["object"].includes(typeof o)&&!(o instanceof Blob),ot=o=>{try{return g.load(o),!0}catch(m){let e=m;if(e instanceof g.YAMLException)return false;throw e}},Ge=o=>{if(ot(o)){let m=g.load(o),e=JSON.stringify(m,null,2);return JSON.parse(e)}},V=o=>o.substring(0,1).toUpperCase()+o.substring(1),Qe=(o,m)=>{let e=o.split("/"),C=`${V(m)}`,A=[];return e.forEach(b=>{if(b[0]==="{"&&b[b.length-1]==="}"){let h=b.replace(/{/,"").replace(/}/,"");A.push(h),b=`$${h}`;}else if(b[0]==="<"&&b[b.length-1]===">"){let h=b.replace(/</,"").replace(/>/,"");A.push(h),b=`$${h}`;}else if(b[0]===":"){let h=b.replace(/:/,"");A.push(h),b=`$${h}`;}let u="";b.split("").forEach(h=>{let O=h;We.test(h)||(O="/"),u+=O;}),u.split("/").forEach(h=>{C+=V(h);});}),{name:C,variables:A,pathParts:e}},_=(o,m=1)=>{let e="{",C=Object.keys(o);for(let A=0;A<C.length;A++){let b=C[A],u=o[b];if(e+=`
|
|
2
|
+
`+" ".repeat(m)+b+": ",Array.isArray(u)){e+="[";for(let h=0;h<u.length;h++){let O=u[h];typeof O=="object"&&O!==null?e+=_(O,m+1):e+=typeof O=="string"?`"${O}"`:O,h<u.length-1&&(e+=", ");}e+="]";}else typeof u=="object"&&u!==null?e+=""+_(u,m+1):e+=u.split(`
|
|
3
|
+
`).filter(h=>h.trim()!=="").join(`
|
|
4
|
+
${" ".repeat(m)}`);A<C.length-1&&(e+=", ");}return e+=`
|
|
5
|
+
${" ".repeat(m-1)}}`,e},ae=(o,m=1)=>`
|
|
6
|
+
\`\`\`typescript
|
|
7
|
+
${" ".repeat(m)} ${o.split(`
|
|
8
|
+
`).filter(e=>e.trim()!=="").join(`
|
|
9
|
+
${" ".repeat(m)} `)}
|
|
10
|
+
\`\`\``;function Ot(o,m){return m.split(".").reduce((C,A)=>C&&C[A]!==void 0?C[A]:void 0,o)}var oe=F.join(__dirname,"../","../db.json");M.existsSync(oe)||M.writeFileSync(oe,"{}");var le={};try{le=D(oe);}catch(o){le={};}var ee=le||{},Ze=o=>{M.writeFileSync(oe,JSON.stringify(o));},He=(o,m)=>{ee[o]=m,Ze(ee);},Xe=o=>ee[o],De=()=>{ee={},Ze(ee);};var te=process.cwd(),me={},ge=lt.create({timeout:6e4});mt(ge,{retries:20,retryCondition:o=>o.code==="ECONNABORTED"||o.message.includes("Network Error"),retryDelay:o=>o*1e3});var et=(o,m,e,C)=>ne(null,null,function*(){var fe,he,ce,Oe,Ie,je;let A=yield ge.get(o),b=Ye(A.data)?A.data:Ge(A.data),u;try{u=yield dt.parse(b);}catch(s){let r=s instanceof Error?s.message:String(s);throw new Error(`Failed to parse OpenAPI spec for ${m}: ${r}`)}let h=F.join((e==null?void 0:e.folder)||"",m),O={},R=s=>{var r,I;if((r=e==null?void 0:e.folderSplit)!=null&&r.customFolder){let f=e.folderSplit.customFolder(s);if(console.log("customFolder",f),f)return f}return (I=e==null?void 0:e.folderSplit)!=null&&I.byTags&&s.tags&&s.tags.length>0?s.tags[0].toLowerCase().replace(/\s+/g,"-"):"default"},G=typeof(e==null?void 0:e.server)=="string"?e==null?void 0:e.server:((he=(fe=u==null?void 0:u.servers)==null?void 0:fe[(e==null?void 0:e.server)||0])==null?void 0:he.url)||"",k=typeof((Oe=(ce=e==null?void 0:e.types)==null?void 0:ce.name)==null?void 0:Oe.prefix)=="string"?e==null?void 0:e.types.name.prefix:"I",rt=typeof((je=(Ie=e==null?void 0:e.endpoints)==null?void 0:Ie.name)==null?void 0:je.prefix)=="string"?e==null?void 0:e.endpoints.name.prefix:"",ye=(s,r)=>{var f,n;let I=V(s);if((n=(f=e==null?void 0:e.types)==null?void 0:f.name)!=null&&n.format){let p=e==null?void 0:e.types.name.format("shared",{name:s},I);if(p)return `${k}${p}`}return `${k}${I}`},J=(s,r,I,f,n,p=0)=>{let c="",a="",i="";if(r){if(r.$ref)if(r.$ref[0]==="#"){let l=(r.$ref||"").split("/");l.shift(),[...l].pop();let w=_e(s,l,null);if(w){w!=null&&w.name&&(c=w.name),a=l[l.length-1];let S=ye(a);S.includes(".")&&(S=S.split(".").map((U,K)=>K===0?U:`["${U}"]`).join("")),i+=`${n!=null&&n.noSharedImport?"":"Shared."}${S}`;}}else i+="";else if(r.anyOf)i+=`(${r.anyOf.map(l=>J(s,l,"",f,n)).filter(l=>!!l).join("|")})`;else if(r.oneOf)i+=`(${r.oneOf.map(l=>J(s,l,"",f,n)).filter(l=>!!l).join("|")})`;else if(r.allOf)i+=`(${r.allOf.map(l=>J(s,l,"",f,n)).filter(l=>!!l).join("&")})`;else if(r.items)i+=`${J(s,r.items,"",false,n)}[]`;else if(r.properties){let l=Object.keys(r.properties),j=r.required||[],T="";l.forEach(w=>{var Z,U,K,Y,re,H;let S="";!((U=(Z=e==null?void 0:e.types)==null?void 0:Z.doc)!=null&&U.disable)&&((Y=(K=r.properties)==null?void 0:K[w])!=null&&Y.description)&&(S=" * "+((re=r.properties)==null?void 0:re[w].description.split(`
|
|
11
|
+
`).filter(se=>se.trim()!=="").join(`
|
|
12
|
+
*${" ".repeat(1)}`))),T+=(S?`/**
|
|
13
|
+
${S}
|
|
5
14
|
*/
|
|
6
|
-
`:"")+`${
|
|
7
|
-
${" ".repeat(p)}${
|
|
8
|
-
`:""}`:""},
|
|
15
|
+
`:"")+`${J(s,(H=r.properties)==null?void 0:H[w],w,j.includes(w),n,p+1)}`;}),T.length>0?i+=`{
|
|
16
|
+
${" ".repeat(p)}${T}${" ".repeat(p)}}`:i+="{[k: string]: any}";}else if(r.enum&&r.enum.length>0)r.enum.length>1&&(i+="("),r.enum.map(l=>JSON.stringify(l)).filter(l=>!!l).forEach((l,j)=>{i+=`${j===0?"":"|"}${l}`;}),r.enum.length>1&&(i+=")");else if(r.type){let l=j=>{let T="";if(typeof j=="string")["string","integer","number","array","boolean","null"].includes(j)?["integer","number"].includes(j)?T+="number":j==="array"?T+="any[]":T+=j:j==="object"&&(r.additionalProperties?T+=`{[k: string]: ${J(s,r.additionalProperties,"",true,n)||"any"}}`:T+="{[k: string]: any}");else if(Array.isArray(j)){let w=j.map(S=>l(S));w.filter(S=>S!==""),w.length>1&&(T+="("+w.join("|")+")");}else T+="any";return T};i=l(r.type);}}else i="string";let y=c||I;n!=null&&n.useComponentName&&!y&&(y=a);let E=y?` "${y}"${f?"":"?"}: `:"",t=r!=null&&r.nullable?" | null":"";return i.length>0?`${E}${i}${t}${y?`;
|
|
17
|
+
`:""}`:""},z=(s,r)=>{let n="";if(r){if(r.$ref)if(r.$ref[0]==="#"){let p=(r.$ref||"").split("/");p.shift();let a=_e(s,p,null);a&&(a!=null&&a.name&&(a.name),p[p.length-1],n+=z(s,a));}else n+="";else if(r.anyOf)n+=z(s,r.anyOf[0]);else if(r.oneOf)n+=z(s,r.oneOf[0]);else if(r.allOf)n+=`{${r.allOf.map(p=>`...(${z(s,p)})`).join(",")}}`;else if(r.items)n+=`[${z(s,r.items)}]`;else if(r.properties){let a=Object.keys(r.properties).map(i=>{var y;return ` "${i}": ${z(s,(y=r.properties)==null?void 0:y[i])}`}).join(`,
|
|
9
18
|
`);a.length>0?n+=`{
|
|
10
19
|
${a}
|
|
11
|
-
}`:n+="{}";}else if(r.enum&&r.enum.length>0)r.enum.length>1&&(n+=r.enum[0]);else if(r.type)if(r.example)n+=JSON.stringify(r.example);else {let p=
|
|
12
|
-
`).filter(
|
|
13
|
-
*${" ".repeat(1)}`)),
|
|
14
|
-
${
|
|
20
|
+
}`:n+="{}";}else if(r.enum&&r.enum.length>0)r.enum.length>1&&(n+=r.enum[0]);else if(r.type)if(r.example)n+=JSON.stringify(r.example);else {let p=c=>{let a="";if(typeof c=="string")["string","integer","number","array","boolean","null"].includes(c)?["integer","number"].includes(c)?a+="123":c==="array"?a+="[]":c==="boolean"?a+="true":c==="null"?a+="null":a+=`"${c}"`:c==="object"&&(a+="{}");else if(Array.isArray(c)){let i=c.map(y=>p(y));i.filter(y=>y!==""),i.length>1&&(a+=i.join("|"));}else a+="any";return a};n=p(r.type);}}else n="string";return n};C&&!isNaN(C)&&C>0&&(process.env.NODE_ENV&&["production","prod","test","staging"].includes(process.env.NODE_ENV)||(me[m]&&clearTimeout(me[m]),me[m]=setTimeout(()=>et(o,m,e,C),C)));let st=Xe(m);if(pt(st,u))return;He(m,u);let ie="",Q="",W={};u.components&&Object.keys(u.components).forEach(s=>{if(["schemas","responses","parameters","examples","requestBodies","headers","links","callbacks"].includes(s)){let r=u.components[s],I={},f={};Object.keys(r).forEach(p=>{var i;let c=(i=r[p])!=null&&i.schema?r[p].schema:r[p],a=`${J(u,c,"",true,{noSharedImport:true,useComponentName:["parameters"].includes(s)})}`;if(a){let y=p.split("."),E=I,t=f;for(let l=0;l<y.length;l++){let j=y[l];l<y.length-1?(j in E||(E[j]={},t[j]={}),E=E[j],t=t[j]):(E[j]=a,t[j]=c);}}}),Object.keys(I).forEach(p=>{var y,E,t,l;let c=ye(p),a=I[p],i="";!((E=(y=e==null?void 0:e.types)==null?void 0:y.doc)!=null&&E.disable)&&p in r&&((t=r[p])!=null&&t.description)&&(i=" * "+r[p].description.split(`
|
|
21
|
+
`).filter(j=>j.trim()!=="").join(`
|
|
22
|
+
*${" ".repeat(1)}`)),W[p]=((l=W[p])!=null?l:"")+(i?`/**
|
|
23
|
+
${i}
|
|
15
24
|
*/
|
|
16
|
-
`:"")+"export type "+
|
|
17
|
-
`;});}});let
|
|
18
|
-
${
|
|
19
|
-
`;e
|
|
20
|
-
`;e
|
|
21
|
-
`;e
|
|
22
|
-
- Scopes: [\`${
|
|
23
|
-
- ${
|
|
24
|
-
`),
|
|
25
|
-
--cert client-certificate.crt --key client-private-key.key --cacert ca-certificate.crt`:
|
|
25
|
+
`:"")+"export type "+c+" = "+(typeof a=="string"?a:_(a))+`;
|
|
26
|
+
`;});}});let $e=s=>{let r="";if(s.content){let I=Object.keys(s.content);I[0]&&s.content[I[0]].schema&&(r+=`${J(u,s.content[I[0]].schema,"")}`);}return r},nt=s=>{var r,I,f,n,p;if((I=(r=e==null?void 0:e.endpoints)==null?void 0:r.value)!=null&&I.replaceWords&&Array.isArray(e==null?void 0:e.endpoints.value.replaceWords)){let c=s;return (p=(n=(f=e==null?void 0:e.endpoints)==null?void 0:f.value)==null?void 0:n.replaceWords)==null||p.forEach((a,i)=>{let y=new RegExp(a.replace,"g");c=c.replace(y,a.with||"");}),c}else return s},at=(s,r,I=[])=>{var p,c;let f=(p=e==null?void 0:e.endpoints)==null?void 0:p.exclude,n=(c=e==null?void 0:e.endpoints)==null?void 0:c.include;if(n){let a=n.tags&&n.tags.length>0?I.some(y=>n.tags.includes(y)):true,i=n.endpoints&&n.endpoints.length>0?n.endpoints.some(y=>{let E=!y.method||y.method.toLowerCase()===r.toLowerCase();return y.path?s===y.path&&E:y.regex?new RegExp(y.regex).test(s)&&E:false}):true;if(!a||!i)return true}return !!(f&&(f.tags&&f.tags.length>0&&I.some(i=>f.tags.includes(i))||f.endpoints&&f.endpoints.length>0&&f.endpoints.some(i=>{let y=!i.method||i.method.toLowerCase()===r.toLowerCase();return i.path?s===i.path&&y:i.regex?new RegExp(i.regex).test(s)&&y:false})))};if(Object.keys(u.paths||{}).forEach(s=>{let r=u.paths[s];Object.keys(r).forEach(f=>{var se,be,xe,Ce,Ae,Ee,Te,we,Se,Ne,Re,ve,Fe,Pe,ke,qe,Be,Me,Je,Ue,Le,ze,Ke,Ve;let n=f,p=Qe(s,n),c=((se=r[n])==null?void 0:se.tags)||[];if(at(s,n,c))return;let a=r[n],i=R({method:n,path:s,summary:a==null?void 0:a.summary,operationId:a==null?void 0:a.operationId,tags:c,parameters:a==null?void 0:a.parameters,requestBody:a==null?void 0:a.requestBody,responses:a==null?void 0:a.responses});O[i]||(O[i]={endpoints:"",types:""});let y=((xe=(be=e==null?void 0:e.endpoints)==null?void 0:be.value)!=null&&xe.includeServer?G:"")+p.pathParts.map($=>($[0]==="{"&&$[$.length-1]==="}"?$=`\${${$.replace(/{/,"").replace(/}/,"")}}`:$[0]==="<"&&$[$.length-1]===">"?$=`\${${$.replace(/</,"").replace(/>/,"")}}`:$[0]===":"&&($=`\${${$.replace(/:/,"")}}`),$)).join("/"),E=`"${y}"`;p.variables.length>0&&(E=`(${p.variables.map(d=>`${d}:string`).join(",")})=> \`${y}\``),E=nt(E);let t=r[n],l="";if(t!=null&&t.parameters&&((t==null?void 0:t.parameters).forEach((d,N)=>{(d.$ref||d.in==="query"&&d.name)&&(l+=`${J(u,d.$ref?d:d.schema,d.name||"",d.required)}`);}),l)){l=`{
|
|
27
|
+
${l}}`;let d=`${p.name}Query`;if((Ae=(Ce=e==null?void 0:e.types)==null?void 0:Ce.name)!=null&&Ae.useOperationId&&(t!=null&&t.operationId)&&(d=`${t.operationId}Query`),d=V(`${k}${d}`),(Te=(Ee=e==null?void 0:e.types)==null?void 0:Ee.name)!=null&&Te.format){let q=e==null?void 0:e.types.name.format("endpoint",{code:"",type:"query",method:n,path:s,summary:t==null?void 0:t.summary,operationId:t==null?void 0:t.operationId},d);q&&(d=`${k}${q}`);}let N=`export type ${d} = ${l};
|
|
28
|
+
`;e!=null&&e.folderSplit?O[i].types+=N:Q+=N;}let j=t==null?void 0:t.requestBody,T="";if(j&&(T=$e(j),T)){let $=`${p.name}DTO`;if((Se=(we=e==null?void 0:e.types)==null?void 0:we.name)!=null&&Se.useOperationId&&(t!=null&&t.operationId)&&($=`${t.operationId}DTO`),$=V(`${k}${$}`),(Re=(Ne=e==null?void 0:e.types)==null?void 0:Ne.name)!=null&&Re.format){let N=e==null?void 0:e.types.name.format("endpoint",{code:"",type:"dto",method:n,path:s,summary:t==null?void 0:t.summary,operationId:t==null?void 0:t.operationId},$);N&&($=`${k}${N}`);}let d=`export type ${$} = ${T};
|
|
29
|
+
`;e!=null&&e.folderSplit?O[i].types+=d:Q+=d;}let w={},S="";if(t!=null&&t.responses){let $=t==null?void 0:t.responses;Object.keys($).forEach(N=>{var q,B,v,P;if(S=$e($[N]),w[N]=S,S){let x=`${p.name}${N}Response`;if((B=(q=e==null?void 0:e.types)==null?void 0:q.name)!=null&&B.useOperationId&&(t!=null&&t.operationId)&&(x=`${t.operationId}${N}Response`),x=V(`${k}${x}`),(P=(v=e==null?void 0:e.types)==null?void 0:v.name)!=null&&P.format){let X=e==null?void 0:e.types.name.format("endpoint",{code:N,type:"response",method:n,path:s,summary:t==null?void 0:t.summary,operationId:t==null?void 0:t.operationId},x);X&&(x=`${k}${X}`);}let L=`export type ${x} = ${S};
|
|
30
|
+
`;e!=null&&e.folderSplit?O[i].types+=L:Q+=L;}});}let Z=$=>!$||!$.length?"":$.map(d=>Object.entries(d).map(([q,B])=>{let v=q,P="";return Array.isArray(B)&&B.length&&(P=`
|
|
31
|
+
- Scopes: [\`${B.join("`, `")}\`]`,v=`**${v}**`),`
|
|
32
|
+
- ${v}${P}`}).join("")).join(`
|
|
33
|
+
`),U=t!=null&&t.security?Z(t.security):"",K="";if(!((Fe=(ve=e==null?void 0:e.endpoints)==null?void 0:ve.doc)!=null&&Fe.disable)){let $="";if((ke=(Pe=e==null?void 0:e.endpoints)==null?void 0:Pe.doc)!=null&&ke.showCurl){let d={},N="",q="";(qe=t.requestBody)!=null&&qe.content&&Object.keys(t.requestBody.content).forEach(P=>{let x=t.requestBody.content[P].schema;if(x){Array.isArray(d["Content-type"])?d["Content-type"].push(P):d["Content-type"]=[P];let L=z(u,x);L&&(N=L);}}),t!=null&&t.security&&t.security.forEach(v=>{Object.keys(v).forEach(P=>{var L,X;let x=(X=(L=u.components)==null?void 0:L.securitySchemes)==null?void 0:X[P];x&&(x.type==="mutualTLS"?q+=`
|
|
34
|
+
--cert client-certificate.crt --key client-private-key.key --cacert ca-certificate.crt`:x.type==="apiKey"?d[(x==null?void 0:x.name)||"X-API-KEY"]="{API_KEY_VALUE}":d.Authorization=`${(x==null?void 0:x.scheme)==="basic"?"Basic":"Bearer"} {${(x==null?void 0:x.scheme)==="basic"?"VALUE":"TOKEN"}}`);});});let B={};Object.keys(d).forEach(v=>{Array.isArray(d[v])?B[v]=d[v].join("; "):B[v]=d[v];}),$=`
|
|
26
35
|
\`\`\`bash
|
|
27
|
-
${CurlGenerator({url:G+s,method:n.toUpperCase(),headers:
|
|
36
|
+
${CurlGenerator({url:G+s,method:n.toUpperCase(),headers:B,body:N})}${q}
|
|
28
37
|
\`\`\``;}K=`/**${t!=null&&t.description?`
|
|
29
38
|
* ${t==null?void 0:t.description} `:""}
|
|
30
39
|
* **Method**: \`${n.toUpperCase()}\`
|
|
31
40
|
* **Summary**: ${(t==null?void 0:t.summary)||""}
|
|
32
|
-
* **Tags**: [${((
|
|
33
|
-
* **OperationId**: ${(t==null?void 0:t.operationId)||""} ${
|
|
34
|
-
* **Query**: ${
|
|
35
|
-
* **DTO**: ${
|
|
36
|
-
* **Response**: ${Object.entries(
|
|
37
|
-
- **${
|
|
38
|
-
* **Security**: ${
|
|
39
|
-
`:""}${
|
|
41
|
+
* **Tags**: [${((Be=t==null?void 0:t.tags)==null?void 0:Be.join(", "))||""}]
|
|
42
|
+
* **OperationId**: ${(t==null?void 0:t.operationId)||""} ${l?`
|
|
43
|
+
* **Query**: ${ae(l)} `:""}${T?`
|
|
44
|
+
* **DTO**: ${ae(T)} `:""}${S?`
|
|
45
|
+
* **Response**: ${Object.entries(w).map(([d,N])=>`
|
|
46
|
+
- **${d}**: ${ae(N,2)} `).join("")}`:""}${U?`
|
|
47
|
+
* **Security**: ${U}
|
|
48
|
+
`:""}${$}
|
|
40
49
|
*/
|
|
41
|
-
`;}let
|
|
42
|
-
`;e
|
|
50
|
+
`;}let Y=(Je=(Me=e==null?void 0:e.endpoints)==null?void 0:Me.name)!=null&&Je.useOperationId&&((Ue=t==null?void 0:t.operationId)==null?void 0:Ue.length)>0?t.operationId:`${p.name}`;if((ze=(Le=e==null?void 0:e.endpoints)==null?void 0:Le.name)!=null&&ze.format){let $=e==null?void 0:e.endpoints.name.format({method:n,path:s,summary:t==null?void 0:t.summary,operationId:t==null?void 0:t.operationId},Y);$&&(Y=$);}let re={method:`"${n}"`,operationId:`"${t==null?void 0:t.operationId}"`,url:E,tags:(t==null?void 0:t.tags)||[]},H=`${K}export const ${rt}${Y} = ${((Ve=(Ke=e==null?void 0:e.endpoints)==null?void 0:Ke.value)==null?void 0:Ve.type)==="object"?_(re):E};
|
|
51
|
+
`;e!=null&&e.folderSplit?O[i].endpoints+=H:ie+=H;});}),e!=null&&e.folderSplit){for(let[s,r]of Object.entries(O))if(r.endpoints||r.types){let I=F.join(h,s);if(r.endpoints){let f=F.join(te,I,"endpoints.ts");yield M.promises.mkdir(F.dirname(f),{recursive:true}),yield M.promises.writeFile(f,r.endpoints);}if(r.types){let f=F.join(te,I,"types.ts");yield M.promises.mkdir(F.dirname(f),{recursive:true});let n=Object.values(W).length>0?`import * as Shared from "../shared";
|
|
43
52
|
|
|
44
|
-
${r.types}`:r.types;yield
|
|
45
|
-
`));}if(Q.length>0){let s=
|
|
53
|
+
${r.types}`:r.types;yield M.promises.writeFile(f,n);}}}if(ie.length>0){let s=F.join(te,h,"endpoints.ts");yield M.promises.mkdir(F.dirname(s),{recursive:true}),yield M.promises.writeFile(s,ie);}if(Object.values(W).length>0){let s=F.join(te,h,e!=null&&e.folderSplit?"":"types","shared.ts");yield M.promises.mkdir(F.dirname(s),{recursive:true}),yield M.promises.writeFile(s,Object.values(W).join(`
|
|
54
|
+
`));}if(Q.length>0){let s=F.join(te,h,"types","index.ts");yield M.promises.mkdir(F.dirname(s),{recursive:true}),yield M.promises.writeFile(s,`${Object.values(W).length>0?`import * as Shared from "./shared";
|
|
46
55
|
|
|
47
|
-
`:""}${Q}`);}}),
|
|
48
|
-
//# sourceMappingURL=index.mjs.map
|
|
56
|
+
`:""}${Q}`);}}),tt=et;var ue=process.cwd(),zt=o=>ne(null,null,function*(){let m;try{D("esbuild-register");}catch(R){throw R}let e=F.join(ue,"openapi.sync.js"),C=F.join(ue,"openapi.sync.ts"),A=F.join(ue,"openapi.sync.json"),b=[e,C,A];try{for(let R of b)M.existsSync(R)&&(m=D(R),Object.keys(m).length===1&&m.default&&(m=m.default));}catch(R){console.log(R);}typeof m=="function"&&(m=m());let u=m;if(!u)throw new Error("No config found");let h=Object.keys(u.api),O=o&&"refetchInterval"in o&&!isNaN(o==null?void 0:o.refetchInterval)?o.refetchInterval:u.refetchInterval;De();for(let R=0;R<h.length;R+=1){let G=h[R],k=u.api[G];tt(k,G,u,O);}});export{zt as Init,_ as JSONStringify,V as capitalize,Qe as getEndpointDetails,Ot as getNestedValue,Ye as isJson,ot as isYamlString,ae as renderTypeRefMD,ft as variableName,We as variableNameChar,Ge as yamlStringToJson};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "openapi-sync",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.17",
|
|
4
4
|
"description": "A developer-friendly tool designed to keep your API up-to-date by leveraging OpenAPI schemas. It automates the generation of endpoint URIs and type definitions, including shared types, directly from your OpenAPI specification.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -23,7 +23,11 @@
|
|
|
23
23
|
],
|
|
24
24
|
"files": [
|
|
25
25
|
"bin",
|
|
26
|
-
"dist",
|
|
26
|
+
"dist/**/*.js",
|
|
27
|
+
"dist/**/*.mjs",
|
|
28
|
+
"dist/**/*.d.ts",
|
|
29
|
+
"dist/**/*.d.mts",
|
|
30
|
+
"!dist/**/*.map",
|
|
27
31
|
"db.json",
|
|
28
32
|
"LICENSE",
|
|
29
33
|
"README.md",
|
package/dist/chunk-RSLDWPYW.mjs
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import {d as d$1}from'./chunk-UYNJZXTD.mjs';import*as a from'js-yaml';var d=n=>["object"].includes(typeof n)&&!(n instanceof Blob),u=n=>{try{return a.load(n),!0}catch(s){let e=s;if(e instanceof a.YAMLException)return false;throw e}},h=n=>{if(u(n)){let s=a.load(n),e=JSON.stringify(s,null,2);return JSON.parse(e)}},p=n=>n.substring(0,1).toUpperCase()+n.substring(1),m=(n,s)=>{let e=n.split("/"),i=`${p(s)}`,o=[];return e.forEach(r=>{if(r[0]==="{"&&r[r.length-1]==="}"){let t=r.replace(/{/,"").replace(/}/,"");o.push(t),r=`$${t}`;}else if(r[0]==="<"&&r[r.length-1]===">"){let t=r.replace(/</,"").replace(/>/,"");o.push(t),r=`$${t}`;}else if(r[0]===":"){let t=r.replace(/:/,"");o.push(t),r=`$${t}`;}let l="";r.split("").forEach(t=>{let c=t;d$1.test(t)||(c="/"),l+=c;}),l.split("/").forEach(t=>{i+=p(t);});}),{name:i,variables:o,pathParts:e}},g=(n,s=1)=>{let e="{",i=Object.keys(n);for(let o=0;o<i.length;o++){let r=i[o],l=n[r];if(e+=`
|
|
2
|
-
`+" ".repeat(s)+r+": ",Array.isArray(l)){e+="[";for(let t=0;t<l.length;t++){let c=l[t];typeof c=="object"&&c!==null?e+=g(c,s+1):e+=typeof c=="string"?`"${c}"`:c,t<l.length-1&&(e+=", ");}e+="]";}else typeof l=="object"&&l!==null?e+=""+g(l,s+1):e+=l.split(`
|
|
3
|
-
`).filter(t=>t.trim()!=="").join(`
|
|
4
|
-
${" ".repeat(s)}`);o<i.length-1&&(e+=", ");}return e+=`
|
|
5
|
-
${" ".repeat(s-1)}}`,e},$=(n,s=1)=>`
|
|
6
|
-
\`\`\`typescript
|
|
7
|
-
${" ".repeat(s)} ${n.split(`
|
|
8
|
-
`).filter(e=>e.trim()!=="").join(`
|
|
9
|
-
${" ".repeat(s)} `)}
|
|
10
|
-
\`\`\``;function j(n,s){return s.split(".").reduce((i,o)=>i&&i[o]!==void 0?i[o]:void 0,n)}export{d as a,u as b,h as c,p as d,m as e,g as f,$ as g,j as h};//# sourceMappingURL=chunk-RSLDWPYW.mjs.map
|
|
11
|
-
//# sourceMappingURL=chunk-RSLDWPYW.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../helpers.ts"],"names":["isJson","value","isYamlString","fileContent","en","yamlStringToJson","content","jsonString","capitalize","text","getEndpointDetails","path","method","pathParts","name","variables","part","s","partVal","char","variableNameChar","val","JSONStringify","obj","indent","result","keys","i","key","j","item","line","renderTypeRefMD","typeRef","getNestedValue","currentObj"],"mappings":"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","file":"chunk-RSLDWPYW.mjs","sourcesContent":["import { variableNameChar } from \"./regex\";\nimport * as yaml from \"js-yaml\";\n\nexport const isJson = (value: any) => {\n return [\"object\"].includes(typeof value) && !(value instanceof Blob);\n};\n\nexport const isYamlString = (fileContent: string) => {\n try {\n yaml.load(fileContent);\n return true;\n } catch (en) {\n const e = en as any;\n if (e instanceof yaml.YAMLException) {\n return false;\n } else {\n throw e;\n }\n }\n};\n\nexport const yamlStringToJson = (fileContent: string) => {\n if (isYamlString(fileContent)) {\n const content = yaml.load(fileContent);\n\n const jsonString = JSON.stringify(content, null, 2);\n const json = JSON.parse(jsonString);\n return json;\n }\n};\n\nexport const capitalize = (text: string) => {\n const capitalizedWord =\n text.substring(0, 1).toUpperCase() + text.substring(1);\n return capitalizedWord;\n};\n\nexport const getEndpointDetails = (path: string, method: string) => {\n const pathParts = path.split(\"/\");\n let name = `${capitalize(method)}`;\n const variables: string[] = [];\n pathParts.forEach((part) => {\n // check if part is a variable\n //api/{userId}\n if (part[0] === \"{\" && part[part.length - 1] === \"}\") {\n const s = part.replace(/{/, \"\").replace(/}/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n //api/<userId>\n else if (part[0] === \"<\" && part[part.length - 1] === \">\") {\n const s = part.replace(/</, \"\").replace(/>/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n //api/:userId\n else if (part[0] === \":\") {\n const s = part.replace(/:/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n // parse to variable name\n let partVal = \"\";\n part.split(\"\").forEach((char) => {\n let c = char;\n if (!variableNameChar.test(char)) c = \"/\";\n partVal += c;\n });\n\n partVal.split(\"/\").forEach((val) => {\n name += capitalize(val);\n });\n });\n\n return { name, variables, pathParts };\n};\n\nexport const JSONStringify = (obj: Record<string, any>, indent = 1) => {\n let result = \"{\";\n const keys = Object.keys(obj);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = obj[key];\n\n result += \"\\n\" + \" \".repeat(indent) + key + \": \";\n\n if (Array.isArray(value)) {\n result += \"[\";\n for (let j = 0; j < value.length; j++) {\n const item = value[j];\n if (typeof item === \"object\" && item !== null) {\n result += JSONStringify(item, indent + 1);\n } else {\n result += typeof item === \"string\" ? `\"${item}\"` : item;\n }\n if (j < value.length - 1) {\n result += \", \";\n }\n }\n result += \"]\";\n } else if (typeof value === \"object\" && value !== null) {\n result += \"\" + JSONStringify(value, indent + 1);\n } else {\n result += value\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(`\\n${\" \".repeat(indent)}`);\n }\n\n if (i < keys.length - 1) {\n result += \", \";\n }\n }\n\n result += `\\n${\" \".repeat(indent - 1)}}`;\n return result;\n};\n\nexport const renderTypeRefMD = (typeRef: string, indent = 1) => {\n return `\\n\\`\\`\\`typescript\\n${\" \".repeat(indent)} ${typeRef\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\")\n .join(`\\n${\" \".repeat(indent)} `)}\\n\\`\\`\\``;\n};\n\nexport function getNestedValue<T>(obj: object, path: string): T | undefined {\n // Split the path string into an array of keys\n const keys = path.split(\".\");\n\n // Use the reduce method to navigate the object\n return keys.reduce((currentObj: any, key: string) => {\n // If the current object is not null or undefined,\n // return the value of the next key. Otherwise, return undefined.\n return currentObj && currentObj[key] !== undefined\n ? currentObj[key]\n : undefined;\n }, obj) as T | undefined;\n}\n"]}
|
package/dist/chunk-UYNJZXTD.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var b=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(o,r)=>(typeof require!="undefined"?require:o)[r]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var c=(e,o,r)=>new Promise((A,z)=>{var Z=a=>{try{t(r.next(a));}catch($){z($);}},_=a=>{try{t(r.throw(a));}catch($){z($);}},t=a=>a.done?A(a.value):Promise.resolve(a.value).then(Z,_);t((r=r.apply(e,o)).next());});var l=/^[A-Za-z_$][A-Za-z0-9_$]*$/,m=/[A-Za-z0-9_$]/;export{b as a,c as b,l as c,m as d};//# sourceMappingURL=chunk-UYNJZXTD.mjs.map
|
|
2
|
-
//# sourceMappingURL=chunk-UYNJZXTD.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../regex.ts"],"names":["variableName","variableNameChar"],"mappings":"+eAAO,IAAMA,CAAAA,CAAe,6BACfC,CAAAA,CAAmB","file":"chunk-UYNJZXTD.mjs","sourcesContent":["export const variableName = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nexport const variableNameChar = /[A-Za-z0-9_$]/;\n"]}
|
package/dist/helpers.d.mts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
declare const isJson: (value: any) => boolean;
|
|
2
|
-
declare const isYamlString: (fileContent: string) => boolean;
|
|
3
|
-
declare const yamlStringToJson: (fileContent: string) => any;
|
|
4
|
-
declare const capitalize: (text: string) => string;
|
|
5
|
-
declare const getEndpointDetails: (path: string, method: string) => {
|
|
6
|
-
name: string;
|
|
7
|
-
variables: string[];
|
|
8
|
-
pathParts: string[];
|
|
9
|
-
};
|
|
10
|
-
declare const JSONStringify: (obj: Record<string, any>, indent?: number) => string;
|
|
11
|
-
declare const renderTypeRefMD: (typeRef: string, indent?: number) => string;
|
|
12
|
-
declare function getNestedValue<T>(obj: object, path: string): T | undefined;
|
|
13
|
-
|
|
14
|
-
export { JSONStringify, capitalize, getEndpointDetails, getNestedValue, isJson, isYamlString, renderTypeRefMD, yamlStringToJson };
|
package/dist/helpers.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
declare const isJson: (value: any) => boolean;
|
|
2
|
-
declare const isYamlString: (fileContent: string) => boolean;
|
|
3
|
-
declare const yamlStringToJson: (fileContent: string) => any;
|
|
4
|
-
declare const capitalize: (text: string) => string;
|
|
5
|
-
declare const getEndpointDetails: (path: string, method: string) => {
|
|
6
|
-
name: string;
|
|
7
|
-
variables: string[];
|
|
8
|
-
pathParts: string[];
|
|
9
|
-
};
|
|
10
|
-
declare const JSONStringify: (obj: Record<string, any>, indent?: number) => string;
|
|
11
|
-
declare const renderTypeRefMD: (typeRef: string, indent?: number) => string;
|
|
12
|
-
declare function getNestedValue<T>(obj: object, path: string): T | undefined;
|
|
13
|
-
|
|
14
|
-
export { JSONStringify, capitalize, getEndpointDetails, getNestedValue, isJson, isYamlString, renderTypeRefMD, yamlStringToJson };
|
package/dist/helpers.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
'use strict';var c=require('js-yaml');function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var c__namespace=/*#__PURE__*/_interopNamespace(c);var p=/[A-Za-z0-9_$]/;var $=n=>["object"].includes(typeof n)&&!(n instanceof Blob),u=n=>{try{return c__namespace.load(n),!0}catch(s){let e=s;if(e instanceof c__namespace.YAMLException)return false;throw e}},h=n=>{if(u(n)){let s=c__namespace.load(n),e=JSON.stringify(s,null,2);return JSON.parse(e)}},f=n=>n.substring(0,1).toUpperCase()+n.substring(1),d=(n,s)=>{let e=n.split("/"),i=`${f(s)}`,o=[];return e.forEach(r=>{if(r[0]==="{"&&r[r.length-1]==="}"){let t=r.replace(/{/,"").replace(/}/,"");o.push(t),r=`$${t}`;}else if(r[0]==="<"&&r[r.length-1]===">"){let t=r.replace(/</,"").replace(/>/,"");o.push(t),r=`$${t}`;}else if(r[0]===":"){let t=r.replace(/:/,"");o.push(t),r=`$${t}`;}let l="";r.split("").forEach(t=>{let a=t;p.test(t)||(a="/"),l+=a;}),l.split("/").forEach(t=>{i+=f(t);});}),{name:i,variables:o,pathParts:e}},g=(n,s=1)=>{let e="{",i=Object.keys(n);for(let o=0;o<i.length;o++){let r=i[o],l=n[r];if(e+=`
|
|
2
|
-
`+" ".repeat(s)+r+": ",Array.isArray(l)){e+="[";for(let t=0;t<l.length;t++){let a=l[t];typeof a=="object"&&a!==null?e+=g(a,s+1):e+=typeof a=="string"?`"${a}"`:a,t<l.length-1&&(e+=", ");}e+="]";}else typeof l=="object"&&l!==null?e+=""+g(l,s+1):e+=l.split(`
|
|
3
|
-
`).filter(t=>t.trim()!=="").join(`
|
|
4
|
-
${" ".repeat(s)}`);o<i.length-1&&(e+=", ");}return e+=`
|
|
5
|
-
${" ".repeat(s-1)}}`,e},x=(n,s=1)=>`
|
|
6
|
-
\`\`\`typescript
|
|
7
|
-
${" ".repeat(s)} ${n.split(`
|
|
8
|
-
`).filter(e=>e.trim()!=="").join(`
|
|
9
|
-
${" ".repeat(s)} `)}
|
|
10
|
-
\`\`\``;function b(n,s){return s.split(".").reduce((i,o)=>i&&i[o]!==void 0?i[o]:void 0,n)}exports.JSONStringify=g;exports.capitalize=f;exports.getEndpointDetails=d;exports.getNestedValue=b;exports.isJson=$;exports.isYamlString=u;exports.renderTypeRefMD=x;exports.yamlStringToJson=h;//# sourceMappingURL=helpers.js.map
|
|
11
|
-
//# sourceMappingURL=helpers.js.map
|
package/dist/helpers.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../regex.ts","../helpers.ts"],"names":["variableNameChar","isJson","value","isYamlString","fileContent","c","en","yamlStringToJson","content","jsonString","capitalize","text","getEndpointDetails","path","method","pathParts","name","variables","part","s","partVal","char","val","JSONStringify","obj","indent","result","keys","i","key","j","item","line","renderTypeRefMD","typeRef","getNestedValue","currentObj"],"mappings":"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","file":"helpers.js","sourcesContent":["export const variableName = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nexport const variableNameChar = /[A-Za-z0-9_$]/;\n","import { variableNameChar } from \"./regex\";\nimport * as yaml from \"js-yaml\";\n\nexport const isJson = (value: any) => {\n return [\"object\"].includes(typeof value) && !(value instanceof Blob);\n};\n\nexport const isYamlString = (fileContent: string) => {\n try {\n yaml.load(fileContent);\n return true;\n } catch (en) {\n const e = en as any;\n if (e instanceof yaml.YAMLException) {\n return false;\n } else {\n throw e;\n }\n }\n};\n\nexport const yamlStringToJson = (fileContent: string) => {\n if (isYamlString(fileContent)) {\n const content = yaml.load(fileContent);\n\n const jsonString = JSON.stringify(content, null, 2);\n const json = JSON.parse(jsonString);\n return json;\n }\n};\n\nexport const capitalize = (text: string) => {\n const capitalizedWord =\n text.substring(0, 1).toUpperCase() + text.substring(1);\n return capitalizedWord;\n};\n\nexport const getEndpointDetails = (path: string, method: string) => {\n const pathParts = path.split(\"/\");\n let name = `${capitalize(method)}`;\n const variables: string[] = [];\n pathParts.forEach((part) => {\n // check if part is a variable\n //api/{userId}\n if (part[0] === \"{\" && part[part.length - 1] === \"}\") {\n const s = part.replace(/{/, \"\").replace(/}/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n //api/<userId>\n else if (part[0] === \"<\" && part[part.length - 1] === \">\") {\n const s = part.replace(/</, \"\").replace(/>/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n //api/:userId\n else if (part[0] === \":\") {\n const s = part.replace(/:/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n // parse to variable name\n let partVal = \"\";\n part.split(\"\").forEach((char) => {\n let c = char;\n if (!variableNameChar.test(char)) c = \"/\";\n partVal += c;\n });\n\n partVal.split(\"/\").forEach((val) => {\n name += capitalize(val);\n });\n });\n\n return { name, variables, pathParts };\n};\n\nexport const JSONStringify = (obj: Record<string, any>, indent = 1) => {\n let result = \"{\";\n const keys = Object.keys(obj);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = obj[key];\n\n result += \"\\n\" + \" \".repeat(indent) + key + \": \";\n\n if (Array.isArray(value)) {\n result += \"[\";\n for (let j = 0; j < value.length; j++) {\n const item = value[j];\n if (typeof item === \"object\" && item !== null) {\n result += JSONStringify(item, indent + 1);\n } else {\n result += typeof item === \"string\" ? `\"${item}\"` : item;\n }\n if (j < value.length - 1) {\n result += \", \";\n }\n }\n result += \"]\";\n } else if (typeof value === \"object\" && value !== null) {\n result += \"\" + JSONStringify(value, indent + 1);\n } else {\n result += value\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(`\\n${\" \".repeat(indent)}`);\n }\n\n if (i < keys.length - 1) {\n result += \", \";\n }\n }\n\n result += `\\n${\" \".repeat(indent - 1)}}`;\n return result;\n};\n\nexport const renderTypeRefMD = (typeRef: string, indent = 1) => {\n return `\\n\\`\\`\\`typescript\\n${\" \".repeat(indent)} ${typeRef\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\")\n .join(`\\n${\" \".repeat(indent)} `)}\\n\\`\\`\\``;\n};\n\nexport function getNestedValue<T>(obj: object, path: string): T | undefined {\n // Split the path string into an array of keys\n const keys = path.split(\".\");\n\n // Use the reduce method to navigate the object\n return keys.reduce((currentObj: any, key: string) => {\n // If the current object is not null or undefined,\n // return the value of the next key. Otherwise, return undefined.\n return currentObj && currentObj[key] !== undefined\n ? currentObj[key]\n : undefined;\n }, obj) as T | undefined;\n}\n"]}
|
package/dist/helpers.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export{f as JSONStringify,d as capitalize,e as getEndpointDetails,h as getNestedValue,a as isJson,b as isYamlString,g as renderTypeRefMD,c as yamlStringToJson}from'./chunk-RSLDWPYW.mjs';import'./chunk-UYNJZXTD.mjs';//# sourceMappingURL=helpers.mjs.map
|
|
2
|
-
//# sourceMappingURL=helpers.mjs.map
|
package/dist/helpers.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"helpers.mjs"}
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../Openapi-sync/index.ts","../regex.ts","../helpers.ts","../Openapi-sync/state.ts","../index.ts"],"names":["variableName","variableNameChar","isJson","value","isYamlString","fileContent","g","en","yamlStringToJson","content","jsonString","capitalize","text","getEndpointDetails","path","method","pathParts","name","variables","part","s","partVal","char","c","val","JSONStringify","obj","indent","result","keys","i","key","j","item","line","renderTypeRefMD","typeRef","getNestedValue","currentObj","dbPath","fs","db","__require","error","state","updateDB","data","setState","getState","resetState","rootUsingCwd","fetchTimeout","apiClient","axios","axiosRetry","retryCount","OpenapiSync","apiUrl","apiName","config","refetchInterval","__async","_a","_b","_c","_d","_e","_f","specResponse","source","spec","SwaggerParser","parseError","parseErrorMessage","folderPath","folderGroups","getFolderName","endpointData","customFolder","serverUrl","typePrefix","endpointPrefix","getSharedComponentName","componentName","componentType","defaultName","formattedName","parseSchemaToType","apiDoc","schema","isRequired","options","indentLevel","overrideName","type","pathToComponentParts","component","lodashget","v","objKeys","requiredKeys","typeCnt","doc","handleType","_type","arrType","_name","typeName","nullable","getSchemaExamples","prevSpec","isEqual","endpointsFileContent","typesFileContent","sharedTypesFileContent","components","componentInterfaces","componentSchema","contentKey","parts","currentLevel","currentSchemaLevel","cnt","getBodySchemaType","requestBody","contentKeys","treatEndpointUrl","endpointUrl","newEndpointUrl","replaceWord","indx","regexp","shouldExcludeEndpoint","tags","excludeConfig","includeConfig","matchesIncludeTags","tag","matchesIncludeEndpoints","endpoint","methodMatches","endpointPath","endpointSpec","_method","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","endpointTags","enSpec","folderName","endpointUrlTxt","eSpec","queryTypeCnt","param","typeContent","dtoTypeCnt","responseTypeObject","responseTypeCnt","responses","code","formatSecuritySpec","security","securityRequirement","scheme","scopes","sch","scopeText","securitySpec","curl","headers","body","extras","contentType","schemaType","securityItem","securitySchema","curlHeaders","header","CurlGenerator","endpointContent","group","folderPathForGroup","endpointsFilePath","typesFilePath","typesContent","sharedTypesFilePath","Openapi_sync_default","Init","configJS","registerError","jsConfigPath","tsConfigPath","jsonConfigPath","configPaths","configPath","e","apiNames"],"mappings":"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","file":"index.js","sourcesContent":["import fs from \"fs\";\nimport path from \"path\";\nimport {\n capitalize,\n getEndpointDetails,\n isJson,\n JSONStringify,\n renderTypeRefMD,\n yamlStringToJson,\n} from \"../helpers\";\nimport {\n IConfig,\n IConfigReplaceWord,\n IOpenApiMediaTypeSpec,\n IOpenApiParameterSpec,\n IOpenApiRequestBodySpec,\n IOpenApiResponseSpec,\n IOpenApiSecuritySchemes,\n IOpenApiSpec,\n IOpenApSchemaSpec,\n} from \"../types\";\nimport isEqual from \"lodash.isequal\";\nimport lodashget from \"lodash.get\";\nimport axios, { Method } from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { getState, setState } from \"./state\";\nimport { CurlGenerator } from \"curl-generator\";\n\nconst rootUsingCwd = process.cwd();\nlet fetchTimeout: Record<string, null | NodeJS.Timeout> = {};\n\n// Create an Axios instance\nconst apiClient = axios.create({\n timeout: 60000, // Timeout after 1min\n});\n\n// Configure axios-retry\naxiosRetry(apiClient, {\n retries: 20, // Number of retry attempts\n retryCondition: (error) => {\n // Retry on network error\n return (\n error.code === \"ECONNABORTED\" || error.message.includes(\"Network Error\")\n );\n },\n retryDelay: (retryCount) => {\n return retryCount * 1000; // Exponential back-off: 1s, 2s, 3s, etc.\n },\n});\n\nconst OpenapiSync = async (\n apiUrl: string,\n apiName: string,\n config: IConfig,\n refetchInterval?: number\n) => {\n const specResponse = await apiClient.get(apiUrl);\n\n const source = isJson(specResponse.data)\n ? specResponse.data\n : yamlStringToJson(specResponse.data);\n\n // Parse the OpenAPI spec using swagger-parser with lenient parsing\n let spec: IOpenApiSpec;\n try {\n // Use lenient parsing by default (similar to redocly behavior)\n spec = (await SwaggerParser.parse(source)) as IOpenApiSpec;\n } catch (parseError) {\n const parseErrorMessage =\n parseError instanceof Error ? parseError.message : String(parseError);\n throw new Error(\n `Failed to parse OpenAPI spec for ${apiName}: ${parseErrorMessage}`\n );\n }\n\n const folderPath = path.join(config?.folder || \"\", apiName);\n\n // Initialize folder splitting data structures\n const folderGroups: Record<\n string,\n {\n endpoints: string;\n types: string;\n }\n > = {};\n\n // Helper function to determine folder name for an endpoint\n const getFolderName = (endpointData: {\n method: Method;\n path: string;\n summary?: string;\n operationId?: string;\n tags?: string[];\n parameters?: IOpenApiParameterSpec[];\n requestBody?: IOpenApiRequestBodySpec;\n responses?: IOpenApiResponseSpec;\n }): string => {\n // Use custom folder function if provided\n if (config?.folderSplit?.customFolder) {\n const customFolder = config.folderSplit.customFolder(endpointData);\n console.log(\"customFolder\", customFolder);\n if (customFolder) return customFolder;\n }\n\n // Use tag-based splitting if enabled\n if (\n config?.folderSplit?.byTags &&\n endpointData.tags &&\n endpointData.tags.length > 0\n ) {\n return endpointData.tags[0].toLowerCase().replace(/\\s+/g, \"-\");\n }\n\n // Default folder\n return \"default\";\n };\n\n const serverUrl =\n typeof config?.server === \"string\"\n ? config?.server\n : spec?.servers?.[config?.server || 0]?.url || \"\";\n const typePrefix =\n typeof config?.types?.name?.prefix === \"string\"\n ? config?.types.name.prefix\n : \"I\";\n const endpointPrefix =\n typeof config?.endpoints?.name?.prefix === \"string\"\n ? config?.endpoints.name.prefix\n : \"\";\n\n const getSharedComponentName = (\n componentName: string,\n componentType?:\n | \"parameters\"\n | \"responses\"\n | \"schemas\"\n | \"requestBodies\"\n | \"headers\"\n | \"links\"\n | \"callbacks\"\n ) => {\n const defaultName = capitalize(componentName);\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"shared\",\n {\n name: componentName,\n },\n defaultName\n );\n if (formattedName) return `${typePrefix}${formattedName}`;\n }\n return `${typePrefix}${defaultName}`;\n };\n\n const parseSchemaToType = (\n apiDoc: IOpenApiSpec,\n schema: IOpenApSchemaSpec,\n name: string,\n isRequired?: boolean,\n options?: {\n noSharedImport?: boolean;\n useComponentName?: boolean;\n },\n indentLevel: number = 0\n ) => {\n let overrideName = \"\";\n let componentName = \"\";\n let type = \"\";\n if (schema) {\n if (schema.$ref) {\n if (schema.$ref[0] === \"#\") {\n let pathToComponentParts = (schema.$ref || \"\").split(\"/\");\n pathToComponentParts.shift();\n const partsClone = [...pathToComponentParts];\n partsClone.pop();\n\n const pathToComponent = pathToComponentParts;\n const component = lodashget(\n apiDoc,\n pathToComponent,\n null\n ) as IOpenApSchemaSpec;\n\n if (component) {\n if ((component as any)?.name) {\n overrideName = (component as any).name;\n }\n componentName =\n pathToComponentParts[pathToComponentParts.length - 1];\n\n let name = getSharedComponentName(componentName);\n if (name.includes(\".\")) {\n const nameParts = name.split(\".\");\n name = nameParts\n .map((part, i) => {\n if (i === 0) {\n return part;\n }\n return `[\"${part}\"]`;\n })\n .join(\"\");\n }\n\n // Reference component via import instead of parsing\n type += `${options?.noSharedImport ? \"\" : \"Shared.\"}${name}`;\n // type += `${parseSchemaToType(apiDoc, component, \"\", isRequired)}`;\n }\n } else {\n type += \"\";\n //TODO $ref is a uri - use axios to fetch doc\n }\n } else if (schema.anyOf) {\n type += `(${schema.anyOf\n .map((v) => parseSchemaToType(apiDoc, v, \"\", isRequired, options))\n .filter((v) => !!v)\n .join(\"|\")})`;\n } else if (schema.oneOf) {\n type += `(${schema.oneOf\n .map((v) => parseSchemaToType(apiDoc, v, \"\", isRequired, options))\n .filter((v) => !!v)\n .join(\"|\")})`;\n } else if (schema.allOf) {\n type += `(${schema.allOf\n .map((v) => parseSchemaToType(apiDoc, v, \"\", isRequired, options))\n .filter((v) => !!v)\n .join(\"&\")})`;\n } else if (schema.items) {\n type += `${parseSchemaToType(\n apiDoc,\n schema.items,\n \"\",\n false,\n options\n )}[]`;\n } else if (schema.properties) {\n //parse object key one at a time\n const objKeys = Object.keys(schema.properties);\n const requiredKeys = schema.required || [];\n let typeCnt = \"\";\n objKeys.forEach((key) => {\n let doc: string = \"\";\n\n if (\n !config?.types?.doc?.disable &&\n schema.properties?.[key]?.description\n ) {\n doc =\n \" * \" +\n schema.properties?.[key].description\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(` \\n *${\" \".repeat(1)}`);\n }\n\n typeCnt +=\n (doc ? `/**\\n${doc}\\n */\\n` : \"\") +\n `${parseSchemaToType(\n apiDoc,\n schema.properties?.[key] as IOpenApSchemaSpec,\n key,\n requiredKeys.includes(key),\n options,\n indentLevel + 1\n )}`;\n });\n if (typeCnt.length > 0) {\n type += `{\\n${\" \".repeat(indentLevel)}${typeCnt}${\" \".repeat(\n indentLevel\n )}}`;\n } else {\n type += \"{[k: string]: any}\";\n }\n } else if (schema.enum && schema.enum.length > 0) {\n if (schema.enum.length > 1) type += \"(\";\n schema.enum\n .map((v) => JSON.stringify(v))\n .filter((v) => !!v)\n .forEach((v, i) => {\n type += `${i === 0 ? \"\" : \"|\"}${v}`;\n });\n\n if (schema.enum.length > 1) type += \")\";\n } else if (schema.type) {\n const handleType = (_type: typeof schema.type) => {\n let typeCnt = \"\";\n if (typeof _type === \"string\") {\n if (\n [\n \"string\",\n \"integer\",\n \"number\",\n \"array\",\n \"boolean\",\n \"null\",\n ].includes(_type)\n ) {\n if ([\"integer\", \"number\"].includes(_type)) {\n typeCnt += `number`;\n } else if (_type === \"array\") {\n //Since we would have already parsed the arrays keys above \"schema.items\" if it exists\n typeCnt += \"any[]\";\n /* if (schema.items) {\n typeCnt += `${parseSchemaToType(\n apiDoc,\n schema.items,\n \"\",\n false,\n options\n )}[]`;\n } else {\n typeCnt += \"any[]\";\n } */\n } else {\n typeCnt += _type;\n }\n } else if (_type === \"object\") {\n //Since we would have already parsed the object keys above \"schema.properties\" if it exists\n if (schema.additionalProperties) {\n typeCnt += `{[k: string]: ${\n parseSchemaToType(\n apiDoc,\n schema.additionalProperties,\n \"\",\n true,\n options\n ) || \"any\"\n }}`;\n } else {\n typeCnt += \"{[k: string]: any}\";\n }\n }\n } else if (Array.isArray(_type)) {\n const arrType = _type.map((v) => handleType(v));\n arrType.filter((v) => v !== \"\");\n if (arrType.length > 1) typeCnt += \"(\" + arrType.join(\"|\") + \")\";\n } else {\n typeCnt += \"any\";\n }\n\n return typeCnt;\n };\n type = handleType(schema.type);\n }\n } else {\n //Default type to string if no schema provided\n type = \"string\";\n }\n\n let _name = overrideName || name;\n if (options?.useComponentName && !_name) {\n _name = componentName;\n }\n\n let typeName = _name ? `\\t\"${_name}\"${isRequired ? \"\" : \"?\"}: ` : \"\";\n\n const nullable = schema?.nullable ? \" | null\" : \"\";\n return type.length > 0\n ? `${typeName}${type}${nullable}${_name ? \";\\n\" : \"\"}`\n : \"\";\n };\n\n const getSchemaExamples = (\n apiDoc: IOpenApiSpec,\n schema: IOpenApSchemaSpec\n ) => {\n let overrideName = \"\";\n let componentName = \"\";\n let type = \"\";\n if (schema) {\n if (schema.$ref) {\n if (schema.$ref[0] === \"#\") {\n let pathToComponentParts = (schema.$ref || \"\").split(\"/\");\n pathToComponentParts.shift();\n\n const pathToComponent = pathToComponentParts;\n const component = lodashget(\n apiDoc,\n pathToComponent,\n null\n ) as IOpenApSchemaSpec;\n\n if (component) {\n if ((component as any)?.name) {\n overrideName = (component as any).name;\n }\n componentName =\n pathToComponentParts[pathToComponentParts.length - 1];\n\n type += getSchemaExamples(apiDoc, component);\n }\n } else {\n type += \"\";\n //TODO $ref is a uri - use axios to fetch doc\n }\n } else if (schema.anyOf) {\n type += getSchemaExamples(apiDoc, schema.anyOf[0]);\n } else if (schema.oneOf) {\n type += getSchemaExamples(apiDoc, schema.oneOf[0]);\n } else if (schema.allOf) {\n type += `{${schema.allOf\n .map((v) => `...(${getSchemaExamples(apiDoc, v)})`)\n .join(\",\")}}`;\n } else if (schema.items) {\n type += `[${getSchemaExamples(apiDoc, schema.items)}]`;\n } else if (schema.properties) {\n //parse object key one at a time\n const objKeys = Object.keys(schema.properties);\n const arr = objKeys.map((key) => {\n return ` \"${key}\": ${getSchemaExamples(\n apiDoc,\n schema.properties?.[key] as IOpenApSchemaSpec\n )}`;\n });\n let typeCnt = arr.join(\",\\n\");\n if (typeCnt.length > 0) {\n type += `{\\n${typeCnt}\\n }`;\n } else {\n type += \"{}\";\n }\n } else if (schema.enum && schema.enum.length > 0) {\n if (schema.enum.length > 1) type += schema.enum[0];\n } else if (schema.type) {\n if (schema.example) {\n type += JSON.stringify(schema.example);\n } else {\n const handleType = (_type: typeof schema.type) => {\n let typeCnt = \"\";\n if (typeof _type === \"string\") {\n if (\n [\n \"string\",\n \"integer\",\n \"number\",\n \"array\",\n \"boolean\",\n \"null\",\n ].includes(_type)\n ) {\n if ([\"integer\", \"number\"].includes(_type)) {\n typeCnt += `123`;\n } else if (_type === \"array\") {\n //Since we would have already parsed the arrays keys above \"schema.items\" if it exists\n typeCnt += \"[]\";\n } else if (_type === \"boolean\") {\n typeCnt += `true`;\n } else if (_type === \"null\") {\n typeCnt += `null`;\n } else {\n typeCnt += `\"${_type}\"`;\n }\n } else if (_type === \"object\") {\n //Since we would have already parsed the object keys above \"schema.properties\" if it exists\n typeCnt += \"{}\";\n }\n } else if (Array.isArray(_type)) {\n const arrType = _type.map((v) => handleType(v));\n arrType.filter((v) => v !== \"\");\n if (arrType.length > 1) typeCnt += arrType.join(\"|\");\n } else {\n typeCnt += \"any\";\n }\n\n return typeCnt;\n };\n type = handleType(schema.type);\n }\n }\n } else {\n //Default type to string if no schema provided\n type = \"string\";\n }\n\n return type;\n };\n\n // auto update only on dev\n if (refetchInterval && !isNaN(refetchInterval) && refetchInterval > 0) {\n if (\n !(\n process.env.NODE_ENV &&\n [\"production\", \"prod\", \"test\", \"staging\"].includes(process.env.NODE_ENV)\n )\n ) {\n // auto sync at interval\n if (fetchTimeout[apiName]) clearTimeout(fetchTimeout[apiName]);\n\n // set next request timeout\n fetchTimeout[apiName] = setTimeout(\n () => OpenapiSync(apiUrl, apiName, config, refetchInterval),\n refetchInterval\n );\n }\n }\n\n // compare new spec with old spec, continuing only if spec it different\n const prevSpec = getState(apiName);\n if (isEqual(prevSpec, spec)) return;\n\n setState(apiName, spec);\n\n let endpointsFileContent = \"\";\n let typesFileContent = \"\";\n let sharedTypesFileContent: Record<string, string> = {};\n\n if (spec.components) {\n Object.keys(spec.components).forEach((key) => {\n if (\n [\n \"schemas\",\n \"responses\",\n \"parameters\",\n \"examples\",\n \"requestBodies\",\n \"headers\",\n \"links\",\n \"callbacks\",\n ].includes(key)\n ) {\n // Create components (shared) types\n const components: Record<string, IOpenApiMediaTypeSpec> =\n spec.components[key];\n\n const componentInterfaces: Record<string, string> = {};\n const componentSchema: Record<string, string> = {};\n\n const contentKeys = Object.keys(components);\n\n // only need 1 schema so will us the first schema provided\n contentKeys.forEach((contentKey) => {\n /* const schema = (() => {\n switch (key) {\n case \"parameters\":\n return components[contentKey].schema;\n default:\n return components[contentKey];\n }\n })() as IOpenApSchemaSpec; */\n const schema = (\n components[contentKey]?.schema\n ? components[contentKey].schema\n : components[contentKey]\n ) as IOpenApSchemaSpec;\n\n const typeCnt = `${parseSchemaToType(spec, schema, \"\", true, {\n noSharedImport: true,\n useComponentName: [\"parameters\"].includes(key),\n })}`;\n\n if (typeCnt) {\n const parts = contentKey.split(\".\");\n let currentLevel: any = componentInterfaces;\n let currentSchemaLevel: any = componentSchema;\n\n // Navigate or create the nested structure\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i < parts.length - 1) {\n // If it's not the last part, create a nested object if it doesn't exist\n if (!(part in currentLevel)) {\n currentLevel[part] = {}; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentInterfaces\n currentSchemaLevel[part] = {}; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentSchema\n }\n currentLevel = currentLevel[part]; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentInterfaces\n currentSchemaLevel = currentSchemaLevel[part]; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentSchema\n } else {\n // This is the last part, assign the original schema value\n currentLevel[part] = typeCnt; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentInterfaces\n currentSchemaLevel[part] = schema; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentSchema\n }\n }\n }\n });\n\n // Generate TypeScript interfaces for each component\n Object.keys(componentInterfaces).forEach((key) => {\n const name = getSharedComponentName(key);\n const cnt = componentInterfaces[key];\n let doc: string = \"\";\n if (\n !config?.types?.doc?.disable &&\n key in components &&\n //@ts-expect-error\n components[key]?.description\n ) {\n doc =\n \" * \" +\n //@ts-expect-error\n components[key].description\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(` \\n *${\" \".repeat(1)}`);\n }\n\n sharedTypesFileContent[key] =\n (sharedTypesFileContent[key] ?? \"\") +\n (doc ? `/**\\n${doc}\\n */\\n` : \"\") +\n \"export type \" +\n name +\n \" = \" +\n (typeof cnt === \"string\" ? cnt : JSONStringify(cnt)) +\n \";\\n\";\n });\n }\n });\n }\n\n const getBodySchemaType = (requestBody: IOpenApiRequestBodySpec) => {\n let typeCnt = \"\";\n if (requestBody.content) {\n const contentKeys = Object.keys(requestBody.content);\n // only need 1 schema so will us the first schema provided\n if (contentKeys[0] && requestBody.content[contentKeys[0]].schema) {\n typeCnt += `${parseSchemaToType(\n spec,\n requestBody.content[contentKeys[0]].schema as IOpenApSchemaSpec,\n \"\"\n )}`;\n }\n }\n return typeCnt;\n };\n\n const treatEndpointUrl = (endpointUrl: string) => {\n if (\n config?.endpoints?.value?.replaceWords &&\n Array.isArray(config?.endpoints.value.replaceWords)\n ) {\n let newEndpointUrl = endpointUrl;\n config?.endpoints?.value?.replaceWords?.forEach(\n (replaceWord: IConfigReplaceWord, indx) => {\n const regexp = new RegExp(replaceWord.replace, \"g\");\n newEndpointUrl = newEndpointUrl.replace(\n regexp,\n replaceWord.with || \"\"\n );\n }\n );\n return newEndpointUrl;\n } else {\n return endpointUrl;\n }\n };\n\n // Helper function to check if an endpoint should be excluded\n const shouldExcludeEndpoint = (\n path: string,\n method: Method,\n tags: string[] = []\n ) => {\n const excludeConfig = config?.endpoints?.exclude;\n const includeConfig = config?.endpoints?.include;\n\n // If include is specified\n if (includeConfig) {\n // Check if endpoint matches include criteria\n const matchesIncludeTags =\n includeConfig.tags && includeConfig.tags.length > 0\n ? tags.some((tag) => includeConfig.tags!.includes(tag))\n : true;\n\n const matchesIncludeEndpoints =\n includeConfig.endpoints && includeConfig.endpoints.length > 0\n ? includeConfig.endpoints.some((endpoint) => {\n const methodMatches =\n !endpoint.method ||\n endpoint.method.toLowerCase() === method.toLowerCase();\n\n // Use exact path match if path is provided\n if (endpoint.path) {\n return path === endpoint.path && methodMatches;\n }\n // Use regex match if regex is provided\n else if (endpoint.regex) {\n const pathRegex = new RegExp(endpoint.regex);\n return pathRegex.test(path) && methodMatches;\n }\n\n return false;\n })\n : true;\n\n // If include is specified but endpoint doesn't match, exclude it\n if (!matchesIncludeTags || !matchesIncludeEndpoints) {\n return true;\n }\n }\n\n // Check exclude criteria, it takes precedence over include\n if (excludeConfig) {\n // Check tags exclusion\n if (excludeConfig.tags && excludeConfig.tags.length > 0) {\n const hasExcludedTag = tags.some((tag) =>\n excludeConfig.tags!.includes(tag)\n );\n if (hasExcludedTag) return true;\n }\n\n // Check endpoint exclusion\n if (excludeConfig.endpoints && excludeConfig.endpoints.length > 0) {\n const matchesExcludedEndpoint = excludeConfig.endpoints.some(\n (endpoint) => {\n const methodMatches =\n !endpoint.method ||\n endpoint.method.toLowerCase() === method.toLowerCase();\n\n // Use exact path match if path is provided\n if (endpoint.path) {\n return path === endpoint.path && methodMatches;\n }\n\n // Use regex match if regex is provided\n else if (endpoint.regex) {\n const pathRegex = new RegExp(endpoint.regex);\n return pathRegex.test(path) && methodMatches;\n }\n\n return false;\n }\n );\n if (matchesExcludedEndpoint) return true;\n }\n }\n\n return false;\n };\n\n Object.keys(spec.paths || {}).forEach((endpointPath) => {\n const endpointSpec = spec.paths[endpointPath];\n\n const endpointMethods = Object.keys(endpointSpec);\n endpointMethods.forEach((_method) => {\n const method = _method as Method;\n const endpoint = getEndpointDetails(endpointPath, method);\n\n // Get endpoint tags for filtering\n const endpointTags = endpointSpec[method]?.tags || [];\n\n // Check if this endpoint should be excluded\n if (shouldExcludeEndpoint(endpointPath, method, endpointTags)) {\n return; // Skip this endpoint\n }\n\n // Determine folder name for this endpoint\n const enSpec = endpointSpec[method];\n const folderName = getFolderName({\n method,\n path: endpointPath,\n summary: enSpec?.summary,\n operationId: enSpec?.operationId,\n tags: endpointTags,\n parameters: enSpec?.parameters,\n requestBody: enSpec?.requestBody,\n responses: enSpec?.responses,\n });\n\n // Initialize folder group if it doesn't exist\n if (!folderGroups[folderName]) {\n folderGroups[folderName] = {\n endpoints: \"\",\n types: \"\",\n };\n }\n\n const endpointUrlTxt =\n (config?.endpoints?.value?.includeServer ? serverUrl : \"\") +\n endpoint.pathParts\n .map((part) => {\n // check if part is a variable\n if (part[0] === \"{\" && part[part.length - 1] === \"}\") {\n const s = part.replace(/{/, \"\").replace(/}/, \"\");\n part = `\\${${s}}`;\n }\n\n //api/<userId>\n else if (part[0] === \"<\" && part[part.length - 1] === \">\") {\n const s = part.replace(/</, \"\").replace(/>/, \"\");\n part = `\\${${s}}`;\n }\n\n //api/:userId\n else if (part[0] === \":\") {\n const s = part.replace(/:/, \"\");\n part = `\\${${s}}`;\n }\n return part;\n })\n .join(\"/\");\n\n let endpointUrl = `\"${endpointUrlTxt}\"`;\n if (endpoint.variables.length > 0) {\n const params = endpoint.variables.map((v) => `${v}:string`).join(\",\");\n endpointUrl = `(${params})=> \\`${endpointUrlTxt}\\``;\n }\n\n //treat endpoint url\n endpointUrl = treatEndpointUrl(endpointUrl);\n\n const eSpec = endpointSpec[method];\n\n let queryTypeCnt = \"\";\n\n if (eSpec?.parameters) {\n // create query parameters types\n const parameters: IOpenApiParameterSpec[] = eSpec?.parameters;\n parameters.forEach((param, i) => {\n if (param.$ref || (param.in === \"query\" && param.name)) {\n queryTypeCnt += `${parseSchemaToType(\n spec,\n param.$ref ? (param as any) : (param.schema as any),\n param.name || \"\",\n param.required\n )}`;\n }\n });\n\n if (queryTypeCnt) {\n queryTypeCnt = `{\\n${queryTypeCnt}}`;\n let name = `${endpoint.name}Query`;\n\n // Use operationId if configured and available\n if (config?.types?.name?.useOperationId && eSpec?.operationId) {\n name = `${eSpec.operationId}Query`;\n }\n name = capitalize(`${typePrefix}${name}`);\n\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"endpoint\",\n {\n code: \"\",\n type: \"query\",\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = `${typePrefix}${formattedName}`;\n }\n const typeContent = `export type ${name} = ${queryTypeCnt};\\n`;\n if (config?.folderSplit) {\n folderGroups[folderName].types += typeContent;\n } else {\n typesFileContent += typeContent;\n }\n }\n }\n\n const requestBody: IOpenApiRequestBodySpec = eSpec?.requestBody;\n let dtoTypeCnt = \"\";\n if (requestBody) {\n //create requestBody types\n dtoTypeCnt = getBodySchemaType(requestBody);\n\n if (dtoTypeCnt) {\n let name = `${endpoint.name}DTO`;\n\n // Use operationId if configured and available\n if (config?.types?.name?.useOperationId && eSpec?.operationId) {\n name = `${eSpec.operationId}DTO`;\n }\n\n name = capitalize(`${typePrefix}${name}`);\n\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"endpoint\",\n {\n code: \"\",\n type: \"dto\",\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = `${typePrefix}${formattedName}`;\n }\n const typeContent = `export type ${name} = ${dtoTypeCnt};\\n`;\n if (config?.folderSplit) {\n folderGroups[folderName].types += typeContent;\n } else {\n typesFileContent += typeContent;\n }\n }\n }\n\n const responseTypeObject: Record<string, string> = {};\n\n let responseTypeCnt = \"\";\n if (eSpec?.responses) {\n // create request response types\n const responses: IOpenApiResponseSpec = eSpec?.responses;\n const resCodes = Object.keys(responses);\n resCodes.forEach((code) => {\n responseTypeCnt = getBodySchemaType(responses[code]);\n responseTypeObject[code] = responseTypeCnt;\n if (responseTypeCnt) {\n let name = `${endpoint.name}${code}Response`;\n\n // Use operationId if configured and available\n if (config?.types?.name?.useOperationId && eSpec?.operationId) {\n name = `${eSpec.operationId}${code}Response`;\n }\n\n name = capitalize(`${typePrefix}${name}`);\n\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"endpoint\",\n {\n code,\n type: \"response\",\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = `${typePrefix}${formattedName}`;\n }\n const typeContent = `export type ${name} = ${responseTypeCnt};\\n`;\n if (config?.folderSplit) {\n folderGroups[folderName].types += typeContent;\n } else {\n typesFileContent += typeContent;\n }\n }\n });\n }\n\n // Function to format security requirements\n const formatSecuritySpec = (\n security: Array<Record<string, string[]>>\n ) => {\n if (!security || !security.length) return \"\";\n\n return security\n .map((securityRequirement) => {\n const requirements = Object.entries(securityRequirement)\n .map(([scheme, scopes]) => {\n let sch = scheme;\n let scopeText = \"\";\n if (Array.isArray(scopes) && scopes.length) {\n scopeText = `\\n - Scopes: [\\`${scopes.join(\"`, `\")}\\`]`;\n sch = `**${sch}**`;\n }\n\n return `\\n - ${sch}${scopeText}`;\n })\n .join(\"\");\n return requirements;\n })\n .join(\"\\n\");\n };\n\n // Get formatted security specification\n const securitySpec = eSpec?.security\n ? formatSecuritySpec(eSpec.security)\n : \"\";\n\n let doc = \"\";\n if (!config?.endpoints?.doc?.disable) {\n let curl = \"\";\n if (config?.endpoints?.doc?.showCurl) {\n // console.log(\"cirl data\", {\n // body: eSpec?.requestBody,\n // bodyContent:\n // eSpec?.requestBody?.content[\"application/json\"]?.schema\n // ?.properties,\n // security: eSpec?.security,\n // });\n const headers: Record<string, string | string[]> = {};\n let body = \"\";\n let extras = \"\";\n\n if (eSpec.requestBody?.content) {\n const contentTypes = Object.keys(eSpec.requestBody.content);\n contentTypes.forEach((contentType) => {\n // console.log(\"requestBody content\", {\n // contentType,\n // schema: eSpec.requestBody.content[contentType].schema,\n // });\n const schema = eSpec.requestBody.content[contentType].schema;\n if (schema) {\n if (Array.isArray(headers[\"Content-type\"])) {\n headers[\"Content-type\"].push(contentType);\n } else {\n headers[\"Content-type\"] = [contentType];\n }\n const schemaType = getSchemaExamples(\n spec,\n schema as IOpenApSchemaSpec\n );\n if (schemaType) body = schemaType;\n }\n });\n }\n\n if (eSpec?.security) {\n eSpec.security.forEach((securityItem: Record<string, string[]>) => {\n Object.keys(securityItem).forEach((security) => {\n const securitySchema: IOpenApiSecuritySchemes[string] =\n spec.components?.securitySchemes?.[security];\n\n if (securitySchema) {\n // headers[\"Authorization\"] = securitySchema;\n if (securitySchema.type === \"mutualTLS\") {\n extras += `\\n--cert client-certificate.crt \\\n--key client-private-key.key \\\n--cacert ca-certificate.crt`;\n } else if (securitySchema.type === \"apiKey\") {\n headers[\n securitySchema?.name || \"X-API-KEY\"\n ] = `{API_KEY_VALUE}`;\n } else {\n headers[\"Authorization\"] = `${\n securitySchema?.scheme === \"basic\" ? \"Basic\" : \"Bearer\"\n } {${\n securitySchema?.scheme === \"basic\" ? \"VALUE\" : \"TOKEN\"\n }}`;\n }\n }\n });\n });\n }\n\n const curlHeaders: Record<string, string> = {};\n Object.keys(headers).forEach((header) => {\n if (Array.isArray(headers[header])) {\n curlHeaders[header] = headers[header].join(\"; \");\n } else {\n curlHeaders[header] = headers[header];\n }\n });\n\n // console.log(\"curlHeaders\", { headers, curlHeaders, body });\n\n curl = `\\n\\`\\`\\`bash \n${CurlGenerator({\n url: serverUrl + endpointPath,\n method: method.toUpperCase() as any,\n headers: curlHeaders,\n body,\n})}${extras}\n\\`\\`\\``;\n }\n\n doc = `/**${eSpec?.description ? `\\n* ${eSpec?.description} ` : \"\"}\n * **Method**: \\`${method.toUpperCase()}\\` \n * **Summary**: ${eSpec?.summary || \"\"} \n * **Tags**: [${eSpec?.tags?.join(\", \") || \"\"}] \n * **OperationId**: ${eSpec?.operationId || \"\"} ${\n queryTypeCnt\n ? `\\n * **Query**: ${renderTypeRefMD(queryTypeCnt)} `\n : \"\"\n }${dtoTypeCnt ? `\\n * **DTO**: ${renderTypeRefMD(dtoTypeCnt)} ` : \"\"}${\n responseTypeCnt\n ? `\\n * **Response**: ${Object.entries(responseTypeObject)\n .map(\n ([code, type]) =>\n `\\n - **${code}**: ${renderTypeRefMD(type, 2)} `\n )\n .join(\"\")}`\n : \"\"\n }${securitySpec ? `\\n * **Security**: ${securitySpec}\\n` : \"\"}${curl}\n */\\n`;\n }\n\n let name =\n config?.endpoints?.name?.useOperationId &&\n eSpec?.operationId?.length > 0\n ? eSpec.operationId\n : `${endpoint.name}`;\n\n if (config?.endpoints?.name?.format) {\n const formattedName = config?.endpoints.name.format(\n {\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = formattedName;\n }\n\n const content = {\n method: `\"${method}\"`,\n operationId: `\"${eSpec?.operationId}\"`,\n url: endpointUrl,\n tags: eSpec?.tags || [],\n };\n // Add the endpoint url to the specific folder group\n const endpointContent = `${doc}export const ${endpointPrefix}${name} = ${\n config?.endpoints?.value?.type === \"object\"\n ? JSONStringify(content)\n : endpointUrl\n }; \n`;\n\n // Add to folder group if folder splitting is enabled, otherwise add to global content\n if (config?.folderSplit) {\n folderGroups[folderName].endpoints += endpointContent;\n } else {\n endpointsFileContent += endpointContent;\n }\n });\n });\n\n // Write files based on folder splitting configuration\n if (config?.folderSplit) {\n // Write files for each folder group\n for (const [folderName, group] of Object.entries(folderGroups)) {\n if (group.endpoints || group.types) {\n const folderPathForGroup = path.join(folderPath, folderName);\n\n // Write endpoints file\n if (group.endpoints) {\n const endpointsFilePath = path.join(\n rootUsingCwd,\n folderPathForGroup,\n \"endpoints.ts\"\n );\n await fs.promises.mkdir(path.dirname(endpointsFilePath), {\n recursive: true,\n });\n await fs.promises.writeFile(endpointsFilePath, group.endpoints);\n }\n\n // Write types file\n if (group.types) {\n const typesFilePath = path.join(\n rootUsingCwd,\n folderPathForGroup,\n \"types.ts\"\n );\n await fs.promises.mkdir(path.dirname(typesFilePath), {\n recursive: true,\n });\n\n const typesContent =\n Object.values(sharedTypesFileContent).length > 0\n ? `import * as Shared from \"../shared\";\\n\\n${group.types}`\n : group.types;\n\n await fs.promises.writeFile(typesFilePath, typesContent);\n }\n }\n }\n }\n\n if (endpointsFileContent.length > 0) {\n // Original behavior - write to single files\n const endpointsFilePath = path.join(\n rootUsingCwd,\n folderPath,\n \"endpoints.ts\"\n );\n await fs.promises.mkdir(path.dirname(endpointsFilePath), {\n recursive: true,\n });\n await fs.promises.writeFile(endpointsFilePath, endpointsFileContent);\n }\n if (Object.values(sharedTypesFileContent).length > 0) {\n const sharedTypesFilePath = path.join(\n rootUsingCwd,\n folderPath,\n !config?.folderSplit ? \"types\" : \"\",\n \"shared.ts\"\n );\n await fs.promises.mkdir(path.dirname(sharedTypesFilePath), {\n recursive: true,\n });\n await fs.promises.writeFile(\n sharedTypesFilePath,\n Object.values(sharedTypesFileContent).join(\"\\n\")\n );\n }\n\n if (typesFileContent.length > 0) {\n const typesFilePath = path.join(\n rootUsingCwd,\n folderPath,\n \"types\",\n \"index.ts\"\n );\n await fs.promises.mkdir(path.dirname(typesFilePath), { recursive: true });\n await fs.promises.writeFile(\n typesFilePath,\n `${\n Object.values(sharedTypesFileContent).length > 0\n ? `import * as Shared from \"./shared\";\\n\\n`\n : \"\"\n }${typesFileContent}`\n );\n }\n};\nexport default OpenapiSync;\n","export const variableName = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nexport const variableNameChar = /[A-Za-z0-9_$]/;\n","import { variableNameChar } from \"./regex\";\nimport * as yaml from \"js-yaml\";\n\nexport const isJson = (value: any) => {\n return [\"object\"].includes(typeof value) && !(value instanceof Blob);\n};\n\nexport const isYamlString = (fileContent: string) => {\n try {\n yaml.load(fileContent);\n return true;\n } catch (en) {\n const e = en as any;\n if (e instanceof yaml.YAMLException) {\n return false;\n } else {\n throw e;\n }\n }\n};\n\nexport const yamlStringToJson = (fileContent: string) => {\n if (isYamlString(fileContent)) {\n const content = yaml.load(fileContent);\n\n const jsonString = JSON.stringify(content, null, 2);\n const json = JSON.parse(jsonString);\n return json;\n }\n};\n\nexport const capitalize = (text: string) => {\n const capitalizedWord =\n text.substring(0, 1).toUpperCase() + text.substring(1);\n return capitalizedWord;\n};\n\nexport const getEndpointDetails = (path: string, method: string) => {\n const pathParts = path.split(\"/\");\n let name = `${capitalize(method)}`;\n const variables: string[] = [];\n pathParts.forEach((part) => {\n // check if part is a variable\n //api/{userId}\n if (part[0] === \"{\" && part[part.length - 1] === \"}\") {\n const s = part.replace(/{/, \"\").replace(/}/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n //api/<userId>\n else if (part[0] === \"<\" && part[part.length - 1] === \">\") {\n const s = part.replace(/</, \"\").replace(/>/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n //api/:userId\n else if (part[0] === \":\") {\n const s = part.replace(/:/, \"\");\n variables.push(s);\n part = `$${s}`;\n }\n\n // parse to variable name\n let partVal = \"\";\n part.split(\"\").forEach((char) => {\n let c = char;\n if (!variableNameChar.test(char)) c = \"/\";\n partVal += c;\n });\n\n partVal.split(\"/\").forEach((val) => {\n name += capitalize(val);\n });\n });\n\n return { name, variables, pathParts };\n};\n\nexport const JSONStringify = (obj: Record<string, any>, indent = 1) => {\n let result = \"{\";\n const keys = Object.keys(obj);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = obj[key];\n\n result += \"\\n\" + \" \".repeat(indent) + key + \": \";\n\n if (Array.isArray(value)) {\n result += \"[\";\n for (let j = 0; j < value.length; j++) {\n const item = value[j];\n if (typeof item === \"object\" && item !== null) {\n result += JSONStringify(item, indent + 1);\n } else {\n result += typeof item === \"string\" ? `\"${item}\"` : item;\n }\n if (j < value.length - 1) {\n result += \", \";\n }\n }\n result += \"]\";\n } else if (typeof value === \"object\" && value !== null) {\n result += \"\" + JSONStringify(value, indent + 1);\n } else {\n result += value\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(`\\n${\" \".repeat(indent)}`);\n }\n\n if (i < keys.length - 1) {\n result += \", \";\n }\n }\n\n result += `\\n${\" \".repeat(indent - 1)}}`;\n return result;\n};\n\nexport const renderTypeRefMD = (typeRef: string, indent = 1) => {\n return `\\n\\`\\`\\`typescript\\n${\" \".repeat(indent)} ${typeRef\n .split(\"\\n\")\n .filter((line) => line.trim() !== \"\")\n .join(`\\n${\" \".repeat(indent)} `)}\\n\\`\\`\\``;\n};\n\nexport function getNestedValue<T>(obj: object, path: string): T | undefined {\n // Split the path string into an array of keys\n const keys = path.split(\".\");\n\n // Use the reduce method to navigate the object\n return keys.reduce((currentObj: any, key: string) => {\n // If the current object is not null or undefined,\n // return the value of the next key. Otherwise, return undefined.\n return currentObj && currentObj[key] !== undefined\n ? currentObj[key]\n : undefined;\n }, obj) as T | undefined;\n}\n","import path from \"path\";\nimport { IOpenApiSpec } from \"../types\";\nimport fs from \"fs\";\n\nconst dbPath = path.join(__dirname, \"../\", \"../db.json\");\nif (!fs.existsSync(dbPath)) {\n fs.writeFileSync(dbPath, \"{}\");\n}\nlet db: Record<string, IOpenApiSpec> = {};\ntry {\n db = require(dbPath);\n} catch (error) {\n db = {};\n}\nlet state: Record<string, IOpenApiSpec> = db || {};\n\nconst updateDB = (data: typeof state) => {\n fs.writeFileSync(dbPath, JSON.stringify(data));\n};\nexport const setState = (key: string, value: IOpenApiSpec) => {\n state[key] = value;\n updateDB(state);\n};\n\nexport const getState = (key: string): IOpenApiSpec | undefined => {\n return state[key];\n};\n\nexport const resetState = () => {\n state = {};\n updateDB(state);\n};\n","import OpenapiSync from \"./Openapi-sync\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { resetState } from \"./Openapi-sync/state\";\nimport { IConfig } from \"./types\";\n\n// Re-export modules for user consumption\nexport * from \"./types\";\nexport * from \"./helpers\";\nexport * from \"./regex\";\n\nconst rootUsingCwd = process.cwd();\n\nexport const Init = async (options?: { refetchInterval?: number }) => {\n // Load config file\n let configJS;\n // Register TypeScript loader before requiring the file\n try {\n require(\"esbuild-register\");\n } catch (registerError) {\n throw registerError;\n }\n\n const jsConfigPath = path.join(rootUsingCwd, \"openapi.sync.js\");\n const tsConfigPath = path.join(rootUsingCwd, \"openapi.sync.ts\");\n const jsonConfigPath = path.join(rootUsingCwd, \"openapi.sync.json\");\n const configPaths = [jsConfigPath, tsConfigPath, jsonConfigPath];\n try {\n for (const configPath of configPaths) {\n if (fs.existsSync(configPath)) {\n configJS = require(configPath);\n\n if (Object.keys(configJS).length === 1 && configJS.default) {\n configJS = configJS.default;\n }\n }\n }\n } catch (e) {\n console.log(e);\n }\n\n if (typeof configJS === \"function\") {\n configJS = configJS();\n }\n const config: IConfig = configJS;\n\n if (!config) {\n throw new Error(\"No config found\");\n }\n const apiNames = Object.keys(config.api);\n const refetchInterval =\n options &&\n \"refetchInterval\" in options &&\n !isNaN(options?.refetchInterval as number)\n ? options.refetchInterval\n : config.refetchInterval;\n resetState();\n for (let i = 0; i < apiNames.length; i += 1) {\n const apiName = apiNames[i];\n const apiUrl = config.api[apiName];\n\n OpenapiSync(apiUrl, apiName, config, refetchInterval);\n }\n};\n"]}
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../Openapi-sync/state.ts","../Openapi-sync/index.ts","../index.ts"],"names":["dbPath","path","fs","db","__require","error","state","updateDB","data","setState","key","value","getState","resetState","rootUsingCwd","fetchTimeout","apiClient","axios","axiosRetry","retryCount","OpenapiSync","apiUrl","apiName","config","refetchInterval","__async","_a","_b","_c","_d","_e","_f","specResponse","source","isJson","yamlStringToJson","spec","SwaggerParser","parseError","parseErrorMessage","folderPath","folderGroups","getFolderName","endpointData","customFolder","serverUrl","typePrefix","endpointPrefix","getSharedComponentName","componentName","componentType","defaultName","capitalize","formattedName","parseSchemaToType","apiDoc","schema","name","isRequired","options","indentLevel","overrideName","type","pathToComponentParts","component","lodashget","part","i","v","objKeys","requiredKeys","typeCnt","doc","line","handleType","_type","arrType","_name","typeName","nullable","getSchemaExamples","prevSpec","isEqual","endpointsFileContent","typesFileContent","sharedTypesFileContent","components","componentInterfaces","componentSchema","contentKey","parts","currentLevel","currentSchemaLevel","cnt","JSONStringify","getBodySchemaType","requestBody","contentKeys","treatEndpointUrl","endpointUrl","newEndpointUrl","replaceWord","indx","regexp","shouldExcludeEndpoint","method","tags","excludeConfig","includeConfig","matchesIncludeTags","tag","matchesIncludeEndpoints","endpoint","methodMatches","endpointPath","endpointSpec","_method","_g","_h","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","getEndpointDetails","endpointTags","enSpec","folderName","endpointUrlTxt","eSpec","queryTypeCnt","param","typeContent","dtoTypeCnt","responseTypeObject","responseTypeCnt","responses","code","formatSecuritySpec","security","securityRequirement","scheme","scopes","sch","scopeText","securitySpec","curl","headers","body","extras","contentType","schemaType","securityItem","securitySchema","curlHeaders","header","CurlGenerator","renderTypeRefMD","content","endpointContent","group","folderPathForGroup","endpointsFilePath","typesFilePath","typesContent","sharedTypesFilePath","Openapi_sync_default","Init","configJS","X","registerError","jsConfigPath","tsConfigPath","jsonConfigPath","configPaths","configPath","e","apiNames"],"mappings":"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","file":"index.mjs","sourcesContent":["import path from \"path\";\nimport { IOpenApiSpec } from \"../types\";\nimport fs from \"fs\";\n\nconst dbPath = path.join(__dirname, \"../\", \"../db.json\");\nif (!fs.existsSync(dbPath)) {\n fs.writeFileSync(dbPath, \"{}\");\n}\nlet db: Record<string, IOpenApiSpec> = {};\ntry {\n db = require(dbPath);\n} catch (error) {\n db = {};\n}\nlet state: Record<string, IOpenApiSpec> = db || {};\n\nconst updateDB = (data: typeof state) => {\n fs.writeFileSync(dbPath, JSON.stringify(data));\n};\nexport const setState = (key: string, value: IOpenApiSpec) => {\n state[key] = value;\n updateDB(state);\n};\n\nexport const getState = (key: string): IOpenApiSpec | undefined => {\n return state[key];\n};\n\nexport const resetState = () => {\n state = {};\n updateDB(state);\n};\n","import fs from \"fs\";\nimport path from \"path\";\nimport {\n capitalize,\n getEndpointDetails,\n isJson,\n JSONStringify,\n renderTypeRefMD,\n yamlStringToJson,\n} from \"../helpers\";\nimport {\n IConfig,\n IConfigReplaceWord,\n IOpenApiMediaTypeSpec,\n IOpenApiParameterSpec,\n IOpenApiRequestBodySpec,\n IOpenApiResponseSpec,\n IOpenApiSecuritySchemes,\n IOpenApiSpec,\n IOpenApSchemaSpec,\n} from \"../types\";\nimport isEqual from \"lodash.isequal\";\nimport lodashget from \"lodash.get\";\nimport axios, { Method } from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport SwaggerParser from \"@apidevtools/swagger-parser\";\nimport { getState, setState } from \"./state\";\nimport { CurlGenerator } from \"curl-generator\";\n\nconst rootUsingCwd = process.cwd();\nlet fetchTimeout: Record<string, null | NodeJS.Timeout> = {};\n\n// Create an Axios instance\nconst apiClient = axios.create({\n timeout: 60000, // Timeout after 1min\n});\n\n// Configure axios-retry\naxiosRetry(apiClient, {\n retries: 20, // Number of retry attempts\n retryCondition: (error) => {\n // Retry on network error\n return (\n error.code === \"ECONNABORTED\" || error.message.includes(\"Network Error\")\n );\n },\n retryDelay: (retryCount) => {\n return retryCount * 1000; // Exponential back-off: 1s, 2s, 3s, etc.\n },\n});\n\nconst OpenapiSync = async (\n apiUrl: string,\n apiName: string,\n config: IConfig,\n refetchInterval?: number\n) => {\n const specResponse = await apiClient.get(apiUrl);\n\n const source = isJson(specResponse.data)\n ? specResponse.data\n : yamlStringToJson(specResponse.data);\n\n // Parse the OpenAPI spec using swagger-parser with lenient parsing\n let spec: IOpenApiSpec;\n try {\n // Use lenient parsing by default (similar to redocly behavior)\n spec = (await SwaggerParser.parse(source)) as IOpenApiSpec;\n } catch (parseError) {\n const parseErrorMessage =\n parseError instanceof Error ? parseError.message : String(parseError);\n throw new Error(\n `Failed to parse OpenAPI spec for ${apiName}: ${parseErrorMessage}`\n );\n }\n\n const folderPath = path.join(config?.folder || \"\", apiName);\n\n // Initialize folder splitting data structures\n const folderGroups: Record<\n string,\n {\n endpoints: string;\n types: string;\n }\n > = {};\n\n // Helper function to determine folder name for an endpoint\n const getFolderName = (endpointData: {\n method: Method;\n path: string;\n summary?: string;\n operationId?: string;\n tags?: string[];\n parameters?: IOpenApiParameterSpec[];\n requestBody?: IOpenApiRequestBodySpec;\n responses?: IOpenApiResponseSpec;\n }): string => {\n // Use custom folder function if provided\n if (config?.folderSplit?.customFolder) {\n const customFolder = config.folderSplit.customFolder(endpointData);\n console.log(\"customFolder\", customFolder);\n if (customFolder) return customFolder;\n }\n\n // Use tag-based splitting if enabled\n if (\n config?.folderSplit?.byTags &&\n endpointData.tags &&\n endpointData.tags.length > 0\n ) {\n return endpointData.tags[0].toLowerCase().replace(/\\s+/g, \"-\");\n }\n\n // Default folder\n return \"default\";\n };\n\n const serverUrl =\n typeof config?.server === \"string\"\n ? config?.server\n : spec?.servers?.[config?.server || 0]?.url || \"\";\n const typePrefix =\n typeof config?.types?.name?.prefix === \"string\"\n ? config?.types.name.prefix\n : \"I\";\n const endpointPrefix =\n typeof config?.endpoints?.name?.prefix === \"string\"\n ? config?.endpoints.name.prefix\n : \"\";\n\n const getSharedComponentName = (\n componentName: string,\n componentType?:\n | \"parameters\"\n | \"responses\"\n | \"schemas\"\n | \"requestBodies\"\n | \"headers\"\n | \"links\"\n | \"callbacks\"\n ) => {\n const defaultName = capitalize(componentName);\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"shared\",\n {\n name: componentName,\n },\n defaultName\n );\n if (formattedName) return `${typePrefix}${formattedName}`;\n }\n return `${typePrefix}${defaultName}`;\n };\n\n const parseSchemaToType = (\n apiDoc: IOpenApiSpec,\n schema: IOpenApSchemaSpec,\n name: string,\n isRequired?: boolean,\n options?: {\n noSharedImport?: boolean;\n useComponentName?: boolean;\n },\n indentLevel: number = 0\n ) => {\n let overrideName = \"\";\n let componentName = \"\";\n let type = \"\";\n if (schema) {\n if (schema.$ref) {\n if (schema.$ref[0] === \"#\") {\n let pathToComponentParts = (schema.$ref || \"\").split(\"/\");\n pathToComponentParts.shift();\n const partsClone = [...pathToComponentParts];\n partsClone.pop();\n\n const pathToComponent = pathToComponentParts;\n const component = lodashget(\n apiDoc,\n pathToComponent,\n null\n ) as IOpenApSchemaSpec;\n\n if (component) {\n if ((component as any)?.name) {\n overrideName = (component as any).name;\n }\n componentName =\n pathToComponentParts[pathToComponentParts.length - 1];\n\n let name = getSharedComponentName(componentName);\n if (name.includes(\".\")) {\n const nameParts = name.split(\".\");\n name = nameParts\n .map((part, i) => {\n if (i === 0) {\n return part;\n }\n return `[\"${part}\"]`;\n })\n .join(\"\");\n }\n\n // Reference component via import instead of parsing\n type += `${options?.noSharedImport ? \"\" : \"Shared.\"}${name}`;\n // type += `${parseSchemaToType(apiDoc, component, \"\", isRequired)}`;\n }\n } else {\n type += \"\";\n //TODO $ref is a uri - use axios to fetch doc\n }\n } else if (schema.anyOf) {\n type += `(${schema.anyOf\n .map((v) => parseSchemaToType(apiDoc, v, \"\", isRequired, options))\n .filter((v) => !!v)\n .join(\"|\")})`;\n } else if (schema.oneOf) {\n type += `(${schema.oneOf\n .map((v) => parseSchemaToType(apiDoc, v, \"\", isRequired, options))\n .filter((v) => !!v)\n .join(\"|\")})`;\n } else if (schema.allOf) {\n type += `(${schema.allOf\n .map((v) => parseSchemaToType(apiDoc, v, \"\", isRequired, options))\n .filter((v) => !!v)\n .join(\"&\")})`;\n } else if (schema.items) {\n type += `${parseSchemaToType(\n apiDoc,\n schema.items,\n \"\",\n false,\n options\n )}[]`;\n } else if (schema.properties) {\n //parse object key one at a time\n const objKeys = Object.keys(schema.properties);\n const requiredKeys = schema.required || [];\n let typeCnt = \"\";\n objKeys.forEach((key) => {\n let doc: string = \"\";\n\n if (\n !config?.types?.doc?.disable &&\n schema.properties?.[key]?.description\n ) {\n doc =\n \" * \" +\n schema.properties?.[key].description\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(` \\n *${\" \".repeat(1)}`);\n }\n\n typeCnt +=\n (doc ? `/**\\n${doc}\\n */\\n` : \"\") +\n `${parseSchemaToType(\n apiDoc,\n schema.properties?.[key] as IOpenApSchemaSpec,\n key,\n requiredKeys.includes(key),\n options,\n indentLevel + 1\n )}`;\n });\n if (typeCnt.length > 0) {\n type += `{\\n${\" \".repeat(indentLevel)}${typeCnt}${\" \".repeat(\n indentLevel\n )}}`;\n } else {\n type += \"{[k: string]: any}\";\n }\n } else if (schema.enum && schema.enum.length > 0) {\n if (schema.enum.length > 1) type += \"(\";\n schema.enum\n .map((v) => JSON.stringify(v))\n .filter((v) => !!v)\n .forEach((v, i) => {\n type += `${i === 0 ? \"\" : \"|\"}${v}`;\n });\n\n if (schema.enum.length > 1) type += \")\";\n } else if (schema.type) {\n const handleType = (_type: typeof schema.type) => {\n let typeCnt = \"\";\n if (typeof _type === \"string\") {\n if (\n [\n \"string\",\n \"integer\",\n \"number\",\n \"array\",\n \"boolean\",\n \"null\",\n ].includes(_type)\n ) {\n if ([\"integer\", \"number\"].includes(_type)) {\n typeCnt += `number`;\n } else if (_type === \"array\") {\n //Since we would have already parsed the arrays keys above \"schema.items\" if it exists\n typeCnt += \"any[]\";\n /* if (schema.items) {\n typeCnt += `${parseSchemaToType(\n apiDoc,\n schema.items,\n \"\",\n false,\n options\n )}[]`;\n } else {\n typeCnt += \"any[]\";\n } */\n } else {\n typeCnt += _type;\n }\n } else if (_type === \"object\") {\n //Since we would have already parsed the object keys above \"schema.properties\" if it exists\n if (schema.additionalProperties) {\n typeCnt += `{[k: string]: ${\n parseSchemaToType(\n apiDoc,\n schema.additionalProperties,\n \"\",\n true,\n options\n ) || \"any\"\n }}`;\n } else {\n typeCnt += \"{[k: string]: any}\";\n }\n }\n } else if (Array.isArray(_type)) {\n const arrType = _type.map((v) => handleType(v));\n arrType.filter((v) => v !== \"\");\n if (arrType.length > 1) typeCnt += \"(\" + arrType.join(\"|\") + \")\";\n } else {\n typeCnt += \"any\";\n }\n\n return typeCnt;\n };\n type = handleType(schema.type);\n }\n } else {\n //Default type to string if no schema provided\n type = \"string\";\n }\n\n let _name = overrideName || name;\n if (options?.useComponentName && !_name) {\n _name = componentName;\n }\n\n let typeName = _name ? `\\t\"${_name}\"${isRequired ? \"\" : \"?\"}: ` : \"\";\n\n const nullable = schema?.nullable ? \" | null\" : \"\";\n return type.length > 0\n ? `${typeName}${type}${nullable}${_name ? \";\\n\" : \"\"}`\n : \"\";\n };\n\n const getSchemaExamples = (\n apiDoc: IOpenApiSpec,\n schema: IOpenApSchemaSpec\n ) => {\n let overrideName = \"\";\n let componentName = \"\";\n let type = \"\";\n if (schema) {\n if (schema.$ref) {\n if (schema.$ref[0] === \"#\") {\n let pathToComponentParts = (schema.$ref || \"\").split(\"/\");\n pathToComponentParts.shift();\n\n const pathToComponent = pathToComponentParts;\n const component = lodashget(\n apiDoc,\n pathToComponent,\n null\n ) as IOpenApSchemaSpec;\n\n if (component) {\n if ((component as any)?.name) {\n overrideName = (component as any).name;\n }\n componentName =\n pathToComponentParts[pathToComponentParts.length - 1];\n\n type += getSchemaExamples(apiDoc, component);\n }\n } else {\n type += \"\";\n //TODO $ref is a uri - use axios to fetch doc\n }\n } else if (schema.anyOf) {\n type += getSchemaExamples(apiDoc, schema.anyOf[0]);\n } else if (schema.oneOf) {\n type += getSchemaExamples(apiDoc, schema.oneOf[0]);\n } else if (schema.allOf) {\n type += `{${schema.allOf\n .map((v) => `...(${getSchemaExamples(apiDoc, v)})`)\n .join(\",\")}}`;\n } else if (schema.items) {\n type += `[${getSchemaExamples(apiDoc, schema.items)}]`;\n } else if (schema.properties) {\n //parse object key one at a time\n const objKeys = Object.keys(schema.properties);\n const arr = objKeys.map((key) => {\n return ` \"${key}\": ${getSchemaExamples(\n apiDoc,\n schema.properties?.[key] as IOpenApSchemaSpec\n )}`;\n });\n let typeCnt = arr.join(\",\\n\");\n if (typeCnt.length > 0) {\n type += `{\\n${typeCnt}\\n }`;\n } else {\n type += \"{}\";\n }\n } else if (schema.enum && schema.enum.length > 0) {\n if (schema.enum.length > 1) type += schema.enum[0];\n } else if (schema.type) {\n if (schema.example) {\n type += JSON.stringify(schema.example);\n } else {\n const handleType = (_type: typeof schema.type) => {\n let typeCnt = \"\";\n if (typeof _type === \"string\") {\n if (\n [\n \"string\",\n \"integer\",\n \"number\",\n \"array\",\n \"boolean\",\n \"null\",\n ].includes(_type)\n ) {\n if ([\"integer\", \"number\"].includes(_type)) {\n typeCnt += `123`;\n } else if (_type === \"array\") {\n //Since we would have already parsed the arrays keys above \"schema.items\" if it exists\n typeCnt += \"[]\";\n } else if (_type === \"boolean\") {\n typeCnt += `true`;\n } else if (_type === \"null\") {\n typeCnt += `null`;\n } else {\n typeCnt += `\"${_type}\"`;\n }\n } else if (_type === \"object\") {\n //Since we would have already parsed the object keys above \"schema.properties\" if it exists\n typeCnt += \"{}\";\n }\n } else if (Array.isArray(_type)) {\n const arrType = _type.map((v) => handleType(v));\n arrType.filter((v) => v !== \"\");\n if (arrType.length > 1) typeCnt += arrType.join(\"|\");\n } else {\n typeCnt += \"any\";\n }\n\n return typeCnt;\n };\n type = handleType(schema.type);\n }\n }\n } else {\n //Default type to string if no schema provided\n type = \"string\";\n }\n\n return type;\n };\n\n // auto update only on dev\n if (refetchInterval && !isNaN(refetchInterval) && refetchInterval > 0) {\n if (\n !(\n process.env.NODE_ENV &&\n [\"production\", \"prod\", \"test\", \"staging\"].includes(process.env.NODE_ENV)\n )\n ) {\n // auto sync at interval\n if (fetchTimeout[apiName]) clearTimeout(fetchTimeout[apiName]);\n\n // set next request timeout\n fetchTimeout[apiName] = setTimeout(\n () => OpenapiSync(apiUrl, apiName, config, refetchInterval),\n refetchInterval\n );\n }\n }\n\n // compare new spec with old spec, continuing only if spec it different\n const prevSpec = getState(apiName);\n if (isEqual(prevSpec, spec)) return;\n\n setState(apiName, spec);\n\n let endpointsFileContent = \"\";\n let typesFileContent = \"\";\n let sharedTypesFileContent: Record<string, string> = {};\n\n if (spec.components) {\n Object.keys(spec.components).forEach((key) => {\n if (\n [\n \"schemas\",\n \"responses\",\n \"parameters\",\n \"examples\",\n \"requestBodies\",\n \"headers\",\n \"links\",\n \"callbacks\",\n ].includes(key)\n ) {\n // Create components (shared) types\n const components: Record<string, IOpenApiMediaTypeSpec> =\n spec.components[key];\n\n const componentInterfaces: Record<string, string> = {};\n const componentSchema: Record<string, string> = {};\n\n const contentKeys = Object.keys(components);\n\n // only need 1 schema so will us the first schema provided\n contentKeys.forEach((contentKey) => {\n /* const schema = (() => {\n switch (key) {\n case \"parameters\":\n return components[contentKey].schema;\n default:\n return components[contentKey];\n }\n })() as IOpenApSchemaSpec; */\n const schema = (\n components[contentKey]?.schema\n ? components[contentKey].schema\n : components[contentKey]\n ) as IOpenApSchemaSpec;\n\n const typeCnt = `${parseSchemaToType(spec, schema, \"\", true, {\n noSharedImport: true,\n useComponentName: [\"parameters\"].includes(key),\n })}`;\n\n if (typeCnt) {\n const parts = contentKey.split(\".\");\n let currentLevel: any = componentInterfaces;\n let currentSchemaLevel: any = componentSchema;\n\n // Navigate or create the nested structure\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (i < parts.length - 1) {\n // If it's not the last part, create a nested object if it doesn't exist\n if (!(part in currentLevel)) {\n currentLevel[part] = {}; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentInterfaces\n currentSchemaLevel[part] = {}; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentSchema\n }\n currentLevel = currentLevel[part]; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentInterfaces\n currentSchemaLevel = currentSchemaLevel[part]; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentSchema\n } else {\n // This is the last part, assign the original schema value\n currentLevel[part] = typeCnt; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentInterfaces\n currentSchemaLevel[part] = schema; //<== This rely on js ability to assign value to origianl object by reference, so this assignment will be reflected in componentSchema\n }\n }\n }\n });\n\n // Generate TypeScript interfaces for each component\n Object.keys(componentInterfaces).forEach((key) => {\n const name = getSharedComponentName(key);\n const cnt = componentInterfaces[key];\n let doc: string = \"\";\n if (\n !config?.types?.doc?.disable &&\n key in components &&\n //@ts-expect-error\n components[key]?.description\n ) {\n doc =\n \" * \" +\n //@ts-expect-error\n components[key].description\n .split(\"\\n\")\n .filter((line: string) => line.trim() !== \"\")\n .join(` \\n *${\" \".repeat(1)}`);\n }\n\n sharedTypesFileContent[key] =\n (sharedTypesFileContent[key] ?? \"\") +\n (doc ? `/**\\n${doc}\\n */\\n` : \"\") +\n \"export type \" +\n name +\n \" = \" +\n (typeof cnt === \"string\" ? cnt : JSONStringify(cnt)) +\n \";\\n\";\n });\n }\n });\n }\n\n const getBodySchemaType = (requestBody: IOpenApiRequestBodySpec) => {\n let typeCnt = \"\";\n if (requestBody.content) {\n const contentKeys = Object.keys(requestBody.content);\n // only need 1 schema so will us the first schema provided\n if (contentKeys[0] && requestBody.content[contentKeys[0]].schema) {\n typeCnt += `${parseSchemaToType(\n spec,\n requestBody.content[contentKeys[0]].schema as IOpenApSchemaSpec,\n \"\"\n )}`;\n }\n }\n return typeCnt;\n };\n\n const treatEndpointUrl = (endpointUrl: string) => {\n if (\n config?.endpoints?.value?.replaceWords &&\n Array.isArray(config?.endpoints.value.replaceWords)\n ) {\n let newEndpointUrl = endpointUrl;\n config?.endpoints?.value?.replaceWords?.forEach(\n (replaceWord: IConfigReplaceWord, indx) => {\n const regexp = new RegExp(replaceWord.replace, \"g\");\n newEndpointUrl = newEndpointUrl.replace(\n regexp,\n replaceWord.with || \"\"\n );\n }\n );\n return newEndpointUrl;\n } else {\n return endpointUrl;\n }\n };\n\n // Helper function to check if an endpoint should be excluded\n const shouldExcludeEndpoint = (\n path: string,\n method: Method,\n tags: string[] = []\n ) => {\n const excludeConfig = config?.endpoints?.exclude;\n const includeConfig = config?.endpoints?.include;\n\n // If include is specified\n if (includeConfig) {\n // Check if endpoint matches include criteria\n const matchesIncludeTags =\n includeConfig.tags && includeConfig.tags.length > 0\n ? tags.some((tag) => includeConfig.tags!.includes(tag))\n : true;\n\n const matchesIncludeEndpoints =\n includeConfig.endpoints && includeConfig.endpoints.length > 0\n ? includeConfig.endpoints.some((endpoint) => {\n const methodMatches =\n !endpoint.method ||\n endpoint.method.toLowerCase() === method.toLowerCase();\n\n // Use exact path match if path is provided\n if (endpoint.path) {\n return path === endpoint.path && methodMatches;\n }\n // Use regex match if regex is provided\n else if (endpoint.regex) {\n const pathRegex = new RegExp(endpoint.regex);\n return pathRegex.test(path) && methodMatches;\n }\n\n return false;\n })\n : true;\n\n // If include is specified but endpoint doesn't match, exclude it\n if (!matchesIncludeTags || !matchesIncludeEndpoints) {\n return true;\n }\n }\n\n // Check exclude criteria, it takes precedence over include\n if (excludeConfig) {\n // Check tags exclusion\n if (excludeConfig.tags && excludeConfig.tags.length > 0) {\n const hasExcludedTag = tags.some((tag) =>\n excludeConfig.tags!.includes(tag)\n );\n if (hasExcludedTag) return true;\n }\n\n // Check endpoint exclusion\n if (excludeConfig.endpoints && excludeConfig.endpoints.length > 0) {\n const matchesExcludedEndpoint = excludeConfig.endpoints.some(\n (endpoint) => {\n const methodMatches =\n !endpoint.method ||\n endpoint.method.toLowerCase() === method.toLowerCase();\n\n // Use exact path match if path is provided\n if (endpoint.path) {\n return path === endpoint.path && methodMatches;\n }\n\n // Use regex match if regex is provided\n else if (endpoint.regex) {\n const pathRegex = new RegExp(endpoint.regex);\n return pathRegex.test(path) && methodMatches;\n }\n\n return false;\n }\n );\n if (matchesExcludedEndpoint) return true;\n }\n }\n\n return false;\n };\n\n Object.keys(spec.paths || {}).forEach((endpointPath) => {\n const endpointSpec = spec.paths[endpointPath];\n\n const endpointMethods = Object.keys(endpointSpec);\n endpointMethods.forEach((_method) => {\n const method = _method as Method;\n const endpoint = getEndpointDetails(endpointPath, method);\n\n // Get endpoint tags for filtering\n const endpointTags = endpointSpec[method]?.tags || [];\n\n // Check if this endpoint should be excluded\n if (shouldExcludeEndpoint(endpointPath, method, endpointTags)) {\n return; // Skip this endpoint\n }\n\n // Determine folder name for this endpoint\n const enSpec = endpointSpec[method];\n const folderName = getFolderName({\n method,\n path: endpointPath,\n summary: enSpec?.summary,\n operationId: enSpec?.operationId,\n tags: endpointTags,\n parameters: enSpec?.parameters,\n requestBody: enSpec?.requestBody,\n responses: enSpec?.responses,\n });\n\n // Initialize folder group if it doesn't exist\n if (!folderGroups[folderName]) {\n folderGroups[folderName] = {\n endpoints: \"\",\n types: \"\",\n };\n }\n\n const endpointUrlTxt =\n (config?.endpoints?.value?.includeServer ? serverUrl : \"\") +\n endpoint.pathParts\n .map((part) => {\n // check if part is a variable\n if (part[0] === \"{\" && part[part.length - 1] === \"}\") {\n const s = part.replace(/{/, \"\").replace(/}/, \"\");\n part = `\\${${s}}`;\n }\n\n //api/<userId>\n else if (part[0] === \"<\" && part[part.length - 1] === \">\") {\n const s = part.replace(/</, \"\").replace(/>/, \"\");\n part = `\\${${s}}`;\n }\n\n //api/:userId\n else if (part[0] === \":\") {\n const s = part.replace(/:/, \"\");\n part = `\\${${s}}`;\n }\n return part;\n })\n .join(\"/\");\n\n let endpointUrl = `\"${endpointUrlTxt}\"`;\n if (endpoint.variables.length > 0) {\n const params = endpoint.variables.map((v) => `${v}:string`).join(\",\");\n endpointUrl = `(${params})=> \\`${endpointUrlTxt}\\``;\n }\n\n //treat endpoint url\n endpointUrl = treatEndpointUrl(endpointUrl);\n\n const eSpec = endpointSpec[method];\n\n let queryTypeCnt = \"\";\n\n if (eSpec?.parameters) {\n // create query parameters types\n const parameters: IOpenApiParameterSpec[] = eSpec?.parameters;\n parameters.forEach((param, i) => {\n if (param.$ref || (param.in === \"query\" && param.name)) {\n queryTypeCnt += `${parseSchemaToType(\n spec,\n param.$ref ? (param as any) : (param.schema as any),\n param.name || \"\",\n param.required\n )}`;\n }\n });\n\n if (queryTypeCnt) {\n queryTypeCnt = `{\\n${queryTypeCnt}}`;\n let name = `${endpoint.name}Query`;\n\n // Use operationId if configured and available\n if (config?.types?.name?.useOperationId && eSpec?.operationId) {\n name = `${eSpec.operationId}Query`;\n }\n name = capitalize(`${typePrefix}${name}`);\n\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"endpoint\",\n {\n code: \"\",\n type: \"query\",\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = `${typePrefix}${formattedName}`;\n }\n const typeContent = `export type ${name} = ${queryTypeCnt};\\n`;\n if (config?.folderSplit) {\n folderGroups[folderName].types += typeContent;\n } else {\n typesFileContent += typeContent;\n }\n }\n }\n\n const requestBody: IOpenApiRequestBodySpec = eSpec?.requestBody;\n let dtoTypeCnt = \"\";\n if (requestBody) {\n //create requestBody types\n dtoTypeCnt = getBodySchemaType(requestBody);\n\n if (dtoTypeCnt) {\n let name = `${endpoint.name}DTO`;\n\n // Use operationId if configured and available\n if (config?.types?.name?.useOperationId && eSpec?.operationId) {\n name = `${eSpec.operationId}DTO`;\n }\n\n name = capitalize(`${typePrefix}${name}`);\n\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"endpoint\",\n {\n code: \"\",\n type: \"dto\",\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = `${typePrefix}${formattedName}`;\n }\n const typeContent = `export type ${name} = ${dtoTypeCnt};\\n`;\n if (config?.folderSplit) {\n folderGroups[folderName].types += typeContent;\n } else {\n typesFileContent += typeContent;\n }\n }\n }\n\n const responseTypeObject: Record<string, string> = {};\n\n let responseTypeCnt = \"\";\n if (eSpec?.responses) {\n // create request response types\n const responses: IOpenApiResponseSpec = eSpec?.responses;\n const resCodes = Object.keys(responses);\n resCodes.forEach((code) => {\n responseTypeCnt = getBodySchemaType(responses[code]);\n responseTypeObject[code] = responseTypeCnt;\n if (responseTypeCnt) {\n let name = `${endpoint.name}${code}Response`;\n\n // Use operationId if configured and available\n if (config?.types?.name?.useOperationId && eSpec?.operationId) {\n name = `${eSpec.operationId}${code}Response`;\n }\n\n name = capitalize(`${typePrefix}${name}`);\n\n if (config?.types?.name?.format) {\n const formattedName = config?.types.name.format(\n \"endpoint\",\n {\n code,\n type: \"response\",\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = `${typePrefix}${formattedName}`;\n }\n const typeContent = `export type ${name} = ${responseTypeCnt};\\n`;\n if (config?.folderSplit) {\n folderGroups[folderName].types += typeContent;\n } else {\n typesFileContent += typeContent;\n }\n }\n });\n }\n\n // Function to format security requirements\n const formatSecuritySpec = (\n security: Array<Record<string, string[]>>\n ) => {\n if (!security || !security.length) return \"\";\n\n return security\n .map((securityRequirement) => {\n const requirements = Object.entries(securityRequirement)\n .map(([scheme, scopes]) => {\n let sch = scheme;\n let scopeText = \"\";\n if (Array.isArray(scopes) && scopes.length) {\n scopeText = `\\n - Scopes: [\\`${scopes.join(\"`, `\")}\\`]`;\n sch = `**${sch}**`;\n }\n\n return `\\n - ${sch}${scopeText}`;\n })\n .join(\"\");\n return requirements;\n })\n .join(\"\\n\");\n };\n\n // Get formatted security specification\n const securitySpec = eSpec?.security\n ? formatSecuritySpec(eSpec.security)\n : \"\";\n\n let doc = \"\";\n if (!config?.endpoints?.doc?.disable) {\n let curl = \"\";\n if (config?.endpoints?.doc?.showCurl) {\n // console.log(\"cirl data\", {\n // body: eSpec?.requestBody,\n // bodyContent:\n // eSpec?.requestBody?.content[\"application/json\"]?.schema\n // ?.properties,\n // security: eSpec?.security,\n // });\n const headers: Record<string, string | string[]> = {};\n let body = \"\";\n let extras = \"\";\n\n if (eSpec.requestBody?.content) {\n const contentTypes = Object.keys(eSpec.requestBody.content);\n contentTypes.forEach((contentType) => {\n // console.log(\"requestBody content\", {\n // contentType,\n // schema: eSpec.requestBody.content[contentType].schema,\n // });\n const schema = eSpec.requestBody.content[contentType].schema;\n if (schema) {\n if (Array.isArray(headers[\"Content-type\"])) {\n headers[\"Content-type\"].push(contentType);\n } else {\n headers[\"Content-type\"] = [contentType];\n }\n const schemaType = getSchemaExamples(\n spec,\n schema as IOpenApSchemaSpec\n );\n if (schemaType) body = schemaType;\n }\n });\n }\n\n if (eSpec?.security) {\n eSpec.security.forEach((securityItem: Record<string, string[]>) => {\n Object.keys(securityItem).forEach((security) => {\n const securitySchema: IOpenApiSecuritySchemes[string] =\n spec.components?.securitySchemes?.[security];\n\n if (securitySchema) {\n // headers[\"Authorization\"] = securitySchema;\n if (securitySchema.type === \"mutualTLS\") {\n extras += `\\n--cert client-certificate.crt \\\n--key client-private-key.key \\\n--cacert ca-certificate.crt`;\n } else if (securitySchema.type === \"apiKey\") {\n headers[\n securitySchema?.name || \"X-API-KEY\"\n ] = `{API_KEY_VALUE}`;\n } else {\n headers[\"Authorization\"] = `${\n securitySchema?.scheme === \"basic\" ? \"Basic\" : \"Bearer\"\n } {${\n securitySchema?.scheme === \"basic\" ? \"VALUE\" : \"TOKEN\"\n }}`;\n }\n }\n });\n });\n }\n\n const curlHeaders: Record<string, string> = {};\n Object.keys(headers).forEach((header) => {\n if (Array.isArray(headers[header])) {\n curlHeaders[header] = headers[header].join(\"; \");\n } else {\n curlHeaders[header] = headers[header];\n }\n });\n\n // console.log(\"curlHeaders\", { headers, curlHeaders, body });\n\n curl = `\\n\\`\\`\\`bash \n${CurlGenerator({\n url: serverUrl + endpointPath,\n method: method.toUpperCase() as any,\n headers: curlHeaders,\n body,\n})}${extras}\n\\`\\`\\``;\n }\n\n doc = `/**${eSpec?.description ? `\\n* ${eSpec?.description} ` : \"\"}\n * **Method**: \\`${method.toUpperCase()}\\` \n * **Summary**: ${eSpec?.summary || \"\"} \n * **Tags**: [${eSpec?.tags?.join(\", \") || \"\"}] \n * **OperationId**: ${eSpec?.operationId || \"\"} ${\n queryTypeCnt\n ? `\\n * **Query**: ${renderTypeRefMD(queryTypeCnt)} `\n : \"\"\n }${dtoTypeCnt ? `\\n * **DTO**: ${renderTypeRefMD(dtoTypeCnt)} ` : \"\"}${\n responseTypeCnt\n ? `\\n * **Response**: ${Object.entries(responseTypeObject)\n .map(\n ([code, type]) =>\n `\\n - **${code}**: ${renderTypeRefMD(type, 2)} `\n )\n .join(\"\")}`\n : \"\"\n }${securitySpec ? `\\n * **Security**: ${securitySpec}\\n` : \"\"}${curl}\n */\\n`;\n }\n\n let name =\n config?.endpoints?.name?.useOperationId &&\n eSpec?.operationId?.length > 0\n ? eSpec.operationId\n : `${endpoint.name}`;\n\n if (config?.endpoints?.name?.format) {\n const formattedName = config?.endpoints.name.format(\n {\n method,\n path: endpointPath,\n summary: eSpec?.summary,\n operationId: eSpec?.operationId,\n },\n name\n );\n if (formattedName) name = formattedName;\n }\n\n const content = {\n method: `\"${method}\"`,\n operationId: `\"${eSpec?.operationId}\"`,\n url: endpointUrl,\n tags: eSpec?.tags || [],\n };\n // Add the endpoint url to the specific folder group\n const endpointContent = `${doc}export const ${endpointPrefix}${name} = ${\n config?.endpoints?.value?.type === \"object\"\n ? JSONStringify(content)\n : endpointUrl\n }; \n`;\n\n // Add to folder group if folder splitting is enabled, otherwise add to global content\n if (config?.folderSplit) {\n folderGroups[folderName].endpoints += endpointContent;\n } else {\n endpointsFileContent += endpointContent;\n }\n });\n });\n\n // Write files based on folder splitting configuration\n if (config?.folderSplit) {\n // Write files for each folder group\n for (const [folderName, group] of Object.entries(folderGroups)) {\n if (group.endpoints || group.types) {\n const folderPathForGroup = path.join(folderPath, folderName);\n\n // Write endpoints file\n if (group.endpoints) {\n const endpointsFilePath = path.join(\n rootUsingCwd,\n folderPathForGroup,\n \"endpoints.ts\"\n );\n await fs.promises.mkdir(path.dirname(endpointsFilePath), {\n recursive: true,\n });\n await fs.promises.writeFile(endpointsFilePath, group.endpoints);\n }\n\n // Write types file\n if (group.types) {\n const typesFilePath = path.join(\n rootUsingCwd,\n folderPathForGroup,\n \"types.ts\"\n );\n await fs.promises.mkdir(path.dirname(typesFilePath), {\n recursive: true,\n });\n\n const typesContent =\n Object.values(sharedTypesFileContent).length > 0\n ? `import * as Shared from \"../shared\";\\n\\n${group.types}`\n : group.types;\n\n await fs.promises.writeFile(typesFilePath, typesContent);\n }\n }\n }\n }\n\n if (endpointsFileContent.length > 0) {\n // Original behavior - write to single files\n const endpointsFilePath = path.join(\n rootUsingCwd,\n folderPath,\n \"endpoints.ts\"\n );\n await fs.promises.mkdir(path.dirname(endpointsFilePath), {\n recursive: true,\n });\n await fs.promises.writeFile(endpointsFilePath, endpointsFileContent);\n }\n if (Object.values(sharedTypesFileContent).length > 0) {\n const sharedTypesFilePath = path.join(\n rootUsingCwd,\n folderPath,\n !config?.folderSplit ? \"types\" : \"\",\n \"shared.ts\"\n );\n await fs.promises.mkdir(path.dirname(sharedTypesFilePath), {\n recursive: true,\n });\n await fs.promises.writeFile(\n sharedTypesFilePath,\n Object.values(sharedTypesFileContent).join(\"\\n\")\n );\n }\n\n if (typesFileContent.length > 0) {\n const typesFilePath = path.join(\n rootUsingCwd,\n folderPath,\n \"types\",\n \"index.ts\"\n );\n await fs.promises.mkdir(path.dirname(typesFilePath), { recursive: true });\n await fs.promises.writeFile(\n typesFilePath,\n `${\n Object.values(sharedTypesFileContent).length > 0\n ? `import * as Shared from \"./shared\";\\n\\n`\n : \"\"\n }${typesFileContent}`\n );\n }\n};\nexport default OpenapiSync;\n","import OpenapiSync from \"./Openapi-sync\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { resetState } from \"./Openapi-sync/state\";\nimport { IConfig } from \"./types\";\n\n// Re-export modules for user consumption\nexport * from \"./types\";\nexport * from \"./helpers\";\nexport * from \"./regex\";\n\nconst rootUsingCwd = process.cwd();\n\nexport const Init = async (options?: { refetchInterval?: number }) => {\n // Load config file\n let configJS;\n // Register TypeScript loader before requiring the file\n try {\n require(\"esbuild-register\");\n } catch (registerError) {\n throw registerError;\n }\n\n const jsConfigPath = path.join(rootUsingCwd, \"openapi.sync.js\");\n const tsConfigPath = path.join(rootUsingCwd, \"openapi.sync.ts\");\n const jsonConfigPath = path.join(rootUsingCwd, \"openapi.sync.json\");\n const configPaths = [jsConfigPath, tsConfigPath, jsonConfigPath];\n try {\n for (const configPath of configPaths) {\n if (fs.existsSync(configPath)) {\n configJS = require(configPath);\n\n if (Object.keys(configJS).length === 1 && configJS.default) {\n configJS = configJS.default;\n }\n }\n }\n } catch (e) {\n console.log(e);\n }\n\n if (typeof configJS === \"function\") {\n configJS = configJS();\n }\n const config: IConfig = configJS;\n\n if (!config) {\n throw new Error(\"No config found\");\n }\n const apiNames = Object.keys(config.api);\n const refetchInterval =\n options &&\n \"refetchInterval\" in options &&\n !isNaN(options?.refetchInterval as number)\n ? options.refetchInterval\n : config.refetchInterval;\n resetState();\n for (let i = 0; i < apiNames.length; i += 1) {\n const apiName = apiNames[i];\n const apiUrl = config.api[apiName];\n\n OpenapiSync(apiUrl, apiName, config, refetchInterval);\n }\n};\n"]}
|
package/dist/regex.d.mts
DELETED
package/dist/regex.d.ts
DELETED
package/dist/regex.js
DELETED
package/dist/regex.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../regex.ts"],"names":["variableName","variableNameChar"],"mappings":"aAAO,IAAMA,CAAAA,CAAe,6BACfC,CAAAA,CAAmB","file":"regex.js","sourcesContent":["export const variableName = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\nexport const variableNameChar = /[A-Za-z0-9_$]/;\n"]}
|
package/dist/regex.mjs
DELETED
package/dist/regex.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"regex.mjs"}
|