@samchon/openapi
Version:
OpenAPI definitions and converters for 'typia' and 'nestia'.
1 lines • 4.57 kB
Source Map (JSON)
{"version":3,"file":"OpenApiObjectValidator.mjs","sources":["../../../src/utils/internal/OpenApiObjectValidator.ts"],"sourcesContent":["import { OpenApi } from \"../../OpenApi\";\nimport { NamingConvention } from \"../NamingConvention\";\nimport { IOpenApiValidatorContext } from \"./IOpenApiValidatorContext\";\nimport { OpenApiStationValidator } from \"./OpenApiStationValidator\";\n\nexport namespace OpenApiObjectValidator {\n export const validate = (\n ctx: IOpenApiValidatorContext<OpenApi.IJsonSchema.IObject>,\n ): boolean => {\n if (typeof ctx.value !== \"object\" || ctx.value === null)\n return ctx.report(ctx);\n return [\n ...Object.entries(ctx.schema.properties ?? {}).map(([key, value]) =>\n OpenApiStationValidator.validate({\n ...ctx,\n schema: value,\n value: (ctx.value as Record<string, any>)[key],\n path:\n ctx.path +\n (NamingConvention.variable(key)\n ? `.${key}`\n : `[${JSON.stringify(key)}]`),\n required: ctx.schema.required?.includes(key) ?? false,\n }),\n ),\n ...(typeof ctx.schema.additionalProperties === \"object\" &&\n ctx.schema.additionalProperties !== null\n ? Object.entries(ctx.value)\n .filter(\n ([key]) =>\n Object.keys(ctx.schema.properties ?? {}).includes(key) ===\n false,\n )\n .map(([key, value]) =>\n OpenApiStationValidator.validate({\n ...ctx,\n schema: ctx.schema.additionalProperties as OpenApi.IJsonSchema,\n value,\n path:\n ctx.path +\n (NamingConvention.variable(key)\n ? `.${key}`\n : `[${JSON.stringify(key)}]`),\n required: true,\n }),\n )\n : []),\n ...(ctx.equals === true &&\n (ctx.schema.additionalProperties ?? false) === false\n ? [validateEquals(ctx)]\n : []),\n ].every((v) => v);\n };\n\n const validateEquals = (\n ctx: IOpenApiValidatorContext<OpenApi.IJsonSchema.IObject>,\n ): boolean => {\n const regular: Set<string> = new Set(\n Object.keys(ctx.schema.properties ?? {}),\n );\n return Object.entries(ctx.value as object)\n .map(([key, value]) => {\n if (regular.has(key) === true) return true;\n return ctx.report({\n ...ctx,\n path:\n ctx.path +\n (NamingConvention.variable(key)\n ? `.${key}`\n : `[${JSON.stringify(key)}]`),\n value,\n expected: \"undefined\",\n description: [\n `The property \\`${key}\\` is not defined in the object type.`,\n \"\",\n \"Please remove the property next time.\",\n ].join(\"\\n\"),\n });\n })\n .every((v) => v);\n };\n}\n"],"names":["OpenApiObjectValidator","validate","ctx","value","report","Object","entries","schema","properties","map","key","OpenApiStationValidator","path","NamingConvention","variable","JSON","stringify","required","includes","additionalProperties","filter","keys","equals","validateEquals","every","v","regular","Set","has","expected","description","join"],"mappings":";;;;AAKM,IAAWA;;CAAjB,SAAiBA;IACFA,uBAAAC,WACXC;QAEA,WAAWA,IAAIC,UAAU,YAAYD,IAAIC,UAAU,MACjD,OAAOD,IAAIE,OAAOF;QACpB,OAAO,KACFG,OAAOC,QAAQJ,IAAIK,OAAOC,cAAc,CAAE,GAAEC,KAAI,EAAEC,KAAKP,WACxDQ,wBAAwBV,SAAS;eAC5BC;YACHK,QAAQJ;YACRA,OAAQD,IAAIC,MAA8BO;YAC1CE,MACEV,IAAIU,QACHC,iBAAiBC,SAASJ,OACvB,IAAIA,QACJ,IAAIK,KAAKC,UAAUN;YACzBO,UAAUf,IAAIK,OAAOU,UAAUC,SAASR,QAAQ;wBAGzCR,IAAIK,OAAOY,yBAAyB,YAC/CjB,IAAIK,OAAOY,yBAAyB,OAChCd,OAAOC,QAAQJ,IAAIC,OAChBiB,QACC,EAAEV,SACAL,OAAOgB,KAAKnB,IAAIK,OAAOC,cAAc,CAAA,GAAIU,SAASR,SAClD,QAEHD,KAAI,EAAEC,KAAKP,WACVQ,wBAAwBV,SAAS;eAC5BC;YACHK,QAAQL,IAAIK,OAAOY;YACnBhB;YACAS,MACEV,IAAIU,QACHC,iBAAiBC,SAASJ,OACvB,IAAIA,QACJ,IAAIK,KAAKC,UAAUN;YACzBO,UAAU;eAGhB,OACAf,IAAIoB,WAAW,SAClBpB,IAAIK,OAAOY,wBAAwB,WAAW,QAC3C,EAACI,eAAerB,SAChB,KACJsB,OAAOC,KAAMA;AAAE;IAGnB,MAAMF,iBACJrB;QAEA,MAAMwB,UAAuB,IAAIC,IAC/BtB,OAAOgB,KAAKnB,IAAIK,OAAOC,cAAc,CAAA;QAEvC,OAAOH,OAAOC,QAAQJ,IAAIC,OACvBM,KAAI,EAAEC,KAAKP;YACV,IAAIuB,QAAQE,IAAIlB,SAAS,MAAM,OAAO;YACtC,OAAOR,IAAIE,OAAO;mBACbF;gBACHU,MACEV,IAAIU,QACHC,iBAAiBC,SAASJ,OACvB,IAAIA,QACJ,IAAIK,KAAKC,UAAUN;gBACzBP;gBACA0B,UAAU;gBACVC,aAAa,EACX,kBAAkBpB,4CAClB,IACA,0CACAqB,KAAK;;AACP,YAEHP,OAAOC,KAAMA;AAAE;AAErB,EA5ED,CAAiBzB,2BAAAA,yBA4EhB,CAAA;;"}