@kubb/core 3.18.3 → 4.0.0

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 (123) hide show
  1. package/dist/{FileManager-BeN5TYKI.js → FileManager-BDisPxtH.js} +28 -45
  2. package/dist/FileManager-BDisPxtH.js.map +1 -0
  3. package/dist/{FileManager-CZyWLgbQ.cjs → FileManager-qDcTVN6G.cjs} +34 -48
  4. package/dist/FileManager-qDcTVN6G.cjs.map +1 -0
  5. package/dist/{PluginManager-H8G0i6KS.d.ts → PluginManager-BSUDeUfP.d.ts} +2 -2
  6. package/dist/{PluginManager-C62HGihR.d.cts → PluginManager-a3RiDAFC.d.cts} +2 -2
  7. package/dist/{acorn-Biw1D1Ce.cjs → acorn-Cg_eXN51.cjs} +15 -37
  8. package/dist/{acorn-Biw1D1Ce.cjs.map → acorn-Cg_eXN51.cjs.map} +1 -1
  9. package/dist/{acorn-3HQnxDj2.js → acorn-Z0oy0vSt.js} +15 -37
  10. package/dist/{acorn-3HQnxDj2.js.map → acorn-Z0oy0vSt.js.map} +1 -1
  11. package/dist/{angular-n5qYWkcx.js → angular-BUlb_iaU.js} +6 -7
  12. package/dist/{angular-n5qYWkcx.js.map → angular-BUlb_iaU.js.map} +1 -1
  13. package/dist/{angular-B3ddRl90.cjs → angular-nBly58h0.cjs} +6 -7
  14. package/dist/{angular-B3ddRl90.cjs.map → angular-nBly58h0.cjs.map} +1 -1
  15. package/dist/{babel-BrKqHp9Q.cjs → babel-5qXjvTGO.cjs} +34 -45
  16. package/dist/{babel-BrKqHp9Q.cjs.map → babel-5qXjvTGO.cjs.map} +1 -1
  17. package/dist/{babel-mOBF3g2e.js → babel-DfXTN9QX.js} +34 -45
  18. package/dist/{babel-mOBF3g2e.js.map → babel-DfXTN9QX.js.map} +1 -1
  19. package/dist/{chunk-DoeelZqw.cjs → chunk-CZg_9w7l.cjs} +3 -1
  20. package/dist/{chunk-DbvY3SJr.js → chunk-kPDogv7o.js} +3 -1
  21. package/dist/{estree-QGbwcVbp.js → estree-Bt3vRtV3.js} +6 -9
  22. package/dist/{estree-QGbwcVbp.js.map → estree-Bt3vRtV3.js.map} +1 -1
  23. package/dist/{estree-D6ftINJ3.cjs → estree-DyiFjXDy.cjs} +6 -9
  24. package/dist/{estree-D6ftINJ3.cjs.map → estree-DyiFjXDy.cjs.map} +1 -1
  25. package/dist/{flow-C1RsRESZ.js → flow-Bb8_yYns.js} +466 -573
  26. package/dist/{flow-C1RsRESZ.js.map → flow-Bb8_yYns.js.map} +1 -1
  27. package/dist/{flow-BWEc100n.cjs → flow-DdtBrX0O.cjs} +466 -573
  28. package/dist/{flow-BWEc100n.cjs.map → flow-DdtBrX0O.cjs.map} +1 -1
  29. package/dist/{fs-DkMVXz_s.js → fs-BNC5Fj6t.js} +3 -5
  30. package/dist/{fs-DkMVXz_s.js.map → fs-BNC5Fj6t.js.map} +1 -1
  31. package/dist/{fs-CeOer54w.cjs → fs-Bi2kuxAm.cjs} +10 -9
  32. package/dist/{fs-CeOer54w.cjs.map → fs-Bi2kuxAm.cjs.map} +1 -1
  33. package/dist/fs.cjs +2 -2
  34. package/dist/fs.d.cts +1 -1
  35. package/dist/fs.d.ts +1 -1
  36. package/dist/fs.js +2 -2
  37. package/dist/{glimmer-CwkHq8v_.cjs → glimmer-BuCRLjbI.cjs} +20 -38
  38. package/dist/{glimmer-CwkHq8v_.cjs.map → glimmer-BuCRLjbI.cjs.map} +1 -1
  39. package/dist/{glimmer-DZXQWVfc.js → glimmer-By8WZPkK.js} +20 -38
  40. package/dist/{glimmer-DZXQWVfc.js.map → glimmer-By8WZPkK.js.map} +1 -1
  41. package/dist/{graphql-DWNpg5AH.js → graphql-DsrNefXx.js} +3 -4
  42. package/dist/{graphql-DWNpg5AH.js.map → graphql-DsrNefXx.js.map} +1 -1
  43. package/dist/{graphql-ftPsRNd8.cjs → graphql-TN0hv-fx.cjs} +3 -4
  44. package/dist/{graphql-ftPsRNd8.cjs.map → graphql-TN0hv-fx.cjs.map} +1 -1
  45. package/dist/{html-DMFSHL-z.cjs → html-1W4-2_9J.cjs} +7 -9
  46. package/dist/{html-DMFSHL-z.cjs.map → html-1W4-2_9J.cjs.map} +1 -1
  47. package/dist/{html-Lx7YOmUI.js → html-Y5KDc150.js} +7 -9
  48. package/dist/{html-Lx7YOmUI.js.map → html-Y5KDc150.js.map} +1 -1
  49. package/dist/{index-DERUIhQK.d.cts → index-B7KKQHG8.d.cts} +3 -3
  50. package/dist/{index-B428LQ0Z.d.ts → index-BhFFCWR1.d.ts} +3 -3
  51. package/dist/{index-3smcdUnJ.d.ts → index-CGJ3tdk-.d.ts} +1 -4
  52. package/dist/{index-Bglrijef.d.cts → index-CWX6_-da.d.cts} +1 -4
  53. package/dist/index.cjs +42 -44
  54. package/dist/index.cjs.map +1 -1
  55. package/dist/index.d.cts +3 -3
  56. package/dist/index.d.ts +3 -3
  57. package/dist/index.js +23 -34
  58. package/dist/index.js.map +1 -1
  59. package/dist/{logger-M0gDQMDh.js → logger-BKPT4rkB.js} +11 -19
  60. package/dist/logger-BKPT4rkB.js.map +1 -0
  61. package/dist/{logger-OgWv9Jyy.cjs → logger-DBJsdlpZ.cjs} +26 -27
  62. package/dist/logger-DBJsdlpZ.cjs.map +1 -0
  63. package/dist/logger.cjs +2 -2
  64. package/dist/logger.js +2 -2
  65. package/dist/{markdown-BYsFO1cu.cjs → markdown-Bltb-uzO.cjs} +3 -5
  66. package/dist/{markdown-BYsFO1cu.cjs.map → markdown-Bltb-uzO.cjs.map} +1 -1
  67. package/dist/{markdown-Dt7fmgWb.js → markdown-Drl4Cbq5.js} +3 -5
  68. package/dist/{markdown-Dt7fmgWb.js.map → markdown-Drl4Cbq5.js.map} +1 -1
  69. package/dist/{meriyah-BA-YCwVg.cjs → meriyah-CdG8HPS2.cjs} +3 -5
  70. package/dist/meriyah-CdG8HPS2.cjs.map +1 -0
  71. package/dist/{meriyah-CEYm-XS7.js → meriyah-Cz9whwp-.js} +3 -5
  72. package/dist/meriyah-Cz9whwp-.js.map +1 -0
  73. package/dist/mocks.cjs +206 -333
  74. package/dist/mocks.cjs.map +1 -1
  75. package/dist/mocks.d.cts +2 -2
  76. package/dist/mocks.d.ts +2 -2
  77. package/dist/mocks.js +186 -323
  78. package/dist/mocks.js.map +1 -1
  79. package/dist/{postcss-BQcSCAcI.cjs → postcss-B7n9zUIy.cjs} +32 -53
  80. package/dist/postcss-B7n9zUIy.cjs.map +1 -0
  81. package/dist/{postcss-CI4qZzdL.js → postcss-Dfx_9buT.js} +32 -53
  82. package/dist/postcss-Dfx_9buT.js.map +1 -0
  83. package/dist/{prompt-D3dP3KNu.js → prompt-BMs_Y-vT.js} +5 -8
  84. package/dist/{prompt-D3dP3KNu.js.map → prompt-BMs_Y-vT.js.map} +1 -1
  85. package/dist/{prompt-DslNpUPc.cjs → prompt-BXlYKArM.cjs} +14 -13
  86. package/dist/{prompt-DslNpUPc.cjs.map → prompt-BXlYKArM.cjs.map} +1 -1
  87. package/dist/{transformers-BL8vcCaM.js → transformers-CXIKOVl0.js} +13 -22
  88. package/dist/{transformers-BL8vcCaM.js.map → transformers-CXIKOVl0.js.map} +1 -1
  89. package/dist/{transformers-BUNfHgNe.cjs → transformers-TDFgAyi8.cjs} +15 -23
  90. package/dist/{transformers-BUNfHgNe.cjs.map → transformers-TDFgAyi8.cjs.map} +1 -1
  91. package/dist/transformers.cjs +4 -3
  92. package/dist/transformers.js +1 -1
  93. package/dist/typescript-BY9-7pw9.js +3 -0
  94. package/dist/{typescript-eE7YJ2-c.js → typescript-C8iCxnaF.js} +15 -70
  95. package/dist/{typescript-eE7YJ2-c.js.map → typescript-C8iCxnaF.js.map} +1 -1
  96. package/dist/{typescript-DDBRxbn7.cjs → typescript-Evf8GXVW.cjs} +15 -70
  97. package/dist/{typescript-DDBRxbn7.cjs.map → typescript-Evf8GXVW.cjs.map} +1 -1
  98. package/dist/typescript-PxlX-TH7.cjs +4 -0
  99. package/dist/utils.cjs +4 -4
  100. package/dist/utils.d.cts +3 -3
  101. package/dist/utils.d.ts +3 -3
  102. package/dist/utils.js +4 -4
  103. package/dist/{write-cvT4uBev.cjs → write-BJfM7G1_.cjs} +11 -10
  104. package/dist/{write-cvT4uBev.cjs.map → write-BJfM7G1_.cjs.map} +1 -1
  105. package/dist/{write-CLTPlucv.js → write-O9QWtBJ_.js} +4 -6
  106. package/dist/{write-CLTPlucv.js.map → write-O9QWtBJ_.js.map} +1 -1
  107. package/dist/{yaml-v1i11ZlS.cjs → yaml-B2qeXFgu.cjs} +37 -116
  108. package/dist/yaml-B2qeXFgu.cjs.map +1 -0
  109. package/dist/{yaml-DZASOrDL.js → yaml-Bi_nSoU_.js} +37 -116
  110. package/dist/yaml-Bi_nSoU_.js.map +1 -0
  111. package/package.json +7 -7
  112. package/dist/FileManager-BeN5TYKI.js.map +0 -1
  113. package/dist/FileManager-CZyWLgbQ.cjs.map +0 -1
  114. package/dist/logger-M0gDQMDh.js.map +0 -1
  115. package/dist/logger-OgWv9Jyy.cjs.map +0 -1
  116. package/dist/meriyah-BA-YCwVg.cjs.map +0 -1
  117. package/dist/meriyah-CEYm-XS7.js.map +0 -1
  118. package/dist/postcss-BQcSCAcI.cjs.map +0 -1
  119. package/dist/postcss-CI4qZzdL.js.map +0 -1
  120. package/dist/typescript-Bq-hjiJ0.js +0 -3
  121. package/dist/typescript-DvVkagAX.cjs +0 -4
  122. package/dist/yaml-DZASOrDL.js.map +0 -1
  123. package/dist/yaml-v1i11ZlS.cjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import { clean, exists, getRelativePath, read, readSync } from "./fs-DkMVXz_s.js";
2
- import "./write-CLTPlucv.js";
3
- import { EventEmitter, createLogger } from "./logger-M0gDQMDh.js";
4
- import { transformReservedWord, trim } from "./transformers-BL8vcCaM.js";
5
- import { FileManager, Queue, URLPath, getDefaultBanner, getSource, pLimit as pLimit$1, setUniqueName } from "./FileManager-BeN5TYKI.js";
1
+ import { clean, exists, getRelativePath, read, readSync } from "./fs-BNC5Fj6t.js";
2
+ import "./write-O9QWtBJ_.js";
3
+ import { EventEmitter, createLogger } from "./logger-BKPT4rkB.js";
4
+ import { transformReservedWord, trim } from "./transformers-CXIKOVl0.js";
5
+ import { FileManager, Queue, URLPath, getDefaultBanner, getSource, pLimit as pLimit$1, setUniqueName } from "./FileManager-BDisPxtH.js";
6
6
  import mod from "node:module";
7
7
  import path, { join, resolve } from "node:path";
8
8
  import pc from "picocolors";
@@ -289,8 +289,7 @@ var PluginManager = class {
289
289
  * Run a specific hookName for plugin x.
290
290
  */
291
291
  hookForPluginSync({ pluginKey, hookName, parameters, message }) {
292
- const plugins = this.getPluginsByKey(hookName, pluginKey);
293
- const result = plugins.map((plugin) => {
292
+ return this.getPluginsByKey(hookName, pluginKey).map((plugin) => {
294
293
  return this.#executeSync({
295
294
  strategy: "hookFirst",
296
295
  hookName,
@@ -299,7 +298,6 @@ var PluginManager = class {
299
298
  message
300
299
  });
301
300
  }).filter(Boolean);
302
- return result;
303
301
  }
304
302
  /**
305
303
  * First non-null result stops and will return it's value.
@@ -408,8 +406,7 @@ var PluginManager = class {
408
406
  if (hookName) return plugins.filter((plugin) => hookName in plugin);
409
407
  return plugins.map((plugin) => {
410
408
  if (plugin.pre) {
411
- const isValid = plugin.pre.every((pluginName) => plugins.find((pluginToFind) => pluginToFind.name === pluginName));
412
- if (!isValid) throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, void 0, 2)})`);
409
+ if (!plugin.pre.every((pluginName) => plugins.find((pluginToFind) => pluginToFind.name === pluginName))) throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, void 0, 2)})`);
413
410
  }
414
411
  return plugin;
415
412
  }).sort((a, b) => {
@@ -477,7 +474,7 @@ var PluginManager = class {
477
474
  plugin,
478
475
  message
479
476
  });
480
- const task = (async () => {
477
+ return (async () => {
481
478
  try {
482
479
  if (typeof hook === "function") {
483
480
  const result = await Promise.resolve(hook.apply({
@@ -510,7 +507,6 @@ var PluginManager = class {
510
507
  return null;
511
508
  }
512
509
  })();
513
- return task;
514
510
  }
515
511
  /**
516
512
  * Run a sync plugin hook and return the result.
@@ -666,8 +662,7 @@ async function safeBuild(options) {
666
662
  if (config.output.barrelType) {
667
663
  const root = resolve(config.root);
668
664
  const rootPath = resolve(root, config.output.path, "index.ts");
669
- const files$1 = await pluginManager.fileManager.getFiles();
670
- const barrelFiles = files$1.filter((file) => {
665
+ const barrelFiles = (await pluginManager.fileManager.getFiles()).filter((file) => {
671
666
  return file.sources.some((source) => source.isIndexable);
672
667
  });
673
668
  const rootFile = {
@@ -676,13 +671,12 @@ async function safeBuild(options) {
676
671
  exports: barrelFiles.flatMap((file) => {
677
672
  const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly);
678
673
  return file.sources?.map((source) => {
679
- if (!file.path || !source.isIndexable) return void 0;
680
- const plugin = [...pluginManager.plugins].find((item) => {
674
+ if (!file.path || !source.isIndexable) return;
675
+ const pluginOptions = [...pluginManager.plugins].find((item) => {
681
676
  const meta = file.meta;
682
677
  return isDeepEqual(item.key, meta?.pluginKey);
683
- });
684
- const pluginOptions = plugin?.options;
685
- if (!pluginOptions || pluginOptions?.output?.barrelType === false) return void 0;
678
+ })?.options;
679
+ if (!pluginOptions || pluginOptions?.output?.barrelType === false) return;
686
680
  return {
687
681
  name: config.output.barrelType === "all" ? void 0 : [source.name],
688
682
  path: getRelativePath(rootPath, file.path),
@@ -883,18 +877,16 @@ function findUpMultipleSync(name, options = {}) {
883
877
  return matches;
884
878
  }
885
879
  async function findUp(name, options = {}) {
886
- const matches = await findUpMultiple(name, {
880
+ return (await findUpMultiple(name, {
887
881
  ...options,
888
882
  limit: 1
889
- });
890
- return matches[0];
883
+ }))[0];
891
884
  }
892
885
  function findUpSync(name, options = {}) {
893
- const matches = findUpMultipleSync(name, {
886
+ return findUpMultipleSync(name, {
894
887
  ...options,
895
888
  limit: 1
896
- });
897
- return matches[0];
889
+ })[0];
898
890
  }
899
891
 
900
892
  //#endregion
@@ -919,10 +911,7 @@ var PackageManager = class PackageManager {
919
911
  }
920
912
  getLocation(path$1) {
921
913
  let location = path$1;
922
- if (this.#cwd) {
923
- const require = mod.createRequire(this.normalizeDirectory(this.#cwd));
924
- location = require.resolve(path$1);
925
- }
914
+ if (this.#cwd) location = mod.createRequire(this.normalizeDirectory(this.#cwd)).resolve(path$1);
926
915
  return location;
927
916
  }
928
917
  async import(path$1) {
@@ -933,18 +922,18 @@ var PackageManager = class PackageManager {
933
922
  return module?.default ?? module;
934
923
  } catch (e) {
935
924
  console.error(e);
936
- return void 0;
925
+ return;
937
926
  }
938
927
  }
939
928
  async getPackageJSON() {
940
929
  const pkgPath = await findUp(["package.json"], { cwd: this.#cwd });
941
- if (!pkgPath) return void 0;
930
+ if (!pkgPath) return;
942
931
  const json = await read(pkgPath);
943
932
  return JSON.parse(json);
944
933
  }
945
934
  getPackageJSONSync() {
946
935
  const pkgPath = findUpSync(["package.json"], { cwd: this.#cwd });
947
- if (!pkgPath) return void 0;
936
+ if (!pkgPath) return;
948
937
  const json = readSync(pkgPath);
949
938
  return JSON.parse(json);
950
939
  }
@@ -963,13 +952,13 @@ var PackageManager = class PackageManager {
963
952
  async getVersion(dependency) {
964
953
  if (typeof dependency === "string" && PackageManager.#cache[dependency]) return PackageManager.#cache[dependency];
965
954
  const packageJSON = await this.getPackageJSON();
966
- if (!packageJSON) return void 0;
955
+ if (!packageJSON) return;
967
956
  return this.#match(packageJSON, dependency);
968
957
  }
969
958
  getVersionSync(dependency) {
970
959
  if (typeof dependency === "string" && PackageManager.#cache[dependency]) return PackageManager.#cache[dependency];
971
960
  const packageJSON = this.getPackageJSONSync();
972
- if (!packageJSON) return void 0;
961
+ if (!packageJSON) return;
973
962
  return this.#match(packageJSON, dependency);
974
963
  }
975
964
  async isValid(dependency, version) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#context","#options","promises","promise: Promise<unknown>","pLimit","#options","promises","#core","#usedPluginNames","#promiseManager","#getSortedPlugins","#parse","extname","path","items: Array<ReturnType<ParseResult<H>>>","#execute","#executeSync","promises","parseResult: SafeParseResult<H>","#catcher","output: unknown","#addExecutedToCallStack","pluginNames: string[]","plugin","definedConfig: Config","files","rootFile: KubbFile.File","resolve","toPath","process","fsPromises","#cache","#cwd","#SLASHES","path","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/utils/executeStrategies.ts","../src/PromiseManager.ts","../src/errors.ts","../src/plugin.ts","../src/PluginManager.ts","../src/build.ts","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../src/PackageManager.ts"],"sourcesContent":["/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class BaseGenerator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import type { PossiblePromise } from './utils/types.ts'\nimport type { InputPath, UserConfig } from './types.ts'\n\ntype Args = {\n /**\n * Path to `kubb.config.js`\n */\n config?: string\n /**\n * Watch changes on input\n */\n watch?: boolean\n\n /**\n * Log level to report when using the CLI\n *\n * `silent` will hide all information that is not relevant\n *\n * `info` will show all information possible(not related to the PluginManager)\n *\n * `debug` will show all information possible(related to the PluginManager), handy for seeing logs\n * @default `silent`\n */\n logLevel?: string\n /**\n * Run Kubb with Bun\n */\n bun?: boolean\n}\n\n/**\n * Type helper to make it easier to use vite.config.ts accepts a direct UserConfig object, or a function that returns it. The function receives a ConfigEnv object.\n */\nexport function defineConfig(\n options:\n | PossiblePromise<UserConfig | Array<UserConfig>>\n | ((\n /** The options derived from the CLI flags */\n args: Args,\n ) => PossiblePromise<UserConfig | Array<UserConfig>>),\n): typeof options {\n return options\n}\n\nexport function isInputPath(result: UserConfig | undefined): result is UserConfig<InputPath> {\n return !!result && 'path' in (result?.input as any)\n}\n","import pLimit from 'p-limit'\n\ntype PromiseFunc<T = unknown, T2 = never> = (state?: T) => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype ValueOfPromiseFuncArray<TInput extends Array<unknown>> = TInput extends Array<PromiseFunc<infer X, infer Y>> ? X | Y : never\n\ntype SeqOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<Array<Awaited<ValueOfPromiseFuncArray<TInput>>>>\n\n/**\n * Chains promises\n */\nexport function hookSeq<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TOutput = SeqOutput<TInput, TValue>>(promises: TInput): TOutput {\n return promises.filter(Boolean).reduce(\n (promise, func) => {\n if (typeof func !== 'function') {\n throw new Error('HookSeq needs a function that returns a promise `() => Promise<unknown>`')\n }\n\n return promise.then((state) => {\n const calledFunc = func(state as TValue)\n\n if (calledFunc) {\n return calledFunc.then(Array.prototype.concat.bind(state))\n }\n })\n },\n Promise.resolve([] as unknown),\n ) as TOutput\n}\n\ntype HookFirstOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown> = ValueOfPromiseFuncArray<TInput>\n\n/**\n * Chains promises, first non-null result stops and returns\n */\nexport function hookFirst<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookFirstOutput<TInput, TValue>>(\n promises: TInput,\n nullCheck = (state: any) => state !== null,\n): TOutput {\n let promise: Promise<unknown> = Promise.resolve(null) as Promise<unknown>\n\n for (const func of promises.filter(Boolean)) {\n promise = promise.then((state) => {\n if (nullCheck(state)) {\n return state\n }\n\n return func(state as TValue)\n })\n }\n\n return promise as TOutput\n}\n\ntype HookParallelOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<PromiseSettledResult<Awaited<ValueOfPromiseFuncArray<TInput>>>[]>\n\n/**\n * Runs an array of promise functions with optional concurrency limit.\n */\nexport function hookParallel<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookParallelOutput<TInput, TValue>>(\n promises: TInput,\n concurrency: number = Number.POSITIVE_INFINITY,\n): TOutput {\n const limit = pLimit(concurrency)\n\n const tasks = promises.filter(Boolean).map((promise) => limit(() => promise()))\n\n return Promise.allSettled(tasks) as TOutput\n}\n\nexport type Strategy = 'seq' | 'first' | 'parallel'\n\nexport type StrategySwitch<TStrategy extends Strategy, TInput extends Array<PromiseFunc<TValue, null>>, TValue> = TStrategy extends 'first'\n ? HookFirstOutput<TInput, TValue>\n : TStrategy extends 'seq'\n ? SeqOutput<TInput, TValue>\n : TStrategy extends 'parallel'\n ? HookParallelOutput<TInput, TValue>\n : never\n","import type { Strategy, StrategySwitch } from './utils/executeStrategies.ts'\nimport { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\ntype PromiseFunc<T = unknown, T2 = never> = () => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype Options<TState = any> = {\n nullCheck?: (state: TState) => boolean\n}\n\nexport class PromiseManager<TState = any> {\n #options: Options<TState> = {}\n\n constructor(options: Options<TState> = {}) {\n this.#options = options\n\n return this\n }\n\n run<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TStrategy extends Strategy, TOutput = StrategySwitch<TStrategy, TInput, TValue>>(\n strategy: TStrategy,\n promises: TInput,\n { concurrency = Number.POSITIVE_INFINITY }: { concurrency?: number } = {},\n ): TOutput {\n if (strategy === 'seq') {\n return hookSeq<TInput, TValue, TOutput>(promises)\n }\n\n if (strategy === 'first') {\n return hookFirst<TInput, TValue, TOutput>(promises, this.#options.nullCheck)\n }\n\n if (strategy === 'parallel') {\n return hookParallel<TInput, TValue, TOutput>(promises, concurrency)\n }\n\n throw new Error(`${strategy} not implemented`)\n }\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export class ValidationPluginError extends Error {}\n","import path from 'node:path'\n\nimport type { FileManager } from './FileManager.ts'\nimport type { PluginManager } from './PluginManager.ts'\nimport type { Plugin, PluginContext, PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\ntype OptionalPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options?: T['options']) => UserPluginWithLifeCycle<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: PluginFactory<T>): OptionalPluginFactory<T> {\n return (options = {}) => {\n return factory(options)\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n pluginManager: PluginManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n logger: PluginContext['logger']\n getPlugins: () => Array<Plugin>\n plugin?: PluginContext['plugin']\n}\n\n// not publicly exported\nexport type PluginCore = PluginFactoryOptions<'core', Options, Options, PluginContext, never>\n\nexport const pluginCore = createPlugin<PluginCore>((options) => {\n const { fileManager, pluginManager, resolvePath, resolveName, logger } = options\n\n return {\n name: 'core',\n options,\n key: ['core'],\n context() {\n return {\n get config() {\n return options.config\n },\n get plugins() {\n return options.getPlugins()\n },\n get plugin() {\n // see pluginManger.#execute where we override with `.call` the context with the correct plugin\n return options.plugin as NonNullable<Options['plugin']>\n },\n logger,\n fileManager,\n pluginManager,\n async addFile(...files) {\n const resolvedFiles = await fileManager.add(...files)\n\n if (!Array.isArray(resolvedFiles)) {\n return [resolvedFiles]\n }\n\n return resolvedFiles\n },\n resolvePath,\n resolveName,\n }\n },\n resolvePath(baseName) {\n const root = path.resolve(options.config.root, options.config.output.path)\n\n return path.resolve(root, baseName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import { FileManager } from './FileManager.ts'\nimport { isPromiseRejectedResult } from './PromiseManager.ts'\nimport { PromiseManager } from './PromiseManager.ts'\nimport { ValidationPluginError } from './errors.ts'\nimport { pluginCore } from './plugin.ts'\nimport { transformReservedWord } from './transformers/transformReservedWord.ts'\nimport { EventEmitter } from './utils/EventEmitter.ts'\nimport { setUniqueName } from './utils/uniqueName.ts'\n\nimport type { KubbFile } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport type { PluginCore } from './plugin.ts'\nimport { trim } from './transformers/trim.ts'\nimport type {\n Config,\n GetPluginFactoryOptions,\n Plugin,\n PluginFactoryOptions,\n PluginLifecycle,\n PluginLifecycleHooks,\n PluginParameter,\n PluginWithLifeCycle,\n ResolveNameParams,\n ResolvePathParams,\n UserPlugin,\n UserPluginWithLifeCycle,\n} from './types.ts'\n\ntype RequiredPluginLifecycle = Required<PluginLifecycle>\n\ntype Strategy = 'hookFirst' | 'hookForPlugin' | 'hookParallel' | 'hookSeq'\n\ntype Executer<H extends PluginLifecycleHooks = PluginLifecycleHooks> = {\n message: string\n strategy: Strategy\n hookName: H\n plugin: Plugin\n parameters?: unknown[] | undefined\n output?: unknown\n}\n\ntype ParseResult<H extends PluginLifecycleHooks> = RequiredPluginLifecycle[H]\n\ntype SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseResult<H>>> = {\n result: Result\n plugin: Plugin\n}\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\ntype Options = {\n logger: Logger\n /**\n * @default Number.POSITIVE_INFINITY\n */\n concurrency?: number\n}\n\ntype Events = {\n executing: [executer: Executer]\n executed: [executer: Executer]\n error: [error: Error]\n}\n\ntype GetFileProps<TOptions = object> = {\n name: string\n mode?: KubbFile.Mode\n extname: KubbFile.Extname\n pluginKey: Plugin['key']\n options?: TOptions\n}\n\nexport class PluginManager {\n readonly plugins = new Set<Plugin<GetPluginFactoryOptions<any>>>()\n readonly fileManager: FileManager\n readonly events: EventEmitter<Events> = new EventEmitter()\n\n readonly config: Config\n\n readonly executed: Array<Executer> = []\n readonly logger: Logger\n readonly options: Options\n readonly #core: Plugin<PluginCore>\n\n readonly #usedPluginNames: Record<string, number> = {}\n readonly #promiseManager: PromiseManager\n\n constructor(config: Config, options: Options) {\n this.config = config\n this.options = options\n this.logger = options.logger\n this.fileManager = new FileManager()\n this.#promiseManager = new PromiseManager({\n nullCheck: (state: SafeParseResult<'resolveName'> | null) => !!state?.result,\n })\n\n const core = pluginCore({\n config,\n logger: this.logger,\n pluginManager: this,\n fileManager: this.fileManager,\n resolvePath: this.resolvePath.bind(this),\n resolveName: this.resolveName.bind(this),\n getPlugins: this.#getSortedPlugins.bind(this),\n })\n\n // call core.context.call with empty context so we can transform `context()` to `context: {}`\n this.#core = this.#parse(core as unknown as UserPlugin, this as any, core.context.call(null as any)) as Plugin<PluginCore>\n ;[this.#core, ...(config.plugins || [])].forEach((plugin) => {\n const parsedPlugin = this.#parse(plugin as UserPlugin, this, this.#core.context)\n\n this.plugins.add(parsedPlugin)\n })\n\n return this\n }\n\n getFile<TOptions = object>({ name, mode, extname, pluginKey, options }: GetFileProps<TOptions>): KubbFile.File<{ pluginKey: Plugin['key'] }> {\n const baseName = `${name}${extname}` as const\n const path = this.resolvePath({ baseName, mode, pluginKey, options })\n\n if (!path) {\n throw new Error(`Filepath should be defined for resolvedName \"${name}\" and pluginKey [${JSON.stringify(pluginKey)}]`)\n }\n\n return {\n path,\n baseName,\n meta: {\n pluginKey,\n },\n sources: [],\n }\n }\n\n resolvePath = <TOptions = object>(params: ResolvePathParams<TOptions>): KubbFile.OptionalPath => {\n if (params.pluginKey) {\n const paths = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolvePath',\n parameters: [params.baseName, params.mode, params.options as object],\n message: `Resolving path '${params.baseName}'`,\n })\n\n if (paths && paths?.length > 1) {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [\n `Cannot return a path where the 'pluginKey' ${\n params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'\n } is not unique enough\\n\\nPaths: ${JSON.stringify(paths, undefined, 2)}\\n\\nFalling back on the first item.\\n`,\n ],\n })\n }\n\n return paths?.at(0)\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.baseName, params.mode, params.options as object],\n message: `Resolving path '${params.baseName}'`,\n }).result\n }\n //TODO refactor by using the order of plugins and the cache of the fileManager instead of guessing and recreating the name/path\n resolveName = (params: ResolveNameParams): string => {\n if (params.pluginKey) {\n const names = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolveName',\n parameters: [trim(params.name), params.type],\n message: `Resolving name '${params.name}' and type '${params.type}'`,\n })\n\n if (names && names?.length > 1) {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [\n `Cannot return a name where the 'pluginKey' ${\n params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'\n } is not unique enough\\n\\nNames: ${JSON.stringify(names, undefined, 2)}\\n\\nFalling back on the first item.\\n`,\n ],\n })\n }\n\n return transformReservedWord(names?.at(0) || params.name)\n }\n\n const name = this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [trim(params.name), params.type],\n message: `Resolving name '${params.name}' and type '${params.type}'`,\n }).result\n\n return transformReservedWord(name)\n }\n\n /**\n * Instead of calling `pluginManager.events.on` you can use `pluginManager.on`. This one also has better types.\n */\n on<TEventName extends keyof Events & string>(eventName: TEventName, handler: (...eventArg: Events[TEventName]) => void): void {\n this.events.on(eventName, handler as any)\n }\n\n /**\n * Run a specific hookName for plugin x.\n */\n async hookForPlugin<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n message,\n }: {\n pluginKey: Plugin['key']\n hookName: H\n parameters: PluginParameter<H>\n message: string\n }): Promise<Array<ReturnType<ParseResult<H>> | null>> {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n this.logger.emit('progress_start', { id: hookName, size: plugins.length, message: 'Running plugins...' })\n\n const items: Array<ReturnType<ParseResult<H>>> = []\n\n for (const plugin of plugins) {\n const result = await this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n })\n\n if (result !== undefined && result !== null) {\n items.push(result)\n }\n }\n\n this.logger.emit('progress_stop', { id: hookName })\n\n return items\n }\n /**\n * Run a specific hookName for plugin x.\n */\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n message,\n }: {\n pluginKey: Plugin['key']\n hookName: H\n parameters: PluginParameter<H>\n message: string\n }): Array<ReturnType<ParseResult<H>>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n const result = plugins\n .map((plugin) => {\n return this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n })\n })\n .filter(Boolean)\n\n return result\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n async hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n message,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<Plugin> | null\n message: string\n }): Promise<SafeParseResult<H>> {\n const plugins = this.#getSortedPlugins(hookName).filter((plugin) => {\n return skipped ? skipped.has(plugin) : true\n })\n\n this.logger.emit('progress_start', { id: hookName, size: plugins.length })\n\n const promises = plugins.map((plugin) => {\n return async () => {\n const value = await this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n })\n\n return Promise.resolve({\n plugin,\n result: value,\n } as SafeParseResult<H>)\n }\n })\n\n const result = await this.#promiseManager.run('first', promises)\n\n this.logger.emit('progress_stop', { id: hookName })\n\n return result\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n message,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<Plugin> | null\n message: string\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n const plugins = this.#getSortedPlugins(hookName).filter((plugin) => {\n return skipped ? skipped.has(plugin) : true\n })\n\n for (const plugin of plugins) {\n parseResult = {\n result: this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n }),\n plugin,\n } as SafeParseResult<H>\n\n if (parseResult?.result != null) {\n break\n }\n }\n\n return parseResult\n }\n\n /**\n * Run all plugins in parallel(order will be based on `this.plugin` and if `pre` or `post` is set).\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n message,\n }: {\n hookName: H\n parameters?: Parameters<RequiredPluginLifecycle[H]> | undefined\n message: string\n }): Promise<Awaited<TOuput>[]> {\n const plugins = this.#getSortedPlugins(hookName)\n this.logger.emit('progress_start', { id: hookName, size: plugins.length })\n\n const promises = plugins.map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookParallel',\n hookName,\n parameters,\n plugin,\n message,\n }) as Promise<TOuput>\n })\n\n const results = await this.#promiseManager.run('parallel', promises, { concurrency: this.options.concurrency })\n\n results.forEach((result, index) => {\n if (isPromiseRejectedResult<Error>(result)) {\n const plugin = this.#getSortedPlugins(hookName)[index]\n\n this.#catcher<H>(result.reason, plugin, hookName)\n }\n })\n\n this.logger.emit('progress_stop', { id: hookName })\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n * Chains plugins\n */\n async hookSeq<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n message,\n }: {\n hookName: H\n parameters?: PluginParameter<H>\n message: string\n }): Promise<void> {\n const plugins = this.#getSortedPlugins(hookName)\n this.logger.emit('progress_start', { id: hookName, size: plugins.length })\n\n const promises = plugins.map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n message,\n })\n })\n\n await this.#promiseManager.run('seq', promises)\n\n this.logger.emit('progress_stop', { id: hookName })\n }\n\n #getSortedPlugins(hookName?: keyof PluginLifecycle): Plugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n if (hookName) {\n return plugins.filter((plugin) => hookName in plugin)\n }\n // TODO add test case for sorting with pre/post\n\n return plugins\n .map((plugin) => {\n if (plugin.pre) {\n const isValid = plugin.pre.every((pluginName) => plugins.find((pluginToFind) => pluginToFind.name === pluginName))\n\n if (!isValid) {\n throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, undefined, 2)})`)\n }\n }\n\n return plugin\n })\n .sort((a, b) => {\n if (b.pre?.includes(a.name)) {\n return 1\n }\n if (b.post?.includes(a.name)) {\n return -1\n }\n return 0\n })\n }\n\n getPluginByKey(pluginKey: Plugin['key']): Plugin | undefined {\n const plugins = [...this.plugins]\n const [searchPluginName] = pluginKey\n\n return plugins.find((item) => {\n const [name] = item.key\n\n return name === searchPluginName\n })\n }\n\n getPluginsByKey(hookName: keyof PluginWithLifeCycle, pluginKey: Plugin['key']): Plugin[] {\n const plugins = [...this.plugins]\n const [searchPluginName, searchIdentifier] = pluginKey\n\n const pluginByPluginName = plugins\n .filter((plugin) => hookName in plugin)\n .filter((item) => {\n const [name, identifier] = item.key\n\n const identifierCheck = identifier?.toString() === searchIdentifier?.toString()\n const nameCheck = name === searchPluginName\n\n if (searchIdentifier) {\n return identifierCheck && nameCheck\n }\n\n return nameCheck\n })\n\n if (!pluginByPluginName?.length) {\n // fallback on the core plugin when there is no match\n\n const corePlugin = plugins.find((plugin) => plugin.name === 'core' && hookName in plugin)\n\n if (corePlugin) {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, falling back on the '@kubb/core' plugin`],\n })\n } else {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, no fallback found in the '@kubb/core' plugin`],\n })\n }\n return corePlugin ? [corePlugin] : []\n }\n\n return pluginByPluginName\n }\n\n #addExecutedToCallStack(executer: Executer | undefined) {\n if (executer) {\n this.events.emit('executed', executer)\n this.executed.push(executer)\n\n this.logger.emit('progressed', { id: executer.hookName, message: `${executer.plugin.name}: ${executer.message}` })\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n #execute<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n message,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: PluginWithLifeCycle\n message: string\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('executing', { strategy, hookName, parameters, plugin, message })\n\n const task = (async () => {\n try {\n if (typeof hook === 'function') {\n const result = await Promise.resolve((hook as Function).apply({ ...this.#core.context, plugin }, parameters))\n\n output = result\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return result\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return hook\n } catch (e) {\n this.#catcher<H>(e as Error, plugin, hookName)\n return null\n }\n })()\n\n return task\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n #executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n message,\n }: {\n strategy: Strategy\n hookName: H\n parameters: PluginParameter<H>\n plugin: PluginWithLifeCycle\n message: string\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('executing', { strategy, hookName, parameters, plugin, message })\n\n try {\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply({ ...this.#core.context, plugin }, parameters) as ReturnType<ParseResult<H>>\n\n output = fn\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return fn\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return hook\n } catch (e) {\n this.#catcher<H>(e as Error, plugin, hookName)\n\n return null\n }\n }\n\n #catcher<H extends PluginLifecycleHooks>(cause: Error, plugin?: Plugin, hookName?: H) {\n const text = `${cause.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})`\n\n this.logger.emit('error', text, cause)\n this.events.emit('error', cause)\n }\n\n #parse<TPlugin extends UserPluginWithLifeCycle>(\n plugin: TPlugin,\n pluginManager: PluginManager,\n context: PluginCore['context'] | undefined,\n ): Plugin<GetPluginFactoryOptions<TPlugin>> {\n const usedPluginNames = pluginManager.#usedPluginNames\n\n setUniqueName(plugin.name, usedPluginNames)\n\n const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean) as [typeof plugin.name, string]\n\n if (plugin.context && typeof plugin.context === 'function') {\n return {\n ...plugin,\n key,\n context: (plugin.context as Function).call(context) as typeof plugin.context,\n } as unknown as Plugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n return {\n ...plugin,\n key,\n } as unknown as Plugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n static getDependedPlugins<\n T1 extends PluginFactoryOptions,\n T2 extends PluginFactoryOptions = never,\n T3 extends PluginFactoryOptions = never,\n TOutput = T3 extends never ? (T2 extends never ? [T1: Plugin<T1>] : [T1: Plugin<T1>, T2: Plugin<T2>]) : [T1: Plugin<T1>, T2: Plugin<T2>, T3: Plugin<T3>],\n >(plugins: Array<Plugin>, dependedPluginNames: string | string[]): TOutput {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n return pluginNames.map((pluginName) => {\n const plugin = plugins.find((plugin) => plugin.name === pluginName)\n if (!plugin) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n return plugin\n }) as TOutput\n }\n\n static get hooks() {\n return ['buildStart', 'resolvePath', 'resolveName', 'buildEnd'] as const\n }\n}\n","import { join, resolve } from 'node:path'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport type { KubbFile } from './fs/index.ts'\nimport { clean, exists, getRelativePath } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, UserConfig } from './types.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\ntype BuildOptions = {\n config: UserConfig\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n pluginManager?: PluginManager\n}\n\ntype BuildOutput = {\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n /**\n * Only for safeBuild\n */\n error?: Error\n}\n\nexport async function setup(options: BuildOptions): Promise<PluginManager> {\n if (options.pluginManager) {\n return options.pluginManager\n }\n\n const { config: userConfig, logger = createLogger() } = options\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${userConfig.input.path}`,\n {\n cause: e,\n },\n )\n }\n }\n\n const definedConfig: Config = {\n root: userConfig.root || process.cwd(),\n ...userConfig,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n defaultBanner: 'simple',\n ...userConfig.output,\n },\n plugins: userConfig.plugins as Config['plugins'],\n }\n\n if (definedConfig.output.clean) {\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n return new PluginManager(definedConfig, { logger, concurrency: 5 })\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const { files, pluginManager, error } = await safeBuild(options)\n\n if (error) throw error\n\n return {\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n const config = pluginManager.config\n\n try {\n pluginManager.events.on('executing', ({ plugin, message }) => {\n pluginManager.logger.emit('debug', { date: new Date(), logs: [`Executing pluginKey ${plugin.key?.join('.')} | ${message}`] })\n })\n\n pluginManager.events.on('executed', ({ plugin, message, output }) => {\n pluginManager.logger.emit('debug', {\n date: new Date(),\n logs: [`Executed pluginKey ${plugin.key?.join('.')} | ${message} | ${JSON.stringify(output, undefined, 2)}`],\n })\n })\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [config],\n message: 'buildStart',\n })\n\n if (config.output.barrelType) {\n // create root barrel file\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n //TODO find clean method without loading all files\n const files = await pluginManager.fileManager.getFiles()\n\n const barrelFiles = files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n const rootFile: KubbFile.File = {\n path: rootPath,\n baseName: 'index.ts',\n exports: barrelFiles\n .flatMap((file) => {\n const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly)\n\n return file.sources\n ?.map((source) => {\n if (!file.path || !source.isIndexable) {\n return undefined\n }\n\n // validate of the file is coming from plugin x, needs pluginKey on every file TODO update typing\n const plugin = [...pluginManager.plugins].find((item) => {\n const meta = file.meta as any\n return isDeepEqual(item.key, meta?.pluginKey)\n })\n const pluginOptions = plugin?.options as { output?: Output<any> }\n\n if (!pluginOptions || pluginOptions?.output?.barrelType === false) {\n return undefined\n }\n\n return {\n name: config.output.barrelType === 'all' ? undefined : [source.name],\n path: getRelativePath(rootPath, file.path),\n isTypeOnly: config.output.barrelType === 'all' ? containsOnlyTypes : source.isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n })\n .filter(Boolean),\n sources: [],\n meta: {},\n }\n\n await pluginManager.fileManager.add(rootFile)\n }\n\n const files = await pluginManager.fileManager.processFiles({\n root: config.root,\n extension: config.output.extension,\n dryRun: !config.output.write,\n logger: pluginManager.logger,\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd', message: `Build stopped for ${config.name}` })\n\n await pluginManager.fileManager.clear()\n\n return {\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/index.ts'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.error(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (version === 'next' && packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n return false\n }\n\n return satisfies(semVer, version)\n }\n}\n"],"x_google_ignoreList":[8,9,10,11,12],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["#context","#options","promises","promise: Promise<unknown>","pLimit","#options","promises","#core","#usedPluginNames","#promiseManager","#getSortedPlugins","#parse","extname","path","items: Array<ReturnType<ParseResult<H>>>","#execute","#executeSync","promises","parseResult: SafeParseResult<H>","#catcher","output: unknown","#addExecutedToCallStack","pluginNames: string[]","plugin","definedConfig: Config","rootFile: KubbFile.File","resolve","toPath","process","fsPromises","#cache","#cwd","#SLASHES","path","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/utils/executeStrategies.ts","../src/PromiseManager.ts","../src/errors.ts","../src/plugin.ts","../src/PluginManager.ts","../src/build.ts","../../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js","../../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js","../../../node_modules/.pnpm/locate-path@7.2.0/node_modules/locate-path/index.js","../../../node_modules/.pnpm/unicorn-magic@0.1.0/node_modules/unicorn-magic/node.js","../../../node_modules/.pnpm/find-up@7.0.0/node_modules/find-up/index.js","../src/PackageManager.ts"],"sourcesContent":["/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class BaseGenerator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import type { PossiblePromise } from './utils/types.ts'\nimport type { InputPath, UserConfig } from './types.ts'\n\ntype Args = {\n /**\n * Path to `kubb.config.js`\n */\n config?: string\n /**\n * Watch changes on input\n */\n watch?: boolean\n\n /**\n * Log level to report when using the CLI\n *\n * `silent` will hide all information that is not relevant\n *\n * `info` will show all information possible(not related to the PluginManager)\n *\n * `debug` will show all information possible(related to the PluginManager), handy for seeing logs\n * @default `silent`\n */\n logLevel?: string\n /**\n * Run Kubb with Bun\n */\n bun?: boolean\n}\n\n/**\n * Type helper to make it easier to use vite.config.ts accepts a direct UserConfig object, or a function that returns it. The function receives a ConfigEnv object.\n */\nexport function defineConfig(\n options:\n | PossiblePromise<UserConfig | Array<UserConfig>>\n | ((\n /** The options derived from the CLI flags */\n args: Args,\n ) => PossiblePromise<UserConfig | Array<UserConfig>>),\n): typeof options {\n return options\n}\n\nexport function isInputPath(result: UserConfig | undefined): result is UserConfig<InputPath> {\n return !!result && 'path' in (result?.input as any)\n}\n","import pLimit from 'p-limit'\n\ntype PromiseFunc<T = unknown, T2 = never> = (state?: T) => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype ValueOfPromiseFuncArray<TInput extends Array<unknown>> = TInput extends Array<PromiseFunc<infer X, infer Y>> ? X | Y : never\n\ntype SeqOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<Array<Awaited<ValueOfPromiseFuncArray<TInput>>>>\n\n/**\n * Chains promises\n */\nexport function hookSeq<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TOutput = SeqOutput<TInput, TValue>>(promises: TInput): TOutput {\n return promises.filter(Boolean).reduce(\n (promise, func) => {\n if (typeof func !== 'function') {\n throw new Error('HookSeq needs a function that returns a promise `() => Promise<unknown>`')\n }\n\n return promise.then((state) => {\n const calledFunc = func(state as TValue)\n\n if (calledFunc) {\n return calledFunc.then(Array.prototype.concat.bind(state))\n }\n })\n },\n Promise.resolve([] as unknown),\n ) as TOutput\n}\n\ntype HookFirstOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown> = ValueOfPromiseFuncArray<TInput>\n\n/**\n * Chains promises, first non-null result stops and returns\n */\nexport function hookFirst<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookFirstOutput<TInput, TValue>>(\n promises: TInput,\n nullCheck = (state: any) => state !== null,\n): TOutput {\n let promise: Promise<unknown> = Promise.resolve(null) as Promise<unknown>\n\n for (const func of promises.filter(Boolean)) {\n promise = promise.then((state) => {\n if (nullCheck(state)) {\n return state\n }\n\n return func(state as TValue)\n })\n }\n\n return promise as TOutput\n}\n\ntype HookParallelOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<PromiseSettledResult<Awaited<ValueOfPromiseFuncArray<TInput>>>[]>\n\n/**\n * Runs an array of promise functions with optional concurrency limit.\n */\nexport function hookParallel<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookParallelOutput<TInput, TValue>>(\n promises: TInput,\n concurrency: number = Number.POSITIVE_INFINITY,\n): TOutput {\n const limit = pLimit(concurrency)\n\n const tasks = promises.filter(Boolean).map((promise) => limit(() => promise()))\n\n return Promise.allSettled(tasks) as TOutput\n}\n\nexport type Strategy = 'seq' | 'first' | 'parallel'\n\nexport type StrategySwitch<TStrategy extends Strategy, TInput extends Array<PromiseFunc<TValue, null>>, TValue> = TStrategy extends 'first'\n ? HookFirstOutput<TInput, TValue>\n : TStrategy extends 'seq'\n ? SeqOutput<TInput, TValue>\n : TStrategy extends 'parallel'\n ? HookParallelOutput<TInput, TValue>\n : never\n","import type { Strategy, StrategySwitch } from './utils/executeStrategies.ts'\nimport { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\ntype PromiseFunc<T = unknown, T2 = never> = () => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype Options<TState = any> = {\n nullCheck?: (state: TState) => boolean\n}\n\nexport class PromiseManager<TState = any> {\n #options: Options<TState> = {}\n\n constructor(options: Options<TState> = {}) {\n this.#options = options\n\n return this\n }\n\n run<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TStrategy extends Strategy, TOutput = StrategySwitch<TStrategy, TInput, TValue>>(\n strategy: TStrategy,\n promises: TInput,\n { concurrency = Number.POSITIVE_INFINITY }: { concurrency?: number } = {},\n ): TOutput {\n if (strategy === 'seq') {\n return hookSeq<TInput, TValue, TOutput>(promises)\n }\n\n if (strategy === 'first') {\n return hookFirst<TInput, TValue, TOutput>(promises, this.#options.nullCheck)\n }\n\n if (strategy === 'parallel') {\n return hookParallel<TInput, TValue, TOutput>(promises, concurrency)\n }\n\n throw new Error(`${strategy} not implemented`)\n }\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export class ValidationPluginError extends Error {}\n","import path from 'node:path'\n\nimport type { FileManager } from './FileManager.ts'\nimport type { PluginManager } from './PluginManager.ts'\nimport type { Plugin, PluginContext, PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\ntype OptionalPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options?: T['options']) => UserPluginWithLifeCycle<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: PluginFactory<T>): OptionalPluginFactory<T> {\n return (options = {}) => {\n return factory(options)\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n pluginManager: PluginManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n logger: PluginContext['logger']\n getPlugins: () => Array<Plugin>\n plugin?: PluginContext['plugin']\n}\n\n// not publicly exported\nexport type PluginCore = PluginFactoryOptions<'core', Options, Options, PluginContext, never>\n\nexport const pluginCore = createPlugin<PluginCore>((options) => {\n const { fileManager, pluginManager, resolvePath, resolveName, logger } = options\n\n return {\n name: 'core',\n options,\n key: ['core'],\n context() {\n return {\n get config() {\n return options.config\n },\n get plugins() {\n return options.getPlugins()\n },\n get plugin() {\n // see pluginManger.#execute where we override with `.call` the context with the correct plugin\n return options.plugin as NonNullable<Options['plugin']>\n },\n logger,\n fileManager,\n pluginManager,\n async addFile(...files) {\n const resolvedFiles = await fileManager.add(...files)\n\n if (!Array.isArray(resolvedFiles)) {\n return [resolvedFiles]\n }\n\n return resolvedFiles\n },\n resolvePath,\n resolveName,\n }\n },\n resolvePath(baseName) {\n const root = path.resolve(options.config.root, options.config.output.path)\n\n return path.resolve(root, baseName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import { FileManager } from './FileManager.ts'\nimport { isPromiseRejectedResult } from './PromiseManager.ts'\nimport { PromiseManager } from './PromiseManager.ts'\nimport { ValidationPluginError } from './errors.ts'\nimport { pluginCore } from './plugin.ts'\nimport { transformReservedWord } from './transformers/transformReservedWord.ts'\nimport { EventEmitter } from './utils/EventEmitter.ts'\nimport { setUniqueName } from './utils/uniqueName.ts'\n\nimport type { KubbFile } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport type { PluginCore } from './plugin.ts'\nimport { trim } from './transformers/trim.ts'\nimport type {\n Config,\n GetPluginFactoryOptions,\n Plugin,\n PluginFactoryOptions,\n PluginLifecycle,\n PluginLifecycleHooks,\n PluginParameter,\n PluginWithLifeCycle,\n ResolveNameParams,\n ResolvePathParams,\n UserPlugin,\n UserPluginWithLifeCycle,\n} from './types.ts'\n\ntype RequiredPluginLifecycle = Required<PluginLifecycle>\n\ntype Strategy = 'hookFirst' | 'hookForPlugin' | 'hookParallel' | 'hookSeq'\n\ntype Executer<H extends PluginLifecycleHooks = PluginLifecycleHooks> = {\n message: string\n strategy: Strategy\n hookName: H\n plugin: Plugin\n parameters?: unknown[] | undefined\n output?: unknown\n}\n\ntype ParseResult<H extends PluginLifecycleHooks> = RequiredPluginLifecycle[H]\n\ntype SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseResult<H>>> = {\n result: Result\n plugin: Plugin\n}\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\ntype Options = {\n logger: Logger\n /**\n * @default Number.POSITIVE_INFINITY\n */\n concurrency?: number\n}\n\ntype Events = {\n executing: [executer: Executer]\n executed: [executer: Executer]\n error: [error: Error]\n}\n\ntype GetFileProps<TOptions = object> = {\n name: string\n mode?: KubbFile.Mode\n extname: KubbFile.Extname\n pluginKey: Plugin['key']\n options?: TOptions\n}\n\nexport class PluginManager {\n readonly plugins = new Set<Plugin<GetPluginFactoryOptions<any>>>()\n readonly fileManager: FileManager\n readonly events: EventEmitter<Events> = new EventEmitter()\n\n readonly config: Config\n\n readonly executed: Array<Executer> = []\n readonly logger: Logger\n readonly options: Options\n readonly #core: Plugin<PluginCore>\n\n readonly #usedPluginNames: Record<string, number> = {}\n readonly #promiseManager: PromiseManager\n\n constructor(config: Config, options: Options) {\n this.config = config\n this.options = options\n this.logger = options.logger\n this.fileManager = new FileManager()\n this.#promiseManager = new PromiseManager({\n nullCheck: (state: SafeParseResult<'resolveName'> | null) => !!state?.result,\n })\n\n const core = pluginCore({\n config,\n logger: this.logger,\n pluginManager: this,\n fileManager: this.fileManager,\n resolvePath: this.resolvePath.bind(this),\n resolveName: this.resolveName.bind(this),\n getPlugins: this.#getSortedPlugins.bind(this),\n })\n\n // call core.context.call with empty context so we can transform `context()` to `context: {}`\n this.#core = this.#parse(core as unknown as UserPlugin, this as any, core.context.call(null as any)) as Plugin<PluginCore>\n ;[this.#core, ...(config.plugins || [])].forEach((plugin) => {\n const parsedPlugin = this.#parse(plugin as UserPlugin, this, this.#core.context)\n\n this.plugins.add(parsedPlugin)\n })\n\n return this\n }\n\n getFile<TOptions = object>({ name, mode, extname, pluginKey, options }: GetFileProps<TOptions>): KubbFile.File<{ pluginKey: Plugin['key'] }> {\n const baseName = `${name}${extname}` as const\n const path = this.resolvePath({ baseName, mode, pluginKey, options })\n\n if (!path) {\n throw new Error(`Filepath should be defined for resolvedName \"${name}\" and pluginKey [${JSON.stringify(pluginKey)}]`)\n }\n\n return {\n path,\n baseName,\n meta: {\n pluginKey,\n },\n sources: [],\n }\n }\n\n resolvePath = <TOptions = object>(params: ResolvePathParams<TOptions>): KubbFile.OptionalPath => {\n if (params.pluginKey) {\n const paths = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolvePath',\n parameters: [params.baseName, params.mode, params.options as object],\n message: `Resolving path '${params.baseName}'`,\n })\n\n if (paths && paths?.length > 1) {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [\n `Cannot return a path where the 'pluginKey' ${\n params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'\n } is not unique enough\\n\\nPaths: ${JSON.stringify(paths, undefined, 2)}\\n\\nFalling back on the first item.\\n`,\n ],\n })\n }\n\n return paths?.at(0)\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.baseName, params.mode, params.options as object],\n message: `Resolving path '${params.baseName}'`,\n }).result\n }\n //TODO refactor by using the order of plugins and the cache of the fileManager instead of guessing and recreating the name/path\n resolveName = (params: ResolveNameParams): string => {\n if (params.pluginKey) {\n const names = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolveName',\n parameters: [trim(params.name), params.type],\n message: `Resolving name '${params.name}' and type '${params.type}'`,\n })\n\n if (names && names?.length > 1) {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [\n `Cannot return a name where the 'pluginKey' ${\n params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'\n } is not unique enough\\n\\nNames: ${JSON.stringify(names, undefined, 2)}\\n\\nFalling back on the first item.\\n`,\n ],\n })\n }\n\n return transformReservedWord(names?.at(0) || params.name)\n }\n\n const name = this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [trim(params.name), params.type],\n message: `Resolving name '${params.name}' and type '${params.type}'`,\n }).result\n\n return transformReservedWord(name)\n }\n\n /**\n * Instead of calling `pluginManager.events.on` you can use `pluginManager.on`. This one also has better types.\n */\n on<TEventName extends keyof Events & string>(eventName: TEventName, handler: (...eventArg: Events[TEventName]) => void): void {\n this.events.on(eventName, handler as any)\n }\n\n /**\n * Run a specific hookName for plugin x.\n */\n async hookForPlugin<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n message,\n }: {\n pluginKey: Plugin['key']\n hookName: H\n parameters: PluginParameter<H>\n message: string\n }): Promise<Array<ReturnType<ParseResult<H>> | null>> {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n this.logger.emit('progress_start', { id: hookName, size: plugins.length, message: 'Running plugins...' })\n\n const items: Array<ReturnType<ParseResult<H>>> = []\n\n for (const plugin of plugins) {\n const result = await this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n })\n\n if (result !== undefined && result !== null) {\n items.push(result)\n }\n }\n\n this.logger.emit('progress_stop', { id: hookName })\n\n return items\n }\n /**\n * Run a specific hookName for plugin x.\n */\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n message,\n }: {\n pluginKey: Plugin['key']\n hookName: H\n parameters: PluginParameter<H>\n message: string\n }): Array<ReturnType<ParseResult<H>>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n const result = plugins\n .map((plugin) => {\n return this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n })\n })\n .filter(Boolean)\n\n return result\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n async hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n message,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<Plugin> | null\n message: string\n }): Promise<SafeParseResult<H>> {\n const plugins = this.#getSortedPlugins(hookName).filter((plugin) => {\n return skipped ? skipped.has(plugin) : true\n })\n\n this.logger.emit('progress_start', { id: hookName, size: plugins.length })\n\n const promises = plugins.map((plugin) => {\n return async () => {\n const value = await this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n })\n\n return Promise.resolve({\n plugin,\n result: value,\n } as SafeParseResult<H>)\n }\n })\n\n const result = await this.#promiseManager.run('first', promises)\n\n this.logger.emit('progress_stop', { id: hookName })\n\n return result\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n message,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<Plugin> | null\n message: string\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n const plugins = this.#getSortedPlugins(hookName).filter((plugin) => {\n return skipped ? skipped.has(plugin) : true\n })\n\n for (const plugin of plugins) {\n parseResult = {\n result: this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n message,\n }),\n plugin,\n } as SafeParseResult<H>\n\n if (parseResult?.result != null) {\n break\n }\n }\n\n return parseResult\n }\n\n /**\n * Run all plugins in parallel(order will be based on `this.plugin` and if `pre` or `post` is set).\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n message,\n }: {\n hookName: H\n parameters?: Parameters<RequiredPluginLifecycle[H]> | undefined\n message: string\n }): Promise<Awaited<TOuput>[]> {\n const plugins = this.#getSortedPlugins(hookName)\n this.logger.emit('progress_start', { id: hookName, size: plugins.length })\n\n const promises = plugins.map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookParallel',\n hookName,\n parameters,\n plugin,\n message,\n }) as Promise<TOuput>\n })\n\n const results = await this.#promiseManager.run('parallel', promises, { concurrency: this.options.concurrency })\n\n results.forEach((result, index) => {\n if (isPromiseRejectedResult<Error>(result)) {\n const plugin = this.#getSortedPlugins(hookName)[index]\n\n this.#catcher<H>(result.reason, plugin, hookName)\n }\n })\n\n this.logger.emit('progress_stop', { id: hookName })\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n * Chains plugins\n */\n async hookSeq<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n message,\n }: {\n hookName: H\n parameters?: PluginParameter<H>\n message: string\n }): Promise<void> {\n const plugins = this.#getSortedPlugins(hookName)\n this.logger.emit('progress_start', { id: hookName, size: plugins.length })\n\n const promises = plugins.map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n message,\n })\n })\n\n await this.#promiseManager.run('seq', promises)\n\n this.logger.emit('progress_stop', { id: hookName })\n }\n\n #getSortedPlugins(hookName?: keyof PluginLifecycle): Plugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n if (hookName) {\n return plugins.filter((plugin) => hookName in plugin)\n }\n // TODO add test case for sorting with pre/post\n\n return plugins\n .map((plugin) => {\n if (plugin.pre) {\n const isValid = plugin.pre.every((pluginName) => plugins.find((pluginToFind) => pluginToFind.name === pluginName))\n\n if (!isValid) {\n throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, undefined, 2)})`)\n }\n }\n\n return plugin\n })\n .sort((a, b) => {\n if (b.pre?.includes(a.name)) {\n return 1\n }\n if (b.post?.includes(a.name)) {\n return -1\n }\n return 0\n })\n }\n\n getPluginByKey(pluginKey: Plugin['key']): Plugin | undefined {\n const plugins = [...this.plugins]\n const [searchPluginName] = pluginKey\n\n return plugins.find((item) => {\n const [name] = item.key\n\n return name === searchPluginName\n })\n }\n\n getPluginsByKey(hookName: keyof PluginWithLifeCycle, pluginKey: Plugin['key']): Plugin[] {\n const plugins = [...this.plugins]\n const [searchPluginName, searchIdentifier] = pluginKey\n\n const pluginByPluginName = plugins\n .filter((plugin) => hookName in plugin)\n .filter((item) => {\n const [name, identifier] = item.key\n\n const identifierCheck = identifier?.toString() === searchIdentifier?.toString()\n const nameCheck = name === searchPluginName\n\n if (searchIdentifier) {\n return identifierCheck && nameCheck\n }\n\n return nameCheck\n })\n\n if (!pluginByPluginName?.length) {\n // fallback on the core plugin when there is no match\n\n const corePlugin = plugins.find((plugin) => plugin.name === 'core' && hookName in plugin)\n\n if (corePlugin) {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, falling back on the '@kubb/core' plugin`],\n })\n } else {\n this.logger.emit('debug', {\n date: new Date(),\n logs: [`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, no fallback found in the '@kubb/core' plugin`],\n })\n }\n return corePlugin ? [corePlugin] : []\n }\n\n return pluginByPluginName\n }\n\n #addExecutedToCallStack(executer: Executer | undefined) {\n if (executer) {\n this.events.emit('executed', executer)\n this.executed.push(executer)\n\n this.logger.emit('progressed', { id: executer.hookName, message: `${executer.plugin.name}: ${executer.message}` })\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n #execute<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n message,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: PluginWithLifeCycle\n message: string\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('executing', { strategy, hookName, parameters, plugin, message })\n\n const task = (async () => {\n try {\n if (typeof hook === 'function') {\n const result = await Promise.resolve((hook as Function).apply({ ...this.#core.context, plugin }, parameters))\n\n output = result\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return result\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return hook\n } catch (e) {\n this.#catcher<H>(e as Error, plugin, hookName)\n return null\n }\n })()\n\n return task\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n #executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n message,\n }: {\n strategy: Strategy\n hookName: H\n parameters: PluginParameter<H>\n plugin: PluginWithLifeCycle\n message: string\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('executing', { strategy, hookName, parameters, plugin, message })\n\n try {\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply({ ...this.#core.context, plugin }, parameters) as ReturnType<ParseResult<H>>\n\n output = fn\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return fn\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n message,\n })\n\n return hook\n } catch (e) {\n this.#catcher<H>(e as Error, plugin, hookName)\n\n return null\n }\n }\n\n #catcher<H extends PluginLifecycleHooks>(cause: Error, plugin?: Plugin, hookName?: H) {\n const text = `${cause.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})`\n\n this.logger.emit('error', text, cause)\n this.events.emit('error', cause)\n }\n\n #parse<TPlugin extends UserPluginWithLifeCycle>(\n plugin: TPlugin,\n pluginManager: PluginManager,\n context: PluginCore['context'] | undefined,\n ): Plugin<GetPluginFactoryOptions<TPlugin>> {\n const usedPluginNames = pluginManager.#usedPluginNames\n\n setUniqueName(plugin.name, usedPluginNames)\n\n const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean) as [typeof plugin.name, string]\n\n if (plugin.context && typeof plugin.context === 'function') {\n return {\n ...plugin,\n key,\n context: (plugin.context as Function).call(context) as typeof plugin.context,\n } as unknown as Plugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n return {\n ...plugin,\n key,\n } as unknown as Plugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n static getDependedPlugins<\n T1 extends PluginFactoryOptions,\n T2 extends PluginFactoryOptions = never,\n T3 extends PluginFactoryOptions = never,\n TOutput = T3 extends never ? (T2 extends never ? [T1: Plugin<T1>] : [T1: Plugin<T1>, T2: Plugin<T2>]) : [T1: Plugin<T1>, T2: Plugin<T2>, T3: Plugin<T3>],\n >(plugins: Array<Plugin>, dependedPluginNames: string | string[]): TOutput {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n return pluginNames.map((pluginName) => {\n const plugin = plugins.find((plugin) => plugin.name === pluginName)\n if (!plugin) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n return plugin\n }) as TOutput\n }\n\n static get hooks() {\n return ['buildStart', 'resolvePath', 'resolveName', 'buildEnd'] as const\n }\n}\n","import { join, resolve } from 'node:path'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport type { KubbFile } from './fs/index.ts'\nimport { clean, exists, getRelativePath } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, UserConfig } from './types.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\ntype BuildOptions = {\n config: UserConfig\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n pluginManager?: PluginManager\n}\n\ntype BuildOutput = {\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n /**\n * Only for safeBuild\n */\n error?: Error\n}\n\nexport async function setup(options: BuildOptions): Promise<PluginManager> {\n if (options.pluginManager) {\n return options.pluginManager\n }\n\n const { config: userConfig, logger = createLogger() } = options\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${userConfig.input.path}`,\n {\n cause: e,\n },\n )\n }\n }\n\n const definedConfig: Config = {\n root: userConfig.root || process.cwd(),\n ...userConfig,\n output: {\n write: true,\n barrelType: 'named',\n extension: {\n '.ts': '.ts',\n },\n defaultBanner: 'simple',\n ...userConfig.output,\n },\n plugins: userConfig.plugins as Config['plugins'],\n }\n\n if (definedConfig.output.clean) {\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n return new PluginManager(definedConfig, { logger, concurrency: 5 })\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const { files, pluginManager, error } = await safeBuild(options)\n\n if (error) throw error\n\n return {\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n const config = pluginManager.config\n\n try {\n pluginManager.events.on('executing', ({ plugin, message }) => {\n pluginManager.logger.emit('debug', { date: new Date(), logs: [`Executing pluginKey ${plugin.key?.join('.')} | ${message}`] })\n })\n\n pluginManager.events.on('executed', ({ plugin, message, output }) => {\n pluginManager.logger.emit('debug', {\n date: new Date(),\n logs: [`Executed pluginKey ${plugin.key?.join('.')} | ${message} | ${JSON.stringify(output, undefined, 2)}`],\n })\n })\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [config],\n message: 'buildStart',\n })\n\n if (config.output.barrelType) {\n // create root barrel file\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n //TODO find clean method without loading all files\n const files = await pluginManager.fileManager.getFiles()\n\n const barrelFiles = files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n const rootFile: KubbFile.File = {\n path: rootPath,\n baseName: 'index.ts',\n exports: barrelFiles\n .flatMap((file) => {\n const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly)\n\n return file.sources\n ?.map((source) => {\n if (!file.path || !source.isIndexable) {\n return undefined\n }\n\n // validate of the file is coming from plugin x, needs pluginKey on every file TODO update typing\n const plugin = [...pluginManager.plugins].find((item) => {\n const meta = file.meta as any\n return isDeepEqual(item.key, meta?.pluginKey)\n })\n const pluginOptions = plugin?.options as { output?: Output<any> }\n\n if (!pluginOptions || pluginOptions?.output?.barrelType === false) {\n return undefined\n }\n\n return {\n name: config.output.barrelType === 'all' ? undefined : [source.name],\n path: getRelativePath(rootPath, file.path),\n isTypeOnly: config.output.barrelType === 'all' ? containsOnlyTypes : source.isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n })\n .filter(Boolean),\n sources: [],\n meta: {},\n }\n\n await pluginManager.fileManager.add(rootFile)\n }\n\n const files = await pluginManager.fileManager.processFiles({\n root: config.root,\n extension: config.output.extension,\n dryRun: !config.output.write,\n logger: pluginManager.logger,\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd', message: `Build stopped for ${config.name}` })\n\n await pluginManager.fileManager.clear()\n\n return {\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tif (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {\n\t\tthrow new TypeError('Expected `concurrency` to be a number from 1 and up');\n\t}\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tif (queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t}\n\t};\n\n\tconst run = async (fn, resolve, args) => {\n\t\tactiveCount++;\n\n\t\tconst result = (async () => fn(...args))();\n\n\t\tresolve(result);\n\n\t\ttry {\n\t\t\tawait result;\n\t\t} catch {}\n\n\t\tnext();\n\t};\n\n\tconst enqueue = (fn, resolve, args) => {\n\t\tqueue.enqueue(run.bind(undefined, fn, resolve, args));\n\n\t\t(async () => {\n\t\t\t// This function needs to wait until the next microtask before comparing\n\t\t\t// `activeCount` to `concurrency`, because `activeCount` is updated asynchronously\n\t\t\t// when the run function is dequeued and called. The comparison in the if-statement\n\t\t\t// needs to happen asynchronously as well to get an up-to-date value for `activeCount`.\n\t\t\tawait Promise.resolve();\n\n\t\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\t\tqueue.dequeue()();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (fn, ...args) => new Promise(resolve => {\n\t\tenqueue(fn, resolve, args);\n\t});\n\n\tObject.defineProperties(generator, {\n\t\tactiveCount: {\n\t\t\tget: () => activeCount,\n\t\t},\n\t\tpendingCount: {\n\t\t\tget: () => queue.size,\n\t\t},\n\t\tclearQueue: {\n\t\t\tvalue: () => {\n\t\t\t\tqueue.clear();\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n","import pLimit from 'p-limit';\n\nclass EndError extends Error {\n\tconstructor(value) {\n\t\tsuper();\n\t\tthis.value = value;\n\t}\n}\n\n// The input can also be a promise, so we await it.\nconst testElement = async (element, tester) => tester(await element);\n\n// The input can also be a promise, so we `Promise.all()` them both.\nconst finder = async element => {\n\tconst values = await Promise.all(element);\n\tif (values[1] === true) {\n\t\tthrow new EndError(values[0]);\n\t}\n\n\treturn false;\n};\n\nexport default async function pLocate(\n\titerable,\n\ttester,\n\t{\n\t\tconcurrency = Number.POSITIVE_INFINITY,\n\t\tpreserveOrder = true,\n\t} = {},\n) {\n\tconst limit = pLimit(concurrency);\n\n\t// Start all the promises concurrently with optional limit.\n\tconst items = [...iterable].map(element => [element, limit(testElement, element, tester)]);\n\n\t// Check the promises either serially or concurrently.\n\tconst checkLimit = pLimit(preserveOrder ? 1 : Number.POSITIVE_INFINITY);\n\n\ttry {\n\t\tawait Promise.all(items.map(element => checkLimit(finder, element)));\n\t} catch (error) {\n\t\tif (error instanceof EndError) {\n\t\t\treturn error.value;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n","import process from 'node:process';\nimport path from 'node:path';\nimport fs, {promises as fsPromises} from 'node:fs';\nimport {fileURLToPath} from 'node:url';\nimport pLocate from 'p-locate';\n\nconst typeMappings = {\n\tdirectory: 'isDirectory',\n\tfile: 'isFile',\n};\n\nfunction checkType(type) {\n\tif (Object.hasOwnProperty.call(typeMappings, type)) {\n\t\treturn;\n\t}\n\n\tthrow new Error(`Invalid type specified: ${type}`);\n}\n\nconst matchType = (type, stat) => stat[typeMappings[type]]();\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nexport async function locatePath(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t\tconcurrency,\n\t\tpreserveOrder,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fsPromises.stat : fsPromises.lstat;\n\n\treturn pLocate(paths, async path_ => {\n\t\ttry {\n\t\t\tconst stat = await statFunction(path.resolve(cwd, path_));\n\t\t\treturn matchType(type, stat);\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}, {concurrency, preserveOrder});\n}\n\nexport function locatePathSync(\n\tpaths,\n\t{\n\t\tcwd = process.cwd(),\n\t\ttype = 'file',\n\t\tallowSymlinks = true,\n\t} = {},\n) {\n\tcheckType(type);\n\tcwd = toPath(cwd);\n\n\tconst statFunction = allowSymlinks ? fs.statSync : fs.lstatSync;\n\n\tfor (const path_ of paths) {\n\t\ttry {\n\t\t\tconst stat = statFunction(path.resolve(cwd, path_), {\n\t\t\t\tthrowIfNoEntry: false,\n\t\t\t});\n\n\t\t\tif (!stat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (matchType(type, stat)) {\n\t\t\t\treturn path_;\n\t\t\t}\n\t\t} catch {}\n\t}\n}\n","import {fileURLToPath} from 'node:url';\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport * from './default.js';\n","import path from 'node:path';\nimport {locatePath, locatePathSync} from 'locate-path';\nimport {toPath} from 'unicorn-magic';\n\nexport const findUpStop = Symbol('findUpStop');\n\nexport async function findUpMultiple(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt ?? root));\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = async locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePath(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = await name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePath([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\t// eslint-disable-next-line no-await-in-loop\n\t\tconst foundPath = await runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport function findUpMultipleSync(name, options = {}) {\n\tlet directory = path.resolve(toPath(options.cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tconst stopAt = path.resolve(directory, toPath(options.stopAt) ?? root);\n\tconst limit = options.limit ?? Number.POSITIVE_INFINITY;\n\tconst paths = [name].flat();\n\n\tconst runMatcher = locateOptions => {\n\t\tif (typeof name !== 'function') {\n\t\t\treturn locatePathSync(paths, locateOptions);\n\t\t}\n\n\t\tconst foundPath = name(locateOptions.cwd);\n\t\tif (typeof foundPath === 'string') {\n\t\t\treturn locatePathSync([foundPath], locateOptions);\n\t\t}\n\n\t\treturn foundPath;\n\t};\n\n\tconst matches = [];\n\t// eslint-disable-next-line no-constant-condition\n\twhile (true) {\n\t\tconst foundPath = runMatcher({...options, cwd: directory});\n\n\t\tif (foundPath === findUpStop) {\n\t\t\tbreak;\n\t\t}\n\n\t\tif (foundPath) {\n\t\t\tmatches.push(path.resolve(directory, foundPath));\n\t\t}\n\n\t\tif (directory === stopAt || matches.length >= limit) {\n\t\t\tbreak;\n\t\t}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n\n\treturn matches;\n}\n\nexport async function findUp(name, options = {}) {\n\tconst matches = await findUpMultiple(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport function findUpSync(name, options = {}) {\n\tconst matches = findUpMultipleSync(name, {...options, limit: 1});\n\treturn matches[0];\n}\n\nexport {\n\tpathExists,\n\tpathExistsSync,\n} from 'path-exists';\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/index.ts'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.error(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (version === 'next' && packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n return false\n }\n\n return satisfies(semVer, version)\n }\n}\n"],"x_google_ignoreList":[8,9,10,11,12],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { write } from "./write-CLTPlucv.js";
1
+ import { write } from "./write-O9QWtBJ_.js";
2
2
  import { resolve, sep } from "node:path";
3
3
  import pc from "picocolors";
4
4
  import { formatWithOptions } from "node:util";
@@ -396,12 +396,10 @@ function createConsola$1(options = {}) {
396
396
  //#region ../../node_modules/.pnpm/consola@3.4.2/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs
397
397
  function parseStack(stack, message) {
398
398
  const cwd = process.cwd() + sep;
399
- const lines = stack.split("\n").splice(message.split("\n").length).map((l$1) => l$1.trim().replace("file://", "").replace(cwd, ""));
400
- return lines;
399
+ return stack.split("\n").splice(message.split("\n").length).map((l$1) => l$1.trim().replace("file://", "").replace(cwd, ""));
401
400
  }
402
401
  function writeStream(data, stream) {
403
- const write$1 = stream.__write || stream.write;
404
- return write$1.call(stream, data);
402
+ return (stream.__write || stream.write).call(stream, data);
405
403
  }
406
404
  const bracket = (x) => x ? `[${x}]` : "";
407
405
  var BasicReporter = class {
@@ -805,11 +803,9 @@ function G() {
805
803
  const e = F.find((s$1) => s$1[0]);
806
804
  if (e) return { name: e[1] };
807
805
  }
808
- const P = G();
809
- P?.name;
806
+ G()?.name;
810
807
  function ansiRegex({ onlyFirst = false } = {}) {
811
- const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
812
- const pattern = [`[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`, "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");
808
+ const pattern = [`[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))`, "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");
813
809
  return new RegExp(pattern, onlyFirst ? void 0 : "g");
814
810
  }
815
811
  const regex = ansiRegex();
@@ -895,8 +891,7 @@ const TYPE_ICONS = {
895
891
  log: ""
896
892
  };
897
893
  function stringWidth(str) {
898
- const hasICU = typeof Intl === "object";
899
- if (!hasICU || !Intl.Segmenter) return stripAnsi(str).length;
894
+ if (!(typeof Intl === "object") || !Intl.Segmenter) return stripAnsi(str).length;
900
895
  return stringWidth$1(str);
901
896
  }
902
897
  var FancyReporter = class extends BasicReporter {
@@ -948,16 +943,15 @@ function getBgColor(color = "bgWhite") {
948
943
  function createConsola(options = {}) {
949
944
  let level = _getDefaultLogLevel();
950
945
  if (process.env.CONSOLA_LEVEL) level = Number.parseInt(process.env.CONSOLA_LEVEL) ?? level;
951
- const consola2 = createConsola$1({
946
+ return createConsola$1({
952
947
  level,
953
948
  defaults: { level },
954
949
  stdout: process.stdout,
955
950
  stderr: process.stderr,
956
- prompt: (...args) => import("./prompt-D3dP3KNu.js").then((m) => m.prompt(...args)),
951
+ prompt: (...args) => import("./prompt-BMs_Y-vT.js").then((m) => m.prompt(...args)),
957
952
  reporters: options.reporters || [options.fancy ?? !(T || R) ? new FancyReporter() : new BasicReporter()],
958
953
  ...options
959
954
  });
960
- return consola2;
961
955
  }
962
956
  function _getDefaultLogLevel() {
963
957
  if (g) return LogLevels.debug;
@@ -1030,7 +1024,7 @@ function createLogger({ logLevel = 3, name, consola: _consola } = {}) {
1030
1024
  throw error;
1031
1025
  });
1032
1026
  if (consola$1) consola$1.level = logLevel;
1033
- const logger = {
1027
+ return {
1034
1028
  name,
1035
1029
  logLevel,
1036
1030
  consola: consola$1,
@@ -1053,7 +1047,6 @@ function createLogger({ logLevel = 3, name, consola: _consola } = {}) {
1053
1047
  return Object.keys(files);
1054
1048
  }
1055
1049
  };
1056
- return logger;
1057
1050
  }
1058
1051
  function randomColour(text) {
1059
1052
  if (!text) return "white";
@@ -1070,8 +1063,7 @@ function randomColour(text) {
1070
1063
  "gray"
1071
1064
  ];
1072
1065
  const random = seedrandom(text);
1073
- const colour = defaultColours.at(Math.floor(random() * defaultColours.length)) || "white";
1074
- return colour;
1066
+ return defaultColours.at(Math.floor(random() * defaultColours.length)) || "white";
1075
1067
  }
1076
1068
  function randomCliColour(text) {
1077
1069
  if (!text) return "";
@@ -1082,4 +1074,4 @@ function randomCliColour(text) {
1082
1074
 
1083
1075
  //#endregion
1084
1076
  export { EventEmitter$1 as EventEmitter, LogMapper, createLogger, randomCliColour, randomColour };
1085
- //# sourceMappingURL=logger-M0gDQMDh.js.map
1077
+ //# sourceMappingURL=logger-BKPT4rkB.js.map