@kubb/core 5.0.0-alpha.8 → 5.0.0-beta.1

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 (70) hide show
  1. package/README.md +23 -20
  2. package/dist/PluginDriver-BXibeQk-.cjs +1036 -0
  3. package/dist/PluginDriver-BXibeQk-.cjs.map +1 -0
  4. package/dist/PluginDriver-DV3p2Hky.js +945 -0
  5. package/dist/PluginDriver-DV3p2Hky.js.map +1 -0
  6. package/dist/index.cjs +756 -1693
  7. package/dist/index.cjs.map +1 -1
  8. package/dist/index.d.ts +297 -239
  9. package/dist/index.js +743 -1661
  10. package/dist/index.js.map +1 -1
  11. package/dist/mocks.cjs +145 -0
  12. package/dist/mocks.cjs.map +1 -0
  13. package/dist/mocks.d.ts +80 -0
  14. package/dist/mocks.js +140 -0
  15. package/dist/mocks.js.map +1 -0
  16. package/dist/types-CuNocrbJ.d.ts +2148 -0
  17. package/package.json +51 -57
  18. package/src/FileManager.ts +115 -0
  19. package/src/FileProcessor.ts +86 -0
  20. package/src/Kubb.ts +208 -160
  21. package/src/PluginDriver.ts +326 -565
  22. package/src/constants.ts +20 -47
  23. package/src/createAdapter.ts +16 -6
  24. package/src/createKubb.ts +548 -0
  25. package/src/createRenderer.ts +57 -0
  26. package/src/createStorage.ts +40 -26
  27. package/src/defineGenerator.ts +87 -0
  28. package/src/defineLogger.ts +19 -0
  29. package/src/defineMiddleware.ts +62 -0
  30. package/src/defineParser.ts +44 -0
  31. package/src/definePlugin.ts +83 -0
  32. package/src/defineResolver.ts +521 -0
  33. package/src/devtools.ts +14 -14
  34. package/src/index.ts +14 -17
  35. package/src/mocks.ts +178 -0
  36. package/src/renderNode.ts +35 -0
  37. package/src/storages/fsStorage.ts +41 -11
  38. package/src/storages/memoryStorage.ts +4 -2
  39. package/src/types.ts +1054 -270
  40. package/src/utils/diagnostics.ts +4 -1
  41. package/src/utils/isInputPath.ts +10 -0
  42. package/src/utils/packageJSON.ts +99 -0
  43. package/dist/PluginDriver-DRfJIbG1.d.ts +0 -1056
  44. package/dist/chunk-ByKO4r7w.cjs +0 -38
  45. package/dist/hooks.cjs +0 -102
  46. package/dist/hooks.cjs.map +0 -1
  47. package/dist/hooks.d.ts +0 -75
  48. package/dist/hooks.js +0 -97
  49. package/dist/hooks.js.map +0 -1
  50. package/src/PackageManager.ts +0 -180
  51. package/src/build.ts +0 -419
  52. package/src/config.ts +0 -56
  53. package/src/createGenerator.ts +0 -106
  54. package/src/createLogger.ts +0 -7
  55. package/src/createPlugin.ts +0 -12
  56. package/src/errors.ts +0 -1
  57. package/src/hooks/index.ts +0 -4
  58. package/src/hooks/useKubb.ts +0 -138
  59. package/src/hooks/useMode.ts +0 -11
  60. package/src/hooks/usePlugin.ts +0 -11
  61. package/src/hooks/usePluginDriver.ts +0 -11
  62. package/src/utils/FunctionParams.ts +0 -155
  63. package/src/utils/TreeNode.ts +0 -215
  64. package/src/utils/executeStrategies.ts +0 -81
  65. package/src/utils/formatters.ts +0 -56
  66. package/src/utils/getBarrelFiles.ts +0 -141
  67. package/src/utils/getConfigs.ts +0 -30
  68. package/src/utils/getPlugins.ts +0 -23
  69. package/src/utils/linters.ts +0 -25
  70. package/src/utils/resolveOptions.ts +0 -93
@@ -1,38 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __name = (target, value) => __defProp(target, "name", {
5
- value,
6
- configurable: true
7
- });
8
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
9
- var __getOwnPropNames = Object.getOwnPropertyNames;
10
- var __getProtoOf = Object.getPrototypeOf;
11
- var __hasOwnProp = Object.prototype.hasOwnProperty;
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
14
- key = keys[i];
15
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
16
- get: ((k) => from[k]).bind(null, key),
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
21
- };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
- value: mod,
24
- enumerable: true
25
- }) : target, mod));
26
- //#endregion
27
- Object.defineProperty(exports, "__name", {
28
- enumerable: true,
29
- get: function() {
30
- return __name;
31
- }
32
- });
33
- Object.defineProperty(exports, "__toESM", {
34
- enumerable: true,
35
- get: function() {
36
- return __toESM;
37
- }
38
- });
package/dist/hooks.cjs DELETED
@@ -1,102 +0,0 @@
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);
5
- let _kubb_react_fabric = require("@kubb/react-fabric");
6
- //#region src/hooks/useKubb.ts
7
- /**
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
- function useKubb() {
37
- const { meta } = (0, _kubb_react_fabric.useFabric)();
38
- const config = meta.driver.config;
39
- const defaultPluginName = meta.plugin.name;
40
- const output = meta.plugin.options?.output;
41
- return {
42
- plugin: meta.plugin,
43
- mode: meta.mode,
44
- config,
45
- getPluginByName: (pluginName = defaultPluginName) => meta.driver.getPluginByName.call(meta.driver, pluginName),
46
- getFile: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.getFile.call(meta.driver, {
47
- pluginName,
48
- ...rest
49
- }),
50
- resolveName: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolveName.call(meta.driver, {
51
- pluginName,
52
- ...rest
53
- }),
54
- resolvePath: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolvePath.call(meta.driver, {
55
- pluginName,
56
- ...rest
57
- }),
58
- resolveBanner: (node) => {
59
- if (typeof output?.banner === "function") return output.banner(node);
60
- if (typeof output?.banner === "string") return output.banner;
61
- return buildDefaultBanner({ config });
62
- },
63
- resolveFooter: (node) => {
64
- if (typeof output?.footer === "function") return output.footer(node);
65
- if (typeof output?.footer === "string") return output.footer;
66
- }
67
- };
68
- }
69
- //#endregion
70
- //#region src/hooks/useMode.ts
71
- /**
72
- * @deprecated use `useKubb` instead
73
- */
74
- function useMode() {
75
- const { meta } = (0, _kubb_react_fabric.useFabric)();
76
- return meta.mode;
77
- }
78
- //#endregion
79
- //#region src/hooks/usePlugin.ts
80
- /**
81
- * @deprecated use useKubb instead
82
- */
83
- function usePlugin() {
84
- const { meta } = (0, _kubb_react_fabric.useFabric)();
85
- return meta.plugin;
86
- }
87
- //#endregion
88
- //#region src/hooks/usePluginDriver.ts
89
- /**
90
- * @deprecated use `useKubb` instead
91
- */
92
- function usePluginDriver() {
93
- const { meta } = (0, _kubb_react_fabric.useFabric)();
94
- return meta.driver;
95
- }
96
- //#endregion
97
- exports.useKubb = useKubb;
98
- exports.useMode = useMode;
99
- exports.usePlugin = usePlugin;
100
- exports.usePluginDriver = usePluginDriver;
101
-
102
- //# sourceMappingURL=hooks.cjs.map
@@ -1 +0,0 @@
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 */\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 for the given node using the plugin's `output.banner` option.\n * Returns a string when `output.banner` is a string or a function, `undefined` otherwise.\n */\n resolveBanner: (node: RootNode) => string | undefined\n /**\n * Resolves the footer for the given node using the plugin's `output.footer` option.\n * Returns a string when `output.footer` is a string or a function, `undefined` otherwise.\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\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 output.banner(node)\n }\n if (typeof output?.banner === 'string') {\n return output.banner\n }\n return buildDefaultBanner({ config })\n },\n resolveFooter: (node: RootNode) => {\n if (typeof output?.footer === 'function') {\n return output.footer(node)\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":";;;;;;;;;AAmDA,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;;;AAIX,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,SAAmB;AACjC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,KAAK;AAE5B,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;AAEhB,UAAO,mBAAmB,EAAE,QAAQ,CAAC;;EAEvC,gBAAgB,SAAmB;AACjC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,KAAK;AAE5B,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;;EAInB;;;;;;;AClIH,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"}
package/dist/hooks.d.ts DELETED
@@ -1,75 +0,0 @@
1
- import { t as __name } from "./chunk--u3MIqq1.js";
2
- import { D as ResolveNameParams, O as ResolvePathParams, b as PluginFactoryOptions, c as Config, n as PluginDriver, t as GetFileOptions, v as Plugin } from "./PluginDriver-DRfJIbG1.js";
3
- import { RootNode } from "@kubb/ast/types";
4
- import { KubbFile } from "@kubb/fabric-core/types";
5
-
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
- */
34
- resolveName: (params: Omit<ResolveNameParams, 'pluginName'> & {
35
- pluginName?: string;
36
- }) => string;
37
- /**
38
- * Resolves a path, defaulting `pluginName` to the current plugin.
39
- */
40
- resolvePath: <TPathOptions = object>(params: Omit<ResolvePathParams<TPathOptions>, 'pluginName'> & {
41
- pluginName?: string;
42
- }) => KubbFile.Path;
43
- /**
44
- * Resolves the banner for the given node using the plugin's `output.banner` option.
45
- * Returns a string when `output.banner` is a string or a function, `undefined` otherwise.
46
- */
47
- resolveBanner: (node: RootNode) => string | undefined;
48
- /**
49
- * Resolves the footer for the given node using the plugin's `output.footer` option.
50
- * Returns a string when `output.footer` is a string or a function, `undefined` otherwise.
51
- */
52
- resolveFooter: (node: RootNode) => string | undefined;
53
- };
54
- declare function useKubb<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): UseKubbReturn<TOptions>;
55
- //#endregion
56
- //#region src/hooks/useMode.d.ts
57
- /**
58
- * @deprecated use `useKubb` instead
59
- */
60
- declare function useMode(): KubbFile.Mode;
61
- //#endregion
62
- //#region src/hooks/usePlugin.d.ts
63
- /**
64
- * @deprecated use useKubb instead
65
- */
66
- declare function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions>;
67
- //#endregion
68
- //#region src/hooks/usePluginDriver.d.ts
69
- /**
70
- * @deprecated use `useKubb` instead
71
- */
72
- declare function usePluginDriver(): PluginDriver;
73
- //#endregion
74
- export { useKubb, useMode, usePlugin, usePluginDriver };
75
- //# sourceMappingURL=hooks.d.ts.map
package/dist/hooks.js DELETED
@@ -1,97 +0,0 @@
1
- import "./chunk--u3MIqq1.js";
2
- import path from "node:path";
3
- import { useFabric } from "@kubb/react-fabric";
4
- //#region src/hooks/useKubb.ts
5
- /**
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
- function useKubb() {
35
- const { meta } = useFabric();
36
- const config = meta.driver.config;
37
- const defaultPluginName = meta.plugin.name;
38
- const output = meta.plugin.options?.output;
39
- return {
40
- plugin: meta.plugin,
41
- mode: meta.mode,
42
- config,
43
- getPluginByName: (pluginName = defaultPluginName) => meta.driver.getPluginByName.call(meta.driver, pluginName),
44
- getFile: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.getFile.call(meta.driver, {
45
- pluginName,
46
- ...rest
47
- }),
48
- resolveName: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolveName.call(meta.driver, {
49
- pluginName,
50
- ...rest
51
- }),
52
- resolvePath: ({ pluginName = defaultPluginName, ...rest }) => meta.driver.resolvePath.call(meta.driver, {
53
- pluginName,
54
- ...rest
55
- }),
56
- resolveBanner: (node) => {
57
- if (typeof output?.banner === "function") return output.banner(node);
58
- if (typeof output?.banner === "string") return output.banner;
59
- return buildDefaultBanner({ config });
60
- },
61
- resolveFooter: (node) => {
62
- if (typeof output?.footer === "function") return output.footer(node);
63
- if (typeof output?.footer === "string") return output.footer;
64
- }
65
- };
66
- }
67
- //#endregion
68
- //#region src/hooks/useMode.ts
69
- /**
70
- * @deprecated use `useKubb` instead
71
- */
72
- function useMode() {
73
- const { meta } = useFabric();
74
- return meta.mode;
75
- }
76
- //#endregion
77
- //#region src/hooks/usePlugin.ts
78
- /**
79
- * @deprecated use useKubb instead
80
- */
81
- function usePlugin() {
82
- const { meta } = useFabric();
83
- return meta.plugin;
84
- }
85
- //#endregion
86
- //#region src/hooks/usePluginDriver.ts
87
- /**
88
- * @deprecated use `useKubb` instead
89
- */
90
- function usePluginDriver() {
91
- const { meta } = useFabric();
92
- return meta.driver;
93
- }
94
- //#endregion
95
- export { useKubb, useMode, usePlugin, usePluginDriver };
96
-
97
- //# sourceMappingURL=hooks.js.map
package/dist/hooks.js.map DELETED
@@ -1 +0,0 @@
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 */\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 for the given node using the plugin's `output.banner` option.\n * Returns a string when `output.banner` is a string or a function, `undefined` otherwise.\n */\n resolveBanner: (node: RootNode) => string | undefined\n /**\n * Resolves the footer for the given node using the plugin's `output.footer` option.\n * Returns a string when `output.footer` is a string or a function, `undefined` otherwise.\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\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 output.banner(node)\n }\n if (typeof output?.banner === 'string') {\n return output.banner\n }\n return buildDefaultBanner({ config })\n },\n resolveFooter: (node: RootNode) => {\n if (typeof output?.footer === 'function') {\n return output.footer(node)\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":";;;;;;;AAmDA,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;;;AAIX,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,SAAmB;AACjC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,KAAK;AAE5B,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;AAEhB,UAAO,mBAAmB,EAAE,QAAQ,CAAC;;EAEvC,gBAAgB,SAAmB;AACjC,OAAI,OAAO,QAAQ,WAAW,WAC5B,QAAO,OAAO,OAAO,KAAK;AAE5B,OAAI,OAAO,QAAQ,WAAW,SAC5B,QAAO,OAAO;;EAInB;;;;;;;AClIH,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,180 +0,0 @@
1
- import mod from 'node:module'
2
- import os from 'node:os'
3
- import { pathToFileURL } from 'node:url'
4
- import { read, readSync } from '@internals/utils'
5
- import * as pkg from 'empathic/package'
6
- import { coerce, satisfies } from 'semver'
7
- import { PATH_SEPARATORS } from './constants.ts'
8
-
9
- type PackageJSON = {
10
- dependencies?: Record<string, string>
11
- devDependencies?: Record<string, string>
12
- }
13
-
14
- type DependencyName = string
15
-
16
- type DependencyVersion = string
17
-
18
- export class PackageManager {
19
- static #cache: Record<DependencyName, DependencyVersion> = {}
20
-
21
- #cwd?: string
22
-
23
- constructor(workspace?: string) {
24
- if (workspace) {
25
- this.#cwd = workspace
26
- }
27
- }
28
-
29
- set workspace(workspace: string) {
30
- this.#cwd = workspace
31
- }
32
-
33
- get workspace(): string | undefined {
34
- return this.#cwd
35
- }
36
-
37
- normalizeDirectory(directory: string): string {
38
- const lastChar = directory[directory.length - 1]
39
- if (lastChar && !(PATH_SEPARATORS as readonly string[]).includes(lastChar)) {
40
- return `${directory}/`
41
- }
42
-
43
- return directory
44
- }
45
-
46
- getLocation(path: string): string {
47
- let location = path
48
-
49
- if (this.#cwd) {
50
- const require = mod.createRequire(this.normalizeDirectory(this.#cwd))
51
- location = require.resolve(path)
52
- }
53
-
54
- return location
55
- }
56
-
57
- async import(path: string): Promise<unknown> {
58
- let location = this.getLocation(path)
59
-
60
- if (os.platform() === 'win32') {
61
- location = pathToFileURL(location).href
62
- }
63
-
64
- const module = await import(location)
65
-
66
- return module?.default ?? module
67
- }
68
-
69
- async getPackageJSON(): Promise<PackageJSON | undefined> {
70
- const pkgPath = pkg.up({
71
- cwd: this.#cwd,
72
- })
73
- if (!pkgPath) {
74
- return undefined
75
- }
76
-
77
- const json = await read(pkgPath)
78
-
79
- return JSON.parse(json) as PackageJSON
80
- }
81
-
82
- getPackageJSONSync(): PackageJSON | undefined {
83
- const pkgPath = pkg.up({
84
- cwd: this.#cwd,
85
- })
86
- if (!pkgPath) {
87
- return undefined
88
- }
89
-
90
- const json = readSync(pkgPath)
91
-
92
- return JSON.parse(json) as PackageJSON
93
- }
94
-
95
- static setVersion(dependency: DependencyName, version: DependencyVersion): void {
96
- PackageManager.#cache[dependency] = version
97
- }
98
-
99
- #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {
100
- const dependencies = {
101
- ...(packageJSON.dependencies || {}),
102
- ...(packageJSON.devDependencies || {}),
103
- }
104
-
105
- if (typeof dependency === 'string' && dependencies[dependency]) {
106
- return dependencies[dependency]
107
- }
108
-
109
- const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))
110
-
111
- return matchedDependency ? dependencies[matchedDependency] : undefined
112
- }
113
-
114
- async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {
115
- if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {
116
- return PackageManager.#cache[dependency]
117
- }
118
-
119
- const packageJSON = await this.getPackageJSON()
120
-
121
- if (!packageJSON) {
122
- return undefined
123
- }
124
-
125
- return this.#match(packageJSON, dependency)
126
- }
127
-
128
- getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {
129
- if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {
130
- return PackageManager.#cache[dependency]
131
- }
132
-
133
- const packageJSON = this.getPackageJSONSync()
134
-
135
- if (!packageJSON) {
136
- return undefined
137
- }
138
-
139
- return this.#match(packageJSON, dependency)
140
- }
141
-
142
- async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {
143
- const packageVersion = await this.getVersion(dependency)
144
-
145
- if (!packageVersion) {
146
- return false
147
- }
148
-
149
- if (packageVersion === version) {
150
- return true
151
- }
152
-
153
- const semVer = coerce(packageVersion)
154
-
155
- if (!semVer) {
156
- return false
157
- }
158
-
159
- return satisfies(semVer, version)
160
- }
161
- isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {
162
- const packageVersion = this.getVersionSync(dependency)
163
-
164
- if (!packageVersion) {
165
- return false
166
- }
167
-
168
- if (packageVersion === version) {
169
- return true
170
- }
171
-
172
- const semVer = coerce(packageVersion)
173
-
174
- if (!semVer) {
175
- return false
176
- }
177
-
178
- return satisfies(semVer, version)
179
- }
180
- }