{"version":3,"file":"document.mjs","sources":["../../src/generators/document.ts"],"sourcesContent":["import type { OpenAPIV3 } from \"openapi-types\";\nimport type { OpenAPIDocument, TypeLoaderFn } from \"../index.js\";\nimport type { Logger } from \"../types.js\";\nimport type { SetOptional } from \"type-fest\";\nimport { Context } from \"../context.js\";\nimport { generatePaths } from \"./paths.js\";\nimport deepmerge from \"deepmerge\";\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":";;;;AA0CA,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;;;;"}