{"version":3,"file":"class.cjs","sources":["../../../src/loaders/class.ts"],"sourcesContent":["import { SetRequired } from 'type-fest'\nimport { TypeLoaderFn } from '../types.js'\nimport { getSchemaPath } from '../utils/schema.js'\nimport { OpenAPIV3 } from 'openapi-types'\nimport { PropertyMetadataStorage } from '../metadata/property.js'\nimport { loadType } from './type.js'\n\n/**\n * Type loader to load classes as SchemaObject.\n */\nexport const ClassTypeLoader: TypeLoaderFn = async (context, value) => {\n  if (typeof value !== 'function' || !value.prototype) {\n    return\n  }\n\n  const model = value.name\n\n  if (context.schemas[model]) {\n    return { $ref: getSchemaPath(model) }\n  }\n\n  const schema: SetRequired<OpenAPIV3.SchemaObject, 'properties' | 'required'> = {\n    type: 'object',\n    properties: {},\n    required: [],\n  }\n\n  const properties = PropertyMetadataStorage.getMetadata(value.prototype)\n\n  if (!properties) {\n    context.logger.warn(\n      `You tried to use '${model}' as a type but it does not contain any ApiProperty.`\n    )\n    return\n  }\n\n  context.schemas[model] = schema\n\n  for (const [key, property] of Object.entries(properties)) {\n    const { required, type, name, enum: e, schema: s, ...metadata } = property as any\n\n    const propertySchema = await loadType(context, property)\n\n    if (!propertySchema) {\n      context.logger.warn(\n        `Could not infer type from property '${model}.${key}'. You must define it explicitely.`\n      )\n    }\n\n    schema.properties[key] = {\n      ...propertySchema,\n      ...metadata,\n    }\n\n    if (property.required) {\n      schema.required.push(key)\n    }\n  }\n\n  return { $ref: getSchemaPath(model) }\n}\n"],"names":["getSchemaPath","schema","PropertyMetadataStorage","type","loadType"],"mappings":";;;;;;AAUO,MAAM,eAAA,GAAgC,OAAO,OAAA,EAAS,KAAA,KAAU;AACrE,EAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,CAAC,MAAM,SAAA,EAAW;AACnD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAQ,KAAA,CAAM,IAAA;AAEpB,EAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,EAAE,IAAA,EAAMA,oBAAA,CAAc,KAAK,CAAA,EAAE;AAAA,EACtC;AAEA,EAAA,MAAMC,QAAA,GAAyE;AAAA,IAC7E,IAAA,EAAM,QAAA;AAAA,IACN,YAAY,EAAC;AAAA,IACb,UAAU;AAAC,GACb;AAEA,EAAA,MAAM,UAAA,GAAaC,gCAAA,CAAwB,WAAA,CAAY,KAAA,CAAM,SAAS,CAAA;AAEtE,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,MACb,qBAAqB,KAAK,CAAA,oDAAA;AAAA,KAC5B;AACA,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,GAAID,QAAA;AAEzB,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxD,IAAA,MAAM,EAAE,QAAA,QAAUE,MAAA,EAAM,IAAA,EAAM,IAAA,EAAM,GAAG,MAAA,EAAQ,CAAA,EAAG,GAAG,QAAA,EAAS,GAAI,QAAA;AAElE,IAAA,MAAM,cAAA,GAAiB,MAAMC,aAAA,CAAS,OAAA,EAAS,QAAQ,CAAA;AAEvD,IAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,MAAA,OAAA,CAAQ,MAAA,CAAO,IAAA;AAAA,QACb,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,kCAAA;AAAA,OACrD;AAAA,IACF;AAEA,IAAAH,QAAA,CAAO,UAAA,CAAW,GAAG,CAAA,GAAI;AAAA,MACvB,GAAG,cAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAAA,QAAA,CAAO,QAAA,CAAS,KAAK,GAAG,CAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAMD,oBAAA,CAAc,KAAK,CAAA,EAAE;AACtC;;;;"}