{"version":3,"file":"JsonDescriptionUtil.mjs","sources":["../../../src/utils/internal/JsonDescriptionUtil.ts"],"sourcesContent":["import { OpenApi } from \"../../OpenApi\";\nimport { Escaper } from \"../Escaper\";\nimport { OpenApiTypeChecker } from \"../OpenApiTypeChecker\";\n\nexport namespace JsonDescriptionUtil {\n  export const cascade = (props: {\n    prefix: string;\n    components: OpenApi.IComponents;\n    schema: OpenApi.IJsonSchema.IReference;\n    escape: boolean;\n  }): string | undefined => {\n    const accessors: string[] = props.schema.$ref\n      .split(props.prefix)[1]\n      .split(\".\");\n    const pReferences: IParentReference[] = accessors\n      .slice(0, props.escape ? accessors.length : accessors.length - 1)\n      .map((_, i, array) => array.slice(0, i + 1).join(\".\"))\n      .map((key) => ({\n        key,\n        description: props.components.schemas?.[key]?.description,\n      }))\n      .reverse()\n      .filter(\n        (schema, i): schema is IParentReference =>\n          i === 0 || !!schema?.description,\n      );\n    if (!props.schema.description?.length && pReferences.length === 0)\n      return undefined;\n    return [\n      ...(!!props.schema.description?.length ? [props.schema.description] : []),\n      ...pReferences.map((pRef, i) =>\n        pRef.description === undefined\n          ? `Current Type: {@link ${pRef.key}}`\n          : `Description of the ${i === 0 && props.escape ? \"current\" : \"parent\"} {@link ${pRef.key}} type:\\n\\n` +\n            pRef.description\n              .split(\"\\n\")\n              .map((str) => `> ${str}`)\n              .join(\"\\n\"),\n      ),\n    ].join(\"\\n\\n------------------------------\\n\\n\");\n  };\n\n  export const take = (o: OpenApi.IJsonSchema.IObject): string | undefined => {\n    const result: string = [\n      ...(!!o.description?.length ? [o.description] : []),\n      ...Object.entries(o.properties ?? {})\n        .filter(\n          ([_key, value]) =>\n            OpenApiTypeChecker.isReference(value) &&\n            !!value.description?.length,\n        )\n        .map(\n          ([key, value]) =>\n            `### Description of {@link ${Escaper.variable(key) ? key : JSON.stringify(key)}} property:\\n\\n` +\n            (value.description ?? \"\")\n              .split(\"\\n\")\n              .map((str) => `> ${str}`)\n              .join(\"\\n\"),\n        ),\n    ].join(\"\\n\\n\");\n    return !!result.length ? result : undefined;\n  };\n}\n\ninterface IParentReference {\n  key: string;\n  description: string | undefined;\n}\n"],"names":["JsonDescriptionUtil","cascade","props","accessors","schema","$ref","split","prefix","pReferences","slice","escape","length","map","_","i","array","join","key","description","components","schemas","reverse","filter","undefined","pRef","str","take","o","result","Object","entries","properties","_key","value","OpenApiTypeChecker","isReference","Escaper","variable","JSON","stringify"],"mappings":";;;;AAIM,IAAWA;;CAAjB,SAAiBA;IACFA,oBAAAC,UAAWC;QAMtB,MAAMC,YAAsBD,MAAME,OAAOC,KACtCC,MAAMJ,MAAMK,QAAQ,GACpBD,MAAM;QACT,MAAME,cAAkCL,UACrCM,MAAM,GAAGP,MAAMQ,SAASP,UAAUQ,SAASR,UAAUQ,SAAS,GAC9DC,IAAI,CAACC,GAAGC,GAAGC,UAAUA,MAAMN,MAAM,GAAGK,IAAI,GAAGE,KAAK,MAChDJ,IAAKK,QAAG;YACPA;YACAC,aAAahB,MAAMiB,WAAWC,UAAUH,MAAMC;YAE/CG,UACAC,OACC,CAAClB,QAAQU,MACPA,MAAM,OAAOV,QAAQc;QAE3B,KAAKhB,MAAME,OAAOc,aAAaP,UAAUH,YAAYG,WAAW,GAC9D,OAAOY;QACT,OAAO,OACCrB,MAAME,OAAOc,aAAaP,SAAS,EAACT,MAAME,OAAOc,gBAAe,OACnEV,YAAYI,IAAI,CAACY,MAAMV,MACxBU,KAAKN,gBAAgBK,YACjB,wBAAwBC,KAAKP,SAC7B,sBAAsBH,MAAM,KAAKZ,MAAMQ,SAAS,YAAY,mBAAmBc,KAAKP,mBACpFO,KAAKN,YACFZ,MAAM,MACNM,IAAKa,OAAQ,KAAKA,OAClBT,KAAK,SAEdA,KAAK;;IAGIhB,oBAAA0B,OAAQC;QACnB,MAAMC,SAAiB,OACfD,EAAET,aAAaP,SAAS,EAACgB,EAAET,gBAAe,OAC7CW,OAAOC,QAAQH,EAAEI,cAAc,CAAA,GAC/BT,OACC,EAAEU,MAAMC,WACNC,mBAAmBC,YAAYF,YAC7BA,MAAMf,aAAaP,QAExBC,IACC,EAAEK,KAAKgB,WACL,6BAA6BG,QAAQC,SAASpB,OAAOA,MAAMqB,KAAKC,UAAUtB,yBACzEgB,MAAMf,eAAe,IACnBZ,MAAM,MACNM,IAAKa,OAAQ,KAAKA,OAClBT,KAAK,SAEdA,KAAK;QACP,SAASY,OAAOjB,SAASiB,SAASL;;AAErC,EA1DD,CAAiBvB,wBAAAA,sBAAmB,CAAA;;"}