{"version":3,"file":"document.mjs","sources":["../../../src/generators/document.ts"],"sourcesContent":["import deepmerge from 'deepmerge'\nimport type { OpenAPIV3 } from 'openapi-types'\nimport type { SetOptional } from 'type-fest'\nimport { Context } from '../context.js'\nimport type { Logger, OpenAPIDocument, TypeLoaderFn } from '../types.js'\nimport { generatePaths } from './paths.js'\n\nexport type GenerateDocumentOptions = {\n  /**\n   * List of Controller constructors that will be loaded into the document.\n   *\n   * @example [UsersController, PostsController]\n   */\n  controllers: Function[]\n\n  /**\n   * Base document that will be deep merged with the result.\n   *\n   * @example { info: { name: \"My Api\", version: \"1.0.0\" } }\n   */\n  document: SetOptional<OpenAPIV3.Document, 'openapi' | 'paths'>\n\n  /**\n   * Custom logger.\n   *\n   * @example { warn: (message) => myLogger.warn(mesage) }\n   * @default console\n   */\n  customLogger?: Logger\n\n  /**\n   * Additional type loaders.\n   *\n   * @example [VineTypeLoader, LuxonTypeLoader]\n   */\n  loaders?: TypeLoaderFn[]\n}\n\n/**\n * Generates a compliant OpenAPIV3 schema.\n */\nexport async function generateDocument(options: GenerateDocumentOptions): Promise<OpenAPIDocument> {\n  const context = new Context(options.customLogger, options.loaders)\n\n  return deepmerge(options.document, {\n    openapi: '3.0.0',\n    paths: await generatePaths(context, options.controllers),\n    components: {\n      schemas: context.schemas,\n    },\n  })\n}\n"],"names":[],"mappings":";;;;AAyCA,eAAsB,iBAAiB,OAAA,EAA4D;AACjG,EAAA,MAAM,UAAU,IAAI,OAAA,CAAQ,OAAA,CAAQ,YAAA,EAAc,QAAQ,OAAO,CAAA;AAEjE,EAAA,OAAO,SAAA,CAAU,QAAQ,QAAA,EAAU;AAAA,IACjC,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,MAAM,aAAA,CAAc,OAAA,EAAS,QAAQ,WAAW,CAAA;AAAA,IACvD,UAAA,EAAY;AAAA,MACV,SAAS,OAAA,CAAQ;AAAA;AACnB,GACD,CAAA;AACH;;;;"}