{"version":3,"file":"OpenApiConstraintShifter.mjs","sources":["../../src/utils/OpenApiConstraintShifter.ts"],"sourcesContent":["import { OpenApi } from \"../OpenApi\";\n\nexport namespace OpenApiConstraintShifter {\n  export const shiftArray = <\n    Schema extends Pick<\n      OpenApi.IJsonSchema.IArray,\n      \"description\" | \"minItems\" | \"maxItems\" | \"uniqueItems\"\n    >,\n  >(\n    v: Schema,\n  ): Omit<Schema, \"minItems\" | \"maxItems\" | \"uniqueItems\"> => {\n    const tags: string[] = [];\n    if (v.minItems !== undefined) {\n      tags.push(`@minItems ${v.minItems}`);\n      delete v.minItems;\n    }\n    if (v.maxItems !== undefined) {\n      tags.push(`@maxItems ${v.maxItems}`);\n      delete v.maxItems;\n    }\n    if (v.uniqueItems !== undefined) {\n      if (v.uniqueItems === true) tags.push(`@uniqueItems`);\n      delete v.uniqueItems;\n    }\n    v.description = writeTagWithDescription({\n      description: v.description,\n      tags,\n    });\n    return v;\n  };\n\n  export const shiftNumeric = <\n    Schema extends Pick<\n      OpenApi.IJsonSchema.INumber | OpenApi.IJsonSchema.IInteger,\n      | \"description\"\n      | \"minimum\"\n      | \"maximum\"\n      | \"exclusiveMinimum\"\n      | \"exclusiveMaximum\"\n      | \"multipleOf\"\n      | \"default\"\n    >,\n  >(\n    v: Schema,\n  ): Omit<\n    Schema,\n    | \"minimum\"\n    | \"maximum\"\n    | \"exclusiveMinimum\"\n    | \"exclusiveMaximum\"\n    | \"multipleOf\"\n    | \"default\"\n  > => {\n    const tags: string[] = [];\n    if (v.exclusiveMinimum === undefined && v.minimum !== undefined) {\n      tags.push(`@minimum ${v.minimum}`);\n      delete v.minimum;\n    }\n    if (v.exclusiveMaximum === undefined && v.maximum !== undefined) {\n      tags.push(`@maximum ${v.maximum}`);\n      delete v.maximum;\n    }\n    if (v.minimum !== undefined && v.exclusiveMinimum === true) {\n      tags.push(`@exclusiveMinimum ${v.minimum}`);\n      delete v.minimum;\n      delete v.exclusiveMinimum;\n    }\n    if (v.maximum !== undefined && v.exclusiveMaximum === true) {\n      tags.push(`@exclusiveMaximum ${v.maximum}`);\n      delete v.maximum;\n      delete v.exclusiveMaximum;\n    }\n    if (v.multipleOf !== undefined) {\n      tags.push(`@multipleOf ${v.multipleOf}`);\n      delete v.multipleOf;\n    }\n    v.description = writeTagWithDescription({\n      description: v.description,\n      tags,\n    });\n    if (v.default !== undefined) {\n      tags.push(`@default ${v.default}`);\n      delete v.default;\n    }\n    return v;\n  };\n\n  export const shiftString = <\n    Schema extends Pick<\n      OpenApi.IJsonSchema.IString,\n      | \"description\"\n      | \"minLength\"\n      | \"maxLength\"\n      | \"format\"\n      | \"pattern\"\n      | \"contentMediaType\"\n      | \"default\"\n    >,\n  >(\n    v: Schema,\n  ): Omit<\n    Schema,\n    | \"minLength\"\n    | \"maxLength\"\n    | \"format\"\n    | \"pattern\"\n    | \"contentMediaType\"\n    | \"default\"\n  > => {\n    const tags: string[] = [];\n    if (v.minLength !== undefined) {\n      tags.push(`@minLength ${v.minLength}`);\n      delete v.minLength;\n    }\n    if (v.maxLength !== undefined) {\n      tags.push(`@maxLength ${v.maxLength}`);\n      delete v.maxLength;\n    }\n    if (v.format !== undefined) {\n      tags.push(`@format ${v.format}`);\n      delete v.format;\n    }\n    if (v.pattern !== undefined) {\n      tags.push(`@pattern ${v.pattern}`);\n      delete v.pattern;\n    }\n    if (v.contentMediaType !== undefined) {\n      tags.push(`@contentMediaType ${v.contentMediaType}`);\n      delete v.contentMediaType;\n    }\n    if (v.default !== undefined) {\n      tags.push(`@default ${v.default}`);\n      delete v.default;\n    }\n    v.description = writeTagWithDescription({\n      description: v.description,\n      tags,\n    });\n    return v;\n  };\n}\n\nconst writeTagWithDescription = (props: {\n  description: string | undefined;\n  tags: string[];\n}): string | undefined => {\n  if (props.tags.length === 0) return props.description;\n  return [\n    ...(props.description?.length ? [props.description, \"\\n\"] : []),\n    ...props.tags,\n  ].join(\"\\n\");\n};\n"],"names":["OpenApiConstraintShifter","shiftArray","v","tags","minItems","undefined","push","maxItems","uniqueItems","description","writeTagWithDescription","shiftNumeric","exclusiveMinimum","minimum","exclusiveMaximum","maximum","multipleOf","default","shiftString","minLength","maxLength","format","pattern","contentMediaType","props","length","join"],"mappings":"AAEM,IAAWA;;CAAjB,SAAiBA;IACFA,yBAAAC,aAMXC;QAEA,MAAMC,OAAiB;QACvB,IAAID,EAAEE,aAAaC,WAAW;YAC5BF,KAAKG,KAAK,aAAaJ,EAAEE;mBAClBF,EAAEE;;QAEX,IAAIF,EAAEK,aAAaF,WAAW;YAC5BF,KAAKG,KAAK,aAAaJ,EAAEK;mBAClBL,EAAEK;;QAEX,IAAIL,EAAEM,gBAAgBH,WAAW;YAC/B,IAAIH,EAAEM,gBAAgB,MAAML,KAAKG,KAAK;mBAC/BJ,EAAEM;;QAEXN,EAAEO,cAAcC,wBAAwB;YACtCD,aAAaP,EAAEO;YACfN;;QAEF,OAAOD;AAAC;IAGGF,yBAAAW,eAYXT;QAUA,MAAMC,OAAiB;QACvB,IAAID,EAAEU,qBAAqBP,aAAaH,EAAEW,YAAYR,WAAW;YAC/DF,KAAKG,KAAK,YAAYJ,EAAEW;mBACjBX,EAAEW;;QAEX,IAAIX,EAAEY,qBAAqBT,aAAaH,EAAEa,YAAYV,WAAW;YAC/DF,KAAKG,KAAK,YAAYJ,EAAEa;mBACjBb,EAAEa;;QAEX,IAAIb,EAAEW,YAAYR,aAAaH,EAAEU,qBAAqB,MAAM;YAC1DT,KAAKG,KAAK,qBAAqBJ,EAAEW;mBAC1BX,EAAEW;mBACFX,EAAEU;;QAEX,IAAIV,EAAEa,YAAYV,aAAaH,EAAEY,qBAAqB,MAAM;YAC1DX,KAAKG,KAAK,qBAAqBJ,EAAEa;mBAC1Bb,EAAEa;mBACFb,EAAEY;;QAEX,IAAIZ,EAAEc,eAAeX,WAAW;YAC9BF,KAAKG,KAAK,eAAeJ,EAAEc;mBACpBd,EAAEc;;QAEXd,EAAEO,cAAcC,wBAAwB;YACtCD,aAAaP,EAAEO;YACfN;;QAEF,IAAID,EAAEe,YAAYZ,WAAW;YAC3BF,KAAKG,KAAK,YAAYJ,EAAEe;mBACjBf,EAAEe;;QAEX,OAAOf;AAAC;IAGGF,yBAAAkB,cAYXhB;QAUA,MAAMC,OAAiB;QACvB,IAAID,EAAEiB,cAAcd,WAAW;YAC7BF,KAAKG,KAAK,cAAcJ,EAAEiB;mBACnBjB,EAAEiB;;QAEX,IAAIjB,EAAEkB,cAAcf,WAAW;YAC7BF,KAAKG,KAAK,cAAcJ,EAAEkB;mBACnBlB,EAAEkB;;QAEX,IAAIlB,EAAEmB,WAAWhB,WAAW;YAC1BF,KAAKG,KAAK,WAAWJ,EAAEmB;mBAChBnB,EAAEmB;;QAEX,IAAInB,EAAEoB,YAAYjB,WAAW;YAC3BF,KAAKG,KAAK,YAAYJ,EAAEoB;mBACjBpB,EAAEoB;;QAEX,IAAIpB,EAAEqB,qBAAqBlB,WAAW;YACpCF,KAAKG,KAAK,qBAAqBJ,EAAEqB;mBAC1BrB,EAAEqB;;QAEX,IAAIrB,EAAEe,YAAYZ,WAAW;YAC3BF,KAAKG,KAAK,YAAYJ,EAAEe;mBACjBf,EAAEe;;QAEXf,EAAEO,cAAcC,wBAAwB;YACtCD,aAAaP,EAAEO;YACfN;;QAEF,OAAOD;AAAC;AAEX,EA1ID,CAAiBF,6BAAAA,2BA0IhB,CAAA;;AAED,MAAMU,0BAA2Bc;IAI/B,IAAIA,MAAMrB,KAAKsB,WAAW,GAAG,OAAOD,MAAMf;IAC1C,OAAO,KACDe,MAAMf,aAAagB,SAAS,EAACD,MAAMf,aAAa,SAAQ,OACzDe,MAAMrB,OACTuB,KAAK;AAAK;;"}