{"version":3,"file":"hooks.cjs","names":["getName: UseOperationManagerResult['getName']","getGroup: UseOperationManagerResult['getGroup']","getSchemas: UseOperationManagerResult['getSchemas']","getFile: UseOperationManagerResult['getFile']","groupSchemasByName: UseOperationManagerResult['groupSchemasByName']","getName: UseSchemaManagerResult['getName']","getFile: UseSchemaManagerResult['getFile']","getImports: UseSchemaManagerResult['getImports']","SchemaGenerator","schemaKeywords"],"sources":["../src/hooks/useOas.ts","../src/hooks/useOperationManager.ts","../src/hooks/useSchemaManager.ts"],"sourcesContent":["import type { Oas } from '@kubb/oas'\n\nimport { useApp } from '@kubb/react-fabric'\n\nexport function useOas(): Oas {\n  const { meta } = useApp<{ oas: Oas }>()\n\n  return meta.oas\n}\n","import type { FileMetaBase, Plugin, PluginFactoryOptions, ResolveNameParams } from '@kubb/core'\nimport { usePlugin, usePluginManager } from '@kubb/core/hooks'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Operation, Operation as OperationType } from '@kubb/oas'\nimport type { OperationGenerator } from '../OperationGenerator.ts'\nimport type { OperationSchemas } from '../types.ts'\n\ntype FileMeta = FileMetaBase & {\n  pluginKey: Plugin['key']\n  name: string\n  group?: {\n    tag?: string\n    path?: string\n  }\n}\n\nexport type SchemaNames = {\n  request: string | undefined\n  parameters: {\n    path: string | undefined\n    query: string | undefined\n    header: string | undefined\n  }\n  responses: { default?: string } & Record<number | string, string>\n  errors: Record<number | string, string>\n}\n\ntype UseOperationManagerResult = {\n  getName: (\n    operation: OperationType,\n    params: {\n      prefix?: string\n      suffix?: string\n      pluginKey?: Plugin['key']\n      type: ResolveNameParams['type']\n    },\n  ) => string\n  getFile: (\n    operation: OperationType,\n    params?: {\n      prefix?: string\n      suffix?: string\n      pluginKey?: Plugin['key']\n      extname?: KubbFile.Extname\n      group?: {\n        tag?: string\n        path?: string\n      }\n    },\n  ) => KubbFile.File<FileMeta>\n  groupSchemasByName: (\n    operation: OperationType,\n    params: {\n      pluginKey?: Plugin['key']\n      type: ResolveNameParams['type']\n    },\n  ) => SchemaNames\n  getSchemas: (operation: Operation, params?: { pluginKey?: Plugin['key']; type?: ResolveNameParams['type'] }) => OperationSchemas\n  getGroup: (operation: Operation) => FileMeta['group'] | undefined\n}\n\n/**\n * `useOperationManager` will return some helper functions that can be used to get the operation file, get the operation name.\n */\nexport function useOperationManager<TPluginOptions extends PluginFactoryOptions = PluginFactoryOptions>(\n  generator: Omit<OperationGenerator<TPluginOptions>, 'build'>,\n): UseOperationManagerResult {\n  const plugin = usePlugin()\n  const pluginManager = usePluginManager()\n\n  const getName: UseOperationManagerResult['getName'] = (operation, { prefix = '', suffix = '', pluginKey = plugin.key, type }) => {\n    return pluginManager.resolveName({\n      name: `${prefix} ${operation.getOperationId()} ${suffix}`,\n      pluginKey,\n      type,\n    })\n  }\n\n  const getGroup: UseOperationManagerResult['getGroup'] = (operation) => {\n    return {\n      tag: operation.getTags().at(0)?.name,\n      path: operation.path,\n    }\n  }\n\n  const getSchemas: UseOperationManagerResult['getSchemas'] = (operation, params) => {\n    if (!generator) {\n      throw new Error(`'generator' is not defined`)\n    }\n\n    return generator.getSchemas(operation, {\n      resolveName: (name) =>\n        pluginManager.resolveName({\n          name,\n          pluginKey: params?.pluginKey,\n          type: params?.type,\n        }),\n    })\n  }\n\n  const getFile: UseOperationManagerResult['getFile'] = (operation, { prefix, suffix, pluginKey = plugin.key, extname = '.ts' } = {}) => {\n    const name = getName(operation, { type: 'file', pluginKey, prefix, suffix })\n    const group = getGroup(operation)\n\n    const file = pluginManager.getFile({\n      name,\n      extname,\n      pluginKey,\n      options: { type: 'file', pluginKey, group },\n    })\n\n    return {\n      ...file,\n      meta: {\n        ...file.meta,\n        name,\n        pluginKey,\n        group,\n      },\n    }\n  }\n\n  const groupSchemasByName: UseOperationManagerResult['groupSchemasByName'] = (operation, { pluginKey = plugin.key, type }) => {\n    if (!generator) {\n      throw new Error(`'generator' is not defined`)\n    }\n\n    const schemas = generator.getSchemas(operation)\n\n    const errors = (schemas.errors || []).reduce(\n      (prev, acc) => {\n        if (!acc.statusCode) {\n          return prev\n        }\n\n        prev[acc.statusCode] = pluginManager.resolveName({\n          name: acc.name,\n          pluginKey,\n          type,\n        })\n\n        return prev\n      },\n      {} as Record<number, string>,\n    )\n\n    const responses = (schemas.responses || []).reduce(\n      (prev, acc) => {\n        if (!acc.statusCode) {\n          return prev\n        }\n\n        prev[acc.statusCode] = pluginManager.resolveName({\n          name: acc.name,\n          pluginKey,\n          type,\n        })\n\n        return prev\n      },\n      {} as Record<number, string>,\n    )\n\n    return {\n      request: schemas.request?.name\n        ? pluginManager.resolveName({\n            name: schemas.request.name,\n            pluginKey,\n            type,\n          })\n        : undefined,\n      parameters: {\n        path: schemas.pathParams?.name\n          ? pluginManager.resolveName({\n              name: schemas.pathParams.name,\n              pluginKey,\n              type,\n            })\n          : undefined,\n        query: schemas.queryParams?.name\n          ? pluginManager.resolveName({\n              name: schemas.queryParams.name,\n              pluginKey,\n              type,\n            })\n          : undefined,\n        header: schemas.headerParams?.name\n          ? pluginManager.resolveName({\n              name: schemas.headerParams.name,\n              pluginKey,\n              type,\n            })\n          : undefined,\n      },\n      responses: {\n        ...responses,\n        ['default']: pluginManager.resolveName({\n          name: schemas.response.name,\n          pluginKey,\n          type,\n        }),\n        ...errors,\n      },\n      errors,\n    }\n  }\n\n  return {\n    getName,\n    getFile,\n    getSchemas,\n    groupSchemasByName,\n    getGroup,\n  }\n}\n","import type { FileMetaBase, Plugin, ResolveNameParams } from '@kubb/core'\nimport { usePlugin, usePluginManager } from '@kubb/core/hooks'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport { SchemaGenerator } from '../SchemaGenerator.ts'\nimport { type Schema, schemaKeywords } from '../SchemaMapper'\n\ntype FileMeta = FileMetaBase & {\n  pluginKey: Plugin['key']\n  name: string\n  group?: {\n    tag?: string\n    path?: string\n  }\n}\n\ntype UseSchemaManagerResult = {\n  getName: (name: string, params: { pluginKey?: Plugin['key']; type: ResolveNameParams['type'] }) => string\n  getFile: (\n    name: string,\n    params?: {\n      pluginKey?: Plugin['key']\n      mode?: KubbFile.Mode\n      extname?: KubbFile.Extname\n      group?: {\n        tag?: string\n        path?: string\n      }\n    },\n  ) => KubbFile.File<FileMeta>\n  getImports: (tree: Array<Schema>) => Array<KubbFile.Import>\n}\n\n/**\n * `useSchemaManager` will return some helper functions that can be used to get the schema file, get the schema name.\n */\nexport function useSchemaManager(): UseSchemaManagerResult {\n  const plugin = usePlugin()\n  const pluginManager = usePluginManager()\n\n  const getName: UseSchemaManagerResult['getName'] = (name, { pluginKey = plugin.key, type }) => {\n    return pluginManager.resolveName({\n      name,\n      pluginKey,\n      type,\n    })\n  }\n\n  const getFile: UseSchemaManagerResult['getFile'] = (name, { mode = 'split', pluginKey = plugin.key, extname = '.ts', group } = {}) => {\n    const resolvedName = mode === 'single' ? '' : getName(name, { type: 'file', pluginKey })\n\n    const file = pluginManager.getFile({\n      name: resolvedName,\n      extname,\n      pluginKey,\n      options: { type: 'file', pluginKey, group },\n    })\n\n    return {\n      ...file,\n      meta: {\n        ...file.meta,\n        name: resolvedName,\n        pluginKey,\n      },\n    }\n  }\n\n  const getImports: UseSchemaManagerResult['getImports'] = (tree) => {\n    const refs = SchemaGenerator.deepSearch(tree, schemaKeywords.ref)\n\n    return refs\n      ?.map((item) => {\n        if (!item.args.path || !item.args.isImportable) {\n          return undefined\n        }\n\n        return {\n          name: [item.args.name],\n          path: item.args.path,\n        }\n      })\n      .filter(Boolean)\n  }\n\n  return {\n    getName,\n    getFile,\n    getImports,\n  }\n}\n"],"mappings":"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"}