@kubb/core 3.16.1 → 3.16.2

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.
@@ -5,13 +5,11 @@ var chunkE4XLCCPK_cjs = require('./chunk-E4XLCCPK.cjs');
5
5
  var path = require('path');
6
6
  var hash = require('object-hash');
7
7
  var remeda = require('remeda');
8
- var pLimit = require('p-limit');
9
8
 
10
9
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
10
 
12
11
  var path__default = /*#__PURE__*/_interopDefault(path);
13
12
  var hash__default = /*#__PURE__*/_interopDefault(hash);
14
- var pLimit__default = /*#__PURE__*/_interopDefault(pLimit);
15
13
 
16
14
  // src/utils/FunctionParams.ts
17
15
  var FunctionParams = class _FunctionParams {
@@ -287,6 +285,137 @@ var URLPath = class {
287
285
  }
288
286
  };
289
287
 
288
+ // ../../node_modules/.pnpm/yocto-queue@1.1.1/node_modules/yocto-queue/index.js
289
+ var Node = class {
290
+ value;
291
+ next;
292
+ constructor(value) {
293
+ this.value = value;
294
+ }
295
+ };
296
+ var Queue = class {
297
+ #head;
298
+ #tail;
299
+ #size;
300
+ constructor() {
301
+ this.clear();
302
+ }
303
+ enqueue(value) {
304
+ const node = new Node(value);
305
+ if (this.#head) {
306
+ this.#tail.next = node;
307
+ this.#tail = node;
308
+ } else {
309
+ this.#head = node;
310
+ this.#tail = node;
311
+ }
312
+ this.#size++;
313
+ }
314
+ dequeue() {
315
+ const current = this.#head;
316
+ if (!current) {
317
+ return;
318
+ }
319
+ this.#head = this.#head.next;
320
+ this.#size--;
321
+ return current.value;
322
+ }
323
+ peek() {
324
+ if (!this.#head) {
325
+ return;
326
+ }
327
+ return this.#head.value;
328
+ }
329
+ clear() {
330
+ this.#head = void 0;
331
+ this.#tail = void 0;
332
+ this.#size = 0;
333
+ }
334
+ get size() {
335
+ return this.#size;
336
+ }
337
+ *[Symbol.iterator]() {
338
+ let current = this.#head;
339
+ while (current) {
340
+ yield current.value;
341
+ current = current.next;
342
+ }
343
+ }
344
+ };
345
+
346
+ // ../../node_modules/.pnpm/p-limit@6.2.0/node_modules/p-limit/index.js
347
+ function pLimit(concurrency) {
348
+ validateConcurrency(concurrency);
349
+ const queue = new Queue();
350
+ let activeCount = 0;
351
+ const resumeNext = () => {
352
+ if (activeCount < concurrency && queue.size > 0) {
353
+ queue.dequeue()();
354
+ activeCount++;
355
+ }
356
+ };
357
+ const next = () => {
358
+ activeCount--;
359
+ resumeNext();
360
+ };
361
+ const run = async (function_, resolve, arguments_) => {
362
+ const result = (async () => function_(...arguments_))();
363
+ resolve(result);
364
+ try {
365
+ await result;
366
+ } catch {
367
+ }
368
+ next();
369
+ };
370
+ const enqueue = (function_, resolve, arguments_) => {
371
+ new Promise((internalResolve) => {
372
+ queue.enqueue(internalResolve);
373
+ }).then(
374
+ run.bind(void 0, function_, resolve, arguments_)
375
+ );
376
+ (async () => {
377
+ await Promise.resolve();
378
+ if (activeCount < concurrency) {
379
+ resumeNext();
380
+ }
381
+ })();
382
+ };
383
+ const generator = (function_, ...arguments_) => new Promise((resolve) => {
384
+ enqueue(function_, resolve, arguments_);
385
+ });
386
+ Object.defineProperties(generator, {
387
+ activeCount: {
388
+ get: () => activeCount
389
+ },
390
+ pendingCount: {
391
+ get: () => queue.size
392
+ },
393
+ clearQueue: {
394
+ value() {
395
+ queue.clear();
396
+ }
397
+ },
398
+ concurrency: {
399
+ get: () => concurrency,
400
+ set(newConcurrency) {
401
+ validateConcurrency(newConcurrency);
402
+ concurrency = newConcurrency;
403
+ queueMicrotask(() => {
404
+ while (activeCount < concurrency && queue.size > 0) {
405
+ resumeNext();
406
+ }
407
+ });
408
+ }
409
+ }
410
+ });
411
+ return generator;
412
+ }
413
+ function validateConcurrency(concurrency) {
414
+ if (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {
415
+ throw new TypeError("Expected `concurrency` to be a number from 1 and up");
416
+ }
417
+ }
418
+
290
419
  // src/utils/TreeNode.ts
291
420
  var TreeNode = class _TreeNode {
292
421
  data;
@@ -558,7 +687,7 @@ var Cache = class {
558
687
  // src/FileManager.ts
559
688
  var FileManager = class {
560
689
  #cache = new Cache();
561
- #limit = pLimit__default.default(100);
690
+ #limit = pLimit(100);
562
691
  constructor() {
563
692
  return this;
564
693
  }
@@ -924,6 +1053,7 @@ function trimExtName2(text) {
924
1053
  exports.Cache = Cache;
925
1054
  exports.FileManager = FileManager;
926
1055
  exports.FunctionParams = FunctionParams;
1056
+ exports.Queue = Queue;
927
1057
  exports.URLPath = URLPath;
928
1058
  exports.createFile = createFile;
929
1059
  exports.createFileExport = createFileExport;
@@ -936,8 +1066,9 @@ exports.getUniqueName = getUniqueName;
936
1066
  exports.isPromise = isPromise;
937
1067
  exports.isPromiseFulfilledResult = isPromiseFulfilledResult;
938
1068
  exports.isPromiseRejectedResult = isPromiseRejectedResult;
1069
+ exports.pLimit = pLimit;
939
1070
  exports.renderTemplate = renderTemplate;
940
1071
  exports.setUniqueName = setUniqueName;
941
1072
  exports.timeout = timeout;
942
- //# sourceMappingURL=chunk-QR7CQIA3.cjs.map
943
- //# sourceMappingURL=chunk-QR7CQIA3.cjs.map
1073
+ //# sourceMappingURL=chunk-L3A3DTAX.cjs.map
1074
+ //# sourceMappingURL=chunk-L3A3DTAX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts","../src/utils/uniqueName.ts","../src/utils/URLPath.ts","../../../node_modules/.pnpm/yocto-queue@1.1.1/node_modules/yocto-queue/index.js","../../../node_modules/.pnpm/p-limit@6.2.0/node_modules/p-limit/index.js","../src/utils/TreeNode.ts","../src/BarrelManager.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/utils/parser.ts"],"names":["orderBy","camelCase","item","path","isValidVarName","join","getRelativePath","trimExtName","relative","extname","write","uniqueBy","isDeepEqual","name","hash"],"mappings":"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","file":"chunk-L3A3DTAX.cjs","sourcesContent":["import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => this.#items.push(it))\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n\nexport function setUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n\n return originalName\n }\n data[originalName] = 1\n return originalName\n}\n","import { camelCase, isValidVarName } from '../transformers'\n\nexport type URLObject = {\n url: string\n params?: Record<string, string>\n}\n\ntype ObjectOptions = {\n type?: 'path' | 'template'\n replacer?: (pathParam: string) => string\n stringify?: boolean\n}\n\ntype Options = {\n casing?: 'camelcase'\n}\n\nexport class URLPath {\n path: string\n #options: Options\n\n constructor(path: string, options: Options = {}) {\n this.path = path\n this.#options = options\n\n return this\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n get URL(): string {\n return this.toURLPath()\n }\n get isURL(): boolean {\n try {\n const url = new URL(this.path)\n if (url?.href) {\n return true\n }\n } catch (_error) {\n return false\n }\n return false\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n get template(): string {\n return this.toTemplateString()\n }\n get object(): URLObject | string {\n return this.toObject()\n }\n get params(): Record<string, string> | undefined {\n return this.getParams()\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString({ replacer }),\n params: this.getParams(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n toTemplateString({ prefix = '', replacer }: { prefix?: string; replacer?: (pathParam: string) => string } = {}): string {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n let newPath = this.path.replaceAll('{', '${')\n\n if (found) {\n newPath = found.reduce((prev, path) => {\n const pathWithoutBrackets = path.replaceAll('{', '').replaceAll('}', '')\n\n let param = isValidVarName(pathWithoutBrackets) ? pathWithoutBrackets : camelCase(pathWithoutBrackets)\n\n if (this.#options.casing === 'camelcase') {\n param = camelCase(param)\n }\n\n return prev.replace(path, `\\${${replacer ? replacer(param) : param}}`)\n }, this.path)\n }\n\n return `\\`${prefix}${newPath}\\``\n }\n\n getParams(replacer?: (pathParam: string) => string): Record<string, string> | undefined {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n\n if (!found) {\n return undefined\n }\n\n const params: Record<string, string> = {}\n found.forEach((item) => {\n item = item.replaceAll('{', '').replaceAll('}', '')\n\n let param = isValidVarName(item) ? item : camelCase(item)\n\n if (this.#options.casing === 'camelcase') {\n param = camelCase(param)\n }\n\n const key = replacer ? replacer(param) : param\n\n params[key] = key\n }, this.path)\n\n return params\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n toURLPath(): string {\n return this.path.replaceAll('{', ':').replaceAll('}', '')\n }\n}\n","/*\nHow it works:\n`this.#head` is an instance of `Node` which keeps track of its current value and nests another instance of `Node` that keeps the value that comes after it. When a value is provided to `.enqueue()`, the code needs to iterate through `this.#head`, going deeper and deeper to find the last value. However, iterating through every single item is slow. This problem is solved by saving a reference to the last value as `this.#tail` so that it can reference it to add a new value.\n*/\n\nclass Node {\n\tvalue;\n\tnext;\n\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n}\n\nexport default class Queue {\n\t#head;\n\t#tail;\n\t#size;\n\n\tconstructor() {\n\t\tthis.clear();\n\t}\n\n\tenqueue(value) {\n\t\tconst node = new Node(value);\n\n\t\tif (this.#head) {\n\t\t\tthis.#tail.next = node;\n\t\t\tthis.#tail = node;\n\t\t} else {\n\t\t\tthis.#head = node;\n\t\t\tthis.#tail = node;\n\t\t}\n\n\t\tthis.#size++;\n\t}\n\n\tdequeue() {\n\t\tconst current = this.#head;\n\t\tif (!current) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#head = this.#head.next;\n\t\tthis.#size--;\n\t\treturn current.value;\n\t}\n\n\tpeek() {\n\t\tif (!this.#head) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this.#head.value;\n\n\t\t// TODO: Node.js 18.\n\t\t// return this.#head?.value;\n\t}\n\n\tclear() {\n\t\tthis.#head = undefined;\n\t\tthis.#tail = undefined;\n\t\tthis.#size = 0;\n\t}\n\n\tget size() {\n\t\treturn this.#size;\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tlet current = this.#head;\n\n\t\twhile (current) {\n\t\t\tyield current.value;\n\t\t\tcurrent = current.next;\n\t\t}\n\t}\n}\n","import Queue from 'yocto-queue';\n\nexport default function pLimit(concurrency) {\n\tvalidateConcurrency(concurrency);\n\n\tconst queue = new Queue();\n\tlet activeCount = 0;\n\n\tconst resumeNext = () => {\n\t\tif (activeCount < concurrency && queue.size > 0) {\n\t\t\tqueue.dequeue()();\n\t\t\t// Since `pendingCount` has been decreased by one, increase `activeCount` by one.\n\t\t\tactiveCount++;\n\t\t}\n\t};\n\n\tconst next = () => {\n\t\tactiveCount--;\n\n\t\tresumeNext();\n\t};\n\n\tconst run = async (function_, resolve, arguments_) => {\n\t\tconst result = (async () => function_(...arguments_))();\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 = (function_, resolve, arguments_) => {\n\t\t// Queue `internalResolve` instead of the `run` function\n\t\t// to preserve asynchronous context.\n\t\tnew Promise(internalResolve => {\n\t\t\tqueue.enqueue(internalResolve);\n\t\t}).then(\n\t\t\trun.bind(undefined, function_, resolve, arguments_),\n\t\t);\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// after the `internalResolve` 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) {\n\t\t\t\tresumeNext();\n\t\t\t}\n\t\t})();\n\t};\n\n\tconst generator = (function_, ...arguments_) => new Promise(resolve => {\n\t\tenqueue(function_, resolve, arguments_);\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\tconcurrency: {\n\t\t\tget: () => concurrency,\n\n\t\t\tset(newConcurrency) {\n\t\t\t\tvalidateConcurrency(newConcurrency);\n\t\t\t\tconcurrency = newConcurrency;\n\n\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t// eslint-disable-next-line no-unmodified-loop-condition\n\t\t\t\t\twhile (activeCount < concurrency && queue.size > 0) {\n\t\t\t\t\t\tresumeNext();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t});\n\n\treturn generator;\n}\n\nexport function limitFunction(function_, option) {\n\tconst {concurrency} = option;\n\tconst limit = pLimit(concurrency);\n\n\treturn (...arguments_) => limit(() => function_(...arguments_));\n}\n\nfunction validateConcurrency(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","import { FileManager } from '../FileManager.ts'\nimport type { KubbFile } from '../fs/index.ts'\n\ntype BarrelData = {\n file?: KubbFile.File\n /**\n * @deprecated use file instead\n */\n type: KubbFile.Mode\n path: string\n name: string\n}\n\nexport class TreeNode {\n data: BarrelData\n parent?: TreeNode\n children: Array<TreeNode> = []\n #cachedLeaves?: Array<TreeNode> = undefined\n\n constructor(data: BarrelData, parent?: TreeNode) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: BarrelData): TreeNode {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n get root(): TreeNode {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n get leaves(): Array<TreeNode> {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n if (this.#cachedLeaves) {\n return this.#cachedLeaves\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n\n this.#cachedLeaves = leaves\n\n return leaves\n }\n\n forEach(callback: (treeNode: TreeNode) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i]?.forEach(callback)\n }\n }\n\n return this\n }\n\n findDeep(predicate?: (value: TreeNode, index: number, obj: TreeNode[]) => boolean): TreeNode | undefined {\n if (typeof predicate !== 'function') {\n throw new TypeError('find() predicate must be a function')\n }\n\n return this.leaves.find(predicate)\n }\n\n forEachDeep(callback: (treeNode: TreeNode) => void): void {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n this.leaves.forEach(callback)\n }\n\n filterDeep(callback: (treeNode: TreeNode) => boolean): Array<TreeNode> {\n if (typeof callback !== 'function') {\n throw new TypeError('filter() callback must be a function')\n }\n\n return this.leaves.filter(callback)\n }\n\n mapDeep<T>(callback: (treeNode: TreeNode) => T): Array<T> {\n if (typeof callback !== 'function') {\n throw new TypeError('map() callback must be a function')\n }\n\n return this.leaves.map(callback)\n }\n\n public static build(files: KubbFile.File[], root?: string): TreeNode | null {\n try {\n const filteredTree = buildDirectoryTree(files, root)\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({\n name: filteredTree.name,\n path: filteredTree.path,\n file: filteredTree.file,\n type: FileManager.getMode(filteredTree.path),\n })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({\n name: item.name,\n path: item.path,\n file: item.file,\n type: FileManager.getMode(item.path),\n })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode\n } catch (e) {\n throw new Error('Something went wrong with creating barrel files with the TreeNode class', { cause: e })\n }\n }\n}\n\nexport type DirectoryTree = {\n name: string\n path: string\n file?: KubbFile.File\n children: Array<DirectoryTree>\n}\n\nconst normalizePath = (p: string): string => p.replace(/\\\\/g, '/')\n\nexport function buildDirectoryTree(files: Array<KubbFile.File>, rootFolder = ''): DirectoryTree | null {\n const normalizedRootFolder = normalizePath(rootFolder)\n const rootPrefix = normalizedRootFolder.endsWith('/') ? normalizedRootFolder : `${normalizedRootFolder}/`\n\n const filteredFiles = files.filter((file) => {\n const normalizedFilePath = normalizePath(file.path)\n return rootFolder ? normalizedFilePath.startsWith(rootPrefix) && !normalizedFilePath.endsWith('.json') : !normalizedFilePath.endsWith('.json')\n })\n\n if (filteredFiles.length === 0) {\n return null // No files match the root folder\n }\n\n const root: DirectoryTree = {\n name: rootFolder || '',\n path: rootFolder || '',\n children: [],\n }\n\n filteredFiles.forEach((file) => {\n const path = file.path.slice(rootFolder.length)\n const parts = path.split('/')\n let currentLevel: DirectoryTree[] = root.children\n let currentPath = rootFolder\n\n parts.forEach((part, index) => {\n if (index !== 0) {\n currentPath += `/${part}`\n } else {\n currentPath += `${part}`\n }\n\n let existingNode = currentLevel.find((node) => node.name === part)\n\n if (!existingNode) {\n if (index === parts.length - 1) {\n // If it's the last part, it's a file\n existingNode = {\n name: part,\n file,\n path: currentPath,\n } as DirectoryTree\n } else {\n // Otherwise, it's a folder\n existingNode = {\n name: part,\n path: currentPath,\n children: [],\n } as DirectoryTree\n }\n currentLevel.push(existingNode)\n }\n\n // Move to the next level if it's a folder\n if (!existingNode.file) {\n currentLevel = existingNode.children\n }\n })\n })\n\n return root\n}\n","import { join } from 'node:path'\nimport type { FileMetaBase } from './FileManager.ts'\nimport type { KubbFile } from './fs/index.ts'\nimport { getRelativePath } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\ntype BarrelManagerOptions = {\n logger?: Logger\n}\n\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n getFiles({ files: generatedFiles, root }: { files: KubbFile.File[]; root?: string; meta?: FileMetaBase | undefined }): Array<KubbFile.File> {\n const { logger } = this.#options\n\n const cachedFiles = new Map<KubbFile.Path, KubbFile.File>()\n\n TreeNode.build(generatedFiles, root)?.forEach((treeNode) => {\n if (!treeNode || !treeNode.children || !treeNode.parent?.data.path) {\n return undefined\n }\n\n const barrelFile: KubbFile.File = {\n path: join(treeNode.parent?.data.path, 'index.ts') as KubbFile.Path,\n baseName: 'index.ts',\n exports: [],\n sources: [],\n }\n const previousBarrelFile = cachedFiles.get(barrelFile.path)\n const leaves = treeNode.leaves\n\n leaves.forEach((item) => {\n if (!item.data.name) {\n return undefined\n }\n\n const sources = item.data.file?.sources || []\n\n if (!sources.some((source) => source.isIndexable)) {\n logger?.emit(\n 'warning',\n `No isIndexable source found(source should have a name and isIndexable):\\nFile: ${JSON.stringify(item.data.file, undefined, 2)}`,\n )\n }\n\n sources.forEach((source) => {\n if (!item.data.file?.path || !source.isIndexable || !source.name) {\n return undefined\n }\n const alreadyContainInPreviousBarrelFile = previousBarrelFile?.sources.some(\n (item) => item.name === source.name && item.isTypeOnly === source.isTypeOnly,\n )\n\n if (alreadyContainInPreviousBarrelFile) {\n return undefined\n }\n\n if (!barrelFile.exports) {\n barrelFile.exports = []\n }\n\n // true when we have a subdirectory that also contains barrel files\n const isSubExport = !!treeNode.parent?.data.path?.split?.('/')?.length\n\n if (isSubExport) {\n barrelFile.exports.push({\n name: [source.name],\n path: getRelativePath(treeNode.parent?.data.path, item.data.path),\n isTypeOnly: source.isTypeOnly,\n })\n } else {\n barrelFile.exports.push({\n name: [source.name],\n path: `./${item.data.file.baseName}`,\n isTypeOnly: source.isTypeOnly,\n })\n }\n\n barrelFile.sources.push({\n name: source.name,\n isTypeOnly: source.isTypeOnly,\n //TODO use parser to generate import\n value: '',\n isExportable: false,\n isIndexable: false,\n })\n })\n })\n\n if (previousBarrelFile) {\n previousBarrelFile.sources.push(...barrelFile.sources)\n previousBarrelFile.exports?.push(...(barrelFile.exports || []))\n } else {\n cachedFiles.set(barrelFile.path, barrelFile)\n }\n })\n\n return [...cachedFiles.values()]\n }\n}\n","export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { extname, join, relative } from 'node:path'\n\nimport { orderBy } from 'natural-orderby'\nimport { isDeepEqual, uniqueBy } from 'remeda'\nimport pLimit from 'p-limit'\n\nimport { BarrelManager } from './BarrelManager.ts'\n\nimport type { KubbFile } from './fs/index.ts'\nimport { trimExtName, write } from './fs/index.ts'\nimport type { ResolvedFile } from './fs/types.ts'\nimport type { Logger } from './logger.ts'\nimport type { BarrelType, Config, Plugin } from './types.ts'\nimport { createFile, getFileParser } from './utils'\nimport type { GreaterThan } from './utils/types.ts'\nimport { Cache } from './utils/Cache.ts'\n\nexport type FileMetaBase = {\n pluginKey?: Plugin['key']\n}\n\ntype AddResult<T extends Array<KubbFile.File>> = Promise<Awaited<GreaterThan<T['length'], 1> extends true ? Promise<ResolvedFile[]> : Promise<ResolvedFile>>>\n\ntype AddIndexesProps = {\n type: BarrelType | false | undefined\n /**\n * Root based on root and output.path specified in the config\n */\n root: string\n /**\n * Output for plugin\n */\n output: {\n path: string\n }\n group?: {\n output: string\n exportAs: string\n }\n logger?: Logger\n\n meta?: FileMetaBase\n}\n\ntype WriteFilesProps = {\n root: Config['root']\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n logger?: Logger\n dryRun?: boolean\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n #limit = pLimit(100)\n\n constructor() {\n return this\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(...files: T): AddResult<T> {\n const resolvedFiles: KubbFile.ResolvedFile[] = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = await this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n await this.#cache.set(resolvedFile.path, resolvedFile)\n await this.#cache.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n if (files.length > 1) {\n return resolvedFiles as unknown as AddResult<T>\n }\n\n return resolvedFiles[0] as unknown as AddResult<T>\n }\n\n async getByPath(path: KubbFile.Path): Promise<KubbFile.ResolvedFile | null> {\n return this.#cache.get(path)\n }\n\n async deleteByPath(path: KubbFile.Path): Promise<void> {\n await this.#cache.delete(path)\n }\n\n async clear(): Promise<void> {\n await this.#cache.clear()\n }\n\n async getFiles(): Promise<Array<KubbFile.ResolvedFile>> {\n const cachedKeys = await this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const filesTasks = keys.map((key) =>\n this.#limit(async () => {\n const file = await this.#cache.get(key)\n return file as KubbFile.ResolvedFile\n }),\n )\n\n const files = await Promise.all(filesTasks)\n\n return files.filter(Boolean)\n }\n\n async processFiles({ dryRun, root, extension, logger }: WriteFilesProps): Promise<Array<KubbFile.ResolvedFile>> {\n const files = await this.getFiles()\n\n logger?.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n\n const promises = files.map((file) => {\n return this.#limit(async () => {\n const message = file ? `Writing ${relative(root, file.path)}` : ''\n const extname = extension?.[file.extname] || undefined\n\n if (!dryRun) {\n const source = await getSource(file, { logger, extname })\n await write(file.path, source, { sanity: false })\n }\n\n logger?.emit('progressed', { id: 'files', message })\n })\n })\n\n await Promise.all(promises)\n\n logger?.emit('progress_stop', { id: 'files' })\n\n return files\n }\n async getBarrelFiles({ type, meta = {}, root, output, logger }: AddIndexesProps): Promise<KubbFile.File[]> {\n if (!type || type === 'propagate') {\n return []\n }\n\n const barrelManager = new BarrelManager({ logger })\n const files = await this.getFiles()\n\n const pathToBuildFrom = join(root, output.path)\n\n if (trimExtName(pathToBuildFrom).endsWith('index')) {\n logger?.emit('warning', 'Output has the same fileName as the barrelFiles, please disable barrel generation')\n\n return []\n }\n\n const barrelFiles = barrelManager.getFiles({ files, root: pathToBuildFrom, meta })\n\n if (type === 'all') {\n return barrelFiles.map((file) => {\n return {\n ...file,\n exports: file.exports?.map((exportItem) => {\n return {\n ...exportItem,\n name: undefined,\n }\n }),\n }\n })\n }\n\n return barrelFiles.map((indexFile) => {\n return {\n ...indexFile,\n meta,\n }\n })\n }\n\n // statics\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'split'\n }\n return extname(path) ? 'single' : 'split'\n }\n}\n\ntype GetSourceOptions = {\n extname?: KubbFile.Extname\n logger?: Logger\n}\n\nexport async function getSource<TMeta extends FileMetaBase = FileMetaBase>(\n file: ResolvedFile<TMeta>,\n { logger, extname }: GetSourceOptions = {},\n): Promise<string> {\n const parser = await getFileParser(file.extname)\n const source = await parser.print(file, { logger, extname })\n\n return parser.format(source).catch((err) => {\n console.warn(err)\n return source\n })\n}\n\nfunction mergeFile<TMeta extends FileMetaBase = FileMetaBase>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\nexport function combineSources(sources: Array<KubbFile.Source>): Array<KubbFile.Source> {\n return uniqueBy(sources, (obj) => [obj.name, obj.isExportable, obj.isTypeOnly] as const)\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n return orderBy(exports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n // we already have an item that was unique enough or name field is empty or prev asAlias is set but current has no changes\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Export>,\n )\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n return orderBy(imports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => {\n return name && source.includes(name)\n }\n\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n return prev\n }\n\n // merge all names and check if the importName is being used in the generated source and if not filter those imports out\n if (Array.isArray(name)) {\n name = name.filter((item) => (typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName)))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n // already unique enough or name is empty\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n // new item, append name\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n // no import was found in the source, ignore import\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Import>,\n )\n}\n","import path from 'node:path'\nimport type { KubbFile } from '../fs/index.ts'\n\nimport { getRelativePath } from '../fs/index.ts'\nimport hash from 'object-hash'\nimport { combineExports, combineImports, combineSources } from '../FileManager.ts'\nimport type { Logger } from '../logger.ts'\nimport type { Config } from '../types.ts'\n\n/**\n * Generate a default banner for files created by Kubb\n * @returns A string with the default banner\n */\nexport function getDefaultBanner({ title, description, version, config }: { title?: string; description?: string; version?: string; config: Config }): string {\n try {\n let source = ''\n if ('path' in config.input) {\n source = path.basename(config.input.path)\n } else if ('data' in config.input) {\n source = 'text content'\n }\n\n let banner = '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n'\n\n if (config.output.defaultBanner === 'simple') {\n banner += '*/\\n'\n return banner\n }\n\n if (source) {\n banner += `* Source: ${source}\\n`\n }\n\n if (title) {\n banner += `* Title: ${title}\\n`\n }\n\n if (description) {\n const formattedDescription = description.replace(/\\n/gm, '\\n* ')\n banner += `* Description: ${formattedDescription}\\n`\n }\n\n if (version) {\n banner += `* OpenAPI spec version: ${version}\\n`\n }\n\n banner += '*/\\n'\n return banner\n } catch (_error) {\n // If there's any error in parsing the Oas data, return a simpler banner\n return '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n*/'\n }\n}\n\n/**\n * Helper to create a file with name and id set\n */\nexport function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta> {\n const extname = path.extname(file.baseName) as KubbFile.Extname\n if (!extname) {\n throw new Error(`No extname found for ${file.baseName}`)\n }\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n const exports = file.exports?.length ? combineExports(file.exports) : []\n const imports = file.imports?.length && source ? combineImports(file.imports, exports, source) : []\n const sources = file.sources?.length ? combineSources(file.sources) : []\n\n return {\n ...file,\n id: hash({ path: file.path }),\n name: trimExtName(file.baseName),\n extname,\n imports: imports.map(createFileImport),\n exports: exports.map(createFileExport),\n sources: sources.map(createFileSource),\n meta: file.meta || ({} as TMeta),\n }\n}\n\n/**\n * Helper to create a fileImport with extname set\n */\nfunction createFileSource(source: KubbFile.Source): KubbFile.Source {\n return source\n}\n\n/**\n * Helper to create a fileImport with extname set\n */\nexport function createFileImport(imp: KubbFile.Import): KubbFile.ResolvedImport {\n return {\n ...imp,\n }\n}\n\n/**\n * Helper to create a fileExport with extname set\n */\nexport function createFileExport(exp: KubbFile.Export): KubbFile.ResolvedExport {\n return {\n ...exp,\n }\n}\n\nexport type ParserModule<TMeta extends object = object> = {\n format: (source: string) => Promise<string>\n /**\n * Convert a file to string\n */\n print: (file: KubbFile.ResolvedFile<TMeta>, options: PrintOptions) => Promise<string>\n}\n\nexport function createFileParser<TMeta extends object = object>(parser: ParserModule<TMeta>): ParserModule<TMeta> {\n return parser\n}\n\ntype PrintOptions = {\n extname?: KubbFile.Extname\n logger?: Logger\n}\n\nconst typeScriptParser = createFileParser({\n async format(source) {\n const module = await import('@kubb/parser-ts')\n\n return module.format(source)\n },\n async print(file, options = { extname: '.ts' }) {\n const module = await import('@kubb/parser-ts')\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n\n const importNodes = file.imports\n .map((item) => {\n const importPath = item.root ? getRelativePath(item.root, item.path) : item.path\n const hasExtname = !!path.extname(importPath)\n\n return module.factory.createImportDeclaration({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(importPath)}${options.extname}` : item.root ? trimExtName(importPath) : importPath,\n isTypeOnly: item.isTypeOnly,\n })\n })\n .filter(Boolean)\n\n const exportNodes = file.exports\n .map((item) => {\n const exportPath = item.path\n\n const hasExtname = !!path.extname(exportPath)\n\n return module.factory.createExportDeclaration({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(item.path)}${options.extname}` : trimExtName(item.path),\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n })\n .filter(Boolean)\n\n return [file.banner, module.print([...importNodes, ...exportNodes]), source, file.footer].join('\\n')\n },\n})\n\nconst tsxParser = createFileParser({\n async format(source) {\n const module = await import('@kubb/parser-ts')\n //4 = tsx\n return module.format(source)\n },\n async print(file, options = { extname: '.tsx' }) {\n return typeScriptParser.print(file, options)\n },\n})\n\nconst defaultParser = createFileParser({\n async format(source) {\n return source\n },\n async print(file) {\n return file.sources.map((item) => item.value).join('\\n\\n')\n },\n})\n\nconst parsers: Record<KubbFile.Extname, ParserModule<any>> = {\n '.ts': typeScriptParser,\n '.js': typeScriptParser,\n '.jsx': tsxParser,\n '.tsx': tsxParser,\n '.json': defaultParser,\n}\n\nexport async function getFileParser<TMeta extends object = object>(extname: KubbFile.Extname | undefined): Promise<ParserModule<TMeta>> {\n if (!extname) {\n return defaultParser\n }\n\n const parser = parsers[extname]\n\n if (!parser) {\n console.warn(`[parser] No parser found for ${extname}, default parser will be used`)\n }\n\n return parser || defaultParser\n}\n\nfunction trimExtName(text: string): string {\n const extname = text.split('.').pop()\n\n return text.replace(`.${extname}`, '')\n}\n"]}
package/dist/index.cjs CHANGED
@@ -3,10 +3,9 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var chunkMCNA6SYG_cjs = require('./chunk-MCNA6SYG.cjs');
6
- var chunkQR7CQIA3_cjs = require('./chunk-QR7CQIA3.cjs');
6
+ var chunkL3A3DTAX_cjs = require('./chunk-L3A3DTAX.cjs');
7
7
  var chunkBHSTNFNQ_cjs = require('./chunk-BHSTNFNQ.cjs');
8
8
  var chunkE4XLCCPK_cjs = require('./chunk-E4XLCCPK.cjs');
9
- var pLimit2 = require('p-limit');
10
9
  var path3 = require('path');
11
10
  var remeda = require('remeda');
12
11
  var mod = require('module');
@@ -18,13 +17,13 @@ var semver = require('semver');
18
17
 
19
18
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
20
19
 
21
- var pLimit2__default = /*#__PURE__*/_interopDefault(pLimit2);
22
20
  var path3__default = /*#__PURE__*/_interopDefault(path3);
23
21
  var mod__default = /*#__PURE__*/_interopDefault(mod);
24
22
  var os__default = /*#__PURE__*/_interopDefault(os);
25
23
  var process2__default = /*#__PURE__*/_interopDefault(process2);
26
24
  var fs__default = /*#__PURE__*/_interopDefault(fs);
27
25
 
26
+ // src/utils/executeStrategies.ts
28
27
  function hookSeq(promises) {
29
28
  return promises.filter(Boolean).reduce(
30
29
  (promise, func) => {
@@ -54,7 +53,7 @@ function hookFirst(promises, nullCheck = (state) => state !== null) {
54
53
  return promise;
55
54
  }
56
55
  function hookParallel(promises, concurrency = Number.POSITIVE_INFINITY) {
57
- const limit = pLimit2__default.default(concurrency);
56
+ const limit = chunkL3A3DTAX_cjs.pLimit(concurrency);
58
57
  const tasks = promises.filter(Boolean).map((promise) => limit(() => promise()));
59
58
  return Promise.allSettled(tasks);
60
59
  }
@@ -148,7 +147,7 @@ var PluginManager = class {
148
147
  this.config = config;
149
148
  this.options = options;
150
149
  this.logger = options.logger;
151
- this.fileManager = new chunkQR7CQIA3_cjs.FileManager();
150
+ this.fileManager = new chunkL3A3DTAX_cjs.FileManager();
152
151
  this.#promiseManager = new PromiseManager({
153
152
  nullCheck: (state) => !!state?.result
154
153
  });
@@ -585,7 +584,7 @@ Falling back on the first item.
585
584
  }
586
585
  #parse(plugin, pluginManager, context) {
587
586
  const usedPluginNames = pluginManager.#usedPluginNames;
588
- chunkQR7CQIA3_cjs.setUniqueName(plugin.name, usedPluginNames);
587
+ chunkL3A3DTAX_cjs.setUniqueName(plugin.name, usedPluginNames);
589
588
  const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean);
590
589
  if (plugin.context && typeof plugin.context === "function") {
591
590
  return {
@@ -635,7 +634,7 @@ async function setup(options) {
635
634
  chunkMCNA6SYG_cjs.consola.warn(chunkMCNA6SYG_cjs.colors.yellow("This feature is still under development \u2014 use with caution"));
636
635
  }
637
636
  try {
638
- if (isInputPath(userConfig) && !new chunkQR7CQIA3_cjs.URLPath(userConfig.input.path).isURL) {
637
+ if (isInputPath(userConfig) && !new chunkL3A3DTAX_cjs.URLPath(userConfig.input.path).isURL) {
639
638
  await chunkE4XLCCPK_cjs.exists(userConfig.input.path);
640
639
  }
641
640
  } catch (e) {
@@ -775,6 +774,59 @@ var BaseGenerator = class {
775
774
  this.#options = { ...this.#options, ...options };
776
775
  }
777
776
  };
777
+
778
+ // ../../node_modules/.pnpm/p-limit@4.0.0/node_modules/p-limit/index.js
779
+ function pLimit2(concurrency) {
780
+ if (!((Number.isInteger(concurrency) || concurrency === Number.POSITIVE_INFINITY) && concurrency > 0)) {
781
+ throw new TypeError("Expected `concurrency` to be a number from 1 and up");
782
+ }
783
+ const queue = new chunkL3A3DTAX_cjs.Queue();
784
+ let activeCount = 0;
785
+ const next = () => {
786
+ activeCount--;
787
+ if (queue.size > 0) {
788
+ queue.dequeue()();
789
+ }
790
+ };
791
+ const run = async (fn, resolve2, args) => {
792
+ activeCount++;
793
+ const result = (async () => fn(...args))();
794
+ resolve2(result);
795
+ try {
796
+ await result;
797
+ } catch {
798
+ }
799
+ next();
800
+ };
801
+ const enqueue = (fn, resolve2, args) => {
802
+ queue.enqueue(run.bind(void 0, fn, resolve2, args));
803
+ (async () => {
804
+ await Promise.resolve();
805
+ if (activeCount < concurrency && queue.size > 0) {
806
+ queue.dequeue()();
807
+ }
808
+ })();
809
+ };
810
+ const generator = (fn, ...args) => new Promise((resolve2) => {
811
+ enqueue(fn, resolve2, args);
812
+ });
813
+ Object.defineProperties(generator, {
814
+ activeCount: {
815
+ get: () => activeCount
816
+ },
817
+ pendingCount: {
818
+ get: () => queue.size
819
+ },
820
+ clearQueue: {
821
+ value: () => {
822
+ queue.clear();
823
+ }
824
+ }
825
+ });
826
+ return generator;
827
+ }
828
+
829
+ // ../../node_modules/.pnpm/p-locate@6.0.0/node_modules/p-locate/index.js
778
830
  var EndError = class extends Error {
779
831
  constructor(value) {
780
832
  super();
@@ -793,9 +845,9 @@ async function pLocate(iterable, tester, {
793
845
  concurrency = Number.POSITIVE_INFINITY,
794
846
  preserveOrder = true
795
847
  } = {}) {
796
- const limit = pLimit2__default.default(concurrency);
848
+ const limit = pLimit2(concurrency);
797
849
  const items = [...iterable].map((element) => [element, limit(testElement, element, tester)]);
798
- const checkLimit = pLimit2__default.default(preserveOrder ? 1 : Number.POSITIVE_INFINITY);
850
+ const checkLimit = pLimit2(preserveOrder ? 1 : Number.POSITIVE_INFINITY);
799
851
  try {
800
852
  await Promise.all(items.map((element) => checkLimit(finder, element)));
801
853
  } catch (error) {
@@ -1068,15 +1120,15 @@ var PackageManager = class _PackageManager {
1068
1120
 
1069
1121
  Object.defineProperty(exports, "FileManager", {
1070
1122
  enumerable: true,
1071
- get: function () { return chunkQR7CQIA3_cjs.FileManager; }
1123
+ get: function () { return chunkL3A3DTAX_cjs.FileManager; }
1072
1124
  });
1073
1125
  Object.defineProperty(exports, "getDefaultBanner", {
1074
1126
  enumerable: true,
1075
- get: function () { return chunkQR7CQIA3_cjs.getDefaultBanner; }
1127
+ get: function () { return chunkL3A3DTAX_cjs.getDefaultBanner; }
1076
1128
  });
1077
1129
  Object.defineProperty(exports, "getSource", {
1078
1130
  enumerable: true,
1079
- get: function () { return chunkQR7CQIA3_cjs.getSource; }
1131
+ get: function () { return chunkL3A3DTAX_cjs.getSource; }
1080
1132
  });
1081
1133
  exports.BaseGenerator = BaseGenerator;
1082
1134
  exports.PackageManager = PackageManager;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/executeStrategies.ts","../src/PromiseManager.ts","../src/errors.ts","../src/plugin.ts","../src/PluginManager.ts","../src/config.ts","../src/build.ts","../src/BaseGenerator.ts","../../../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"],"names":["pLimit","path","EventEmitter","FileManager","trim","transformReservedWord","setUniqueName","plugin","createLogger","consola","colors","URLPath","exists","clean","join","resolve","files","isDeepEqual","getRelativePath","fileURLToPath","process","fsPromises","fs","toPath","require","mod","os","pathToFileURL","read","readSync","coerce","satisfies"],"mappings":"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","file":"index.cjs","sourcesContent":["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 { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\nimport type { PossiblePromise } from './utils/types.ts'\nimport type { Strategy, StrategySwitch } 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 isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\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 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 { clean, exists, getRelativePath } from './fs/index.ts'\nimport type { KubbFile } from './fs/index.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport { isInputPath } from './config.ts'\nimport { createLogger } from './logger.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\nimport { join, resolve } from 'node:path'\nimport type { Logger } from './logger.ts'\nimport type { Config, Output, UserConfig } from './types.ts'\nimport consola from 'consola'\nimport { colors } from 'consola/utils'\nimport { isDeepEqual } from 'remeda'\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 consola.warn(colors.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","/**\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 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"]}
1
+ {"version":3,"sources":["../src/utils/executeStrategies.ts","../src/PromiseManager.ts","../src/errors.ts","../src/plugin.ts","../src/PluginManager.ts","../src/config.ts","../src/build.ts","../src/BaseGenerator.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"],"names":["pLimit","path","EventEmitter","FileManager","trim","transformReservedWord","setUniqueName","plugin","createLogger","consola","colors","URLPath","exists","clean","join","resolve","files","isDeepEqual","getRelativePath","Queue","fileURLToPath","process","fsPromises","fs","toPath","require","mod","os","pathToFileURL","read","readSync","coerce","satisfies"],"mappings":"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","file":"index.cjs","sourcesContent":["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 { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\nimport type { PossiblePromise } from './utils/types.ts'\nimport type { Strategy, StrategySwitch } 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 isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\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 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 { clean, exists, getRelativePath } from './fs/index.ts'\nimport type { KubbFile } from './fs/index.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport { isInputPath } from './config.ts'\nimport { createLogger } from './logger.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\nimport { join, resolve } from 'node:path'\nimport type { Logger } from './logger.ts'\nimport type { Config, Output, UserConfig } from './types.ts'\nimport consola from 'consola'\nimport { colors } from 'consola/utils'\nimport { isDeepEqual } from 'remeda'\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 consola.warn(colors.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","/**\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 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"]}
package/dist/mocks.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkQR7CQIA3_cjs = require('./chunk-QR7CQIA3.cjs');
3
+ var chunkL3A3DTAX_cjs = require('./chunk-L3A3DTAX.cjs');
4
4
  var chunkBHSTNFNQ_cjs = require('./chunk-BHSTNFNQ.cjs');
5
5
  require('./chunk-E4XLCCPK.cjs');
6
6
  var path = require('path');
@@ -63,7 +63,7 @@ async function matchFiles(files, pre) {
63
63
  return void 0;
64
64
  }
65
65
  for await (const file of files) {
66
- const source = await chunkQR7CQIA3_cjs.getSource(chunkQR7CQIA3_cjs.createFile(file), { logger: mockedLogger });
66
+ const source = await chunkL3A3DTAX_cjs.getSource(chunkL3A3DTAX_cjs.createFile(file), { logger: mockedLogger });
67
67
  await expect(source).toMatchFileSnapshot(path__default.default.join(...["__snapshots__", pre, file.path].filter(Boolean)));
68
68
  }
69
69
  }
package/dist/utils.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkQR7CQIA3_cjs = require('./chunk-QR7CQIA3.cjs');
3
+ var chunkL3A3DTAX_cjs = require('./chunk-L3A3DTAX.cjs');
4
4
  require('./chunk-BHSTNFNQ.cjs');
5
5
  require('./chunk-E4XLCCPK.cjs');
6
6
 
@@ -8,67 +8,67 @@ require('./chunk-E4XLCCPK.cjs');
8
8
 
9
9
  Object.defineProperty(exports, "Cache", {
10
10
  enumerable: true,
11
- get: function () { return chunkQR7CQIA3_cjs.Cache; }
11
+ get: function () { return chunkL3A3DTAX_cjs.Cache; }
12
12
  });
13
13
  Object.defineProperty(exports, "FunctionParams", {
14
14
  enumerable: true,
15
- get: function () { return chunkQR7CQIA3_cjs.FunctionParams; }
15
+ get: function () { return chunkL3A3DTAX_cjs.FunctionParams; }
16
16
  });
17
17
  Object.defineProperty(exports, "URLPath", {
18
18
  enumerable: true,
19
- get: function () { return chunkQR7CQIA3_cjs.URLPath; }
19
+ get: function () { return chunkL3A3DTAX_cjs.URLPath; }
20
20
  });
21
21
  Object.defineProperty(exports, "createFile", {
22
22
  enumerable: true,
23
- get: function () { return chunkQR7CQIA3_cjs.createFile; }
23
+ get: function () { return chunkL3A3DTAX_cjs.createFile; }
24
24
  });
25
25
  Object.defineProperty(exports, "createFileExport", {
26
26
  enumerable: true,
27
- get: function () { return chunkQR7CQIA3_cjs.createFileExport; }
27
+ get: function () { return chunkL3A3DTAX_cjs.createFileExport; }
28
28
  });
29
29
  Object.defineProperty(exports, "createFileImport", {
30
30
  enumerable: true,
31
- get: function () { return chunkQR7CQIA3_cjs.createFileImport; }
31
+ get: function () { return chunkL3A3DTAX_cjs.createFileImport; }
32
32
  });
33
33
  Object.defineProperty(exports, "createFileParser", {
34
34
  enumerable: true,
35
- get: function () { return chunkQR7CQIA3_cjs.createFileParser; }
35
+ get: function () { return chunkL3A3DTAX_cjs.createFileParser; }
36
36
  });
37
37
  Object.defineProperty(exports, "getDefaultBanner", {
38
38
  enumerable: true,
39
- get: function () { return chunkQR7CQIA3_cjs.getDefaultBanner; }
39
+ get: function () { return chunkL3A3DTAX_cjs.getDefaultBanner; }
40
40
  });
41
41
  Object.defineProperty(exports, "getFileParser", {
42
42
  enumerable: true,
43
- get: function () { return chunkQR7CQIA3_cjs.getFileParser; }
43
+ get: function () { return chunkL3A3DTAX_cjs.getFileParser; }
44
44
  });
45
45
  Object.defineProperty(exports, "getUniqueName", {
46
46
  enumerable: true,
47
- get: function () { return chunkQR7CQIA3_cjs.getUniqueName; }
47
+ get: function () { return chunkL3A3DTAX_cjs.getUniqueName; }
48
48
  });
49
49
  Object.defineProperty(exports, "isPromise", {
50
50
  enumerable: true,
51
- get: function () { return chunkQR7CQIA3_cjs.isPromise; }
51
+ get: function () { return chunkL3A3DTAX_cjs.isPromise; }
52
52
  });
53
53
  Object.defineProperty(exports, "isPromiseFulfilledResult", {
54
54
  enumerable: true,
55
- get: function () { return chunkQR7CQIA3_cjs.isPromiseFulfilledResult; }
55
+ get: function () { return chunkL3A3DTAX_cjs.isPromiseFulfilledResult; }
56
56
  });
57
57
  Object.defineProperty(exports, "isPromiseRejectedResult", {
58
58
  enumerable: true,
59
- get: function () { return chunkQR7CQIA3_cjs.isPromiseRejectedResult; }
59
+ get: function () { return chunkL3A3DTAX_cjs.isPromiseRejectedResult; }
60
60
  });
61
61
  Object.defineProperty(exports, "renderTemplate", {
62
62
  enumerable: true,
63
- get: function () { return chunkQR7CQIA3_cjs.renderTemplate; }
63
+ get: function () { return chunkL3A3DTAX_cjs.renderTemplate; }
64
64
  });
65
65
  Object.defineProperty(exports, "setUniqueName", {
66
66
  enumerable: true,
67
- get: function () { return chunkQR7CQIA3_cjs.setUniqueName; }
67
+ get: function () { return chunkL3A3DTAX_cjs.setUniqueName; }
68
68
  });
69
69
  Object.defineProperty(exports, "timeout", {
70
70
  enumerable: true,
71
- get: function () { return chunkQR7CQIA3_cjs.timeout; }
71
+ get: function () { return chunkL3A3DTAX_cjs.timeout; }
72
72
  });
73
73
  //# sourceMappingURL=utils.cjs.map
74
74
  //# sourceMappingURL=utils.cjs.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/core",
3
- "version": "3.16.1",
3
+ "version": "3.16.2",
4
4
  "description": "Core functionality for Kubb's plugin-based code generation system, providing the foundation for transforming OpenAPI specifications.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -89,15 +89,15 @@
89
89
  "dependencies": {
90
90
  "camelcase": "^8.0.0",
91
91
  "find-up": "^7.0.0",
92
- "fs-extra": "^11.3.0",
92
+ "fs-extra": "^11.3.1",
93
93
  "js-runtime": "^0.0.8",
94
94
  "natural-orderby": "^5.0.0",
95
95
  "object-hash": "^3.0.0",
96
96
  "p-limit": "^6.2.0",
97
- "remeda": "^2.26.0",
97
+ "remeda": "^2.30.0",
98
98
  "seedrandom": "^3.0.5",
99
99
  "semver": "^7.7.2",
100
- "@kubb/parser-ts": "3.16.1"
100
+ "@kubb/parser-ts": "3.16.2"
101
101
  },
102
102
  "devDependencies": {
103
103
  "@types/fs-extra": "^11.0.4",
@@ -107,9 +107,9 @@
107
107
  "consola": "^3.4.2",
108
108
  "prettier": "^3.6.2",
109
109
  "tsup": "^8.5.0",
110
- "typescript": "^5.8.3",
111
- "@kubb/config-ts": "3.16.1",
112
- "@kubb/config-tsup": "3.16.1"
110
+ "typescript": "^5.9.2",
111
+ "@kubb/config-ts": "3.16.2",
112
+ "@kubb/config-tsup": "3.16.2"
113
113
  },
114
114
  "engines": {
115
115
  "node": ">=20"
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts","../src/utils/uniqueName.ts","../src/utils/URLPath.ts","../src/utils/TreeNode.ts","../src/BarrelManager.ts","../src/utils/Cache.ts","../src/FileManager.ts","../src/utils/parser.ts"],"names":["orderBy","camelCase","item","path","isValidVarName","join","getRelativePath","pLimit","trimExtName","relative","extname","write","uniqueBy","isDeepEqual","name","hash"],"mappings":"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","file":"chunk-QR7CQIA3.cjs","sourcesContent":["import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => this.#items.push(it))\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n\nexport function setUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n\n return originalName\n }\n data[originalName] = 1\n return originalName\n}\n","import { camelCase, isValidVarName } from '../transformers'\n\nexport type URLObject = {\n url: string\n params?: Record<string, string>\n}\n\ntype ObjectOptions = {\n type?: 'path' | 'template'\n replacer?: (pathParam: string) => string\n stringify?: boolean\n}\n\ntype Options = {\n casing?: 'camelcase'\n}\n\nexport class URLPath {\n path: string\n #options: Options\n\n constructor(path: string, options: Options = {}) {\n this.path = path\n this.#options = options\n\n return this\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n get URL(): string {\n return this.toURLPath()\n }\n get isURL(): boolean {\n try {\n const url = new URL(this.path)\n if (url?.href) {\n return true\n }\n } catch (_error) {\n return false\n }\n return false\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n get template(): string {\n return this.toTemplateString()\n }\n get object(): URLObject | string {\n return this.toObject()\n }\n get params(): Record<string, string> | undefined {\n return this.getParams()\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString({ replacer }),\n params: this.getParams(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n toTemplateString({ prefix = '', replacer }: { prefix?: string; replacer?: (pathParam: string) => string } = {}): string {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n let newPath = this.path.replaceAll('{', '${')\n\n if (found) {\n newPath = found.reduce((prev, path) => {\n const pathWithoutBrackets = path.replaceAll('{', '').replaceAll('}', '')\n\n let param = isValidVarName(pathWithoutBrackets) ? pathWithoutBrackets : camelCase(pathWithoutBrackets)\n\n if (this.#options.casing === 'camelcase') {\n param = camelCase(param)\n }\n\n return prev.replace(path, `\\${${replacer ? replacer(param) : param}}`)\n }, this.path)\n }\n\n return `\\`${prefix}${newPath}\\``\n }\n\n getParams(replacer?: (pathParam: string) => string): Record<string, string> | undefined {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n\n if (!found) {\n return undefined\n }\n\n const params: Record<string, string> = {}\n found.forEach((item) => {\n item = item.replaceAll('{', '').replaceAll('}', '')\n\n let param = isValidVarName(item) ? item : camelCase(item)\n\n if (this.#options.casing === 'camelcase') {\n param = camelCase(param)\n }\n\n const key = replacer ? replacer(param) : param\n\n params[key] = key\n }, this.path)\n\n return params\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n toURLPath(): string {\n return this.path.replaceAll('{', ':').replaceAll('}', '')\n }\n}\n","import { FileManager } from '../FileManager.ts'\nimport type { KubbFile } from '../fs/index.ts'\n\ntype BarrelData = {\n file?: KubbFile.File\n /**\n * @deprecated use file instead\n */\n type: KubbFile.Mode\n path: string\n name: string\n}\n\nexport class TreeNode {\n data: BarrelData\n parent?: TreeNode\n children: Array<TreeNode> = []\n #cachedLeaves?: Array<TreeNode> = undefined\n\n constructor(data: BarrelData, parent?: TreeNode) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: BarrelData): TreeNode {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n get root(): TreeNode {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n get leaves(): Array<TreeNode> {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n if (this.#cachedLeaves) {\n return this.#cachedLeaves\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n\n this.#cachedLeaves = leaves\n\n return leaves\n }\n\n forEach(callback: (treeNode: TreeNode) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i]?.forEach(callback)\n }\n }\n\n return this\n }\n\n findDeep(predicate?: (value: TreeNode, index: number, obj: TreeNode[]) => boolean): TreeNode | undefined {\n if (typeof predicate !== 'function') {\n throw new TypeError('find() predicate must be a function')\n }\n\n return this.leaves.find(predicate)\n }\n\n forEachDeep(callback: (treeNode: TreeNode) => void): void {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n this.leaves.forEach(callback)\n }\n\n filterDeep(callback: (treeNode: TreeNode) => boolean): Array<TreeNode> {\n if (typeof callback !== 'function') {\n throw new TypeError('filter() callback must be a function')\n }\n\n return this.leaves.filter(callback)\n }\n\n mapDeep<T>(callback: (treeNode: TreeNode) => T): Array<T> {\n if (typeof callback !== 'function') {\n throw new TypeError('map() callback must be a function')\n }\n\n return this.leaves.map(callback)\n }\n\n public static build(files: KubbFile.File[], root?: string): TreeNode | null {\n try {\n const filteredTree = buildDirectoryTree(files, root)\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({\n name: filteredTree.name,\n path: filteredTree.path,\n file: filteredTree.file,\n type: FileManager.getMode(filteredTree.path),\n })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({\n name: item.name,\n path: item.path,\n file: item.file,\n type: FileManager.getMode(item.path),\n })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode\n } catch (e) {\n throw new Error('Something went wrong with creating barrel files with the TreeNode class', { cause: e })\n }\n }\n}\n\nexport type DirectoryTree = {\n name: string\n path: string\n file?: KubbFile.File\n children: Array<DirectoryTree>\n}\n\nconst normalizePath = (p: string): string => p.replace(/\\\\/g, '/')\n\nexport function buildDirectoryTree(files: Array<KubbFile.File>, rootFolder = ''): DirectoryTree | null {\n const normalizedRootFolder = normalizePath(rootFolder)\n const rootPrefix = normalizedRootFolder.endsWith('/') ? normalizedRootFolder : `${normalizedRootFolder}/`\n\n const filteredFiles = files.filter((file) => {\n const normalizedFilePath = normalizePath(file.path)\n return rootFolder ? normalizedFilePath.startsWith(rootPrefix) && !normalizedFilePath.endsWith('.json') : !normalizedFilePath.endsWith('.json')\n })\n\n if (filteredFiles.length === 0) {\n return null // No files match the root folder\n }\n\n const root: DirectoryTree = {\n name: rootFolder || '',\n path: rootFolder || '',\n children: [],\n }\n\n filteredFiles.forEach((file) => {\n const path = file.path.slice(rootFolder.length)\n const parts = path.split('/')\n let currentLevel: DirectoryTree[] = root.children\n let currentPath = rootFolder\n\n parts.forEach((part, index) => {\n if (index !== 0) {\n currentPath += `/${part}`\n } else {\n currentPath += `${part}`\n }\n\n let existingNode = currentLevel.find((node) => node.name === part)\n\n if (!existingNode) {\n if (index === parts.length - 1) {\n // If it's the last part, it's a file\n existingNode = {\n name: part,\n file,\n path: currentPath,\n } as DirectoryTree\n } else {\n // Otherwise, it's a folder\n existingNode = {\n name: part,\n path: currentPath,\n children: [],\n } as DirectoryTree\n }\n currentLevel.push(existingNode)\n }\n\n // Move to the next level if it's a folder\n if (!existingNode.file) {\n currentLevel = existingNode.children\n }\n })\n })\n\n return root\n}\n","import { join } from 'node:path'\nimport type { FileMetaBase } from './FileManager.ts'\nimport type { KubbFile } from './fs/index.ts'\nimport { getRelativePath } from './fs/index.ts'\nimport type { Logger } from './logger.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\ntype BarrelManagerOptions = {\n logger?: Logger\n}\n\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n getFiles({ files: generatedFiles, root }: { files: KubbFile.File[]; root?: string; meta?: FileMetaBase | undefined }): Array<KubbFile.File> {\n const { logger } = this.#options\n\n const cachedFiles = new Map<KubbFile.Path, KubbFile.File>()\n\n TreeNode.build(generatedFiles, root)?.forEach((treeNode) => {\n if (!treeNode || !treeNode.children || !treeNode.parent?.data.path) {\n return undefined\n }\n\n const barrelFile: KubbFile.File = {\n path: join(treeNode.parent?.data.path, 'index.ts') as KubbFile.Path,\n baseName: 'index.ts',\n exports: [],\n sources: [],\n }\n const previousBarrelFile = cachedFiles.get(barrelFile.path)\n const leaves = treeNode.leaves\n\n leaves.forEach((item) => {\n if (!item.data.name) {\n return undefined\n }\n\n const sources = item.data.file?.sources || []\n\n if (!sources.some((source) => source.isIndexable)) {\n logger?.emit(\n 'warning',\n `No isIndexable source found(source should have a name and isIndexable):\\nFile: ${JSON.stringify(item.data.file, undefined, 2)}`,\n )\n }\n\n sources.forEach((source) => {\n if (!item.data.file?.path || !source.isIndexable || !source.name) {\n return undefined\n }\n const alreadyContainInPreviousBarrelFile = previousBarrelFile?.sources.some(\n (item) => item.name === source.name && item.isTypeOnly === source.isTypeOnly,\n )\n\n if (alreadyContainInPreviousBarrelFile) {\n return undefined\n }\n\n if (!barrelFile.exports) {\n barrelFile.exports = []\n }\n\n // true when we have a subdirectory that also contains barrel files\n const isSubExport = !!treeNode.parent?.data.path?.split?.('/')?.length\n\n if (isSubExport) {\n barrelFile.exports.push({\n name: [source.name],\n path: getRelativePath(treeNode.parent?.data.path, item.data.path),\n isTypeOnly: source.isTypeOnly,\n })\n } else {\n barrelFile.exports.push({\n name: [source.name],\n path: `./${item.data.file.baseName}`,\n isTypeOnly: source.isTypeOnly,\n })\n }\n\n barrelFile.sources.push({\n name: source.name,\n isTypeOnly: source.isTypeOnly,\n //TODO use parser to generate import\n value: '',\n isExportable: false,\n isIndexable: false,\n })\n })\n })\n\n if (previousBarrelFile) {\n previousBarrelFile.sources.push(...barrelFile.sources)\n previousBarrelFile.exports?.push(...(barrelFile.exports || []))\n } else {\n cachedFiles.set(barrelFile.path, barrelFile)\n }\n })\n\n return [...cachedFiles.values()]\n }\n}\n","export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { extname, join, relative } from 'node:path'\n\nimport { orderBy } from 'natural-orderby'\nimport { isDeepEqual, uniqueBy } from 'remeda'\nimport pLimit from 'p-limit'\n\nimport { BarrelManager } from './BarrelManager.ts'\n\nimport type { KubbFile } from './fs/index.ts'\nimport { trimExtName, write } from './fs/index.ts'\nimport type { ResolvedFile } from './fs/types.ts'\nimport type { Logger } from './logger.ts'\nimport type { BarrelType, Config, Plugin } from './types.ts'\nimport { createFile, getFileParser } from './utils'\nimport type { GreaterThan } from './utils/types.ts'\nimport { Cache } from './utils/Cache.ts'\n\nexport type FileMetaBase = {\n pluginKey?: Plugin['key']\n}\n\ntype AddResult<T extends Array<KubbFile.File>> = Promise<Awaited<GreaterThan<T['length'], 1> extends true ? Promise<ResolvedFile[]> : Promise<ResolvedFile>>>\n\ntype AddIndexesProps = {\n type: BarrelType | false | undefined\n /**\n * Root based on root and output.path specified in the config\n */\n root: string\n /**\n * Output for plugin\n */\n output: {\n path: string\n }\n group?: {\n output: string\n exportAs: string\n }\n logger?: Logger\n\n meta?: FileMetaBase\n}\n\ntype WriteFilesProps = {\n root: Config['root']\n extension?: Record<KubbFile.Extname, KubbFile.Extname | ''>\n logger?: Logger\n dryRun?: boolean\n}\n\nexport class FileManager {\n #cache = new Cache<KubbFile.ResolvedFile>()\n #limit = pLimit(100)\n\n constructor() {\n return this\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(...files: T): AddResult<T> {\n const resolvedFiles: KubbFile.ResolvedFile[] = []\n\n const mergedFiles = new Map<string, KubbFile.File>()\n\n files.forEach((file) => {\n const existing = mergedFiles.get(file.path)\n if (existing) {\n mergedFiles.set(file.path, mergeFile(existing, file))\n } else {\n mergedFiles.set(file.path, file)\n }\n })\n\n for (const file of mergedFiles.values()) {\n const existing = await this.#cache.get(file.path)\n\n const merged = existing ? mergeFile(existing, file) : file\n const resolvedFile = createFile(merged)\n\n await this.#cache.set(resolvedFile.path, resolvedFile)\n await this.#cache.flush()\n\n resolvedFiles.push(resolvedFile)\n }\n\n if (files.length > 1) {\n return resolvedFiles as unknown as AddResult<T>\n }\n\n return resolvedFiles[0] as unknown as AddResult<T>\n }\n\n async getByPath(path: KubbFile.Path): Promise<KubbFile.ResolvedFile | null> {\n return this.#cache.get(path)\n }\n\n async deleteByPath(path: KubbFile.Path): Promise<void> {\n await this.#cache.delete(path)\n }\n\n async clear(): Promise<void> {\n await this.#cache.clear()\n }\n\n async getFiles(): Promise<Array<KubbFile.ResolvedFile>> {\n const cachedKeys = await this.#cache.keys()\n\n // order by path length and if file is a barrel file\n const keys = orderBy(cachedKeys, [(v) => v.length, (v) => trimExtName(v).endsWith('index')])\n\n const filesTasks = keys.map((key) =>\n this.#limit(async () => {\n const file = await this.#cache.get(key)\n return file as KubbFile.ResolvedFile\n }),\n )\n\n const files = await Promise.all(filesTasks)\n\n return files.filter(Boolean)\n }\n\n async processFiles({ dryRun, root, extension, logger }: WriteFilesProps): Promise<Array<KubbFile.ResolvedFile>> {\n const files = await this.getFiles()\n\n logger?.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })\n\n const promises = files.map((file) => {\n return this.#limit(async () => {\n const message = file ? `Writing ${relative(root, file.path)}` : ''\n const extname = extension?.[file.extname] || undefined\n\n if (!dryRun) {\n const source = await getSource(file, { logger, extname })\n await write(file.path, source, { sanity: false })\n }\n\n logger?.emit('progressed', { id: 'files', message })\n })\n })\n\n await Promise.all(promises)\n\n logger?.emit('progress_stop', { id: 'files' })\n\n return files\n }\n async getBarrelFiles({ type, meta = {}, root, output, logger }: AddIndexesProps): Promise<KubbFile.File[]> {\n if (!type || type === 'propagate') {\n return []\n }\n\n const barrelManager = new BarrelManager({ logger })\n const files = await this.getFiles()\n\n const pathToBuildFrom = join(root, output.path)\n\n if (trimExtName(pathToBuildFrom).endsWith('index')) {\n logger?.emit('warning', 'Output has the same fileName as the barrelFiles, please disable barrel generation')\n\n return []\n }\n\n const barrelFiles = barrelManager.getFiles({ files, root: pathToBuildFrom, meta })\n\n if (type === 'all') {\n return barrelFiles.map((file) => {\n return {\n ...file,\n exports: file.exports?.map((exportItem) => {\n return {\n ...exportItem,\n name: undefined,\n }\n }),\n }\n })\n }\n\n return barrelFiles.map((indexFile) => {\n return {\n ...indexFile,\n meta,\n }\n })\n }\n\n // statics\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'split'\n }\n return extname(path) ? 'single' : 'split'\n }\n}\n\ntype GetSourceOptions = {\n extname?: KubbFile.Extname\n logger?: Logger\n}\n\nexport async function getSource<TMeta extends FileMetaBase = FileMetaBase>(\n file: ResolvedFile<TMeta>,\n { logger, extname }: GetSourceOptions = {},\n): Promise<string> {\n const parser = await getFileParser(file.extname)\n const source = await parser.print(file, { logger, extname })\n\n return parser.format(source).catch((err) => {\n console.warn(err)\n return source\n })\n}\n\nfunction mergeFile<TMeta extends FileMetaBase = FileMetaBase>(a: KubbFile.File<TMeta>, b: KubbFile.File<TMeta>): KubbFile.File<TMeta> {\n return {\n ...a,\n sources: [...(a.sources || []), ...(b.sources || [])],\n imports: [...(a.imports || []), ...(b.imports || [])],\n exports: [...(a.exports || []), ...(b.exports || [])],\n }\n}\n\nexport function combineSources(sources: Array<KubbFile.Source>): Array<KubbFile.Source> {\n return uniqueBy(sources, (obj) => [obj.name, obj.isExportable, obj.isTypeOnly] as const)\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n return orderBy(exports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n // we already have an item that was unique enough or name field is empty or prev asAlias is set but current has no changes\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Export>,\n )\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n return orderBy(imports, [\n (v) => !!Array.isArray(v.name),\n (v) => !v.isTypeOnly,\n (v) => v.path,\n (v) => !!v.name,\n (v) => (Array.isArray(v.name) ? orderBy(v.name) : v.name),\n ]).reduce(\n (prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => {\n return name && source.includes(name)\n }\n\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n return prev\n }\n\n // merge all names and check if the importName is being used in the generated source and if not filter those imports out\n if (Array.isArray(name)) {\n name = name.filter((item) => (typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName)))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n // already unique enough or name is empty\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n // new item, append name\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n // merge all names when prev and current both have the same isTypeOnly set\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n // no import was found in the source, ignore import\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Import>,\n )\n}\n","import path from 'node:path'\nimport type { KubbFile } from '../fs/index.ts'\n\nimport { getRelativePath } from '../fs/index.ts'\nimport hash from 'object-hash'\nimport { combineExports, combineImports, combineSources } from '../FileManager.ts'\nimport type { Logger } from '../logger.ts'\nimport type { Config } from '../types.ts'\n\n/**\n * Generate a default banner for files created by Kubb\n * @returns A string with the default banner\n */\nexport function getDefaultBanner({ title, description, version, config }: { title?: string; description?: string; version?: string; config: Config }): string {\n try {\n let source = ''\n if ('path' in config.input) {\n source = path.basename(config.input.path)\n } else if ('data' in config.input) {\n source = 'text content'\n }\n\n let banner = '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n'\n\n if (config.output.defaultBanner === 'simple') {\n banner += '*/\\n'\n return banner\n }\n\n if (source) {\n banner += `* Source: ${source}\\n`\n }\n\n if (title) {\n banner += `* Title: ${title}\\n`\n }\n\n if (description) {\n const formattedDescription = description.replace(/\\n/gm, '\\n* ')\n banner += `* Description: ${formattedDescription}\\n`\n }\n\n if (version) {\n banner += `* OpenAPI spec version: ${version}\\n`\n }\n\n banner += '*/\\n'\n return banner\n } catch (_error) {\n // If there's any error in parsing the Oas data, return a simpler banner\n return '/**\\n* Generated by Kubb (https://kubb.dev/).\\n* Do not edit manually.\\n*/'\n }\n}\n\n/**\n * Helper to create a file with name and id set\n */\nexport function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta> {\n const extname = path.extname(file.baseName) as KubbFile.Extname\n if (!extname) {\n throw new Error(`No extname found for ${file.baseName}`)\n }\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n const exports = file.exports?.length ? combineExports(file.exports) : []\n const imports = file.imports?.length && source ? combineImports(file.imports, exports, source) : []\n const sources = file.sources?.length ? combineSources(file.sources) : []\n\n return {\n ...file,\n id: hash({ path: file.path }),\n name: trimExtName(file.baseName),\n extname,\n imports: imports.map(createFileImport),\n exports: exports.map(createFileExport),\n sources: sources.map(createFileSource),\n meta: file.meta || ({} as TMeta),\n }\n}\n\n/**\n * Helper to create a fileImport with extname set\n */\nfunction createFileSource(source: KubbFile.Source): KubbFile.Source {\n return source\n}\n\n/**\n * Helper to create a fileImport with extname set\n */\nexport function createFileImport(imp: KubbFile.Import): KubbFile.ResolvedImport {\n return {\n ...imp,\n }\n}\n\n/**\n * Helper to create a fileExport with extname set\n */\nexport function createFileExport(exp: KubbFile.Export): KubbFile.ResolvedExport {\n return {\n ...exp,\n }\n}\n\nexport type ParserModule<TMeta extends object = object> = {\n format: (source: string) => Promise<string>\n /**\n * Convert a file to string\n */\n print: (file: KubbFile.ResolvedFile<TMeta>, options: PrintOptions) => Promise<string>\n}\n\nexport function createFileParser<TMeta extends object = object>(parser: ParserModule<TMeta>): ParserModule<TMeta> {\n return parser\n}\n\ntype PrintOptions = {\n extname?: KubbFile.Extname\n logger?: Logger\n}\n\nconst typeScriptParser = createFileParser({\n async format(source) {\n const module = await import('@kubb/parser-ts')\n\n return module.format(source)\n },\n async print(file, options = { extname: '.ts' }) {\n const module = await import('@kubb/parser-ts')\n\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n\n const importNodes = file.imports\n .map((item) => {\n const importPath = item.root ? getRelativePath(item.root, item.path) : item.path\n const hasExtname = !!path.extname(importPath)\n\n return module.factory.createImportDeclaration({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(importPath)}${options.extname}` : item.root ? trimExtName(importPath) : importPath,\n isTypeOnly: item.isTypeOnly,\n })\n })\n .filter(Boolean)\n\n const exportNodes = file.exports\n .map((item) => {\n const exportPath = item.path\n\n const hasExtname = !!path.extname(exportPath)\n\n return module.factory.createExportDeclaration({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(item.path)}${options.extname}` : trimExtName(item.path),\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n })\n .filter(Boolean)\n\n return [file.banner, module.print([...importNodes, ...exportNodes]), source, file.footer].join('\\n')\n },\n})\n\nconst tsxParser = createFileParser({\n async format(source) {\n const module = await import('@kubb/parser-ts')\n //4 = tsx\n return module.format(source)\n },\n async print(file, options = { extname: '.tsx' }) {\n return typeScriptParser.print(file, options)\n },\n})\n\nconst defaultParser = createFileParser({\n async format(source) {\n return source\n },\n async print(file) {\n return file.sources.map((item) => item.value).join('\\n\\n')\n },\n})\n\nconst parsers: Record<KubbFile.Extname, ParserModule<any>> = {\n '.ts': typeScriptParser,\n '.js': typeScriptParser,\n '.jsx': tsxParser,\n '.tsx': tsxParser,\n '.json': defaultParser,\n}\n\nexport async function getFileParser<TMeta extends object = object>(extname: KubbFile.Extname | undefined): Promise<ParserModule<TMeta>> {\n if (!extname) {\n return defaultParser\n }\n\n const parser = parsers[extname]\n\n if (!parser) {\n console.warn(`[parser] No parser found for ${extname}, default parser will be used`)\n }\n\n return parser || defaultParser\n}\n\nfunction trimExtName(text: string): string {\n const extname = text.split('.').pop()\n\n return text.replace(`.${extname}`, '')\n}\n"]}