@kubb/plugin-ts 5.0.0-alpha.20 → 5.0.0-alpha.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/Type-Bf8raoQX.cjs +124 -0
  2. package/dist/Type-Bf8raoQX.cjs.map +1 -0
  3. package/dist/Type-BpXxT4l_.js +113 -0
  4. package/dist/Type-BpXxT4l_.js.map +1 -0
  5. package/dist/builderTs-COUg3xtQ.cjs +135 -0
  6. package/dist/builderTs-COUg3xtQ.cjs.map +1 -0
  7. package/dist/builderTs-DPpkJKd1.js +131 -0
  8. package/dist/builderTs-DPpkJKd1.js.map +1 -0
  9. package/dist/builders.cjs +3 -0
  10. package/dist/builders.d.ts +23 -0
  11. package/dist/builders.js +2 -0
  12. package/dist/{casing-Cp-jbC_k.js → casing-BJHFg-zZ.js} +1 -1
  13. package/dist/{casing-Cp-jbC_k.js.map → casing-BJHFg-zZ.js.map} +1 -1
  14. package/dist/{casing-D2uQKLWS.cjs → casing-DHfdqpLi.cjs} +2 -39
  15. package/dist/{casing-D2uQKLWS.cjs.map → casing-DHfdqpLi.cjs.map} +1 -1
  16. package/dist/chunk-ByKO4r7w.cjs +38 -0
  17. package/dist/components.cjs +1 -1
  18. package/dist/components.d.ts +5 -2
  19. package/dist/components.js +1 -1
  20. package/dist/generators-DFDut8o-.js +555 -0
  21. package/dist/generators-DFDut8o-.js.map +1 -0
  22. package/dist/{generators-xHWQCNd9.cjs → generators-DKd7MYbx.cjs} +300 -293
  23. package/dist/generators-DKd7MYbx.cjs.map +1 -0
  24. package/dist/generators.cjs +2 -1
  25. package/dist/generators.d.ts +5 -2
  26. package/dist/generators.js +2 -2
  27. package/dist/index.cjs +75 -36
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.ts +21 -2
  30. package/dist/index.js +73 -35
  31. package/dist/index.js.map +1 -1
  32. package/dist/{Type-B70QnSzH.cjs → printerTs-BcHudagv.cjs} +41 -135
  33. package/dist/printerTs-BcHudagv.cjs.map +1 -0
  34. package/dist/{Type-CMC7L-38.js → printerTs-CMBCOuqd.js} +19 -132
  35. package/dist/printerTs-CMBCOuqd.js.map +1 -0
  36. package/dist/printers.cjs +3 -0
  37. package/dist/printers.d.ts +81 -0
  38. package/dist/printers.js +2 -0
  39. package/dist/{resolvers-DsKabI0F.js → resolverTsLegacy-CPiqqsO6.js} +10 -9
  40. package/dist/resolverTsLegacy-CPiqqsO6.js.map +1 -0
  41. package/dist/{resolvers-YIpeP5YD.cjs → resolverTsLegacy-CuR9XbKk.cjs} +11 -9
  42. package/dist/resolverTsLegacy-CuR9XbKk.cjs.map +1 -0
  43. package/dist/resolvers.cjs +3 -3
  44. package/dist/resolvers.d.ts +1 -1
  45. package/dist/resolvers.js +1 -1
  46. package/dist/{types-zqLMbIqZ.d.ts → types-CRtcZOCz.d.ts} +59 -25
  47. package/package.json +17 -5
  48. package/src/builders/builderTs.ts +107 -0
  49. package/src/builders/index.ts +1 -0
  50. package/src/components/Enum.tsx +15 -11
  51. package/src/components/Type.tsx +20 -9
  52. package/src/factory.ts +0 -32
  53. package/src/generators/index.ts +1 -0
  54. package/src/generators/typeGenerator.tsx +53 -141
  55. package/src/generators/typeGeneratorLegacy.tsx +348 -0
  56. package/src/index.ts +1 -1
  57. package/src/plugin.ts +36 -44
  58. package/src/presets.ts +27 -7
  59. package/src/printers/index.ts +1 -0
  60. package/src/{printer.ts → printers/printerTs.ts} +31 -19
  61. package/src/resolvers/resolverTs.ts +9 -6
  62. package/src/resolvers/resolverTsLegacy.ts +1 -1
  63. package/src/types.ts +72 -24
  64. package/dist/Type-B70QnSzH.cjs.map +0 -1
  65. package/dist/Type-CMC7L-38.js.map +0 -1
  66. package/dist/generators-BFkr7ecU.js +0 -556
  67. package/dist/generators-BFkr7ecU.js.map +0 -1
  68. package/dist/generators-xHWQCNd9.cjs.map +0 -1
  69. package/dist/resolvers-DsKabI0F.js.map +0 -1
  70. package/dist/resolvers-YIpeP5YD.cjs.map +0 -1
  71. package/src/generators/utils.ts +0 -308
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generators-DKd7MYbx.cjs","names":["path","File","Type","builderTs","schemaTypes","ENUM_TYPES_WITH_KEY_SUFFIX","pascalCase","path","File","Type","resolverTsLegacy","schemaTypes","ENUM_TYPES_WITH_KEY_SUFFIX"],"sources":["../src/generators/typeGenerator.tsx","../src/generators/typeGeneratorLegacy.tsx"],"sourcesContent":["import path from 'node:path'\nimport { caseParams, composeTransformers, narrowSchema, schemaTypes, transform } from '@kubb/ast'\nimport type { SchemaNode } from '@kubb/ast/types'\nimport { defineGenerator, getMode } from '@kubb/core'\nimport { File } from '@kubb/react-fabric'\nimport { builderTs } from '../builders/builderTs.ts'\nimport { Type } from '../components/Type.tsx'\nimport { ENUM_TYPES_WITH_KEY_SUFFIX } from '../constants.ts'\nimport type { PluginTs } from '../types'\n\nexport const typeGenerator = defineGenerator<PluginTs>({\n name: 'typescript',\n type: 'react',\n Operation({ node, adapter, options, config }) {\n const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, resolver, transformers = [] } = options\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n const file = resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group })\n\n const params = caseParams(node.parameters, paramsCasing)\n\n function renderSchemaType({\n node: schemaNode,\n name,\n typedName,\n description,\n keysToOmit,\n }: {\n node: SchemaNode | null\n name: string\n typedName: string\n description?: string\n keysToOmit?: Array<string>\n }) {\n if (!schemaNode) {\n return null\n }\n\n const transformedNode = transform(schemaNode, composeTransformers(...transformers))\n\n const imports = adapter.getImports(transformedNode, (schemaName) => ({\n name: resolver.default(schemaName, 'type'),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,\n }))\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}\n <Type\n name={name}\n typedName={typedName}\n node={transformedNode}\n description={description}\n enumType={enumType}\n enumTypeSuffix={enumTypeSuffix}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n resolver={resolver}\n keysToOmit={keysToOmit}\n />\n </>\n )\n }\n\n const paramTypes = params.map((param) =>\n renderSchemaType({\n node: param.schema,\n name: resolver.resolveParamName(node, param),\n typedName: resolver.resolveParamTypedName(node, param),\n }),\n )\n\n const requestType = node.requestBody?.schema\n ? renderSchemaType({\n node: node.requestBody.schema,\n name: resolver.resolveDataName(node),\n typedName: resolver.resolveDataTypedName(node),\n description: node.requestBody.description ?? node.requestBody.schema.description,\n keysToOmit: node.requestBody.keysToOmit,\n })\n : null\n\n const responseTypes = node.responses.map((res) =>\n renderSchemaType({\n node: res.schema,\n name: resolver.resolveResponseStatusName(node, res.statusCode),\n typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),\n description: res.description,\n keysToOmit: res.keysToOmit,\n }),\n )\n\n const dataType = renderSchemaType({\n node: builderTs.buildData({ node: { ...node, parameters: params }, resolver }),\n name: resolver.resolveRequestConfigName(node),\n typedName: resolver.resolveRequestConfigTypedName(node),\n })\n\n const responsesType = renderSchemaType({\n node: builderTs.buildResponses({ node, resolver }),\n name: resolver.resolveResponsesName(node),\n typedName: resolver.resolveResponsesTypedName(node),\n })\n\n const responseType = renderSchemaType({\n node: builderTs.buildResponseUnion({ node, resolver }),\n name: resolver.resolveResponseName(node),\n typedName: resolver.resolveResponseTypedName(node),\n description: 'Union of all possible responses',\n })\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {paramTypes}\n {responseTypes}\n {requestType}\n {dataType}\n {responsesType}\n {responseType}\n </File>\n )\n },\n Schema({ node, adapter, options, config }) {\n const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, resolver, transformers = [] } = options\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n if (!node.name) {\n return\n }\n\n const transformedNode = transform(node, composeTransformers(...transformers))\n\n const imports = adapter.getImports(transformedNode, (schemaName) => ({\n name: resolver.default(schemaName, 'type'),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,\n }))\n\n const isEnumSchema = !!narrowSchema(node, schemaTypes.enum)\n\n const typedName =\n ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyTypedName(node, enumTypeSuffix) : resolver.resolveTypedName(node.name)\n\n const type = {\n name: resolver.resolveName(node.name),\n typedName,\n file: resolver.resolveFile({ name: node.name, extname: '.ts' }, { root, output, group }),\n } as const\n\n return (\n <File\n baseName={type.file.baseName}\n path={type.file.path}\n meta={type.file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[node.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n node={transformedNode}\n enumType={enumType}\n enumTypeSuffix={enumTypeSuffix}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n resolver={resolver}\n />\n </File>\n )\n },\n})\n","import path from 'node:path'\nimport { pascalCase } from '@internals/utils'\nimport { caseParams, composeTransformers, createProperty, createSchema, narrowSchema, schemaTypes, transform } from '@kubb/ast'\nimport type { OperationNode, ParameterNode, SchemaNode } from '@kubb/ast/types'\nimport { defineGenerator, getMode } from '@kubb/core'\nimport { File } from '@kubb/react-fabric'\nimport { Type } from '../components/Type.tsx'\nimport { ENUM_TYPES_WITH_KEY_SUFFIX } from '../constants.ts'\nimport { resolverTsLegacy } from '../resolvers/resolverTsLegacy.ts'\nimport type { PluginTs, ResolverTs } from '../types'\n\ntype BuildGroupedParamsSchemaOptions = {\n params: Array<ParameterNode>\n parentName?: string\n}\n\nfunction buildGroupedParamsSchema({ params, parentName }: BuildGroupedParamsSchemaOptions): SchemaNode {\n return createSchema({\n type: 'object',\n properties: params.map((param) => {\n let schema = param.schema\n if (narrowSchema(schema, 'enum') && !schema.name && parentName) {\n schema = { ...schema, name: pascalCase([parentName, param.name, 'enum'].join(' ')) }\n }\n return createProperty({\n name: param.name,\n required: param.required,\n schema,\n })\n }),\n })\n}\n\ntype BuildOperationSchemaOptions = {\n node: OperationNode\n resolver: ResolverTs\n}\n\nfunction buildLegacyResponsesSchemaNode({ node, resolver }: BuildOperationSchemaOptions): SchemaNode | null {\n const isGet = node.method.toLowerCase() === 'get'\n const successResponses = node.responses.filter((res) => {\n const code = Number(res.statusCode)\n return !Number.isNaN(code) && code >= 200 && code < 300\n })\n const errorResponses = node.responses.filter((res) => res.statusCode === 'default' || Number(res.statusCode) >= 400)\n\n const responseSchema =\n successResponses.length > 0\n ? successResponses.length === 1\n ? createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, successResponses[0]!.statusCode) })\n : createSchema({\n type: 'union',\n members: successResponses.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, res.statusCode) })),\n })\n : createSchema({ type: 'any' })\n\n const errorsSchema =\n errorResponses.length > 0\n ? errorResponses.length === 1\n ? createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, errorResponses[0]!.statusCode) })\n : createSchema({\n type: 'union',\n members: errorResponses.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, res.statusCode) })),\n })\n : createSchema({ type: 'any' })\n\n const properties = [createProperty({ name: 'Response', required: true, schema: responseSchema })]\n\n if (!isGet && node.requestBody?.schema) {\n properties.push(\n createProperty({\n name: 'Request',\n required: true,\n schema: createSchema({ type: 'ref', name: resolver.resolveDataTypedName(node) }),\n }),\n )\n }\n\n if (node.parameters.some((p) => p.in === 'query') && resolver.resolveQueryParamsTypedName) {\n properties.push(\n createProperty({\n name: 'QueryParams',\n required: true,\n schema: createSchema({ type: 'ref', name: resolver.resolveQueryParamsTypedName(node) }),\n }),\n )\n }\n\n if (node.parameters.some((p) => p.in === 'path') && resolver.resolvePathParamsTypedName) {\n properties.push(\n createProperty({\n name: 'PathParams',\n required: true,\n schema: createSchema({ type: 'ref', name: resolver.resolvePathParamsTypedName(node) }),\n }),\n )\n }\n\n if (node.parameters.some((p) => p.in === 'header') && resolver.resolveHeaderParamsTypedName) {\n properties.push(\n createProperty({\n name: 'HeaderParams',\n required: true,\n schema: createSchema({ type: 'ref', name: resolver.resolveHeaderParamsTypedName(node) }),\n }),\n )\n }\n\n properties.push(createProperty({ name: 'Errors', required: true, schema: errorsSchema }))\n\n return createSchema({ type: 'object', properties })\n}\n\nfunction buildLegacyResponseUnionSchemaNode({ node, resolver }: BuildOperationSchemaOptions): SchemaNode {\n const successResponses = node.responses.filter((res) => {\n const code = Number(res.statusCode)\n return !Number.isNaN(code) && code >= 200 && code < 300\n })\n\n if (successResponses.length === 0) {\n return createSchema({ type: 'any' })\n }\n\n if (successResponses.length === 1) {\n return createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, successResponses[0]!.statusCode) })\n }\n\n return createSchema({\n type: 'union',\n members: successResponses.map((res) => createSchema({ type: 'ref', name: resolver.resolveResponseStatusTypedName(node, res.statusCode) })),\n })\n}\n\nfunction nameUnnamedEnums(node: SchemaNode, parentName: string): SchemaNode {\n return transform(node, {\n schema(n) {\n const enumNode = narrowSchema(n, 'enum')\n if (enumNode && !enumNode.name) {\n return { ...enumNode, name: pascalCase([parentName, 'enum'].join(' ')) }\n }\n return undefined\n },\n property(p) {\n const enumNode = narrowSchema(p.schema, 'enum')\n if (enumNode && !enumNode.name) {\n return {\n ...p,\n schema: { ...enumNode, name: pascalCase([parentName, p.name, 'enum'].join(' ')) },\n }\n }\n return undefined\n },\n })\n}\n\nexport const typeGeneratorLegacy = defineGenerator<PluginTs>({\n name: 'typescript-legacy',\n type: 'react',\n Operation({ node, adapter, options, config }) {\n const { enumType, enumTypeSuffix, enumKeyCasing, optionalType, arrayType, syntaxType, paramsCasing, group, output, resolver, transformers = [] } = options\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n const file = resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group })\n const params = caseParams(node.parameters, paramsCasing)\n\n function renderSchemaType({\n node: schemaNode,\n name,\n typedName,\n description,\n keysToOmit,\n }: {\n node: SchemaNode | null\n name: string\n typedName: string\n description?: string\n keysToOmit?: Array<string>\n }) {\n if (!schemaNode) {\n return null\n }\n\n const transformedNode = transform(schemaNode, composeTransformers(...transformers))\n\n const imports = adapter.getImports(transformedNode, (schemaName) => ({\n name: resolver.default(schemaName, 'type'),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,\n }))\n\n return (\n <>\n {mode === 'split' &&\n imports.map((imp) => <File.Import key={[name, imp.path, imp.isTypeOnly].join('-')} root={file.path} path={imp.path} name={imp.name} isTypeOnly />)}\n <Type\n name={name}\n typedName={typedName}\n node={transformedNode}\n description={description}\n enumType={enumType}\n enumTypeSuffix={enumTypeSuffix}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n resolver={resolver}\n keysToOmit={keysToOmit}\n />\n </>\n )\n }\n\n const pathParams = params.filter((p) => p.in === 'path')\n const queryParams = params.filter((p) => p.in === 'query')\n const headerParams = params.filter((p) => p.in === 'header')\n\n const responseTypes = node.responses.map((res) => {\n const responseName = resolver.resolveResponseStatusName(node, res.statusCode)\n const baseResponseName = resolverTsLegacy.resolveResponseStatusName(node, res.statusCode)\n\n return renderSchemaType({\n node: res.schema ? nameUnnamedEnums(res.schema, baseResponseName) : res.schema,\n name: responseName,\n typedName: resolver.resolveResponseStatusTypedName(node, res.statusCode),\n description: res.description,\n keysToOmit: res.keysToOmit,\n })\n })\n\n const requestType = node.requestBody?.schema\n ? renderSchemaType({\n node: nameUnnamedEnums(node.requestBody.schema, resolverTsLegacy.resolveDataName(node)),\n name: resolver.resolveDataName(node),\n typedName: resolver.resolveDataTypedName(node),\n description: node.requestBody.description ?? node.requestBody.schema.description,\n keysToOmit: node.requestBody.keysToOmit,\n })\n : null\n\n const legacyParamTypes = [\n pathParams.length > 0\n ? renderSchemaType({\n node: buildGroupedParamsSchema({ params: pathParams, parentName: resolverTsLegacy.resolvePathParamsName!(node) }),\n name: resolver.resolvePathParamsName!(node),\n typedName: resolver.resolvePathParamsTypedName!(node),\n })\n : null,\n queryParams.length > 0\n ? renderSchemaType({\n node: buildGroupedParamsSchema({ params: queryParams, parentName: resolverTsLegacy.resolveQueryParamsName!(node) }),\n name: resolver.resolveQueryParamsName!(node),\n typedName: resolver.resolveQueryParamsTypedName!(node),\n })\n : null,\n headerParams.length > 0\n ? renderSchemaType({\n node: buildGroupedParamsSchema({ params: headerParams, parentName: resolverTsLegacy.resolveHeaderParamsName!(node) }),\n name: resolver.resolveHeaderParamsName!(node),\n typedName: resolver.resolveHeaderParamsTypedName!(node),\n })\n : null,\n ]\n\n const legacyResponsesType = renderSchemaType({\n node: buildLegacyResponsesSchemaNode({ node, resolver }),\n name: resolver.resolveResponsesName(node),\n typedName: resolver.resolveResponsesTypedName(node),\n })\n\n const legacyResponseType = renderSchemaType({\n node: buildLegacyResponseUnionSchemaNode({ node, resolver }),\n name: resolver.resolveResponseName(node),\n typedName: resolver.resolveResponseTypedName(node),\n })\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {legacyParamTypes}\n {responseTypes}\n {requestType}\n {legacyResponseType}\n {legacyResponsesType}\n </File>\n )\n },\n Schema({ node, adapter, options, config }) {\n const { enumType, enumTypeSuffix, enumKeyCasing, syntaxType, optionalType, arrayType, output, group, resolver, transformers = [] } = options\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n if (!node.name) {\n return\n }\n\n const transformedNode = transform(node, composeTransformers(...transformers))\n\n const imports = adapter.getImports(transformedNode, (schemaName) => ({\n name: resolver.default(schemaName, 'type'),\n path: resolver.resolveFile({ name: schemaName, extname: '.ts' }, { root, output, group }).path,\n }))\n\n const isEnumSchema = !!narrowSchema(node, schemaTypes.enum)\n\n const typedName =\n ENUM_TYPES_WITH_KEY_SUFFIX.has(enumType) && isEnumSchema ? resolver.resolveEnumKeyTypedName(node, enumTypeSuffix) : resolver.resolveTypedName(node.name)\n\n const type = {\n name: resolver.resolveName(node.name),\n typedName,\n file: resolver.resolveFile({ name: node.name, extname: '.ts' }, { root, output, group }),\n } as const\n\n return (\n <File\n baseName={type.file.baseName}\n path={type.file.path}\n meta={type.file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {mode === 'split' &&\n imports.map((imp) => (\n <File.Import key={[node.name, imp.path, imp.isTypeOnly].join('-')} root={type.file.path} path={imp.path} name={imp.name} isTypeOnly />\n ))}\n <Type\n name={type.name}\n typedName={type.typedName}\n node={transformedNode}\n enumType={enumType}\n enumTypeSuffix={enumTypeSuffix}\n enumKeyCasing={enumKeyCasing}\n optionalType={optionalType}\n arrayType={arrayType}\n syntaxType={syntaxType}\n resolver={resolver}\n />\n </File>\n )\n },\n})\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_generators = require("./generators-xHWQCNd9.cjs");
2
+ const require_generators = require("./generators-DKd7MYbx.cjs");
3
3
  exports.typeGenerator = require_generators.typeGenerator;
4
+ exports.typeGeneratorLegacy = require_generators.typeGeneratorLegacy;
@@ -1,9 +1,12 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { n as PluginTs } from "./types-zqLMbIqZ.js";
2
+ import { r as PluginTs } from "./types-CRtcZOCz.js";
3
3
  import * as _kubb_core0 from "@kubb/core";
4
4
 
5
5
  //#region src/generators/typeGenerator.d.ts
6
6
  declare const typeGenerator: _kubb_core0.ReactGeneratorV2<PluginTs>;
7
7
  //#endregion
8
- export { typeGenerator };
8
+ //#region src/generators/typeGeneratorLegacy.d.ts
9
+ declare const typeGeneratorLegacy: _kubb_core0.ReactGeneratorV2<PluginTs>;
10
+ //#endregion
11
+ export { typeGenerator, typeGeneratorLegacy };
9
12
  //# sourceMappingURL=generators.d.ts.map
@@ -1,2 +1,2 @@
1
- import { t as typeGenerator } from "./generators-BFkr7ecU.js";
2
- export { typeGenerator };
1
+ import { n as typeGenerator, t as typeGeneratorLegacy } from "./generators-DFDut8o-.js";
2
+ export { typeGenerator, typeGeneratorLegacy };
package/dist/index.cjs CHANGED
@@ -1,74 +1,116 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_casing = require("./casing-D2uQKLWS.cjs");
3
- const require_generators = require("./generators-xHWQCNd9.cjs");
4
- const require_resolvers = require("./resolvers-YIpeP5YD.cjs");
2
+ const require_chunk = require("./chunk-ByKO4r7w.cjs");
3
+ const require_generators = require("./generators-DKd7MYbx.cjs");
4
+ const require_resolverTsLegacy = require("./resolverTsLegacy-CuR9XbKk.cjs");
5
5
  let node_path = require("node:path");
6
- node_path = require_casing.__toESM(node_path);
6
+ node_path = require_chunk.__toESM(node_path);
7
7
  let _kubb_ast = require("@kubb/ast");
8
8
  let _kubb_core = require("@kubb/core");
9
9
  //#region src/presets.ts
10
+ /**
11
+ * Built-in preset registry for `@kubb/plugin-ts`.
12
+ *
13
+ * - `default` — uses `resolverTs` and `typeGenerator` (current naming conventions).
14
+ * - `kubbV4` — uses `resolverTsLegacy` and `typeGeneratorLegacy` (Kubb v4 naming conventions).
15
+ */
10
16
  const presets = (0, _kubb_core.definePresets)({
11
- default: (0, _kubb_core.definePreset)("default", { resolvers: [require_resolvers.resolverTs] }),
12
- kubbV4: (0, _kubb_core.definePreset)("kubbV4", { resolvers: [require_resolvers.resolverTsLegacy] })
17
+ default: (0, _kubb_core.definePreset)("default", {
18
+ resolvers: [require_resolverTsLegacy.resolverTs],
19
+ generators: [require_generators.typeGenerator]
20
+ }),
21
+ kubbV4: (0, _kubb_core.definePreset)("kubbV4", {
22
+ resolvers: [require_resolverTsLegacy.resolverTsLegacy],
23
+ generators: [require_generators.typeGeneratorLegacy]
24
+ })
13
25
  });
14
- function getPreset(preset, { resolvers, transformers } = {}) {
26
+ /**
27
+ * Resolves a compatibility preset for `plugin-ts`, merging user-supplied resolvers,
28
+ * transformers, and generators on top of the built-in preset defaults.
29
+ *
30
+ * `resolverTs` is always prepended to the resolver list as the baseline.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * const preset = getPreset('kubbV4', { resolvers: [], transformers: [], generators: [] })
35
+ * ```
36
+ */
37
+ function getPreset(preset, { resolvers, transformers, generators }) {
15
38
  return (0, _kubb_core.getPreset)({
16
39
  preset,
17
40
  presets,
18
- resolvers: [require_resolvers.resolverTs, ...resolvers ?? []],
19
- transformers
41
+ resolvers: [require_resolverTsLegacy.resolverTs, ...resolvers ?? []],
42
+ transformers,
43
+ generators
20
44
  });
21
45
  }
22
46
  //#endregion
23
47
  //#region src/plugin.ts
48
+ /**
49
+ * Canonical plugin name for `@kubb/plugin-ts`, used to identify the plugin in driver lookups and warnings.
50
+ */
24
51
  const pluginTsName = "plugin-ts";
52
+ /**
53
+ * The `@kubb/plugin-ts` plugin factory.
54
+ *
55
+ * Generates TypeScript type declarations from an OpenAPI/AST `RootNode`.
56
+ * Walks schemas and operations, delegates rendering to the active generators,
57
+ * and writes barrel files based on `output.barrelType`.
58
+ *
59
+ * @example
60
+ * ```ts
61
+ * import { pluginTs } from '@kubb/plugin-ts'
62
+ *
63
+ * export default defineConfig({
64
+ * plugins: [pluginTs({ output: { path: 'types' }, enumType: 'asConst' })],
65
+ * })
66
+ * ```
67
+ */
25
68
  const pluginTs = (0, _kubb_core.createPlugin)((options) => {
26
69
  const { output = {
27
70
  path: "types",
28
71
  barrelType: "named"
29
- }, group, exclude = [], include, override = [], enumType = "asConst", enumKeyCasing = "none", optionalType = "questionToken", arrayType = "array", syntaxType = "type", paramsCasing, generators = [require_generators.typeGenerator].filter(Boolean), compatibilityPreset = "default", resolvers: userResolvers, transformers: userTransformers = [] } = options;
30
- const { baseResolver, resolver, transformers } = getPreset(compatibilityPreset, {
72
+ }, group, exclude = [], include, override = [], enumType = "asConst", enumTypeSuffix = "Key", enumKeyCasing = "none", optionalType = "questionToken", arrayType = "array", syntaxType = "type", paramsCasing, compatibilityPreset = "default", resolvers: userResolvers = [], transformers: userTransformers = [], generators: userGenerators = [] } = options;
73
+ const { resolver, transformers, generators } = getPreset(compatibilityPreset, {
31
74
  resolvers: userResolvers,
32
- transformers: userTransformers
75
+ transformers: userTransformers,
76
+ generators: userGenerators
33
77
  });
34
78
  let resolveNameWarning = false;
79
+ let resolvePathWarning = false;
35
80
  return {
36
81
  name: pluginTsName,
37
82
  options: {
38
83
  output,
39
84
  optionalType,
85
+ group,
40
86
  arrayType,
41
87
  enumType,
88
+ enumTypeSuffix,
42
89
  enumKeyCasing,
43
90
  syntaxType,
44
- group,
45
- override,
46
91
  paramsCasing,
47
- compatibilityPreset,
48
- baseResolver,
49
92
  resolver,
50
93
  transformers
51
94
  },
52
95
  resolvePath(baseName, pathMode, options) {
53
- const root = node_path.default.resolve(this.config.root, this.config.output.path);
54
- if ((pathMode ?? (0, _kubb_core.getMode)(node_path.default.resolve(root, output.path))) === "single")
55
- /**
56
- * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend
57
- * Other plugins then need to call addOrAppend instead of just add from the fileManager class
58
- */
59
- return node_path.default.resolve(root, output.path);
60
- if (group && (options?.group?.path || options?.group?.tag)) {
61
- const groupName = group?.name ? group.name : (ctx) => {
62
- if (group?.type === "path") return `${ctx.group.split("/")[1]}`;
63
- return `${require_casing.camelCase(ctx.group)}Controller`;
64
- };
65
- return node_path.default.resolve(root, output.path, groupName({ group: group.type === "path" ? options.group.path : options.group.tag }), baseName);
96
+ if (!resolvePathWarning) {
97
+ this.driver.events.emit("warn", "Do not use resolvePath for pluginTs, use resolverTs.resolvePath instead");
98
+ resolvePathWarning = true;
66
99
  }
67
- return node_path.default.resolve(root, output.path, baseName);
100
+ return resolver.resolvePath({
101
+ baseName,
102
+ pathMode,
103
+ tag: options?.group?.tag,
104
+ path: options?.group?.path
105
+ }, {
106
+ root: node_path.default.resolve(this.config.root, this.config.output.path),
107
+ output,
108
+ group
109
+ });
68
110
  },
69
111
  resolveName(name, type) {
70
112
  if (!resolveNameWarning) {
71
- this.driver.events.emit("warn", "Do not use resolveName for pluginTs, use resolverTs instead");
113
+ this.driver.events.emit("warn", "Do not use resolveName for pluginTs, use resolverTs.default instead");
72
114
  resolveNameWarning = true;
73
115
  }
74
116
  return resolver.default(name, type);
@@ -76,7 +118,6 @@ const pluginTs = (0, _kubb_core.createPlugin)((options) => {
76
118
  async install() {
77
119
  const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this;
78
120
  const root = node_path.default.resolve(config.root, config.output.path);
79
- const mode = (0, _kubb_core.getMode)(node_path.default.resolve(root, output.path));
80
121
  if (!adapter) throw new Error("Plugin cannot work without adapter being set");
81
122
  await openInStudio({ ast: true });
82
123
  await (0, _kubb_ast.walk)(rootNode, {
@@ -98,8 +139,7 @@ const pluginTs = (0, _kubb_core.createPlugin)((options) => {
98
139
  fabric,
99
140
  Component: generator.Schema,
100
141
  plugin,
101
- driver,
102
- mode
142
+ driver
103
143
  });
104
144
  }
105
145
  });
@@ -122,8 +162,7 @@ const pluginTs = (0, _kubb_core.createPlugin)((options) => {
122
162
  fabric,
123
163
  Component: generator.Operation,
124
164
  plugin,
125
- driver,
126
- mode
165
+ driver
127
166
  });
128
167
  }
129
168
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["resolverTs","resolverTsLegacy","typeGenerator","path","camelCase"],"sources":["../src/presets.ts","../src/plugin.ts"],"sourcesContent":["import type { Visitor } from '@kubb/ast/types'\nimport { type CompatibilityPreset, definePreset, definePresets, getPreset as getCorePreset } from '@kubb/core'\nimport { resolverTs, resolverTsLegacy } from './resolvers/index.ts'\nimport type { ResolverTs } from './types.ts'\n\nexport const presets = definePresets<ResolverTs>({\n default: definePreset('default', { resolvers: [resolverTs] }),\n kubbV4: definePreset('kubbV4', { resolvers: [resolverTsLegacy] }),\n})\n\ntype GetPresetOptions = {\n resolvers?: Array<ResolverTs>\n transformers?: Array<Visitor>\n}\n\nexport function getPreset(preset: CompatibilityPreset, { resolvers, transformers }: GetPresetOptions = {}) {\n return getCorePreset({\n preset,\n presets,\n resolvers: [resolverTs, ...(resolvers ?? [])],\n transformers,\n })\n}\n","import path from 'node:path'\nimport { camelCase } from '@internals/utils'\nimport { walk } from '@kubb/ast'\nimport { createPlugin, type Group, getBarrelFiles, getMode, renderOperation, renderSchema } from '@kubb/core'\nimport { typeGenerator } from './generators/index.ts'\nimport { getPreset } from './presets.ts'\nimport type { PluginTs } from './types.ts'\n\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\nexport const pluginTs = createPlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumKeyCasing = 'none',\n optionalType = 'questionToken',\n arrayType = 'array',\n syntaxType = 'type',\n paramsCasing,\n generators = [typeGenerator].filter(Boolean),\n compatibilityPreset = 'default',\n resolvers: userResolvers,\n transformers: userTransformers = [],\n } = options\n\n const { baseResolver, resolver, transformers } = getPreset(compatibilityPreset, {\n resolvers: userResolvers,\n transformers: userTransformers,\n })\n\n let resolveNameWarning = false\n\n return {\n name: pluginTsName,\n options: {\n output,\n optionalType,\n arrayType,\n enumType,\n enumKeyCasing,\n syntaxType,\n group,\n override,\n paramsCasing,\n compatibilityPreset,\n baseResolver,\n resolver,\n transformers,\n },\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n if (!resolveNameWarning) {\n this.driver.events.emit('warn', 'Do not use resolveName for pluginTs, use resolverTs instead')\n resolveNameWarning = true\n }\n\n return resolver.default(name, type)\n },\n async install() {\n const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n if (!adapter) {\n throw new Error('Plugin cannot work without adapter being set')\n }\n\n await openInStudio({ ast: true })\n\n await walk(rootNode, {\n depth: 'shallow',\n async schema(schemaNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderSchema(schemaNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Schema,\n plugin,\n driver,\n mode,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n async operation(operationNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(operationNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderOperation(operationNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Operation,\n plugin,\n driver,\n mode,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n })\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["resolverTs","typeGenerator","resolverTsLegacy","typeGeneratorLegacy","path"],"sources":["../src/presets.ts","../src/plugin.ts"],"sourcesContent":["import type { Visitor } from '@kubb/ast/types'\nimport { type CompatibilityPreset, definePreset, definePresets, type Generator, getPreset as getCorePreset } from '@kubb/core'\nimport { typeGenerator, typeGeneratorLegacy } from './generators/index.ts'\nimport { resolverTs, resolverTsLegacy } from './resolvers/index.ts'\nimport type { PluginTs, ResolverTs } from './types.ts'\n\n/**\n * Built-in preset registry for `@kubb/plugin-ts`.\n *\n * - `default` — uses `resolverTs` and `typeGenerator` (current naming conventions).\n * - `kubbV4` — uses `resolverTsLegacy` and `typeGeneratorLegacy` (Kubb v4 naming conventions).\n */\nexport const presets = definePresets<ResolverTs>({\n default: definePreset('default', { resolvers: [resolverTs], generators: [typeGenerator] }),\n kubbV4: definePreset('kubbV4', { resolvers: [resolverTsLegacy], generators: [typeGeneratorLegacy] }),\n})\n\ntype GetPresetOptions = {\n resolvers: Array<ResolverTs>\n transformers: Array<Visitor>\n generators: Array<Generator<PluginTs>>\n}\n\n/**\n * Resolves a compatibility preset for `plugin-ts`, merging user-supplied resolvers,\n * transformers, and generators on top of the built-in preset defaults.\n *\n * `resolverTs` is always prepended to the resolver list as the baseline.\n *\n * @example\n * ```ts\n * const preset = getPreset('kubbV4', { resolvers: [], transformers: [], generators: [] })\n * ```\n */\nexport function getPreset(preset: CompatibilityPreset, { resolvers, transformers, generators }: GetPresetOptions) {\n return getCorePreset({\n preset,\n presets,\n resolvers: [resolverTs, ...(resolvers ?? [])],\n transformers,\n generators,\n })\n}\n","import path from 'node:path'\nimport { walk } from '@kubb/ast'\nimport { createPlugin, getBarrelFiles, renderOperation, renderSchema } from '@kubb/core'\nimport { getPreset } from './presets.ts'\nimport type { PluginTs } from './types.ts'\n\n/**\n * Canonical plugin name for `@kubb/plugin-ts`, used to identify the plugin in driver lookups and warnings.\n */\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\n/**\n * The `@kubb/plugin-ts` plugin factory.\n *\n * Generates TypeScript type declarations from an OpenAPI/AST `RootNode`.\n * Walks schemas and operations, delegates rendering to the active generators,\n * and writes barrel files based on `output.barrelType`.\n *\n * @example\n * ```ts\n * import { pluginTs } from '@kubb/plugin-ts'\n *\n * export default defineConfig({\n * plugins: [pluginTs({ output: { path: 'types' }, enumType: 'asConst' })],\n * })\n * ```\n */\nexport const pluginTs = createPlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumTypeSuffix = 'Key',\n enumKeyCasing = 'none',\n optionalType = 'questionToken',\n arrayType = 'array',\n syntaxType = 'type',\n paramsCasing,\n compatibilityPreset = 'default',\n resolvers: userResolvers = [],\n transformers: userTransformers = [],\n generators: userGenerators = [],\n } = options\n\n const { resolver, transformers, generators } = getPreset(compatibilityPreset, {\n resolvers: userResolvers,\n transformers: userTransformers,\n generators: userGenerators,\n })\n\n let resolveNameWarning = false\n let resolvePathWarning = false\n\n return {\n name: pluginTsName,\n options: {\n output,\n optionalType,\n group,\n arrayType,\n enumType,\n enumTypeSuffix,\n enumKeyCasing,\n syntaxType,\n paramsCasing,\n resolver,\n transformers,\n },\n resolvePath(baseName, pathMode, options) {\n if (!resolvePathWarning) {\n this.driver.events.emit('warn', 'Do not use resolvePath for pluginTs, use resolverTs.resolvePath instead')\n resolvePathWarning = true\n }\n\n return resolver.resolvePath(\n { baseName, pathMode, tag: options?.group?.tag, path: options?.group?.path },\n { root: path.resolve(this.config.root, this.config.output.path), output, group },\n )\n },\n resolveName(name, type) {\n if (!resolveNameWarning) {\n this.driver.events.emit('warn', 'Do not use resolveName for pluginTs, use resolverTs.default instead')\n resolveNameWarning = true\n }\n\n return resolver.default(name, type)\n },\n async install() {\n const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this\n\n const root = path.resolve(config.root, config.output.path)\n\n if (!adapter) {\n throw new Error('Plugin cannot work without adapter being set')\n }\n\n await openInStudio({ ast: true })\n\n await walk(rootNode, {\n depth: 'shallow',\n async schema(schemaNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderSchema(schemaNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Schema,\n plugin,\n driver,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n async operation(operationNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(operationNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderOperation(operationNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Operation,\n plugin,\n driver,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n })\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,29 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { n as PluginTs, r as ResolverTs, t as Options } from "./types-zqLMbIqZ.js";
2
+ import { n as Options, r as PluginTs } from "./types-CRtcZOCz.js";
3
3
  import * as _kubb_core0 from "@kubb/core";
4
4
 
5
5
  //#region src/plugin.d.ts
6
+ /**
7
+ * Canonical plugin name for `@kubb/plugin-ts`, used to identify the plugin in driver lookups and warnings.
8
+ */
6
9
  declare const pluginTsName = "plugin-ts";
10
+ /**
11
+ * The `@kubb/plugin-ts` plugin factory.
12
+ *
13
+ * Generates TypeScript type declarations from an OpenAPI/AST `RootNode`.
14
+ * Walks schemas and operations, delegates rendering to the active generators,
15
+ * and writes barrel files based on `output.barrelType`.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * import { pluginTs } from '@kubb/plugin-ts'
20
+ *
21
+ * export default defineConfig({
22
+ * plugins: [pluginTs({ output: { path: 'types' }, enumType: 'asConst' })],
23
+ * })
24
+ * ```
25
+ */
7
26
  declare const pluginTs: (options?: Options | undefined) => _kubb_core0.UserPluginWithLifeCycle<PluginTs>;
8
27
  //#endregion
9
- export { type PluginTs, type ResolverTs, pluginTs, pluginTsName };
28
+ export { type PluginTs, pluginTs, pluginTsName };
10
29
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,74 +1,115 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { t as camelCase } from "./casing-Cp-jbC_k.js";
3
- import { t as typeGenerator } from "./generators-BFkr7ecU.js";
4
- import { n as resolverTs, t as resolverTsLegacy } from "./resolvers-DsKabI0F.js";
2
+ import { n as typeGenerator, t as typeGeneratorLegacy } from "./generators-DFDut8o-.js";
3
+ import { n as resolverTs, t as resolverTsLegacy } from "./resolverTsLegacy-CPiqqsO6.js";
5
4
  import path from "node:path";
6
5
  import { walk } from "@kubb/ast";
7
- import { createPlugin, definePreset, definePresets, getBarrelFiles, getMode, getPreset, renderOperation, renderSchema } from "@kubb/core";
6
+ import { createPlugin, definePreset, definePresets, getBarrelFiles, getPreset, renderOperation, renderSchema } from "@kubb/core";
8
7
  //#region src/presets.ts
8
+ /**
9
+ * Built-in preset registry for `@kubb/plugin-ts`.
10
+ *
11
+ * - `default` — uses `resolverTs` and `typeGenerator` (current naming conventions).
12
+ * - `kubbV4` — uses `resolverTsLegacy` and `typeGeneratorLegacy` (Kubb v4 naming conventions).
13
+ */
9
14
  const presets = definePresets({
10
- default: definePreset("default", { resolvers: [resolverTs] }),
11
- kubbV4: definePreset("kubbV4", { resolvers: [resolverTsLegacy] })
15
+ default: definePreset("default", {
16
+ resolvers: [resolverTs],
17
+ generators: [typeGenerator]
18
+ }),
19
+ kubbV4: definePreset("kubbV4", {
20
+ resolvers: [resolverTsLegacy],
21
+ generators: [typeGeneratorLegacy]
22
+ })
12
23
  });
13
- function getPreset$1(preset, { resolvers, transformers } = {}) {
24
+ /**
25
+ * Resolves a compatibility preset for `plugin-ts`, merging user-supplied resolvers,
26
+ * transformers, and generators on top of the built-in preset defaults.
27
+ *
28
+ * `resolverTs` is always prepended to the resolver list as the baseline.
29
+ *
30
+ * @example
31
+ * ```ts
32
+ * const preset = getPreset('kubbV4', { resolvers: [], transformers: [], generators: [] })
33
+ * ```
34
+ */
35
+ function getPreset$1(preset, { resolvers, transformers, generators }) {
14
36
  return getPreset({
15
37
  preset,
16
38
  presets,
17
39
  resolvers: [resolverTs, ...resolvers ?? []],
18
- transformers
40
+ transformers,
41
+ generators
19
42
  });
20
43
  }
21
44
  __name(getPreset$1, "getPreset");
22
45
  //#endregion
23
46
  //#region src/plugin.ts
47
+ /**
48
+ * Canonical plugin name for `@kubb/plugin-ts`, used to identify the plugin in driver lookups and warnings.
49
+ */
24
50
  const pluginTsName = "plugin-ts";
51
+ /**
52
+ * The `@kubb/plugin-ts` plugin factory.
53
+ *
54
+ * Generates TypeScript type declarations from an OpenAPI/AST `RootNode`.
55
+ * Walks schemas and operations, delegates rendering to the active generators,
56
+ * and writes barrel files based on `output.barrelType`.
57
+ *
58
+ * @example
59
+ * ```ts
60
+ * import { pluginTs } from '@kubb/plugin-ts'
61
+ *
62
+ * export default defineConfig({
63
+ * plugins: [pluginTs({ output: { path: 'types' }, enumType: 'asConst' })],
64
+ * })
65
+ * ```
66
+ */
25
67
  const pluginTs = createPlugin((options) => {
26
68
  const { output = {
27
69
  path: "types",
28
70
  barrelType: "named"
29
- }, group, exclude = [], include, override = [], enumType = "asConst", enumKeyCasing = "none", optionalType = "questionToken", arrayType = "array", syntaxType = "type", paramsCasing, generators = [typeGenerator].filter(Boolean), compatibilityPreset = "default", resolvers: userResolvers, transformers: userTransformers = [] } = options;
30
- const { baseResolver, resolver, transformers } = getPreset$1(compatibilityPreset, {
71
+ }, group, exclude = [], include, override = [], enumType = "asConst", enumTypeSuffix = "Key", enumKeyCasing = "none", optionalType = "questionToken", arrayType = "array", syntaxType = "type", paramsCasing, compatibilityPreset = "default", resolvers: userResolvers = [], transformers: userTransformers = [], generators: userGenerators = [] } = options;
72
+ const { resolver, transformers, generators } = getPreset$1(compatibilityPreset, {
31
73
  resolvers: userResolvers,
32
- transformers: userTransformers
74
+ transformers: userTransformers,
75
+ generators: userGenerators
33
76
  });
34
77
  let resolveNameWarning = false;
78
+ let resolvePathWarning = false;
35
79
  return {
36
80
  name: pluginTsName,
37
81
  options: {
38
82
  output,
39
83
  optionalType,
84
+ group,
40
85
  arrayType,
41
86
  enumType,
87
+ enumTypeSuffix,
42
88
  enumKeyCasing,
43
89
  syntaxType,
44
- group,
45
- override,
46
90
  paramsCasing,
47
- compatibilityPreset,
48
- baseResolver,
49
91
  resolver,
50
92
  transformers
51
93
  },
52
94
  resolvePath(baseName, pathMode, options) {
53
- const root = path.resolve(this.config.root, this.config.output.path);
54
- if ((pathMode ?? getMode(path.resolve(root, output.path))) === "single")
55
- /**
56
- * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend
57
- * Other plugins then need to call addOrAppend instead of just add from the fileManager class
58
- */
59
- return path.resolve(root, output.path);
60
- if (group && (options?.group?.path || options?.group?.tag)) {
61
- const groupName = group?.name ? group.name : (ctx) => {
62
- if (group?.type === "path") return `${ctx.group.split("/")[1]}`;
63
- return `${camelCase(ctx.group)}Controller`;
64
- };
65
- return path.resolve(root, output.path, groupName({ group: group.type === "path" ? options.group.path : options.group.tag }), baseName);
95
+ if (!resolvePathWarning) {
96
+ this.driver.events.emit("warn", "Do not use resolvePath for pluginTs, use resolverTs.resolvePath instead");
97
+ resolvePathWarning = true;
66
98
  }
67
- return path.resolve(root, output.path, baseName);
99
+ return resolver.resolvePath({
100
+ baseName,
101
+ pathMode,
102
+ tag: options?.group?.tag,
103
+ path: options?.group?.path
104
+ }, {
105
+ root: path.resolve(this.config.root, this.config.output.path),
106
+ output,
107
+ group
108
+ });
68
109
  },
69
110
  resolveName(name, type) {
70
111
  if (!resolveNameWarning) {
71
- this.driver.events.emit("warn", "Do not use resolveName for pluginTs, use resolverTs instead");
112
+ this.driver.events.emit("warn", "Do not use resolveName for pluginTs, use resolverTs.default instead");
72
113
  resolveNameWarning = true;
73
114
  }
74
115
  return resolver.default(name, type);
@@ -76,7 +117,6 @@ const pluginTs = createPlugin((options) => {
76
117
  async install() {
77
118
  const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this;
78
119
  const root = path.resolve(config.root, config.output.path);
79
- const mode = getMode(path.resolve(root, output.path));
80
120
  if (!adapter) throw new Error("Plugin cannot work without adapter being set");
81
121
  await openInStudio({ ast: true });
82
122
  await walk(rootNode, {
@@ -98,8 +138,7 @@ const pluginTs = createPlugin((options) => {
98
138
  fabric,
99
139
  Component: generator.Schema,
100
140
  plugin,
101
- driver,
102
- mode
141
+ driver
103
142
  });
104
143
  }
105
144
  });
@@ -122,8 +161,7 @@ const pluginTs = createPlugin((options) => {
122
161
  fabric,
123
162
  Component: generator.Operation,
124
163
  plugin,
125
- driver,
126
- mode
164
+ driver
127
165
  });
128
166
  }
129
167
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getPreset","getCorePreset","getPreset"],"sources":["../src/presets.ts","../src/plugin.ts"],"sourcesContent":["import type { Visitor } from '@kubb/ast/types'\nimport { type CompatibilityPreset, definePreset, definePresets, getPreset as getCorePreset } from '@kubb/core'\nimport { resolverTs, resolverTsLegacy } from './resolvers/index.ts'\nimport type { ResolverTs } from './types.ts'\n\nexport const presets = definePresets<ResolverTs>({\n default: definePreset('default', { resolvers: [resolverTs] }),\n kubbV4: definePreset('kubbV4', { resolvers: [resolverTsLegacy] }),\n})\n\ntype GetPresetOptions = {\n resolvers?: Array<ResolverTs>\n transformers?: Array<Visitor>\n}\n\nexport function getPreset(preset: CompatibilityPreset, { resolvers, transformers }: GetPresetOptions = {}) {\n return getCorePreset({\n preset,\n presets,\n resolvers: [resolverTs, ...(resolvers ?? [])],\n transformers,\n })\n}\n","import path from 'node:path'\nimport { camelCase } from '@internals/utils'\nimport { walk } from '@kubb/ast'\nimport { createPlugin, type Group, getBarrelFiles, getMode, renderOperation, renderSchema } from '@kubb/core'\nimport { typeGenerator } from './generators/index.ts'\nimport { getPreset } from './presets.ts'\nimport type { PluginTs } from './types.ts'\n\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\nexport const pluginTs = createPlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumKeyCasing = 'none',\n optionalType = 'questionToken',\n arrayType = 'array',\n syntaxType = 'type',\n paramsCasing,\n generators = [typeGenerator].filter(Boolean),\n compatibilityPreset = 'default',\n resolvers: userResolvers,\n transformers: userTransformers = [],\n } = options\n\n const { baseResolver, resolver, transformers } = getPreset(compatibilityPreset, {\n resolvers: userResolvers,\n transformers: userTransformers,\n })\n\n let resolveNameWarning = false\n\n return {\n name: pluginTsName,\n options: {\n output,\n optionalType,\n arrayType,\n enumType,\n enumKeyCasing,\n syntaxType,\n group,\n override,\n paramsCasing,\n compatibilityPreset,\n baseResolver,\n resolver,\n transformers,\n },\n resolvePath(baseName, pathMode, options) {\n const root = path.resolve(this.config.root, this.config.output.path)\n const mode = pathMode ?? getMode(path.resolve(root, output.path))\n\n if (mode === 'single') {\n /**\n * when output is a file then we will always append to the same file(output file), see fileManager.addOrAppend\n * Other plugins then need to call addOrAppend instead of just add from the fileManager class\n */\n return path.resolve(root, output.path)\n }\n\n if (group && (options?.group?.path || options?.group?.tag)) {\n const groupName: Group['name'] = group?.name\n ? group.name\n : (ctx) => {\n if (group?.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n }\n\n return path.resolve(\n root,\n output.path,\n groupName({\n group: group.type === 'path' ? options.group.path! : options.group.tag!,\n }),\n baseName,\n )\n }\n\n return path.resolve(root, output.path, baseName)\n },\n resolveName(name, type) {\n if (!resolveNameWarning) {\n this.driver.events.emit('warn', 'Do not use resolveName for pluginTs, use resolverTs instead')\n resolveNameWarning = true\n }\n\n return resolver.default(name, type)\n },\n async install() {\n const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this\n\n const root = path.resolve(config.root, config.output.path)\n const mode = getMode(path.resolve(root, output.path))\n\n if (!adapter) {\n throw new Error('Plugin cannot work without adapter being set')\n }\n\n await openInStudio({ ast: true })\n\n await walk(rootNode, {\n depth: 'shallow',\n async schema(schemaNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderSchema(schemaNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Schema,\n plugin,\n driver,\n mode,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n async operation(operationNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(operationNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderOperation(operationNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Operation,\n plugin,\n driver,\n mode,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n })\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":";;;;;;;;AAKA,MAAa,UAAU,cAA0B;CAC/C,SAAS,aAAa,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;CAC7D,QAAQ,aAAa,UAAU,EAAE,WAAW,CAAC,iBAAiB,EAAE,CAAC;CAClE,CAAC;AAOF,SAAgBA,YAAU,QAA6B,EAAE,WAAW,iBAAmC,EAAE,EAAE;AACzG,QAAOC,UAAc;EACnB;EACA;EACA,WAAW,CAAC,YAAY,GAAI,aAAa,EAAE,CAAE;EAC7C;EACD,CAAC;;;;;ACbJ,MAAa,eAAe;AAE5B,MAAa,WAAW,cAAwB,YAAY;CAC1D,MAAM,EACJ,SAAS;EAAE,MAAM;EAAS,YAAY;EAAS,EAC/C,OACA,UAAU,EAAE,EACZ,SACA,WAAW,EAAE,EACb,WAAW,WACX,gBAAgB,QAChB,eAAe,iBACf,YAAY,SACZ,aAAa,QACb,cACA,aAAa,CAAC,cAAc,CAAC,OAAO,QAAQ,EAC5C,sBAAsB,WACtB,WAAW,eACX,cAAc,mBAAmB,EAAE,KACjC;CAEJ,MAAM,EAAE,cAAc,UAAU,iBAAiBC,YAAU,qBAAqB;EAC9E,WAAW;EACX,cAAc;EACf,CAAC;CAEF,IAAI,qBAAqB;AAEzB,QAAO;EACL,MAAM;EACN,SAAS;GACP;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,YAAY,UAAU,UAAU,SAAS;GACvC,MAAM,OAAO,KAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK;AAGpE,QAFa,YAAY,QAAQ,KAAK,QAAQ,MAAM,OAAO,KAAK,CAAC,MAEpD;;;;;AAKX,UAAO,KAAK,QAAQ,MAAM,OAAO,KAAK;AAGxC,OAAI,UAAU,SAAS,OAAO,QAAQ,SAAS,OAAO,MAAM;IAC1D,MAAM,YAA2B,OAAO,OACpC,MAAM,QACL,QAAQ;AACP,SAAI,OAAO,SAAS,OAClB,QAAO,GAAG,IAAI,MAAM,MAAM,IAAI,CAAC;AAEjC,YAAO,GAAG,UAAU,IAAI,MAAM,CAAC;;AAGrC,WAAO,KAAK,QACV,MACA,OAAO,MACP,UAAU,EACR,OAAO,MAAM,SAAS,SAAS,QAAQ,MAAM,OAAQ,QAAQ,MAAM,KACpE,CAAC,EACF,SACD;;AAGH,UAAO,KAAK,QAAQ,MAAM,OAAO,MAAM,SAAS;;EAElD,YAAY,MAAM,MAAM;AACtB,OAAI,CAAC,oBAAoB;AACvB,SAAK,OAAO,OAAO,KAAK,QAAQ,8DAA8D;AAC9F,yBAAqB;;AAGvB,UAAO,SAAS,QAAQ,MAAM,KAAK;;EAErC,MAAM,UAAU;GACd,MAAM,EAAE,QAAQ,QAAQ,QAAQ,SAAS,UAAU,QAAQ,iBAAiB;GAE5E,MAAM,OAAO,KAAK,QAAQ,OAAO,MAAM,OAAO,OAAO,KAAK;GAC1D,MAAM,OAAO,QAAQ,KAAK,QAAQ,MAAM,OAAO,KAAK,CAAC;AAErD,OAAI,CAAC,QACH,OAAM,IAAI,MAAM,+CAA+C;AAGjE,SAAM,aAAa,EAAE,KAAK,MAAM,CAAC;AAEjC,SAAM,KAAK,UAAU;IACnB,OAAO;IACP,MAAM,OAAO,YAAY;KACvB,MAAM,aAAa,WAAW,IAAI,OAAO,cAAc;AACrD,UAAI,UAAU,SAAS,WAAW,UAAU,YAAY,KAAK;OAC3D,MAAM,UAAU,SAAS,eAAe,YAAY;QAAE,SAAS,OAAO;QAAS;QAAS;QAAS;QAAU,CAAC;AAE5G,WAAI,YAAY,KACd;AAGF,aAAM,aAAa,YAAY;QAC7B;QACA;QACA;QACA;QACA,WAAW,UAAU;QACrB;QACA;QACA;QACD,CAAC;;OAEJ;AAEF,WAAM,QAAQ,IAAI,WAAW;;IAE/B,MAAM,UAAU,eAAe;KAC7B,MAAM,aAAa,WAAW,IAAI,OAAO,cAAc;AACrD,UAAI,UAAU,SAAS,WAAW,UAAU,YAAY,KAAK;OAC3D,MAAM,UAAU,SAAS,eAAe,eAAe;QAAE,SAAS,OAAO;QAAS;QAAS;QAAS;QAAU,CAAC;AAE/G,WAAI,YAAY,KACd;AAGF,aAAM,gBAAgB,eAAe;QACnC;QACA;QACA;QACA;QACA,WAAW,UAAU;QACrB;QACA;QACA;QACD,CAAC;;OAEJ;AAEF,WAAM,QAAQ,IAAI,WAAW;;IAEhC,CAAC;GAEF,MAAM,cAAc,MAAM,eAAe,KAAK,OAAO,OAAO;IAC1D,MAAM,OAAO,cAAc;IAC3B;IACA;IACA,MAAM,EACJ,YAAY,KAAK,OAAO,MACzB;IACF,CAAC;AAEF,SAAM,KAAK,WAAW,GAAG,YAAY;;EAExC;EACD"}
1
+ {"version":3,"file":"index.js","names":["getPreset","getCorePreset","getPreset"],"sources":["../src/presets.ts","../src/plugin.ts"],"sourcesContent":["import type { Visitor } from '@kubb/ast/types'\nimport { type CompatibilityPreset, definePreset, definePresets, type Generator, getPreset as getCorePreset } from '@kubb/core'\nimport { typeGenerator, typeGeneratorLegacy } from './generators/index.ts'\nimport { resolverTs, resolverTsLegacy } from './resolvers/index.ts'\nimport type { PluginTs, ResolverTs } from './types.ts'\n\n/**\n * Built-in preset registry for `@kubb/plugin-ts`.\n *\n * - `default` — uses `resolverTs` and `typeGenerator` (current naming conventions).\n * - `kubbV4` — uses `resolverTsLegacy` and `typeGeneratorLegacy` (Kubb v4 naming conventions).\n */\nexport const presets = definePresets<ResolverTs>({\n default: definePreset('default', { resolvers: [resolverTs], generators: [typeGenerator] }),\n kubbV4: definePreset('kubbV4', { resolvers: [resolverTsLegacy], generators: [typeGeneratorLegacy] }),\n})\n\ntype GetPresetOptions = {\n resolvers: Array<ResolverTs>\n transformers: Array<Visitor>\n generators: Array<Generator<PluginTs>>\n}\n\n/**\n * Resolves a compatibility preset for `plugin-ts`, merging user-supplied resolvers,\n * transformers, and generators on top of the built-in preset defaults.\n *\n * `resolverTs` is always prepended to the resolver list as the baseline.\n *\n * @example\n * ```ts\n * const preset = getPreset('kubbV4', { resolvers: [], transformers: [], generators: [] })\n * ```\n */\nexport function getPreset(preset: CompatibilityPreset, { resolvers, transformers, generators }: GetPresetOptions) {\n return getCorePreset({\n preset,\n presets,\n resolvers: [resolverTs, ...(resolvers ?? [])],\n transformers,\n generators,\n })\n}\n","import path from 'node:path'\nimport { walk } from '@kubb/ast'\nimport { createPlugin, getBarrelFiles, renderOperation, renderSchema } from '@kubb/core'\nimport { getPreset } from './presets.ts'\nimport type { PluginTs } from './types.ts'\n\n/**\n * Canonical plugin name for `@kubb/plugin-ts`, used to identify the plugin in driver lookups and warnings.\n */\nexport const pluginTsName = 'plugin-ts' satisfies PluginTs['name']\n\n/**\n * The `@kubb/plugin-ts` plugin factory.\n *\n * Generates TypeScript type declarations from an OpenAPI/AST `RootNode`.\n * Walks schemas and operations, delegates rendering to the active generators,\n * and writes barrel files based on `output.barrelType`.\n *\n * @example\n * ```ts\n * import { pluginTs } from '@kubb/plugin-ts'\n *\n * export default defineConfig({\n * plugins: [pluginTs({ output: { path: 'types' }, enumType: 'asConst' })],\n * })\n * ```\n */\nexport const pluginTs = createPlugin<PluginTs>((options) => {\n const {\n output = { path: 'types', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n enumType = 'asConst',\n enumTypeSuffix = 'Key',\n enumKeyCasing = 'none',\n optionalType = 'questionToken',\n arrayType = 'array',\n syntaxType = 'type',\n paramsCasing,\n compatibilityPreset = 'default',\n resolvers: userResolvers = [],\n transformers: userTransformers = [],\n generators: userGenerators = [],\n } = options\n\n const { resolver, transformers, generators } = getPreset(compatibilityPreset, {\n resolvers: userResolvers,\n transformers: userTransformers,\n generators: userGenerators,\n })\n\n let resolveNameWarning = false\n let resolvePathWarning = false\n\n return {\n name: pluginTsName,\n options: {\n output,\n optionalType,\n group,\n arrayType,\n enumType,\n enumTypeSuffix,\n enumKeyCasing,\n syntaxType,\n paramsCasing,\n resolver,\n transformers,\n },\n resolvePath(baseName, pathMode, options) {\n if (!resolvePathWarning) {\n this.driver.events.emit('warn', 'Do not use resolvePath for pluginTs, use resolverTs.resolvePath instead')\n resolvePathWarning = true\n }\n\n return resolver.resolvePath(\n { baseName, pathMode, tag: options?.group?.tag, path: options?.group?.path },\n { root: path.resolve(this.config.root, this.config.output.path), output, group },\n )\n },\n resolveName(name, type) {\n if (!resolveNameWarning) {\n this.driver.events.emit('warn', 'Do not use resolveName for pluginTs, use resolverTs.default instead')\n resolveNameWarning = true\n }\n\n return resolver.default(name, type)\n },\n async install() {\n const { config, fabric, plugin, adapter, rootNode, driver, openInStudio } = this\n\n const root = path.resolve(config.root, config.output.path)\n\n if (!adapter) {\n throw new Error('Plugin cannot work without adapter being set')\n }\n\n await openInStudio({ ast: true })\n\n await walk(rootNode, {\n depth: 'shallow',\n async schema(schemaNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(schemaNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderSchema(schemaNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Schema,\n plugin,\n driver,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n async operation(operationNode) {\n const writeTasks = generators.map(async (generator) => {\n if (generator.type === 'react' && generator.version === '2') {\n const options = resolver.resolveOptions(operationNode, { options: plugin.options, exclude, include, override })\n\n if (options === null) {\n return\n }\n\n await renderOperation(operationNode, {\n options,\n adapter,\n config,\n fabric,\n Component: generator.Operation,\n plugin,\n driver,\n })\n }\n })\n\n await Promise.all(writeTasks)\n },\n })\n\n const barrelFiles = await getBarrelFiles(this.fabric.files, {\n type: output.barrelType ?? 'named',\n root,\n output,\n meta: {\n pluginName: this.plugin.name,\n },\n })\n\n await this.upsertFile(...barrelFiles)\n },\n }\n})\n"],"mappings":"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"}