@kubb/core 5.0.0-alpha.14 → 5.0.0-alpha.16

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/core",
3
- "version": "5.0.0-alpha.14",
3
+ "version": "5.0.0-alpha.16",
4
4
  "description": "Core functionality for Kubb's plugin-based code generation system, providing the foundation for transforming OpenAPI specifications.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -71,7 +71,7 @@
71
71
  "remeda": "^2.33.6",
72
72
  "semver": "^7.7.4",
73
73
  "tinyexec": "^1.0.4",
74
- "@kubb/ast": "5.0.0-alpha.14"
74
+ "@kubb/ast": "5.0.0-alpha.16"
75
75
  },
76
76
  "devDependencies": {
77
77
  "@types/semver": "^7.7.1",
@@ -0,0 +1,23 @@
1
+ import type { Visitor } from '@kubb/ast/types'
2
+ import type { Preset, Resolver } from './types.ts'
3
+
4
+ /**
5
+ * Creates a typed preset object that bundles a name, resolvers, and optional
6
+ * transformers — the building block for composable plugin presets.
7
+ *
8
+ * @example
9
+ * import { definePreset } from '@kubb/core'
10
+ * import { resolverTsLegacy } from '@kubb/plugin-ts'
11
+ *
12
+ * export const myPreset = definePreset('myPreset', { resolvers: [resolverTsLegacy] })
13
+ *
14
+ * @example
15
+ * // With custom transformers
16
+ * export const myPreset = definePreset('myPreset', { resolvers: [resolverTsLegacy], transformers: [myTransformer] })
17
+ */
18
+ export function definePreset<TResolver extends Resolver = Resolver, TName extends string = string>(
19
+ name: TName,
20
+ { resolvers, transformers }: { resolvers: Array<TResolver>; transformers?: Array<Visitor> },
21
+ ): Preset<TResolver> & { name: TName } {
22
+ return { name, resolvers, transformers }
23
+ }
@@ -0,0 +1,16 @@
1
+ import type { Preset, Presets, Resolver } from './types.ts'
2
+
3
+ /**
4
+ * Creates a typed presets registry object — a named collection of {@link Preset} entries.
5
+ *
6
+ * @example
7
+ * import { definePreset, definePresets } from '@kubb/core'
8
+ * import { resolverTsLegacy } from '@kubb/plugin-ts'
9
+ *
10
+ * export const myPresets = definePresets({
11
+ * kubbV4: definePreset('kubbV4', { resolvers: [resolverTsLegacy] }),
12
+ * })
13
+ */
14
+ export function definePresets<TResolver extends Resolver = Resolver>(presets: Presets<TResolver>): Presets<TResolver> {
15
+ return presets
16
+ }
package/src/index.ts CHANGED
@@ -7,6 +7,8 @@ export { createPlugin } from './createPlugin.ts'
7
7
  export { createStorage } from './createStorage.ts'
8
8
  export { defineGenerator } from './defineGenerator.ts'
9
9
  export { defineLogger } from './defineLogger.ts'
10
+ export { definePreset } from './definePreset.ts'
11
+ export { definePresets } from './definePresets.ts'
10
12
  export { defaultResolveOptions, defineResolver } from './defineResolver.ts'
11
13
  export { getMode, PluginDriver } from './PluginDriver.ts'
12
14
  export { renderOperation, renderOperations, renderSchema } from './renderNode.tsx'
@@ -19,6 +21,7 @@ export { detectFormatter } from './utils/formatters.ts'
19
21
  export type { FileMetaBase } from './utils/getBarrelFiles.ts'
20
22
  export { getBarrelFiles } from './utils/getBarrelFiles.ts'
21
23
  export { getConfigs } from './utils/getConfigs.ts'
24
+ export { getPreset } from './utils/getPreset.ts'
22
25
  export { detectLinter } from './utils/linters.ts'
23
26
  export { mergeResolvers } from './utils/mergeResolvers.ts'
24
27
  export { satisfiesDependency } from './utils/packageJSON.ts'
package/src/types.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { AsyncEventEmitter, PossiblePromise } from '@internals/utils'
2
- import type { Node, RootNode, SchemaNode } from '@kubb/ast/types'
2
+ import type { Node, RootNode, SchemaNode, Visitor } from '@kubb/ast/types'
3
3
  import type { Fabric as FabricType, KubbFile } from '@kubb/fabric-core/types'
4
4
  import type { DEFAULT_STUDIO_URL, logLevel } from './constants.ts'
5
5
  import type { Storage } from './createStorage.ts'
@@ -544,6 +544,42 @@ export type Logger<TOptions extends LoggerOptions = LoggerOptions> = {
544
544
 
545
545
  export type UserLogger<TOptions extends LoggerOptions = LoggerOptions> = Logger<TOptions>
546
546
 
547
+ /**
548
+ * Compatibility preset for code generation tools.
549
+ * - `'default'` – no compatibility adjustments (default behavior).
550
+ * - `'kubbV4'` – align generated names and structures with Kubb v4 output.
551
+ */
552
+ export type CompatibilityPreset = 'default' | 'kubbV4'
553
+
547
554
  export type { Storage } from './createStorage.ts'
548
555
  export type { CoreGeneratorV2, Generator, ReactGeneratorV2 } from './defineGenerator.ts'
549
556
  export type { KubbEvents } from './Kubb.ts'
557
+
558
+ /**
559
+ * A preset bundles a name, one or more resolvers, and optional AST transformers
560
+ * into a single reusable configuration object.
561
+ *
562
+ * @template TResolver - The concrete resolver type for this preset.
563
+ */
564
+ export type Preset<TResolver extends Resolver = Resolver> = {
565
+ /**
566
+ * Unique identifier for this preset.
567
+ */
568
+ name: string
569
+ /**
570
+ * Ordered list of resolvers applied by this preset (last entry wins on merge).
571
+ */
572
+ resolvers: Array<TResolver>
573
+ /**
574
+ * Optional AST visitors / transformers applied after resolving.
575
+ */
576
+ transformers?: Array<Visitor>
577
+ }
578
+
579
+ /**
580
+ * A named registry of presets, keyed by preset name.
581
+ *
582
+ * @template TResolver - The concrete resolver type shared by all presets in this registry.
583
+ * @template TName - The union of valid preset name keys.
584
+ */
585
+ export type Presets<TResolver extends Resolver = Resolver> = Record<CompatibilityPreset, Preset<TResolver>>
@@ -0,0 +1,34 @@
1
+ import type { Visitor } from '@kubb/ast/types'
2
+ import type { CompatibilityPreset, Preset, Presets, Resolver } from '../types.ts'
3
+ import { mergeResolvers } from './mergeResolvers.ts'
4
+
5
+ type GetPresetParams<TResolver extends Resolver> = {
6
+ preset: CompatibilityPreset
7
+ presets: Presets<TResolver>
8
+ resolvers: Array<TResolver>
9
+ transformers?: Array<Visitor>
10
+ }
11
+
12
+ type GetPresetResult<TResolver extends Resolver> = {
13
+ baseResolver: TResolver
14
+ resolver: TResolver
15
+ transformers: Array<Visitor>
16
+ preset: Preset<TResolver> | undefined
17
+ }
18
+
19
+ export function getPreset<TResolver extends Resolver = Resolver>(params: GetPresetParams<TResolver>): GetPresetResult<TResolver> {
20
+ const { preset: presetName, presets, resolvers, transformers: userTransformers } = params
21
+ const [defaultResolver, ...userResolvers] = resolvers
22
+ const preset = presets[presetName]
23
+
24
+ const baseResolver = mergeResolvers(defaultResolver!, ...(preset?.resolvers ?? []))
25
+ const resolver = mergeResolvers(baseResolver, ...(userResolvers ?? []))
26
+ const transformers = [...(preset?.transformers ?? []), ...(userTransformers ?? [])]
27
+
28
+ return {
29
+ baseResolver,
30
+ resolver,
31
+ transformers,
32
+ preset,
33
+ }
34
+ }