@kubb/core 4.11.1 → 4.11.3

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 (39) hide show
  1. package/dist/{getBarrelFiles-BkDzzugQ.cjs → getBarrelFiles-8VEWWk9Z.cjs} +80 -111
  2. package/dist/getBarrelFiles-8VEWWk9Z.cjs.map +1 -0
  3. package/dist/{getBarrelFiles-BVMBhc50.d.cts → getBarrelFiles-B_2WDywH.d.cts} +3 -3
  4. package/dist/{getBarrelFiles-a-GlnjYa.js → getBarrelFiles-DQ0hksqD.js} +80 -111
  5. package/dist/getBarrelFiles-DQ0hksqD.js.map +1 -0
  6. package/dist/{getBarrelFiles-DjQ68d4e.d.ts → getBarrelFiles-ZIHk_1ln.d.ts} +3 -3
  7. package/dist/hooks.d.cts +1 -1
  8. package/dist/hooks.d.ts +1 -1
  9. package/dist/index.cjs +261 -42
  10. package/dist/index.cjs.map +1 -1
  11. package/dist/index.d.cts +5 -7
  12. package/dist/index.d.ts +5 -7
  13. package/dist/index.js +262 -43
  14. package/dist/index.js.map +1 -1
  15. package/dist/{logger-DIA19Yfz.js → logger-CQn6sdC0.js} +72 -7
  16. package/dist/{logger-CPt4U57Z.cjs.map → logger-CQn6sdC0.js.map} +1 -1
  17. package/dist/{logger-CPt4U57Z.cjs → logger-US5g7KdM.cjs} +72 -7
  18. package/dist/logger-US5g7KdM.cjs.map +1 -0
  19. package/dist/{logger-C96jDrSt.d.ts → logger-mq06Cxxv.d.cts} +29 -4
  20. package/dist/{logger-BJDkLsF0.d.cts → logger-o16AyvGp.d.ts} +29 -4
  21. package/dist/logger.cjs +1 -1
  22. package/dist/logger.d.cts +1 -1
  23. package/dist/logger.d.ts +1 -1
  24. package/dist/logger.js +1 -1
  25. package/dist/{types-tSSA1oz8.d.cts → types-CCEy_FVr.d.cts} +36 -27
  26. package/dist/{types-69-evK37.d.ts → types-DgfEZ3IN.d.ts} +36 -27
  27. package/dist/utils.cjs +1 -1
  28. package/dist/utils.d.cts +2 -2
  29. package/dist/utils.d.ts +2 -2
  30. package/dist/utils.js +1 -1
  31. package/package.json +1 -1
  32. package/src/PluginManager.ts +81 -114
  33. package/src/build.ts +229 -25
  34. package/src/logger.ts +87 -9
  35. package/src/utils/ciDetection.ts +40 -0
  36. package/src/utils/diagnostics.ts +15 -0
  37. package/dist/getBarrelFiles-BkDzzugQ.cjs.map +0 -1
  38. package/dist/getBarrelFiles-a-GlnjYa.js.map +0 -1
  39. package/dist/logger-DIA19Yfz.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,10 +1,11 @@
1
1
  Object.defineProperty(exports, '__esModule', { value: true });
2
2
  const require_chunk = require('./chunk-CbDLau6x.cjs');
3
- const require_getBarrelFiles = require('./getBarrelFiles-BkDzzugQ.cjs');
4
- const require_logger = require('./logger-CPt4U57Z.cjs');
3
+ const require_getBarrelFiles = require('./getBarrelFiles-8VEWWk9Z.cjs');
4
+ const require_logger = require('./logger-US5g7KdM.cjs');
5
5
  require('./transformers-B-zCAPV-.cjs');
6
6
  let node_path = require("node:path");
7
7
  node_path = require_chunk.__toESM(node_path);
8
+ let node_perf_hooks = require("node:perf_hooks");
8
9
  let __kubb_react_fabric = require("@kubb/react-fabric");
9
10
  let __kubb_react_fabric_parsers = require("@kubb/react-fabric/parsers");
10
11
  let __kubb_react_fabric_plugins = require("@kubb/react-fabric/plugins");
@@ -131,15 +132,62 @@ function readSync(path$2) {
131
132
  return syncReader(path$2);
132
133
  }
133
134
 
135
+ //#endregion
136
+ //#region package.json
137
+ var version = "4.11.3";
138
+
139
+ //#endregion
140
+ //#region src/utils/diagnostics.ts
141
+ /**
142
+ * Get diagnostic information for debugging
143
+ */
144
+ function getDiagnosticInfo() {
145
+ return {
146
+ nodeVersion: node_process.version,
147
+ KubbVersion: version,
148
+ platform: process.platform,
149
+ arch: process.arch,
150
+ cwd: process.cwd()
151
+ };
152
+ }
153
+
134
154
  //#endregion
135
155
  //#region src/build.ts
136
156
  async function setup(options) {
137
157
  const { config: userConfig, logger = require_logger.createLogger() } = options;
158
+ const diagnosticInfo = getDiagnosticInfo();
138
159
  if (Array.isArray(userConfig.input)) console.warn(picocolors.default.yellow("This feature is still under development — use with caution"));
160
+ logger.emit("debug", {
161
+ date: /* @__PURE__ */ new Date(),
162
+ category: "setup",
163
+ logs: [
164
+ "Configuration:",
165
+ ` • Name: ${userConfig.name || "unnamed"}`,
166
+ ` • Root: ${userConfig.root || process.cwd()}`,
167
+ ` • Output: ${userConfig.output?.path || "not specified"}`,
168
+ ` • Plugins: ${userConfig.plugins?.length || 0}`,
169
+ "Output Settings:",
170
+ ` • Write: ${userConfig.output?.write !== false ? "enabled" : "disabled"}`,
171
+ ` • Formater: ${userConfig.output?.format || "none"}`,
172
+ ` • Linter: ${userConfig.output?.lint || "none"}`,
173
+ "Environment:",
174
+ Object.entries(diagnosticInfo).map(([key, value]) => ` • ${key}: ${value}`).join("\n")
175
+ ]
176
+ });
139
177
  try {
140
- if (isInputPath(userConfig) && !new require_getBarrelFiles.URLPath(userConfig.input.path).isURL) await exists(userConfig.input.path);
178
+ if (isInputPath(userConfig) && !new require_getBarrelFiles.URLPath(userConfig.input.path).isURL) {
179
+ await exists(userConfig.input.path);
180
+ logger.emit("debug", {
181
+ date: /* @__PURE__ */ new Date(),
182
+ category: "setup",
183
+ logs: [`✓ Input file validated: ${userConfig.input.path}`]
184
+ });
185
+ }
141
186
  } catch (e) {
142
- if (isInputPath(userConfig)) throw new Error(`Cannot read file/URL defined in \`input.path\` or set with \`kubb generate PATH\` in the CLI of your Kubb config ${userConfig.input.path}`, { cause: e });
187
+ if (isInputPath(userConfig)) {
188
+ const error = e;
189
+ throw new Error(`Cannot read file/URL defined in \`input.path\` or set with \`kubb generate PATH\` in the CLI of your Kubb config ${userConfig.input.path}`, { cause: error });
190
+ }
143
191
  }
144
192
  const definedConfig = {
145
193
  root: userConfig.root || process.cwd(),
@@ -154,57 +202,239 @@ async function setup(options) {
154
202
  plugins: userConfig.plugins
155
203
  };
156
204
  if (definedConfig.output.clean) {
205
+ logger.emit("debug", {
206
+ date: /* @__PURE__ */ new Date(),
207
+ category: "setup",
208
+ logs: [
209
+ "Cleaning output directories",
210
+ ` • Output: ${definedConfig.output.path}`,
211
+ " • Cache: .kubb"
212
+ ]
213
+ });
157
214
  await clean(definedConfig.output.path);
158
215
  await clean((0, node_path.join)(definedConfig.root, ".kubb"));
159
216
  }
160
217
  const fabric = (0, __kubb_react_fabric.createFabric)();
161
218
  fabric.use(__kubb_react_fabric_plugins.fsPlugin, { dryRun: !definedConfig.output.write });
162
219
  fabric.use(__kubb_react_fabric_parsers.typescriptParser);
220
+ fabric.context.on("process:start", ({ files }) => {
221
+ logger.emit("progress_start", {
222
+ id: "files",
223
+ size: files.length,
224
+ message: "Writing files ..."
225
+ });
226
+ logger.emit("debug", {
227
+ date: /* @__PURE__ */ new Date(),
228
+ category: "file",
229
+ logs: [`Writing ${files.length} files...`]
230
+ });
231
+ });
232
+ fabric.context.on("process:progress", async ({ file, source }) => {
233
+ const message = file ? `Writing ${(0, node_path.relative)(definedConfig.root, file.path)}` : "";
234
+ logger.emit("progressed", {
235
+ id: "files",
236
+ message
237
+ });
238
+ if (source) await require_logger.write(file.path, source, { sanity: false });
239
+ });
240
+ fabric.context.on("process:end", () => {
241
+ logger.emit("progress_stop", { id: "files" });
242
+ logger.emit("debug", {
243
+ date: /* @__PURE__ */ new Date(),
244
+ category: "file",
245
+ logs: ["✓ File write process completed"]
246
+ });
247
+ });
248
+ logger.emit("debug", {
249
+ date: /* @__PURE__ */ new Date(),
250
+ category: "setup",
251
+ logs: [
252
+ "✓ Fabric initialized",
253
+ ` • File writing: ${definedConfig.output.write ? "enabled" : "disabled (dry-run)"}`,
254
+ ` • Barrel type: ${definedConfig.output.barrelType || "none"}`
255
+ ]
256
+ });
257
+ const pluginManager = new require_getBarrelFiles.PluginManager(definedConfig, {
258
+ fabric,
259
+ logger,
260
+ concurrency: 5
261
+ });
262
+ pluginManager.on("executing", ({ plugin, hookName, strategy, parameters }) => {
263
+ logger.emit("debug", {
264
+ date: /* @__PURE__ */ new Date(),
265
+ category: "hook",
266
+ pluginName: plugin.name,
267
+ logs: [
268
+ `Executing hook: ${hookName}`,
269
+ ` • Strategy: ${strategy}`,
270
+ " • Parameters:",
271
+ JSON.stringify(parameters, null, 2)
272
+ ]
273
+ });
274
+ });
275
+ pluginManager.on("executed", ({ plugin, hookName, duration, parameters }) => {
276
+ let message = "";
277
+ if (hookName === "resolvePath") {
278
+ const [path$2] = parameters || [];
279
+ message = `Resolving path '${path$2}'`;
280
+ }
281
+ if (hookName === "resolveName") {
282
+ const [name, type] = parameters || [];
283
+ message = `Resolving name '${name}' and type '${type}'`;
284
+ }
285
+ logger.emit("progressed", {
286
+ id: hookName,
287
+ message: `${plugin.name}: ${message}`
288
+ });
289
+ logger.emit("debug", {
290
+ date: /* @__PURE__ */ new Date(),
291
+ category: "hook",
292
+ pluginName: plugin.name,
293
+ logs: [`✓ Completed in ${duration}ms`]
294
+ });
295
+ });
296
+ pluginManager.on("progress_start", ({ hookName, plugins }) => {
297
+ logger.emit("progress_start", {
298
+ id: hookName,
299
+ size: plugins.length,
300
+ message: "Running plugins..."
301
+ });
302
+ });
303
+ pluginManager.on("progress_stop", ({ hookName }) => {
304
+ logger.emit("progress_stop", { id: hookName });
305
+ });
306
+ pluginManager.on("error", (error, { plugin, strategy, duration, parameters, hookName }) => {
307
+ const text = `${error.message} (plugin: ${plugin?.name || "unknown"}, hook: ${hookName || "unknown"})`;
308
+ logger.emit("error", text, error);
309
+ logger.emit("debug", {
310
+ date: /* @__PURE__ */ new Date(),
311
+ category: "error",
312
+ pluginName: plugin.name,
313
+ logs: [
314
+ `✗ Hook '${hookName}' failed after ${duration}ms`,
315
+ ` • Strategy: ${strategy}`,
316
+ ` • Error: ${error.constructor.name} - ${error.message}`,
317
+ " • Stack Trace:",
318
+ error.stack || "No stack trace available",
319
+ " • Parameters:",
320
+ JSON.stringify(parameters, null, 2)
321
+ ]
322
+ });
323
+ });
324
+ logger.emit("debug", {
325
+ date: /* @__PURE__ */ new Date(),
326
+ category: "setup",
327
+ logs: [
328
+ "✓ PluginManager initialized",
329
+ " • Concurrency: 5",
330
+ ` • Total plugins: ${pluginManager.plugins.length}`
331
+ ]
332
+ });
163
333
  return {
334
+ logger,
164
335
  fabric,
165
- pluginManager: new require_getBarrelFiles.PluginManager(definedConfig, {
166
- fabric,
167
- logger,
168
- concurrency: 5
169
- })
336
+ pluginManager
170
337
  };
171
338
  }
172
339
  async function build(options, overrides) {
173
- const { fabric, files, pluginManager, failedPlugins, error } = await safeBuild(options, overrides);
340
+ const { fabric, files, pluginManager, failedPlugins, pluginTimings, error } = await safeBuild(options, overrides);
174
341
  if (error) throw error;
175
342
  return {
176
343
  failedPlugins,
177
344
  fabric,
178
345
  files,
179
346
  pluginManager,
347
+ pluginTimings,
180
348
  error
181
349
  };
182
350
  }
183
351
  async function safeBuild(options, overrides) {
184
- const { fabric, pluginManager } = overrides ? overrides : await setup(options);
352
+ const { fabric, pluginManager, logger } = overrides ? overrides : await setup(options);
185
353
  const failedPlugins = /* @__PURE__ */ new Set();
354
+ const pluginTimings = /* @__PURE__ */ new Map();
186
355
  const config = pluginManager.config;
187
356
  try {
188
357
  for (const plugin of pluginManager.plugins) {
189
358
  const context = pluginManager.getContext(plugin);
190
359
  const installer = plugin.install.bind(context);
191
360
  try {
361
+ const startTime = node_perf_hooks.performance.now();
362
+ const timestamp = /* @__PURE__ */ new Date();
363
+ logger.emit("debug", {
364
+ date: timestamp,
365
+ pluginGroupMarker: "start",
366
+ pluginName: plugin.name,
367
+ logs: []
368
+ });
369
+ logger.emit("debug", {
370
+ date: timestamp,
371
+ category: "plugin",
372
+ pluginName: plugin.name,
373
+ logs: ["Installing plugin...", ` • Plugin Key: ${JSON.stringify(plugin.key)}`]
374
+ });
192
375
  await installer(context);
376
+ const duration = Math.round(node_perf_hooks.performance.now() - startTime);
377
+ pluginTimings.set(plugin.name, duration);
378
+ logger.emit("debug", {
379
+ date: /* @__PURE__ */ new Date(),
380
+ category: "plugin",
381
+ pluginName: plugin.name,
382
+ logs: [`✓ Plugin installed successfully (${duration}ms)`]
383
+ });
384
+ logger.emit("debug", {
385
+ date: /* @__PURE__ */ new Date(),
386
+ pluginGroupMarker: "end",
387
+ pluginName: plugin.name,
388
+ logs: []
389
+ });
193
390
  } catch (e) {
391
+ const error = e;
392
+ const errorTimestamp = /* @__PURE__ */ new Date();
393
+ logger.emit("debug", {
394
+ date: errorTimestamp,
395
+ category: "error",
396
+ pluginName: plugin.name,
397
+ logs: [
398
+ "✗ Plugin installation failed",
399
+ ` • Plugin Key: ${JSON.stringify(plugin.key)}`,
400
+ ` • Error: ${error.constructor.name} - ${error.message}`,
401
+ " • Stack Trace:",
402
+ error.stack || "No stack trace available"
403
+ ]
404
+ });
405
+ logger.emit("debug", {
406
+ date: errorTimestamp,
407
+ pluginGroupMarker: "end",
408
+ pluginName: plugin.name,
409
+ logs: []
410
+ });
194
411
  failedPlugins.add({
195
412
  plugin,
196
- error: e
413
+ error
197
414
  });
198
415
  }
199
416
  }
200
417
  if (config.output.barrelType) {
201
418
  const rootPath = (0, node_path.resolve)((0, node_path.resolve)(config.root), config.output.path, "index.ts");
419
+ logger.emit("debug", {
420
+ date: /* @__PURE__ */ new Date(),
421
+ logs: [
422
+ "Generating barrel file",
423
+ ` • Type: ${config.output.barrelType}`,
424
+ ` • Path: ${rootPath}`
425
+ ]
426
+ });
427
+ const barrelFiles = fabric.files.filter((file) => {
428
+ return file.sources.some((source) => source.isIndexable);
429
+ });
430
+ logger.emit("debug", {
431
+ date: /* @__PURE__ */ new Date(),
432
+ logs: [`Found ${barrelFiles.length} indexable files for barrel export`]
433
+ });
202
434
  const rootFile = {
203
435
  path: rootPath,
204
436
  baseName: "index.ts",
205
- exports: fabric.files.filter((file) => {
206
- return file.sources.some((source) => source.isIndexable);
207
- }).flatMap((file) => {
437
+ exports: barrelFiles.flatMap((file) => {
208
438
  const containsOnlyTypes = file.sources?.every((source) => source.isTypeOnly);
209
439
  return file.sources?.map((source) => {
210
440
  if (!file.path || !source.isIndexable) return;
@@ -224,32 +454,20 @@ async function safeBuild(options, overrides) {
224
454
  meta: {}
225
455
  };
226
456
  await fabric.upsertFile(rootFile);
227
- }
228
- fabric.context.on("process:start", ({ files: files$1 }) => {
229
- pluginManager.logger.emit("progress_start", {
230
- id: "files",
231
- size: files$1.length,
232
- message: "Writing files ..."
457
+ logger.emit("debug", {
458
+ date: /* @__PURE__ */ new Date(),
459
+ category: "file",
460
+ logs: [`✓ Generated barrel file (${rootFile.exports?.length || 0} exports)`]
233
461
  });
234
- });
235
- fabric.context.on("process:progress", async ({ file, source }) => {
236
- const message = file ? `Writing ${(0, node_path.relative)(config.root, file.path)}` : "";
237
- pluginManager.logger.emit("progressed", {
238
- id: "files",
239
- message
240
- });
241
- if (source) await require_logger.write(file.path, source, { sanity: false });
242
- });
243
- fabric.context.on("process:end", () => {
244
- pluginManager.logger.emit("progress_stop", { id: "files" });
245
- });
462
+ }
246
463
  const files = [...fabric.files];
247
464
  await fabric.write({ extension: config.output.extension });
248
465
  return {
249
466
  failedPlugins,
250
467
  fabric,
251
468
  files,
252
- pluginManager
469
+ pluginManager,
470
+ pluginTimings
253
471
  };
254
472
  } catch (e) {
255
473
  return {
@@ -257,6 +475,7 @@ async function safeBuild(options, overrides) {
257
475
  fabric,
258
476
  files: [],
259
477
  pluginManager,
478
+ pluginTimings,
260
479
  error: e
261
480
  };
262
481
  }
@@ -494,8 +713,8 @@ var PackageManager = class PackageManager {
494
713
  const json = readSync(pkgPath);
495
714
  return JSON.parse(json);
496
715
  }
497
- static setVersion(dependency, version) {
498
- PackageManager.#cache[dependency] = version;
716
+ static setVersion(dependency, version$1) {
717
+ PackageManager.#cache[dependency] = version$1;
499
718
  }
500
719
  #match(packageJSON, dependency) {
501
720
  const dependencies = {
@@ -518,21 +737,21 @@ var PackageManager = class PackageManager {
518
737
  if (!packageJSON) return;
519
738
  return this.#match(packageJSON, dependency);
520
739
  }
521
- async isValid(dependency, version) {
740
+ async isValid(dependency, version$1) {
522
741
  const packageVersion = await this.getVersion(dependency);
523
742
  if (!packageVersion) return false;
524
- if (packageVersion === version) return true;
743
+ if (packageVersion === version$1) return true;
525
744
  const semVer = (0, semver.coerce)(packageVersion);
526
745
  if (!semVer) throw new Error(`${packageVersion} is not valid`);
527
- return (0, semver.satisfies)(semVer, version);
746
+ return (0, semver.satisfies)(semVer, version$1);
528
747
  }
529
- isValidSync(dependency, version) {
748
+ isValidSync(dependency, version$1) {
530
749
  const packageVersion = this.getVersionSync(dependency);
531
750
  if (!packageVersion) return false;
532
- if (version === "next" && packageVersion === version) return true;
751
+ if (version$1 === "next" && packageVersion === version$1) return true;
533
752
  const semVer = (0, semver.coerce)(packageVersion);
534
753
  if (!semVer) return false;
535
- return (0, semver.satisfies)(semVer, version);
754
+ return (0, semver.satisfies)(semVer, version$1);
536
755
  }
537
756
  };
538
757
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["#context","#options","fs","path","reader","fs","path","syncReader","fs","path","createLogger","pc","URLPath","definedConfig: Config","fsPlugin","typescriptParser","PluginManager","rootFile: KubbFile.File","getRelativePath","files","write","build","Queue","resolve","toPath","process","fsPromises","path","fs","path","#cache","#cwd","#SLASHES","path","mod","os","module","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/fs/clean.ts","../src/fs/exists.ts","../src/fs/read.ts","../src/build.ts","../src/definePlugin.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 { InputPath, UserConfig } from './types.ts'\nimport type { PossiblePromise } from './utils/types.ts'\n\n/**\n * CLI options derived from command-line flags.\n */\nexport type CLIOptions = {\n /** Path to `kubb.config.js` */\n config?: string\n\n /** Enable watch mode for input files */\n watch?: boolean\n\n /**\n * Logging verbosity for CLI usage.\n *\n * - `silent`: hide non-essential logs\n * - `info`: show general logs (non-plugin-related)\n * - `debug`: include detailed plugin lifecycle logs\n * @default 'silent'\n */\n logLevel?: 'silent' | 'info' | 'debug'\n\n /** Run Kubb with Bun */\n bun?: boolean\n}\n\n/**\n * Helper for defining a Kubb configuration.\n *\n * Accepts either:\n * - A config object or array of configs\n * - A function returning the config(s), optionally async,\n * receiving the CLI options as argument\n *\n * @example\n * export default defineConfig(({ logLevel }) => ({\n * root: 'src',\n * plugins: [myPlugin()],\n * }))\n */\nexport function defineConfig(\n config: PossiblePromise<UserConfig | UserConfig[]> | ((cli: CLIOptions) => PossiblePromise<UserConfig | UserConfig[]>),\n): typeof config {\n return config\n}\n\n/**\n * Type guard to check if a given config has an `input.path`.\n */\nexport function isInputPath(config: UserConfig | undefined): config is UserConfig<InputPath> {\n return typeof config?.input === 'object' && config.input !== null && 'path' in config.input\n}\n","import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function exists(path: string): Promise<boolean> {\n return reader(path)\n}\n\nexport function existsSync(path: string): boolean {\n return syncReader(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","import { join, relative, resolve } from 'node:path'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Fabric } from '@kubb/react-fabric'\nimport { createFabric } from '@kubb/react-fabric'\nimport { typescriptParser } from '@kubb/react-fabric/parsers'\nimport { fsPlugin } from '@kubb/react-fabric/plugins'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport { clean, exists, getRelativePath, write } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, Plugin, 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}\n\ntype BuildOutput = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n fabric: Fabric\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n // TODO check if we can remove error\n /**\n * Only for safeBuild,\n * @deprecated\n */\n error?: Error\n}\n\ntype SetupResult = {\n fabric: Fabric\n pluginManager: PluginManager\n}\n\nexport async function setup(options: BuildOptions): Promise<SetupResult> {\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 const fabric = createFabric()\n fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })\n fabric.use(typescriptParser)\n\n const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })\n\n return {\n fabric,\n pluginManager,\n }\n}\n\nexport async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, files, pluginManager, failedPlugins, error } = await safeBuild(options, overrides)\n\n if (error) {\n throw error\n }\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, pluginManager } = overrides ? overrides : await setup(options)\n\n const failedPlugins = new Set<{ plugin: Plugin; error: Error }>()\n const config = pluginManager.config\n\n try {\n for (const plugin of pluginManager.plugins) {\n const context = pluginManager.getContext(plugin)\n\n const installer = plugin.install.bind(context)\n\n try {\n await installer(context)\n } catch (e) {\n failedPlugins.add({ plugin, error: e as Error })\n }\n }\n\n if (config.output.barrelType) {\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n const barrelFiles = fabric.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 fabric.upsertFile(rootFile)\n }\n\n fabric.context.on('process:start', ({ files }) => {\n pluginManager.logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n })\n\n fabric.context.on('process:progress', async ({ file, source }) => {\n const message = file ? `Writing ${relative(config.root, file.path)}` : ''\n pluginManager.logger.emit('progressed', { id: 'files', message })\n\n if (source) {\n await write(file.path, source, { sanity: false })\n }\n })\n\n fabric.context.on('process:end', () => {\n pluginManager.logger.emit('progress_stop', { id: 'files' })\n })\n const files = [...fabric.files]\n\n await fabric.write({ extension: config.output.extension })\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n }\n } catch (e) {\n return {\n failedPlugins,\n fabric,\n files: [],\n pluginManager,\n error: e as Error,\n }\n }\n}\n","import type { PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginBuilder<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\n/**\n * Wraps a plugin builder to make the options parameter optional.\n */\nexport function definePlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(\n build: PluginBuilder<T>,\n): (options?: T['options']) => UserPluginWithLifeCycle<T> {\n return (options) => build(options ?? ({} as T['options']))\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":[7,8,9,10,11],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["#context","#options","fs","path","reader","fs","path","syncReader","fs","path","createLogger","pc","URLPath","definedConfig: Config","fsPlugin","typescriptParser","write","PluginManager","path","performance","rootFile: KubbFile.File","getRelativePath","build","Queue","resolve","toPath","process","fsPromises","path","fs","path","#cache","#cwd","#SLASHES","path","mod","os","module","version","#match"],"sources":["../src/BaseGenerator.ts","../src/config.ts","../src/fs/clean.ts","../src/fs/exists.ts","../src/fs/read.ts","../package.json","../src/utils/diagnostics.ts","../src/build.ts","../src/definePlugin.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 { InputPath, UserConfig } from './types.ts'\nimport type { PossiblePromise } from './utils/types.ts'\n\n/**\n * CLI options derived from command-line flags.\n */\nexport type CLIOptions = {\n /** Path to `kubb.config.js` */\n config?: string\n\n /** Enable watch mode for input files */\n watch?: boolean\n\n /**\n * Logging verbosity for CLI usage.\n *\n * - `silent`: hide non-essential logs\n * - `info`: show general logs (non-plugin-related)\n * - `debug`: include detailed plugin lifecycle logs\n * @default 'silent'\n */\n logLevel?: 'silent' | 'info' | 'debug'\n\n /** Run Kubb with Bun */\n bun?: boolean\n}\n\n/**\n * Helper for defining a Kubb configuration.\n *\n * Accepts either:\n * - A config object or array of configs\n * - A function returning the config(s), optionally async,\n * receiving the CLI options as argument\n *\n * @example\n * export default defineConfig(({ logLevel }) => ({\n * root: 'src',\n * plugins: [myPlugin()],\n * }))\n */\nexport function defineConfig(\n config: PossiblePromise<UserConfig | UserConfig[]> | ((cli: CLIOptions) => PossiblePromise<UserConfig | UserConfig[]>),\n): typeof config {\n return config\n}\n\n/**\n * Type guard to check if a given config has an `input.path`.\n */\nexport function isInputPath(config: UserConfig | undefined): config is UserConfig<InputPath> {\n return typeof config?.input === 'object' && config.input !== null && 'path' in config.input\n}\n","import fs from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function exists(path: string): Promise<boolean> {\n return reader(path)\n}\n\nexport function existsSync(path: string): boolean {\n return syncReader(path)\n}\n","import fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","{\n \"name\": \"@kubb/core\",\n \"version\": \"4.11.3\",\n \"description\": \"Core functionality for Kubb's plugin-based code generation system, providing the foundation for transforming OpenAPI specifications.\",\n \"keywords\": [\n \"typescript\",\n \"plugins\",\n \"plugin-system\",\n \"code-generator\",\n \"codegen\",\n \"openapi\",\n \"swagger\",\n \"kubb\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/kubb-labs/kubb.git\",\n \"directory\": \"packages/core\"\n },\n \"license\": \"MIT\",\n \"author\": \"stijnvanhulle\",\n \"sideEffects\": false,\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"require\": \"./dist/index.cjs\",\n \"import\": \"./dist/index.js\"\n },\n \"./hooks\": {\n \"require\": \"./dist/hooks.cjs\",\n \"import\": \"./dist/hooks.js\"\n },\n \"./logger\": {\n \"require\": \"./dist/logger.cjs\",\n \"import\": \"./dist/logger.js\"\n },\n \"./transformers\": {\n \"require\": \"./dist/transformers.cjs\",\n \"import\": \"./dist/transformers.js\"\n },\n \"./utils\": {\n \"require\": \"./dist/utils.cjs\",\n \"import\": \"./dist/utils.js\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.cts\",\n \"typesVersions\": {\n \"*\": {\n \"utils\": [\n \"./dist/utils.d.ts\"\n ],\n \"transformers\": [\n \"./dist/transformers.d.ts\"\n ],\n \"logger\": [\n \"./dist/logger.d.ts\"\n ],\n \"hooks\": [\n \"./dist/hooks.d.ts\"\n ],\n \"fs\": [\n \"./dist/fs.d.ts\"\n ]\n }\n },\n \"files\": [\n \"src\",\n \"dist\",\n \"*.d.ts\",\n \"*.d.cts\",\n \"schema.json\",\n \"!/**/**.test.**\",\n \"!/**/__tests__/**\"\n ],\n \"size-limit\": [\n {\n \"path\": \"./dist/*.js\",\n \"limit\": \"510 KiB\",\n \"gzip\": true\n }\n ],\n \"scripts\": {\n \"build\": \"tsdown && size-limit\",\n \"clean\": \"npx rimraf ./dist\",\n \"lint\": \"bun biome lint .\",\n \"lint:fix\": \"bun biome lint --fix --unsafe .\",\n \"release\": \"pnpm publish --no-git-check\",\n \"release:canary\": \"bash ../../.github/canary.sh && node ../../scripts/build.js canary && pnpm publish --no-git-check\",\n \"start\": \"tsdown --watch\",\n \"test\": \"vitest --passWithNoTests\",\n \"typecheck\": \"tsc -p ./tsconfig.json --noEmit --emitDeclarationOnly false\"\n },\n \"dependencies\": {\n \"@kubb/react-fabric\": \"catalog:\",\n \"camelcase\": \"^8.0.0\",\n \"find-up\": \"^7.0.0\",\n \"fs-extra\": \"^11.3.2\",\n \"jiti\": \"^2.6.1\",\n \"js-runtime\": \"^0.0.8\",\n \"natural-orderby\": \"^5.0.0\",\n \"object-hash\": \"^3.0.0\",\n \"p-limit\": \"catalog:\",\n \"picocolors\": \"^1.1.1\",\n \"remeda\": \"catalog:\",\n \"seedrandom\": \"^3.0.5\",\n \"semver\": \"^7.7.3\"\n },\n \"devDependencies\": {\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/object-hash\": \"^3.0.6\",\n \"@types/seedrandom\": \"^3.0.8\",\n \"@types/semver\": \"^7.7.1\",\n \"consola\": \"^3.4.2\",\n \"zod\": \"^4.1.13\"\n },\n \"peerDependencies\": {\n \"@kubb/react-fabric\": \"0.5.4\"\n },\n \"engines\": {\n \"node\": \">=20\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n","import { version as nodeVersion } from 'node:process'\nimport { version as KubbVersion } from '../../package.json'\n\n/**\n * Get diagnostic information for debugging\n */\nexport function getDiagnosticInfo() {\n return {\n nodeVersion,\n KubbVersion,\n platform: process.platform,\n arch: process.arch,\n cwd: process.cwd(),\n } as const\n}\n","import { join, relative, resolve } from 'node:path'\nimport { performance } from 'node:perf_hooks'\nimport type { KubbFile } from '@kubb/fabric-core/types'\nimport type { Fabric } from '@kubb/react-fabric'\nimport { createFabric } from '@kubb/react-fabric'\nimport { typescriptParser } from '@kubb/react-fabric/parsers'\nimport { fsPlugin } from '@kubb/react-fabric/plugins'\nimport pc from 'picocolors'\nimport { isDeepEqual } from 'remeda'\nimport { isInputPath } from './config.ts'\nimport { clean, exists, getRelativePath, write } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { createLogger } from './logger.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport type { Config, Output, Plugin, UserConfig } from './types.ts'\nimport { getDiagnosticInfo } from './utils/diagnostics.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}\n\ntype BuildOutput = {\n failedPlugins: Set<{ plugin: Plugin; error: Error }>\n fabric: Fabric\n files: Array<KubbFile.ResolvedFile>\n pluginManager: PluginManager\n pluginTimings: Map<string, number>\n error?: Error\n}\n\ntype SetupResult = {\n logger: Logger\n fabric: Fabric\n pluginManager: PluginManager\n}\n\nexport async function setup(options: BuildOptions): Promise<SetupResult> {\n const { config: userConfig, logger = createLogger() } = options\n\n const diagnosticInfo = getDiagnosticInfo()\n\n if (Array.isArray(userConfig.input)) {\n console.warn(pc.yellow('This feature is still under development — use with caution'))\n }\n\n logger.emit('debug', {\n date: new Date(),\n category: 'setup',\n logs: [\n 'Configuration:',\n ` • Name: ${userConfig.name || 'unnamed'}`,\n ` • Root: ${userConfig.root || process.cwd()}`,\n ` • Output: ${userConfig.output?.path || 'not specified'}`,\n ` • Plugins: ${userConfig.plugins?.length || 0}`,\n 'Output Settings:',\n ` • Write: ${userConfig.output?.write !== false ? 'enabled' : 'disabled'}`,\n ` • Formater: ${userConfig.output?.format || 'none'}`,\n ` • Linter: ${userConfig.output?.lint || 'none'}`,\n 'Environment:',\n Object.entries(diagnosticInfo)\n .map(([key, value]) => ` • ${key}: ${value}`)\n .join('\\n'),\n ],\n })\n\n try {\n if (isInputPath(userConfig) && !new URLPath(userConfig.input.path).isURL) {\n await exists(userConfig.input.path)\n\n logger.emit('debug', {\n date: new Date(),\n category: 'setup',\n logs: [`✓ Input file validated: ${userConfig.input.path}`],\n })\n }\n } catch (e) {\n if (isInputPath(userConfig)) {\n const error = e as Error\n\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: error,\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 logger.emit('debug', {\n date: new Date(),\n category: 'setup',\n logs: ['Cleaning output directories', ` • Output: ${definedConfig.output.path}`, ' • Cache: .kubb'],\n })\n await clean(definedConfig.output.path)\n await clean(join(definedConfig.root, '.kubb'))\n }\n\n const fabric = createFabric()\n fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })\n fabric.use(typescriptParser)\n\n fabric.context.on('process:start', ({ files }) => {\n logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n logger.emit('debug', {\n date: new Date(),\n category: 'file',\n logs: [`Writing ${files.length} files...`],\n })\n })\n\n fabric.context.on('process:progress', async ({ file, source }) => {\n const message = file ? `Writing ${relative(definedConfig.root, file.path)}` : ''\n logger.emit('progressed', { id: 'files', message })\n\n if (source) {\n await write(file.path, source, { sanity: false })\n }\n })\n\n fabric.context.on('process:end', () => {\n logger.emit('progress_stop', { id: 'files' })\n logger.emit('debug', {\n date: new Date(),\n category: 'file',\n logs: ['✓ File write process completed'],\n })\n })\n\n logger.emit('debug', {\n date: new Date(),\n category: 'setup',\n logs: [\n '✓ Fabric initialized',\n ` • File writing: ${definedConfig.output.write ? 'enabled' : 'disabled (dry-run)'}`,\n ` • Barrel type: ${definedConfig.output.barrelType || 'none'}`,\n ],\n })\n\n const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })\n\n pluginManager.on('executing', ({ plugin, hookName, strategy, parameters }) => {\n logger.emit('debug', {\n date: new Date(),\n category: 'hook',\n pluginName: plugin.name,\n logs: [`Executing hook: ${hookName}`, ` • Strategy: ${strategy}`, ' • Parameters:', JSON.stringify(parameters, null, 2)],\n })\n })\n\n pluginManager.on('executed', ({ plugin, hookName, duration, parameters }) => {\n let message = ''\n if (hookName === 'resolvePath') {\n const [path] = parameters || []\n message = `Resolving path '${path}'`\n }\n\n if (hookName === 'resolveName') {\n const [name, type] = parameters || []\n message = `Resolving name '${name}' and type '${type}'`\n }\n\n logger.emit('progressed', {\n id: hookName,\n message: `${plugin.name}: ${message}`,\n })\n logger.emit('debug', {\n date: new Date(),\n category: 'hook',\n pluginName: plugin.name,\n logs: [`✓ Completed in ${duration}ms`],\n })\n })\n\n pluginManager.on('progress_start', ({ hookName, plugins }) => {\n logger.emit('progress_start', { id: hookName, size: plugins.length, message: 'Running plugins...' })\n })\n\n pluginManager.on('progress_stop', ({ hookName }) => {\n logger.emit('progress_stop', { id: hookName })\n })\n\n pluginManager.on('error', (error, { plugin, strategy, duration, parameters, hookName }) => {\n const text = `${error.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})`\n\n logger.emit('error', text, error)\n\n logger.emit('debug', {\n date: new Date(),\n category: 'error',\n pluginName: plugin.name,\n logs: [\n `✗ Hook '${hookName}' failed after ${duration}ms`,\n ` • Strategy: ${strategy}`,\n ` • Error: ${error.constructor.name} - ${error.message}`,\n ' • Stack Trace:',\n error.stack || 'No stack trace available',\n ' • Parameters:',\n JSON.stringify(parameters, null, 2),\n ],\n })\n })\n\n logger.emit('debug', {\n date: new Date(),\n category: 'setup',\n logs: ['✓ PluginManager initialized', ' • Concurrency: 5', ` • Total plugins: ${pluginManager.plugins.length}`],\n })\n\n return {\n logger,\n fabric,\n pluginManager,\n }\n}\n\nexport async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, files, pluginManager, failedPlugins, pluginTimings, error } = await safeBuild(options, overrides)\n\n if (error) {\n throw error\n }\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n pluginTimings,\n error,\n }\n}\n\nexport async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {\n const { fabric, pluginManager, logger } = overrides ? overrides : await setup(options)\n\n const failedPlugins = new Set<{ plugin: Plugin; error: Error }>()\n const pluginTimings = new Map<string, number>()\n const config = pluginManager.config\n\n try {\n for (const plugin of pluginManager.plugins) {\n const context = pluginManager.getContext(plugin)\n\n const installer = plugin.install.bind(context)\n\n try {\n const startTime = performance.now()\n const timestamp = new Date()\n\n // Start plugin group\n logger.emit('debug', {\n date: timestamp,\n pluginGroupMarker: 'start',\n pluginName: plugin.name,\n logs: [],\n })\n\n logger.emit('debug', {\n date: timestamp,\n category: 'plugin',\n pluginName: plugin.name,\n logs: ['Installing plugin...', ` • Plugin Key: ${JSON.stringify(plugin.key)}`],\n })\n\n await installer(context)\n\n const duration = Math.round(performance.now() - startTime)\n pluginTimings.set(plugin.name, duration)\n\n logger.emit('debug', {\n date: new Date(),\n category: 'plugin',\n pluginName: plugin.name,\n logs: [`✓ Plugin installed successfully (${duration}ms)`],\n })\n\n // End plugin group\n logger.emit('debug', {\n date: new Date(),\n pluginGroupMarker: 'end',\n pluginName: plugin.name,\n logs: [],\n })\n } catch (e) {\n const error = e as Error\n const errorTimestamp = new Date()\n\n logger.emit('debug', {\n date: errorTimestamp,\n category: 'error',\n pluginName: plugin.name,\n logs: [\n '✗ Plugin installation failed',\n ` • Plugin Key: ${JSON.stringify(plugin.key)}`,\n ` • Error: ${error.constructor.name} - ${error.message}`,\n ' • Stack Trace:',\n error.stack || 'No stack trace available',\n ],\n })\n\n // End plugin group even on error\n logger.emit('debug', {\n date: errorTimestamp,\n pluginGroupMarker: 'end',\n pluginName: plugin.name,\n logs: [],\n })\n\n failedPlugins.add({ plugin, error })\n }\n }\n\n if (config.output.barrelType) {\n const root = resolve(config.root)\n const rootPath = resolve(root, config.output.path, 'index.ts')\n\n logger.emit('debug', {\n date: new Date(),\n logs: ['Generating barrel file', ` • Type: ${config.output.barrelType}`, ` • Path: ${rootPath}`],\n })\n\n const barrelFiles = fabric.files.filter((file) => {\n return file.sources.some((source) => source.isIndexable)\n })\n\n logger.emit('debug', {\n date: new Date(),\n logs: [`Found ${barrelFiles.length} indexable files for barrel export`],\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 fabric.upsertFile(rootFile)\n\n logger.emit('debug', {\n date: new Date(),\n category: 'file',\n logs: [`✓ Generated barrel file (${rootFile.exports?.length || 0} exports)`],\n })\n }\n\n const files = [...fabric.files]\n\n await fabric.write({ extension: config.output.extension })\n\n return {\n failedPlugins,\n fabric,\n files,\n pluginManager,\n pluginTimings,\n }\n } catch (e) {\n return {\n failedPlugins,\n fabric,\n files: [],\n pluginManager,\n pluginTimings,\n error: e as Error,\n }\n }\n}\n","import type { PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginBuilder<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\n/**\n * Wraps a plugin builder to make the options parameter optional.\n */\nexport function definePlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(\n build: PluginBuilder<T>,\n): (options?: T['options']) => UserPluginWithLifeCycle<T> {\n return (options) => build(options ?? ({} as T['options']))\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":[9,10,11,12,13],"mappings":"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"}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { n as Logger } from "./logger-BJDkLsF0.cjs";
2
- import { C as getMode, S as PluginManager, _ as ResolvePathParams, a as InputData, b as UserPluginWithLifeCycle, c as Plugin, d as PluginKey, f as PluginLifecycle, g as ResolveNameParams, h as PluginWithLifeCycle, i as Group, l as PluginContext, m as PluginParameter, n as Config, o as InputPath, p as PluginLifecycleHooks, r as GetPluginFactoryOptions, s as Output, t as BarrelType, u as PluginFactoryOptions, v as UserConfig, x as PossiblePromise, y as UserPlugin } from "./types-tSSA1oz8.cjs";
3
- import { n as getBarrelFiles, t as FileMetaBase } from "./getBarrelFiles-BVMBhc50.cjs";
1
+ import { n as Logger } from "./logger-mq06Cxxv.cjs";
2
+ import { C as getMode, S as PluginManager, _ as ResolvePathParams, a as InputData, b as UserPluginWithLifeCycle, c as Plugin, d as PluginKey, f as PluginLifecycle, g as ResolveNameParams, h as PluginWithLifeCycle, i as Group, l as PluginContext, m as PluginParameter, n as Config, o as InputPath, p as PluginLifecycleHooks, r as GetPluginFactoryOptions, s as Output, t as BarrelType, u as PluginFactoryOptions, v as UserConfig, x as PossiblePromise, y as UserPlugin } from "./types-CCEy_FVr.cjs";
3
+ import { n as getBarrelFiles, t as FileMetaBase } from "./getBarrelFiles-B_2WDywH.cjs";
4
4
  import { KubbFile } from "@kubb/fabric-core/types";
5
5
  import { Fabric } from "@kubb/react-fabric";
6
6
 
@@ -34,13 +34,11 @@ type BuildOutput = {
34
34
  fabric: Fabric;
35
35
  files: Array<KubbFile.ResolvedFile>;
36
36
  pluginManager: PluginManager;
37
- /**
38
- * Only for safeBuild,
39
- * @deprecated
40
- */
37
+ pluginTimings: Map<string, number>;
41
38
  error?: Error;
42
39
  };
43
40
  type SetupResult = {
41
+ logger: Logger;
44
42
  fabric: Fabric;
45
43
  pluginManager: PluginManager;
46
44
  };