@samchon/openapi
Version:
Universal OpenAPI to LLM function calling schemas. Transform any Swagger/OpenAPI document into type-safe schemas for OpenAI, Claude, Qwen, and more.
1 lines • 6.71 kB
Source Map (JSON)
{"version":3,"file":"OpenApiConstraintShifter.mjs","sources":["../../src/utils/OpenApiConstraintShifter.ts"],"sourcesContent":["import { OpenApi } from \"../OpenApi\";\nimport { OpenApiExclusiveEmender } from \"./OpenApiExclusiveEmender\";\n\nexport namespace OpenApiConstraintShifter {\n export const shiftArray = <\n Schema extends Pick<\n OpenApi.IJsonSchema.IArray,\n \"description\" | \"minItems\" | \"maxItems\" | \"uniqueItems\"\n >,\n >(\n schema: Schema,\n ): Omit<Schema, \"minItems\" | \"maxItems\" | \"uniqueItems\"> => {\n const tags: string[] = [];\n if (schema.minItems !== undefined) {\n tags.push(`@minItems ${schema.minItems}`);\n delete schema.minItems;\n }\n if (schema.maxItems !== undefined) {\n tags.push(`@maxItems ${schema.maxItems}`);\n delete schema.maxItems;\n }\n if (schema.uniqueItems !== undefined) {\n if (schema.uniqueItems === true) tags.push(`@uniqueItems`);\n delete schema.uniqueItems;\n }\n schema.description = writeTagWithDescription({\n description: schema.description,\n tags,\n });\n return schema;\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 schema: Schema,\n ): Omit<\n Schema,\n | \"minimum\"\n | \"maximum\"\n | \"exclusiveMinimum\"\n | \"exclusiveMaximum\"\n | \"multipleOf\"\n | \"default\"\n > => {\n Object.assign(OpenApiExclusiveEmender.emend(schema));\n\n const tags: string[] = [];\n if (schema.minimum !== undefined) {\n tags.push(`@minimum ${schema.minimum}`);\n delete schema.minimum;\n }\n if (schema.maximum !== undefined) {\n tags.push(`@maximum ${schema.maximum}`);\n delete schema.maximum;\n }\n if (schema.exclusiveMinimum !== undefined) {\n tags.push(`@exclusiveMinimum ${schema.exclusiveMinimum}`);\n delete schema.exclusiveMinimum;\n }\n if (schema.exclusiveMaximum !== undefined) {\n tags.push(`@exclusiveMaximum ${schema.exclusiveMaximum}`);\n delete schema.exclusiveMaximum;\n }\n if (schema.multipleOf !== undefined) {\n tags.push(`@multipleOf ${schema.multipleOf}`);\n delete schema.multipleOf;\n }\n schema.description = writeTagWithDescription({\n description: schema.description,\n tags,\n });\n if (schema.default !== undefined) {\n tags.push(`@default ${schema.default}`);\n delete schema.default;\n }\n return schema;\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 schema: Schema,\n ): Omit<\n Schema,\n | \"minLength\"\n | \"maxLength\"\n | \"format\"\n | \"pattern\"\n | \"contentMediaType\"\n | \"default\"\n > => {\n const tags: string[] = [];\n if (schema.minLength !== undefined) {\n tags.push(`@minLength ${schema.minLength}`);\n delete schema.minLength;\n }\n if (schema.maxLength !== undefined) {\n tags.push(`@maxLength ${schema.maxLength}`);\n delete schema.maxLength;\n }\n if (schema.format !== undefined) {\n tags.push(`@format ${schema.format}`);\n delete schema.format;\n }\n if (schema.pattern !== undefined) {\n tags.push(`@pattern ${schema.pattern}`);\n delete schema.pattern;\n }\n if (schema.contentMediaType !== undefined) {\n tags.push(`@contentMediaType ${schema.contentMediaType}`);\n delete schema.contentMediaType;\n }\n if (schema.default !== undefined) {\n tags.push(`@default ${schema.default}`);\n delete schema.default;\n }\n schema.description = writeTagWithDescription({\n description: schema.description,\n tags,\n });\n return schema;\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","schema","tags","minItems","undefined","push","maxItems","uniqueItems","description","writeTagWithDescription","shiftNumeric","Object","assign","OpenApiExclusiveEmender","emend","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","default","shiftString","minLength","maxLength","format","pattern","contentMediaType","props","length","join"],"mappings":";;AAGM,IAAWA;;CAAjB,SAAiBA;IACFA,yBAAAC,aAMXC;QAEA,MAAMC,OAAiB;QACvB,IAAID,OAAOE,aAAaC,WAAW;YACjCF,KAAKG,KAAK,aAAaJ,OAAOE;mBACvBF,OAAOE;AAChB;QACA,IAAIF,OAAOK,aAAaF,WAAW;YACjCF,KAAKG,KAAK,aAAaJ,OAAOK;mBACvBL,OAAOK;AAChB;QACA,IAAIL,OAAOM,gBAAgBH,WAAW;YACpC,IAAIH,OAAOM,gBAAgB,MAAML,KAAKG,KAAK;mBACpCJ,OAAOM;AAChB;QACAN,OAAOO,cAAcC,wBAAwB;YAC3CD,aAAaP,OAAOO;YACpBN;;QAEF,OAAOD;;IAGIF,yBAAAW,eAYXT;QAUAU,OAAOC,OAAOC,wBAAwBC,MAAMb;QAE5C,MAAMC,OAAiB;QACvB,IAAID,OAAOc,YAAYX,WAAW;YAChCF,KAAKG,KAAK,YAAYJ,OAAOc;mBACtBd,OAAOc;AAChB;QACA,IAAId,OAAOe,YAAYZ,WAAW;YAChCF,KAAKG,KAAK,YAAYJ,OAAOe;mBACtBf,OAAOe;AAChB;QACA,IAAIf,OAAOgB,qBAAqBb,WAAW;YACzCF,KAAKG,KAAK,qBAAqBJ,OAAOgB;mBAC/BhB,OAAOgB;AAChB;QACA,IAAIhB,OAAOiB,qBAAqBd,WAAW;YACzCF,KAAKG,KAAK,qBAAqBJ,OAAOiB;mBAC/BjB,OAAOiB;AAChB;QACA,IAAIjB,OAAOkB,eAAef,WAAW;YACnCF,KAAKG,KAAK,eAAeJ,OAAOkB;mBACzBlB,OAAOkB;AAChB;QACAlB,OAAOO,cAAcC,wBAAwB;YAC3CD,aAAaP,OAAOO;YACpBN;;QAEF,IAAID,OAAOmB,YAAYhB,WAAW;YAChCF,KAAKG,KAAK,YAAYJ,OAAOmB;mBACtBnB,OAAOmB;AAChB;QACA,OAAOnB;;IAGIF,yBAAAsB,cAYXpB;QAUA,MAAMC,OAAiB;QACvB,IAAID,OAAOqB,cAAclB,WAAW;YAClCF,KAAKG,KAAK,cAAcJ,OAAOqB;mBACxBrB,OAAOqB;AAChB;QACA,IAAIrB,OAAOsB,cAAcnB,WAAW;YAClCF,KAAKG,KAAK,cAAcJ,OAAOsB;mBACxBtB,OAAOsB;AAChB;QACA,IAAItB,OAAOuB,WAAWpB,WAAW;YAC/BF,KAAKG,KAAK,WAAWJ,OAAOuB;mBACrBvB,OAAOuB;AAChB;QACA,IAAIvB,OAAOwB,YAAYrB,WAAW;YAChCF,KAAKG,KAAK,YAAYJ,OAAOwB;mBACtBxB,OAAOwB;AAChB;QACA,IAAIxB,OAAOyB,qBAAqBtB,WAAW;YACzCF,KAAKG,KAAK,qBAAqBJ,OAAOyB;mBAC/BzB,OAAOyB;AAChB;QACA,IAAIzB,OAAOmB,YAAYhB,WAAW;YAChCF,KAAKG,KAAK,YAAYJ,OAAOmB;mBACtBnB,OAAOmB;AAChB;QACAnB,OAAOO,cAAcC,wBAAwB;YAC3CD,aAAaP,OAAOO;YACpBN;;QAEF,OAAOD;;AAEV,EA1ID,CAAiBF,6BAAAA,2BAAwB,CAAA;;AA4IzC,MAAMU,0BAA2BkB;IAI/B,IAAIA,MAAMzB,KAAK0B,WAAW,GAAG,OAAOD,MAAMnB;IAC1C,OAAO,KACDmB,MAAMnB,aAAaoB,SAAS,EAACD,MAAMnB,aAAa,SAAQ,OACzDmB,MAAMzB,OACT2B,KAAK;;;"}