@kubb/core 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.
package/dist/hooks.cjs CHANGED
@@ -1,92 +1,20 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_chunk = require("./chunk-ByKO4r7w.cjs");
3
- let node_path = require("node:path");
4
- node_path = require_chunk.__toESM(node_path);
2
+ require("./chunk-ByKO4r7w.cjs");
5
3
  let _kubb_react_fabric = require("@kubb/react-fabric");
6
- //#region src/hooks/useKubb.ts
4
+ //#region src/hooks/useDriver.ts
7
5
  /**
8
- * Generates the default "Generated by Kubb" banner from node metadata.
9
- */
10
- function buildDefaultBanner({ title, description, version, config }) {
11
- try {
12
- let source = "";
13
- if (Array.isArray(config.input)) {
14
- const first = config.input[0];
15
- if (first && "path" in first) source = node_path.default.basename(first.path);
16
- } else if ("path" in config.input) source = node_path.default.basename(config.input.path);
17
- else if ("data" in config.input) source = "text content";
18
- let banner = "/**\n* Generated by Kubb (https://kubb.dev/).\n* Do not edit manually.\n";
19
- if (config.output.defaultBanner === "simple") {
20
- banner += "*/\n";
21
- return banner;
22
- }
23
- if (source) banner += `* Source: ${source}\n`;
24
- if (title) banner += `* Title: ${title}\n`;
25
- if (description) {
26
- const formattedDescription = description.replace(/\n/gm, "\n* ");
27
- banner += `* Description: ${formattedDescription}\n`;
28
- }
29
- if (version) banner += `* OpenAPI spec version: ${version}\n`;
30
- banner += "*/\n";
31
- return banner;
32
- } catch (_error) {
33
- return "/**\n* Generated by Kubb (https://kubb.dev/).\n* Do not edit manually.\n*/";
34
- }
35
- }
36
- /**
37
- * React-Fabric hook that exposes the current plugin context inside a generator component.
6
+ * Returns the `PluginDriver` instance from Fabric context.
38
7
  *
39
- * Returns the active `plugin`, `mode`, `config`, and a set of resolver helpers
40
- * (`getFile`, `resolveName`, `resolvePath`, `resolveBanner`, `resolveFooter`) that
41
- * all default to the current plugin when no explicit `pluginName` is provided.
42
- *
43
- * @example
44
- * ```ts
45
- * function Operation({ node }: OperationProps) {
46
- * const { config, resolvePath } = useKubb()
47
- * const filePath = resolvePath({ baseName: node.operationId })
48
- * return <File path={filePath}>...</File>
49
- * }
50
- * ```
8
+ * Use this inside React generator components to access the driver, config, and adapter.
51
9
  */
52
- function useKubb() {
10
+ function useDriver() {
53
11
  const { meta } = (0, _kubb_react_fabric.useFabric)();
54
- const config = meta.driver.config;
55
- const defaultPluginName = meta.plugin.name;
56
- const output = meta.plugin.options?.output;
57
- return {
58
- plugin: meta.plugin,
59
- mode: meta.mode,
60
- config,
61
- getPluginByName: (pluginName = defaultPluginName) => meta.driver.getPluginByName.call(meta.driver, pluginName),
62
- getFile: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.getFile.call(meta.driver, {
63
- pluginName,
64
- ...rest
65
- }),
66
- resolveName: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolveName.call(meta.driver, {
67
- pluginName,
68
- ...rest
69
- }),
70
- resolvePath: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolvePath.call(meta.driver, {
71
- pluginName,
72
- ...rest
73
- }),
74
- resolveBanner: (node) => {
75
- if (typeof output?.banner === "function") return node ? output.banner(node) : buildDefaultBanner({ config });
76
- if (typeof output?.banner === "string") return output.banner;
77
- if (config.output.defaultBanner === false) return;
78
- return buildDefaultBanner({ config });
79
- },
80
- resolveFooter: (node) => {
81
- if (typeof output?.footer === "function") return node ? output.footer(node) : void 0;
82
- if (typeof output?.footer === "string") return output.footer;
83
- }
84
- };
12
+ return meta.driver;
85
13
  }
86
14
  //#endregion
87
15
  //#region src/hooks/useMode.ts
88
16
  /**
89
- * @deprecated use `useKubb` instead
17
+ * @deprecated use `mode` from the generator component props instead
90
18
  */
91
19
  function useMode() {
92
20
  const { meta } = (0, _kubb_react_fabric.useFabric)();
@@ -95,25 +23,15 @@ function useMode() {
95
23
  //#endregion
96
24
  //#region src/hooks/usePlugin.ts
97
25
  /**
98
- * @deprecated use useKubb instead
26
+ * @deprecated use `plugin` from the generator component props instead
99
27
  */
100
28
  function usePlugin() {
101
29
  const { meta } = (0, _kubb_react_fabric.useFabric)();
102
30
  return meta.plugin;
103
31
  }
104
32
  //#endregion
105
- //#region src/hooks/usePluginDriver.ts
106
- /**
107
- * @deprecated use `useKubb` instead
108
- */
109
- function usePluginDriver() {
110
- const { meta } = (0, _kubb_react_fabric.useFabric)();
111
- return meta.driver;
112
- }
113
- //#endregion
114
- exports.useKubb = useKubb;
33
+ exports.useDriver = useDriver;
115
34
  exports.useMode = useMode;
116
35
  exports.usePlugin = usePlugin;
117
- exports.usePluginDriver = usePluginDriver;
118
36
 
119
37
  //# sourceMappingURL=hooks.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.cjs","names":["path"],"sources":["../src/hooks/useKubb.ts","../src/hooks/useMode.ts","../src/hooks/usePlugin.ts","../src/hooks/usePluginDriver.ts"],"sourcesContent":["import path from 'node:path'\nimport type { RootNode } from '@kubb/ast/types'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport { useFabric } from '@kubb/react-fabric'\nimport type { GetFileOptions, PluginDriver } from '../PluginDriver.ts'\nimport type { Config, Plugin, PluginFactoryOptions, ResolveNameParams, ResolvePathParams } from '../types.ts'\n\ntype ResolvePathOptions = {\n pluginName?: string\n group?: {\n tag?: string\n path?: string\n }\n type?: ResolveNameParams['type']\n}\n\ntype UseKubbReturn<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {\n plugin: Plugin<TOptions>\n mode: KubbFile.Mode\n config: Config\n /**\n * Returns the plugin whose `name` matches `pluginName`, defaulting to the current plugin.\n */\n getPluginByName: (pluginName?: string) => Plugin | undefined\n /**\n * Resolves a file reference, defaulting `pluginName` to the current plugin.\n */\n getFile: (params: Omit<GetFileOptions<ResolvePathOptions>, 'pluginName'> & { pluginName?: string }) => KubbFile.File<{ pluginName: string }>\n /**\n * Resolves a name, defaulting `pluginName` to the current plugin.\n * @deprecated user `resolver` from options instead\n */\n resolveName: (params: Omit<ResolveNameParams, 'pluginName'> & { pluginName?: string }) => string\n /**\n * Resolves a path, defaulting `pluginName` to the current plugin.\n */\n resolvePath: <TPathOptions = object>(params: Omit<ResolvePathParams<TPathOptions>, 'pluginName'> & { pluginName?: string }) => KubbFile.Path\n /**\n * Resolves the banner using the plugin's `output.banner` option.\n * Falls back to the default \"Generated by Kubb\" banner when `output.banner` is unset.\n * When `output.banner` is a function and no node is provided, returns the default banner.\n */\n resolveBanner: (node?: RootNode) => string | undefined\n /**\n * Resolves the footer using the plugin's `output.footer` option.\n * Returns `undefined` when no footer is configured.\n * When `output.footer` is a function and no node is provided, returns `undefined`.\n */\n resolveFooter: (node?: RootNode) => string | undefined\n}\n\n/**\n * Generates the default \"Generated by Kubb\" banner from node metadata.\n */\nfunction buildDefaultBanner({ title, description, version, config }: { title?: string; description?: string; version?: string; config: Config }): string {\n try {\n let source = ''\n if (Array.isArray(config.input)) {\n const first = config.input[0]\n if (first && 'path' in first) {\n source = path.basename(first.path)\n }\n } else if ('path' in config.input) {\n source = path.basename(config.input.path)\n } else if ('data' in config.input) {\n source = 'text content'\n }\n\n let banner = '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n'\n\n if (config.output.defaultBanner === 'simple') {\n banner += '*/\\n'\n return banner\n }\n\n if (source) {\n banner += `* Source: ${source}\\n`\n }\n\n if (title) {\n banner += `* Title: ${title}\\n`\n }\n\n if (description) {\n const formattedDescription = description.replace(/\\n/gm, '\\n* ')\n banner += `* Description: ${formattedDescription}\\n`\n }\n\n if (version) {\n banner += `* OpenAPI spec version: ${version}\\n`\n }\n\n banner += '*/\\n'\n return banner\n } catch (_error) {\n return '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n*/'\n }\n}\n\n/**\n * React-Fabric hook that exposes the current plugin context inside a generator component.\n *\n * Returns the active `plugin`, `mode`, `config`, and a set of resolver helpers\n * (`getFile`, `resolveName`, `resolvePath`, `resolveBanner`, `resolveFooter`) that\n * all default to the current plugin when no explicit `pluginName` is provided.\n *\n * @example\n * ```ts\n * function Operation({ node }: OperationProps) {\n * const { config, resolvePath } = useKubb()\n * const filePath = resolvePath({ baseName: node.operationId })\n * return <File path={filePath}>...</File>\n * }\n * ```\n */\nexport function useKubb<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): UseKubbReturn<TOptions> {\n const { meta } = useFabric<{\n plugin: Plugin<TOptions>\n mode: KubbFile.Mode\n driver: PluginDriver\n }>()\n\n const config = meta.driver.config\n const defaultPluginName = meta.plugin.name\n\n const output = (\n meta.plugin.options as { output?: { banner?: string | ((node: RootNode) => string); footer?: string | ((node: RootNode) => string) } } | undefined\n )?.output\n\n return {\n plugin: meta.plugin as Plugin<TOptions>,\n mode: meta.mode,\n config,\n getPluginByName: (pluginName = defaultPluginName) => meta.driver.getPluginByName.call(meta.driver, pluginName),\n getFile: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.getFile.call(meta.driver, { pluginName, ...rest }),\n resolveName: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolveName.call(meta.driver, { pluginName, ...rest }),\n resolvePath: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolvePath.call(meta.driver, { pluginName, ...rest }),\n resolveBanner: (node?: RootNode) => {\n if (typeof output?.banner === 'function') {\n return node ? output.banner(node) : buildDefaultBanner({ config })\n }\n if (typeof output?.banner === 'string') {\n return output.banner\n }\n if (config.output.defaultBanner === false) {\n return undefined\n }\n return buildDefaultBanner({ config })\n },\n resolveFooter: (node?: RootNode) => {\n if (typeof output?.footer === 'function') {\n return node ? output.footer(node) : undefined\n }\n if (typeof output?.footer === 'string') {\n return output.footer\n }\n return undefined\n },\n }\n}\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport { useFabric } from '@kubb/react-fabric'\n\n/**\n * @deprecated use `useKubb` instead\n */\nexport function useMode(): KubbFile.Mode {\n const { meta } = useFabric<{ mode: KubbFile.Mode }>()\n\n return meta.mode\n}\n","import { useFabric } from '@kubb/react-fabric'\nimport type { Plugin, PluginFactoryOptions } from '../types.ts'\n\n/**\n * @deprecated use useKubb instead\n */\nexport function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions> {\n const { meta } = useFabric<{ plugin: Plugin<TOptions> }>()\n\n return meta.plugin\n}\n","import { useFabric } from '@kubb/react-fabric'\nimport type { PluginDriver } from '../PluginDriver.ts'\n\n/**\n * @deprecated use `useKubb` instead\n */\nexport function usePluginDriver(): PluginDriver {\n const { meta } = useFabric<{ driver: PluginDriver }>()\n\n return meta.driver\n}\n"],"mappings":";;;;;;;;;AAsDA,SAAS,mBAAmB,EAAE,OAAO,aAAa,SAAS,UAA8F;AACvJ,KAAI;EACF,IAAI,SAAS;AACb,MAAI,MAAM,QAAQ,OAAO,MAAM,EAAE;GAC/B,MAAM,QAAQ,OAAO,MAAM;AAC3B,OAAI,SAAS,UAAU,MACrB,UAASA,UAAAA,QAAK,SAAS,MAAM,KAAK;aAE3B,UAAU,OAAO,MAC1B,UAASA,UAAAA,QAAK,SAAS,OAAO,MAAM,KAAK;WAChC,UAAU,OAAO,MAC1B,UAAS;EAGX,IAAI,SAAS;AAEb,MAAI,OAAO,OAAO,kBAAkB,UAAU;AAC5C,aAAU;AACV,UAAO;;AAGT,MAAI,OACF,WAAU,aAAa,OAAO;AAGhC,MAAI,MACF,WAAU,YAAY,MAAM;AAG9B,MAAI,aAAa;GACf,MAAM,uBAAuB,YAAY,QAAQ,QAAQ,OAAO;AAChE,aAAU,kBAAkB,qBAAqB;;AAGnD,MAAI,QACF,WAAU,2BAA2B,QAAQ;AAG/C,YAAU;AACV,SAAO;UACA,QAAQ;AACf,SAAO;;;;;;;;;;;;;;;;;;;AAoBX,SAAgB,UAAiG;CAC/G,MAAM,EAAE,UAAA,GAAA,mBAAA,YAIJ;CAEJ,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,oBAAoB,KAAK,OAAO;CAEtC,MAAM,SACJ,KAAK,OAAO,SACX;AAEH,QAAO;EACL,QAAQ,KAAK;EACb,MAAM,KAAK;EACX;EACA,kBAAkB,aAAa,sBAAsB,KAAK,OAAO,gBAAgB,KAAK,KAAK,QAAQ,WAAW;EAC9G,UAAU,EAAE,aAAa,mBAAmB,GAAG,WAAW,KAAK,OAAO,QAAQ,KAAK,KAAK,QAAQ;GAAE;GAAY,GAAG;GAAM,CAAC;EACxH,cAAc,EAAE,aAAa,mBAAmB,GAAG,WAAW,KAAK,OAAO,YAAY,KAAK,KAAK,QAAQ;GAAE;GAAY,GAAG;GAAM,CAAC;EAChI,cAAc,EAAE,aAAa,mBAAmB,GAAG,WAAW,KAAK,OAAO,YAAY,KAAK,KAAK,QAAQ;GAAE;GAAY,GAAG;GAAM,CAAC;EAChI,gBAAgB,SAAoB;AAClC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,OAAO,KAAK,GAAG,mBAAmB,EAAE,QAAQ,CAAC;AAEpE,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;AAEhB,OAAI,OAAO,OAAO,kBAAkB,MAClC;AAEF,UAAO,mBAAmB,EAAE,QAAQ,CAAC;;EAEvC,gBAAgB,SAAoB;AAClC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,OAAO,KAAK,GAAG,KAAA;AAEtC,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;;EAInB;;;;;;;ACxJH,SAAgB,UAAyB;CACvC,MAAM,EAAE,UAAA,GAAA,mBAAA,YAA6C;AAErD,QAAO,KAAK;;;;;;;ACHd,SAAgB,YAA4F;CAC1G,MAAM,EAAE,UAAA,GAAA,mBAAA,YAAkD;AAE1D,QAAO,KAAK;;;;;;;ACHd,SAAgB,kBAAgC;CAC9C,MAAM,EAAE,UAAA,GAAA,mBAAA,YAA8C;AAEtD,QAAO,KAAK"}
1
+ {"version":3,"file":"hooks.cjs","names":[],"sources":["../src/hooks/useDriver.ts","../src/hooks/useMode.ts","../src/hooks/usePlugin.ts"],"sourcesContent":["import { useFabric } from '@kubb/react-fabric'\nimport type { PluginDriver } from '../PluginDriver.ts'\n\n/**\n * Returns the `PluginDriver` instance from Fabric context.\n *\n * Use this inside React generator components to access the driver, config, and adapter.\n */\nexport function useDriver(): PluginDriver {\n const { meta } = useFabric<{ driver: PluginDriver }>()\n\n return meta.driver\n}\n","import type { FabricFile } from '@kubb/fabric-core/types'\nimport { useFabric } from '@kubb/react-fabric'\n\n/**\n * @deprecated use `mode` from the generator component props instead\n */\nexport function useMode(): FabricFile.Mode {\n const { meta } = useFabric<{ mode: FabricFile.Mode }>()\n\n return meta.mode\n}\n","import { useFabric } from '@kubb/react-fabric'\nimport type { Plugin, PluginFactoryOptions } from '../types.ts'\n\n/**\n * @deprecated use `plugin` from the generator component props instead\n */\nexport function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions> {\n const { meta } = useFabric<{ plugin: Plugin<TOptions> }>()\n\n return meta.plugin\n}\n"],"mappings":";;;;;;;;;AAQA,SAAgB,YAA0B;CACxC,MAAM,EAAE,UAAA,GAAA,mBAAA,YAA8C;AAEtD,QAAO,KAAK;;;;;;;ACLd,SAAgB,UAA2B;CACzC,MAAM,EAAE,UAAA,GAAA,mBAAA,YAA+C;AAEvD,QAAO,KAAK;;;;;;;ACHd,SAAgB,YAA4F;CAC1G,MAAM,EAAE,UAAA,GAAA,mBAAA,YAAkD;AAE1D,QAAO,KAAK"}
package/dist/hooks.d.ts CHANGED
@@ -1,94 +1,26 @@
1
1
  import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { b as PluginFactoryOptions, j as ResolvePathParams, k as ResolveNameParams, l as Config, n as PluginDriver, t as GetFileOptions, v as Plugin } from "./PluginDriver-BkSenc-R.js";
3
- import { RootNode } from "@kubb/ast/types";
4
- import { KubbFile } from "@kubb/fabric-core/types";
2
+ import { C as PluginFactoryOptions, t as PluginDriver, x as Plugin } from "./PluginDriver-DZdEyCoa.js";
3
+ import { FabricFile } from "@kubb/fabric-core/types";
5
4
 
6
- //#region src/hooks/useKubb.d.ts
7
- type ResolvePathOptions = {
8
- pluginName?: string;
9
- group?: {
10
- tag?: string;
11
- path?: string;
12
- };
13
- type?: ResolveNameParams['type'];
14
- };
15
- type UseKubbReturn<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {
16
- plugin: Plugin<TOptions>;
17
- mode: KubbFile.Mode;
18
- config: Config;
19
- /**
20
- * Returns the plugin whose `name` matches `pluginName`, defaulting to the current plugin.
21
- */
22
- getPluginByName: (pluginName?: string) => Plugin | undefined;
23
- /**
24
- * Resolves a file reference, defaulting `pluginName` to the current plugin.
25
- */
26
- getFile: (params: Omit<GetFileOptions<ResolvePathOptions>, 'pluginName'> & {
27
- pluginName?: string;
28
- }) => KubbFile.File<{
29
- pluginName: string;
30
- }>;
31
- /**
32
- * Resolves a name, defaulting `pluginName` to the current plugin.
33
- * @deprecated user `resolver` from options instead
34
- */
35
- resolveName: (params: Omit<ResolveNameParams, 'pluginName'> & {
36
- pluginName?: string;
37
- }) => string;
38
- /**
39
- * Resolves a path, defaulting `pluginName` to the current plugin.
40
- */
41
- resolvePath: <TPathOptions = object>(params: Omit<ResolvePathParams<TPathOptions>, 'pluginName'> & {
42
- pluginName?: string;
43
- }) => KubbFile.Path;
44
- /**
45
- * Resolves the banner using the plugin's `output.banner` option.
46
- * Falls back to the default "Generated by Kubb" banner when `output.banner` is unset.
47
- * When `output.banner` is a function and no node is provided, returns the default banner.
48
- */
49
- resolveBanner: (node?: RootNode) => string | undefined;
50
- /**
51
- * Resolves the footer using the plugin's `output.footer` option.
52
- * Returns `undefined` when no footer is configured.
53
- * When `output.footer` is a function and no node is provided, returns `undefined`.
54
- */
55
- resolveFooter: (node?: RootNode) => string | undefined;
56
- };
5
+ //#region src/hooks/useDriver.d.ts
57
6
  /**
58
- * React-Fabric hook that exposes the current plugin context inside a generator component.
7
+ * Returns the `PluginDriver` instance from Fabric context.
59
8
  *
60
- * Returns the active `plugin`, `mode`, `config`, and a set of resolver helpers
61
- * (`getFile`, `resolveName`, `resolvePath`, `resolveBanner`, `resolveFooter`) that
62
- * all default to the current plugin when no explicit `pluginName` is provided.
63
- *
64
- * @example
65
- * ```ts
66
- * function Operation({ node }: OperationProps) {
67
- * const { config, resolvePath } = useKubb()
68
- * const filePath = resolvePath({ baseName: node.operationId })
69
- * return <File path={filePath}>...</File>
70
- * }
71
- * ```
9
+ * Use this inside React generator components to access the driver, config, and adapter.
72
10
  */
73
- declare function useKubb<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): UseKubbReturn<TOptions>;
11
+ declare function useDriver(): PluginDriver;
74
12
  //#endregion
75
13
  //#region src/hooks/useMode.d.ts
76
14
  /**
77
- * @deprecated use `useKubb` instead
15
+ * @deprecated use `mode` from the generator component props instead
78
16
  */
79
- declare function useMode(): KubbFile.Mode;
17
+ declare function useMode(): FabricFile.Mode;
80
18
  //#endregion
81
19
  //#region src/hooks/usePlugin.d.ts
82
20
  /**
83
- * @deprecated use useKubb instead
21
+ * @deprecated use `plugin` from the generator component props instead
84
22
  */
85
23
  declare function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions>;
86
24
  //#endregion
87
- //#region src/hooks/usePluginDriver.d.ts
88
- /**
89
- * @deprecated use `useKubb` instead
90
- */
91
- declare function usePluginDriver(): PluginDriver;
92
- //#endregion
93
- export { useKubb, useMode, usePlugin, usePluginDriver };
25
+ export { useDriver, useMode, usePlugin };
94
26
  //# sourceMappingURL=hooks.d.ts.map
package/dist/hooks.js CHANGED
@@ -1,90 +1,19 @@
1
1
  import "./chunk--u3MIqq1.js";
2
- import path from "node:path";
3
2
  import { useFabric } from "@kubb/react-fabric";
4
- //#region src/hooks/useKubb.ts
3
+ //#region src/hooks/useDriver.ts
5
4
  /**
6
- * Generates the default "Generated by Kubb" banner from node metadata.
7
- */
8
- function buildDefaultBanner({ title, description, version, config }) {
9
- try {
10
- let source = "";
11
- if (Array.isArray(config.input)) {
12
- const first = config.input[0];
13
- if (first && "path" in first) source = path.basename(first.path);
14
- } else if ("path" in config.input) source = path.basename(config.input.path);
15
- else if ("data" in config.input) source = "text content";
16
- let banner = "/**\n* Generated by Kubb (https://kubb.dev/).\n* Do not edit manually.\n";
17
- if (config.output.defaultBanner === "simple") {
18
- banner += "*/\n";
19
- return banner;
20
- }
21
- if (source) banner += `* Source: ${source}\n`;
22
- if (title) banner += `* Title: ${title}\n`;
23
- if (description) {
24
- const formattedDescription = description.replace(/\n/gm, "\n* ");
25
- banner += `* Description: ${formattedDescription}\n`;
26
- }
27
- if (version) banner += `* OpenAPI spec version: ${version}\n`;
28
- banner += "*/\n";
29
- return banner;
30
- } catch (_error) {
31
- return "/**\n* Generated by Kubb (https://kubb.dev/).\n* Do not edit manually.\n*/";
32
- }
33
- }
34
- /**
35
- * React-Fabric hook that exposes the current plugin context inside a generator component.
5
+ * Returns the `PluginDriver` instance from Fabric context.
36
6
  *
37
- * Returns the active `plugin`, `mode`, `config`, and a set of resolver helpers
38
- * (`getFile`, `resolveName`, `resolvePath`, `resolveBanner`, `resolveFooter`) that
39
- * all default to the current plugin when no explicit `pluginName` is provided.
40
- *
41
- * @example
42
- * ```ts
43
- * function Operation({ node }: OperationProps) {
44
- * const { config, resolvePath } = useKubb()
45
- * const filePath = resolvePath({ baseName: node.operationId })
46
- * return <File path={filePath}>...</File>
47
- * }
48
- * ```
7
+ * Use this inside React generator components to access the driver, config, and adapter.
49
8
  */
50
- function useKubb() {
9
+ function useDriver() {
51
10
  const { meta } = useFabric();
52
- const config = meta.driver.config;
53
- const defaultPluginName = meta.plugin.name;
54
- const output = meta.plugin.options?.output;
55
- return {
56
- plugin: meta.plugin,
57
- mode: meta.mode,
58
- config,
59
- getPluginByName: (pluginName = defaultPluginName) => meta.driver.getPluginByName.call(meta.driver, pluginName),
60
- getFile: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.getFile.call(meta.driver, {
61
- pluginName,
62
- ...rest
63
- }),
64
- resolveName: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolveName.call(meta.driver, {
65
- pluginName,
66
- ...rest
67
- }),
68
- resolvePath: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolvePath.call(meta.driver, {
69
- pluginName,
70
- ...rest
71
- }),
72
- resolveBanner: (node) => {
73
- if (typeof output?.banner === "function") return node ? output.banner(node) : buildDefaultBanner({ config });
74
- if (typeof output?.banner === "string") return output.banner;
75
- if (config.output.defaultBanner === false) return;
76
- return buildDefaultBanner({ config });
77
- },
78
- resolveFooter: (node) => {
79
- if (typeof output?.footer === "function") return node ? output.footer(node) : void 0;
80
- if (typeof output?.footer === "string") return output.footer;
81
- }
82
- };
11
+ return meta.driver;
83
12
  }
84
13
  //#endregion
85
14
  //#region src/hooks/useMode.ts
86
15
  /**
87
- * @deprecated use `useKubb` instead
16
+ * @deprecated use `mode` from the generator component props instead
88
17
  */
89
18
  function useMode() {
90
19
  const { meta } = useFabric();
@@ -93,22 +22,13 @@ function useMode() {
93
22
  //#endregion
94
23
  //#region src/hooks/usePlugin.ts
95
24
  /**
96
- * @deprecated use useKubb instead
25
+ * @deprecated use `plugin` from the generator component props instead
97
26
  */
98
27
  function usePlugin() {
99
28
  const { meta } = useFabric();
100
29
  return meta.plugin;
101
30
  }
102
31
  //#endregion
103
- //#region src/hooks/usePluginDriver.ts
104
- /**
105
- * @deprecated use `useKubb` instead
106
- */
107
- function usePluginDriver() {
108
- const { meta } = useFabric();
109
- return meta.driver;
110
- }
111
- //#endregion
112
- export { useKubb, useMode, usePlugin, usePluginDriver };
32
+ export { useDriver, useMode, usePlugin };
113
33
 
114
34
  //# sourceMappingURL=hooks.js.map
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","names":[],"sources":["../src/hooks/useKubb.ts","../src/hooks/useMode.ts","../src/hooks/usePlugin.ts","../src/hooks/usePluginDriver.ts"],"sourcesContent":["import path from 'node:path'\nimport type { RootNode } from '@kubb/ast/types'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport { useFabric } from '@kubb/react-fabric'\nimport type { GetFileOptions, PluginDriver } from '../PluginDriver.ts'\nimport type { Config, Plugin, PluginFactoryOptions, ResolveNameParams, ResolvePathParams } from '../types.ts'\n\ntype ResolvePathOptions = {\n pluginName?: string\n group?: {\n tag?: string\n path?: string\n }\n type?: ResolveNameParams['type']\n}\n\ntype UseKubbReturn<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {\n plugin: Plugin<TOptions>\n mode: KubbFile.Mode\n config: Config\n /**\n * Returns the plugin whose `name` matches `pluginName`, defaulting to the current plugin.\n */\n getPluginByName: (pluginName?: string) => Plugin | undefined\n /**\n * Resolves a file reference, defaulting `pluginName` to the current plugin.\n */\n getFile: (params: Omit<GetFileOptions<ResolvePathOptions>, 'pluginName'> & { pluginName?: string }) => KubbFile.File<{ pluginName: string }>\n /**\n * Resolves a name, defaulting `pluginName` to the current plugin.\n * @deprecated user `resolver` from options instead\n */\n resolveName: (params: Omit<ResolveNameParams, 'pluginName'> & { pluginName?: string }) => string\n /**\n * Resolves a path, defaulting `pluginName` to the current plugin.\n */\n resolvePath: <TPathOptions = object>(params: Omit<ResolvePathParams<TPathOptions>, 'pluginName'> & { pluginName?: string }) => KubbFile.Path\n /**\n * Resolves the banner using the plugin's `output.banner` option.\n * Falls back to the default \"Generated by Kubb\" banner when `output.banner` is unset.\n * When `output.banner` is a function and no node is provided, returns the default banner.\n */\n resolveBanner: (node?: RootNode) => string | undefined\n /**\n * Resolves the footer using the plugin's `output.footer` option.\n * Returns `undefined` when no footer is configured.\n * When `output.footer` is a function and no node is provided, returns `undefined`.\n */\n resolveFooter: (node?: RootNode) => string | undefined\n}\n\n/**\n * Generates the default \"Generated by Kubb\" banner from node metadata.\n */\nfunction buildDefaultBanner({ title, description, version, config }: { title?: string; description?: string; version?: string; config: Config }): string {\n try {\n let source = ''\n if (Array.isArray(config.input)) {\n const first = config.input[0]\n if (first && 'path' in first) {\n source = path.basename(first.path)\n }\n } else if ('path' in config.input) {\n source = path.basename(config.input.path)\n } else if ('data' in config.input) {\n source = 'text content'\n }\n\n let banner = '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n'\n\n if (config.output.defaultBanner === 'simple') {\n banner += '*/\\n'\n return banner\n }\n\n if (source) {\n banner += `* Source: ${source}\\n`\n }\n\n if (title) {\n banner += `* Title: ${title}\\n`\n }\n\n if (description) {\n const formattedDescription = description.replace(/\\n/gm, '\\n* ')\n banner += `* Description: ${formattedDescription}\\n`\n }\n\n if (version) {\n banner += `* OpenAPI spec version: ${version}\\n`\n }\n\n banner += '*/\\n'\n return banner\n } catch (_error) {\n return '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n*/'\n }\n}\n\n/**\n * React-Fabric hook that exposes the current plugin context inside a generator component.\n *\n * Returns the active `plugin`, `mode`, `config`, and a set of resolver helpers\n * (`getFile`, `resolveName`, `resolvePath`, `resolveBanner`, `resolveFooter`) that\n * all default to the current plugin when no explicit `pluginName` is provided.\n *\n * @example\n * ```ts\n * function Operation({ node }: OperationProps) {\n * const { config, resolvePath } = useKubb()\n * const filePath = resolvePath({ baseName: node.operationId })\n * return <File path={filePath}>...</File>\n * }\n * ```\n */\nexport function useKubb<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): UseKubbReturn<TOptions> {\n const { meta } = useFabric<{\n plugin: Plugin<TOptions>\n mode: KubbFile.Mode\n driver: PluginDriver\n }>()\n\n const config = meta.driver.config\n const defaultPluginName = meta.plugin.name\n\n const output = (\n meta.plugin.options as { output?: { banner?: string | ((node: RootNode) => string); footer?: string | ((node: RootNode) => string) } } | undefined\n )?.output\n\n return {\n plugin: meta.plugin as Plugin<TOptions>,\n mode: meta.mode,\n config,\n getPluginByName: (pluginName = defaultPluginName) => meta.driver.getPluginByName.call(meta.driver, pluginName),\n getFile: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.getFile.call(meta.driver, { pluginName, ...rest }),\n resolveName: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolveName.call(meta.driver, { pluginName, ...rest }),\n resolvePath: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolvePath.call(meta.driver, { pluginName, ...rest }),\n resolveBanner: (node?: RootNode) => {\n if (typeof output?.banner === 'function') {\n return node ? output.banner(node) : buildDefaultBanner({ config })\n }\n if (typeof output?.banner === 'string') {\n return output.banner\n }\n if (config.output.defaultBanner === false) {\n return undefined\n }\n return buildDefaultBanner({ config })\n },\n resolveFooter: (node?: RootNode) => {\n if (typeof output?.footer === 'function') {\n return node ? output.footer(node) : undefined\n }\n if (typeof output?.footer === 'string') {\n return output.footer\n }\n return undefined\n },\n }\n}\n","import type { KubbFile } from '@kubb/fabric-core/types'\nimport { useFabric } from '@kubb/react-fabric'\n\n/**\n * @deprecated use `useKubb` instead\n */\nexport function useMode(): KubbFile.Mode {\n const { meta } = useFabric<{ mode: KubbFile.Mode }>()\n\n return meta.mode\n}\n","import { useFabric } from '@kubb/react-fabric'\nimport type { Plugin, PluginFactoryOptions } from '../types.ts'\n\n/**\n * @deprecated use useKubb instead\n */\nexport function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions> {\n const { meta } = useFabric<{ plugin: Plugin<TOptions> }>()\n\n return meta.plugin\n}\n","import { useFabric } from '@kubb/react-fabric'\nimport type { PluginDriver } from '../PluginDriver.ts'\n\n/**\n * @deprecated use `useKubb` instead\n */\nexport function usePluginDriver(): PluginDriver {\n const { meta } = useFabric<{ driver: PluginDriver }>()\n\n return meta.driver\n}\n"],"mappings":";;;;;;;AAsDA,SAAS,mBAAmB,EAAE,OAAO,aAAa,SAAS,UAA8F;AACvJ,KAAI;EACF,IAAI,SAAS;AACb,MAAI,MAAM,QAAQ,OAAO,MAAM,EAAE;GAC/B,MAAM,QAAQ,OAAO,MAAM;AAC3B,OAAI,SAAS,UAAU,MACrB,UAAS,KAAK,SAAS,MAAM,KAAK;aAE3B,UAAU,OAAO,MAC1B,UAAS,KAAK,SAAS,OAAO,MAAM,KAAK;WAChC,UAAU,OAAO,MAC1B,UAAS;EAGX,IAAI,SAAS;AAEb,MAAI,OAAO,OAAO,kBAAkB,UAAU;AAC5C,aAAU;AACV,UAAO;;AAGT,MAAI,OACF,WAAU,aAAa,OAAO;AAGhC,MAAI,MACF,WAAU,YAAY,MAAM;AAG9B,MAAI,aAAa;GACf,MAAM,uBAAuB,YAAY,QAAQ,QAAQ,OAAO;AAChE,aAAU,kBAAkB,qBAAqB;;AAGnD,MAAI,QACF,WAAU,2BAA2B,QAAQ;AAG/C,YAAU;AACV,SAAO;UACA,QAAQ;AACf,SAAO;;;;;;;;;;;;;;;;;;;AAoBX,SAAgB,UAAiG;CAC/G,MAAM,EAAE,SAAS,WAIb;CAEJ,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,oBAAoB,KAAK,OAAO;CAEtC,MAAM,SACJ,KAAK,OAAO,SACX;AAEH,QAAO;EACL,QAAQ,KAAK;EACb,MAAM,KAAK;EACX;EACA,kBAAkB,aAAa,sBAAsB,KAAK,OAAO,gBAAgB,KAAK,KAAK,QAAQ,WAAW;EAC9G,UAAU,EAAE,aAAa,mBAAmB,GAAG,WAAW,KAAK,OAAO,QAAQ,KAAK,KAAK,QAAQ;GAAE;GAAY,GAAG;GAAM,CAAC;EACxH,cAAc,EAAE,aAAa,mBAAmB,GAAG,WAAW,KAAK,OAAO,YAAY,KAAK,KAAK,QAAQ;GAAE;GAAY,GAAG;GAAM,CAAC;EAChI,cAAc,EAAE,aAAa,mBAAmB,GAAG,WAAW,KAAK,OAAO,YAAY,KAAK,KAAK,QAAQ;GAAE;GAAY,GAAG;GAAM,CAAC;EAChI,gBAAgB,SAAoB;AAClC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,OAAO,KAAK,GAAG,mBAAmB,EAAE,QAAQ,CAAC;AAEpE,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;AAEhB,OAAI,OAAO,OAAO,kBAAkB,MAClC;AAEF,UAAO,mBAAmB,EAAE,QAAQ,CAAC;;EAEvC,gBAAgB,SAAoB;AAClC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,OAAO,KAAK,GAAG,KAAA;AAEtC,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;;EAInB;;;;;;;ACxJH,SAAgB,UAAyB;CACvC,MAAM,EAAE,SAAS,WAAoC;AAErD,QAAO,KAAK;;;;;;;ACHd,SAAgB,YAA4F;CAC1G,MAAM,EAAE,SAAS,WAAyC;AAE1D,QAAO,KAAK;;;;;;;ACHd,SAAgB,kBAAgC;CAC9C,MAAM,EAAE,SAAS,WAAqC;AAEtD,QAAO,KAAK"}
1
+ {"version":3,"file":"hooks.js","names":[],"sources":["../src/hooks/useDriver.ts","../src/hooks/useMode.ts","../src/hooks/usePlugin.ts"],"sourcesContent":["import { useFabric } from '@kubb/react-fabric'\nimport type { PluginDriver } from '../PluginDriver.ts'\n\n/**\n * Returns the `PluginDriver` instance from Fabric context.\n *\n * Use this inside React generator components to access the driver, config, and adapter.\n */\nexport function useDriver(): PluginDriver {\n const { meta } = useFabric<{ driver: PluginDriver }>()\n\n return meta.driver\n}\n","import type { FabricFile } from '@kubb/fabric-core/types'\nimport { useFabric } from '@kubb/react-fabric'\n\n/**\n * @deprecated use `mode` from the generator component props instead\n */\nexport function useMode(): FabricFile.Mode {\n const { meta } = useFabric<{ mode: FabricFile.Mode }>()\n\n return meta.mode\n}\n","import { useFabric } from '@kubb/react-fabric'\nimport type { Plugin, PluginFactoryOptions } from '../types.ts'\n\n/**\n * @deprecated use `plugin` from the generator component props instead\n */\nexport function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions> {\n const { meta } = useFabric<{ plugin: Plugin<TOptions> }>()\n\n return meta.plugin\n}\n"],"mappings":";;;;;;;;AAQA,SAAgB,YAA0B;CACxC,MAAM,EAAE,SAAS,WAAqC;AAEtD,QAAO,KAAK;;;;;;;ACLd,SAAgB,UAA2B;CACzC,MAAM,EAAE,SAAS,WAAsC;AAEvD,QAAO,KAAK;;;;;;;ACHd,SAAgB,YAA4F;CAC1G,MAAM,EAAE,SAAS,WAAyC;AAE1D,QAAO,KAAK"}