@kubb/core 3.0.0-alpha.7 → 3.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-BHZAXMKP.js → chunk-27CPVXAT.js} +28 -15
- package/dist/chunk-27CPVXAT.js.map +1 -0
- package/dist/{chunk-4SIOKKDJ.cjs → chunk-5IGANEGE.cjs} +35 -22
- package/dist/chunk-5IGANEGE.cjs.map +1 -0
- package/dist/index.cjs +12 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +7 -7
- package/dist/index.js.map +1 -1
- package/dist/mocks.cjs +5 -2
- package/dist/mocks.cjs.map +1 -1
- package/dist/mocks.d.cts +1 -1
- package/dist/mocks.d.ts +1 -1
- package/dist/mocks.js +4 -1
- package/dist/mocks.js.map +1 -1
- package/dist/utils.cjs +2 -2
- package/dist/utils.js +1 -1
- package/package.json +7 -7
- package/src/BarrelManager.ts +81 -69
- package/src/{Generator.ts → BaseGenerator.ts} +1 -1
- package/src/FileManager.ts +2 -1
- package/src/__snapshots__/barrel.json +13 -8
- package/src/build.ts +3 -4
- package/src/index.ts +1 -1
- package/dist/chunk-4SIOKKDJ.cjs.map +0 -1
- package/dist/chunk-BHZAXMKP.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/kubb/kubb/packages/core/dist/chunk-5IGANEGE.cjs","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js","../src/utils/index.ts","../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/parser.ts","../src/FileManager.ts","../src/BarrelManager.ts","../src/utils/TreeNode.ts","../../../node_modules/.pnpm/p-queue@8.0.1/node_modules/p-queue/dist/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.mjs","../../../node_modules/.pnpm/p-timeout@6.1.2/node_modules/p-timeout/index.js","../../../node_modules/.pnpm/p-queue@8.0.1/node_modules/p-queue/dist/priority-queue.js","../../../node_modules/.pnpm/p-queue@8.0.1/node_modules/p-queue/dist/lower-bound.js"],"names":["EventEmitter","trimExtName"],"mappings":"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","file":"/home/runner/work/kubb/kubb/packages/core/dist/chunk-5IGANEGE.cjs","sourcesContent":[null,"'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","export type { FunctionParamsAST } from './FunctionParams.ts'\nexport { FunctionParams } from './FunctionParams.ts'\nexport {\n isPromise,\n isPromiseFulfilledResult,\n isPromiseRejectedResult,\n} from './promise.ts'\nexport { renderTemplate } from './renderTemplate.ts'\nexport { timeout } from './timeout.ts'\nexport { getUniqueName, setUniqueName } from './uniqueName.ts'\nexport type { URLObject } from './URLPath.ts'\nexport { URLPath } from './URLPath.ts'\nexport { getFileParser, createFileImport, createFileExport, createFile, createFileParser } from './parser.ts'\nexport type { ParserModule } from './parser.ts'\n","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 '@kubb/types'\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 } from '../transformers/casing.ts'\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\nexport class URLPath {\n path: string\n\n constructor(path: string) {\n this.path = path\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(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, curr) => {\n const pathParam = replacer ? replacer(camelCase(curr)) : camelCase(curr)\n const replacement = `\\${${pathParam}}`\n\n return prev.replace(curr, replacement)\n }, this.path)\n }\n\n return `\\`${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 const pathParam = replacer ? replacer(camelCase(item)) : camelCase(item)\n\n params[pathParam] = pathParam\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 { extname } from 'node:path'\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport { getRelativePath } from '@kubb/fs'\nimport hash from 'object-hash'\nimport { combineExports, combineImports, combineSources } from '../FileManager.ts'\nimport type { Logger } from '../logger.ts'\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 = extname(file.baseName) as KubbFile.Extname\n\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 ? combineExports(file.exports) : []\n const imports = file.imports && source ? combineImports(file.imports, exports, source) : []\n const sources = file.sources ? 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((item) => createFileImport(item)),\n exports: exports.map((item) => createFileExport(item)),\n sources: sources.map((item) => createFileSource(item)),\n }\n}\n\n/**\n * Helper to create a fileImport with extName set\n */\nexport function 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 const extName = extname(imp.path) as KubbFile.Extname\n\n return {\n ...imp,\n extName: imp.extName ? imp.extName : extName,\n }\n}\n\n/**\n * Helper to create a fileExport with extName set\n */\nexport function createFileExport(exp: KubbFile.Export): KubbFile.ResolvedExport {\n const extName = extname(exp.path) as KubbFile.Extname\n\n return {\n ...exp,\n extName: exp.extName ? exp.extName : extName,\n }\n}\n\nexport type ParserModule<TMeta extends object = object> = {\n /**\n * By default @kubb/react is used\n */\n render: (item: any) => any\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 logger?: Logger\n}\n\nconst typeScriptParser = createFileParser({\n render() {\n return undefined\n },\n async print(file) {\n const module = await import('@kubb/parser-ts')\n\n const importNodes = file.imports\n .map((item) => {\n const path = item.root ? getRelativePath(item.root, item.path) : item.path\n\n return module.factory.createImportDeclaration({\n name: item.name,\n path,\n isTypeOnly: item.isTypeOnly,\n })\n })\n .filter(Boolean)\n\n const exportNodes = file.exports\n .map((item) => {\n return module.factory.createExportDeclaration({\n name: item.name,\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n })\n .filter(Boolean)\n\n const source = [module.print([...importNodes, ...exportNodes]), file.sources.map((item) => item.value).join('\\n\\n')].join('\\n')\n\n // do some basic linting with the ts compiler\n return module.print([], { source, noEmitHelpers: false })\n },\n})\n\nconst defaultParser = createFileParser({\n render() {\n return undefined\n },\n async print(file, { logger }) {\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': typeScriptParser,\n '.tsx': typeScriptParser,\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\nexport function trimExtName(text: string): string {\n const extName = text.split('.').pop()\n\n return text.replace(`.${extName}`, '')\n}\n","import { extname, join, relative } from 'node:path'\n\nimport { orderBy } from 'natural-orderby'\nimport { isDeepEqual } from 'remeda'\n\nimport { read, write } from '@kubb/fs'\nimport { BarrelManager } from './BarrelManager.ts'\n\nimport type * as KubbFile from '@kubb/fs/types'\n\nimport { trimExtName } from '@kubb/fs'\nimport type { ResolvedFile } from '@kubb/fs/types'\nimport type { GreaterThan } from '@kubb/types'\nimport PQueue from 'p-queue'\nimport type { Logger } from './logger.ts'\nimport type { Config, Plugin } from './types.ts'\nimport { createFile, getFileParser } from './utils'\nimport { type DirectoryTree, TreeNode, buildDirectoryTree } from './utils/TreeNode.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 /**\n * Root based on root and output.path specified in the config\n */\n root: string\n files: KubbFile.File[]\n /**\n * Output for plugin\n */\n output: {\n path: string\n extName?: KubbFile.Extname\n exportAs?: string\n exportType?: 'barrel' | 'barrelNamed' | false\n }\n group?: {\n output: string\n exportAs: string\n }\n logger?: Logger\n\n meta?: FileMetaBase\n}\n\nexport class FileManager {\n #filesByPath: Map<KubbFile.Path, KubbFile.ResolvedFile> = new Map()\n #files: Set<KubbFile.ResolvedFile> = new Set()\n constructor() {\n return this\n }\n\n get files(): Array<KubbFile.ResolvedFile> {\n return Array.from(this.#files)\n }\n\n get orderedFiles(): Array<KubbFile.ResolvedFile> {\n return orderBy(Array.from(this.#files), [\n (v) => v?.meta && 'pluginKey' in v.meta && !v.meta.pluginKey,\n (v) => v.path.length,\n (v) => trimExtName(v.path).endsWith('index'),\n (v) => trimExtName(v.baseName),\n (v) => v.path.split('.').pop(),\n ])\n }\n\n get groupedFiles(): DirectoryTree | null {\n return buildDirectoryTree(Array.from(this.#files))\n }\n\n get treeNode(): TreeNode | null {\n return TreeNode.build(Array.from(this.#files))\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(...files: T): AddResult<T> {\n const promises = files.map((file) => {\n if (file.override) {\n return this.#add(file)\n }\n\n return this.#addOrAppend(file)\n })\n\n const resolvedFiles = await Promise.all(promises)\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 #add(file: KubbFile.File): Promise<ResolvedFile> {\n const resolvedFile = createFile(file)\n\n this.#filesByPath.set(resolvedFile.path, resolvedFile)\n this.#files.add(resolvedFile)\n\n return resolvedFile\n }\n\n clear() {\n this.#filesByPath.clear()\n this.#files.clear()\n }\n\n async #addOrAppend(file: KubbFile.File): Promise<ResolvedFile> {\n const previousFile = this.#filesByPath.get(file.path)\n\n if (previousFile) {\n this.#filesByPath.delete(previousFile.path)\n this.#files.delete(previousFile)\n\n return this.#add(mergeFile(previousFile, file))\n }\n return this.#add(file)\n }\n\n getCacheById(id: string): KubbFile.File | undefined {\n let cache: KubbFile.File | undefined\n\n this.#files.forEach((file) => {\n if (file.id === id) {\n cache = file\n }\n })\n return cache\n }\n\n getByPath(path: KubbFile.Path): KubbFile.ResolvedFile | undefined {\n return this.#filesByPath.get(path)\n }\n\n deleteByPath(path: KubbFile.Path): void {\n const cacheItem = this.getByPath(path)\n if (!cacheItem) {\n return\n }\n\n this.#filesByPath.delete(path)\n this.#files.delete(cacheItem)\n }\n\n async getBarrelFiles({ files, meta, root, output, logger }: AddIndexesProps): Promise<KubbFile.File[]> {\n const { exportType = 'barrelNamed' } = output\n const barrelManager = new BarrelManager({ logger })\n\n if (exportType === false) {\n return []\n }\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, pathToBuildFrom)\n\n if (exportType === 'barrel') {\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 async write(...params: Parameters<typeof write>): ReturnType<typeof write> {\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>): ReturnType<typeof read> {\n return read(...params)\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 logger?: Logger\n}\n\nexport async function getSource<TMeta extends FileMetaBase = FileMetaBase>(file: ResolvedFile<TMeta>, { logger }: GetSourceOptions = {}): Promise<string> {\n const parser = await getFileParser(file.extName)\n\n return parser.print(file, { logger })\n}\n\nexport function 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 sources.reduce(\n (prev, curr) => {\n const prevByName = prev.findLast((imp) => imp.name === curr.name)\n const prevByPathAndIsExportable = prev.findLast((imp) => imp.name === curr.name && imp.isExportable)\n\n if (prevByPathAndIsExportable) {\n // we already have an export that has the same name but uses `isExportable` (export type ...)\n return [...prev, curr]\n }\n\n if (prevByName) {\n prevByName.value = curr.value\n prevByName.isExportable = curr.isExportable\n prevByName.isTypeOnly = curr.isTypeOnly\n prevByName.isIndexable = curr.isIndexable\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Source>,\n )\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const combinedExports = exports.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 return orderBy(combinedExports, [\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 ])\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const combinedImports = imports.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) => name && !!source.includes(name)\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 return orderBy(combinedImports, [\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 ])\n}\ntype WriteFilesProps = {\n config: Config\n files: Array<KubbFile.ResolvedFile>\n logger: Logger\n dryRun?: boolean\n}\n/**\n * Global queue\n */\nconst queue = new PQueue({ concurrency: 100 })\n\nexport async function processFiles({ dryRun, config, logger, files }: WriteFilesProps) {\n const orderedFiles = orderBy(files, [\n (v) => v?.meta && 'pluginKey' in v.meta && !v.meta.pluginKey,\n (v) => v.path.length,\n (v) => trimExtName(v.path).endsWith('index'),\n ])\n\n logger.emit('debug', {\n logs: [JSON.stringify({ files: orderedFiles }, null, 2)],\n fileName: 'kubb-files.json',\n override: true,\n })\n\n if (!dryRun) {\n const size = orderedFiles.length\n\n logger.emit('progress_start', { id: 'files', size })\n const promises = orderedFiles.map(async (file) => {\n await queue.add(async () => {\n const source = await getSource(file, { logger })\n\n await write(file.path, source, { sanity: false })\n\n logger.emit('progress', { id: 'files', data: file ? relative(config.root, file.path) : '' })\n })\n })\n\n await Promise.all(promises)\n\n logger.emit('progress_stop', { id: 'files' })\n }\n\n return files\n}\n","import { join } from 'node:path'\n\nimport { TreeNode } from './utils/TreeNode.ts'\n\nimport { getRelativePath } from '@kubb/fs'\nimport type * as KubbFile from '@kubb/fs/types'\nimport { combineExports, combineSources } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\n\nexport type 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(generatedFiles: KubbFile.File[], root?: string): Array<KubbFile.File> {\n const { logger } = this.#options\n\n const files = 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 barrelPath: KubbFile.Path = join(treeNode.parent?.data.path, 'index.ts')\n\n const leaves = treeNode.leaves\n\n // biome-ignore lint/complexity/useFlatMap: we have a custom map in TreeNode\n const exports = leaves\n .map((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 return sources.map((source) => {\n if (!item.data.file?.path || !source.isIndexable) {\n return undefined\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 return {\n name: [source.name],\n path: getRelativePath(treeNode.parent?.data.path, item.data.path),\n isTypeOnly: source.isTypeOnly,\n } as KubbFile.Export\n }\n\n return {\n name: [source.name],\n path: `./${item.data.file.baseName}`,\n isTypeOnly: source.isTypeOnly,\n } as KubbFile.Export\n })\n })\n .flat()\n .filter(Boolean)\n\n const barrelFile: KubbFile.File = {\n path: barrelPath,\n baseName: 'index.ts',\n exports: exports,\n sources: exports.flatMap((item) => {\n if (Array.isArray(item.name)) {\n return item.name.map((name) => {\n return {\n name: name,\n isTypeOnly: item.isTypeOnly,\n //TODO use parser to generate import\n value: '',\n isExportable: false,\n isIndexable: false,\n } as KubbFile.Source\n })\n }\n return [\n {\n name: item.name,\n isTypeOnly: item.isTypeOnly,\n //TODO use parser to generate import\n value: '',\n isExportable: false,\n isIndexable: false,\n } as KubbFile.Source,\n ]\n }),\n }\n\n const previousBarrelFile = files.get(barrelFile.path)\n\n if (previousBarrelFile) {\n files.set(barrelFile.path, {\n ...previousBarrelFile,\n ...barrelFile,\n exports: combineExports([...(previousBarrelFile.exports || []), ...(barrelFile.exports || [])]),\n sources: combineSources([...(previousBarrelFile.sources || []), ...(barrelFile.sources || [])]),\n })\n } else {\n files.set(barrelFile.path, barrelFile)\n }\n })\n\n return [...files.values()]\n }\n}\n","import type * as KubbFile from '@kubb/fs/types'\nimport { FileManager } from '../FileManager.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 public data: BarrelData\n\n public parent?: TreeNode\n\n public children: Array<TreeNode> = []\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 find(data?: BarrelData): TreeNode | null {\n if (!data) {\n return null\n }\n\n if (data === this.data) {\n return this\n }\n\n if (this.children?.length) {\n for (let i = 0, { length } = this.children, target: TreeNode | null = null; i < length; i++) {\n target = this.children[i]!.find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\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 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 return leaves\n }\n\n get root(): TreeNode {\n if (!this.parent) {\n return this\n }\n return this.parent.root\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 filter(callback: (treeNode: TreeNode) => boolean): Array<TreeNode> {\n let data: Array<TreeNode> = []\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n if (callback(this)) {\n data.push(this)\n }\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n const childData = this.children[i]?.filter(callback).filter(Boolean) || []\n data = [...new Set([...data, ...childData])]\n }\n }\n\n return data\n }\n\n map<T>(callback: (treeNode: TreeNode) => T): Array<T> {\n let data: Array<T> = []\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n data.push(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 const childData = this.children[i]?.map(callback).filter(Boolean) || []\n data = [...new Set([...data, ...childData])]\n }\n }\n\n return data\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\nexport function buildDirectoryTree(files: Array<KubbFile.File>, rootFolder = ''): DirectoryTree | null {\n const rootPrefix = rootFolder.endsWith('/') ? rootFolder : `${rootFolder}/`\n const filteredFiles = files.filter((file) => (rootFolder ? file.path.startsWith(rootPrefix) && !file.path.endsWith('.json') : !file.path.endsWith('.json')))\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 { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nPromise queue with concurrency control.\n*/\nexport default class PQueue extends EventEmitter {\n #carryoverConcurrencyCount;\n #isIntervalIgnored;\n #intervalCount = 0;\n #intervalCap;\n #interval;\n #intervalEnd = 0;\n #intervalId;\n #timeoutId;\n #queue;\n #queueClass;\n #pending = 0;\n // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n #concurrency;\n #isPaused;\n #throwOnTimeout;\n /**\n Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n\n Applies to each future operation.\n */\n timeout;\n // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n constructor(options) {\n super();\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n options = {\n carryoverConcurrencyCount: false,\n intervalCap: Number.POSITIVE_INFINITY,\n interval: 0,\n concurrency: Number.POSITIVE_INFINITY,\n autoStart: true,\n queueClass: PriorityQueue,\n ...options,\n };\n if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${options.intervalCap?.toString() ?? ''}\\` (${typeof options.intervalCap})`);\n }\n if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${options.interval?.toString() ?? ''}\\` (${typeof options.interval})`);\n }\n this.#carryoverConcurrencyCount = options.carryoverConcurrencyCount;\n this.#isIntervalIgnored = options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0;\n this.#intervalCap = options.intervalCap;\n this.#interval = options.interval;\n this.#queue = new options.queueClass();\n this.#queueClass = options.queueClass;\n this.concurrency = options.concurrency;\n this.timeout = options.timeout;\n this.#throwOnTimeout = options.throwOnTimeout === true;\n this.#isPaused = options.autoStart === false;\n }\n get #doesIntervalAllowAnother() {\n return this.#isIntervalIgnored || this.#intervalCount < this.#intervalCap;\n }\n get #doesConcurrentAllowAnother() {\n return this.#pending < this.#concurrency;\n }\n #next() {\n this.#pending--;\n this.#tryToStartAnother();\n this.emit('next');\n }\n #onResumeInterval() {\n this.#onInterval();\n this.#initializeIntervalIfNeeded();\n this.#timeoutId = undefined;\n }\n get #isIntervalPaused() {\n const now = Date.now();\n if (this.#intervalId === undefined) {\n const delay = this.#intervalEnd - now;\n if (delay < 0) {\n // Act as the interval was done\n // We don't need to resume it here because it will be resumed on line 160\n this.#intervalCount = (this.#carryoverConcurrencyCount) ? this.#pending : 0;\n }\n else {\n // Act as the interval is pending\n if (this.#timeoutId === undefined) {\n this.#timeoutId = setTimeout(() => {\n this.#onResumeInterval();\n }, delay);\n }\n return true;\n }\n }\n return false;\n }\n #tryToStartAnother() {\n if (this.#queue.size === 0) {\n // We can clear the interval (\"pause\")\n // Because we can redo it later (\"resume\")\n if (this.#intervalId) {\n clearInterval(this.#intervalId);\n }\n this.#intervalId = undefined;\n this.emit('empty');\n if (this.#pending === 0) {\n this.emit('idle');\n }\n return false;\n }\n if (!this.#isPaused) {\n const canInitializeInterval = !this.#isIntervalPaused;\n if (this.#doesIntervalAllowAnother && this.#doesConcurrentAllowAnother) {\n const job = this.#queue.dequeue();\n if (!job) {\n return false;\n }\n this.emit('active');\n job();\n if (canInitializeInterval) {\n this.#initializeIntervalIfNeeded();\n }\n return true;\n }\n }\n return false;\n }\n #initializeIntervalIfNeeded() {\n if (this.#isIntervalIgnored || this.#intervalId !== undefined) {\n return;\n }\n this.#intervalId = setInterval(() => {\n this.#onInterval();\n }, this.#interval);\n this.#intervalEnd = Date.now() + this.#interval;\n }\n #onInterval() {\n if (this.#intervalCount === 0 && this.#pending === 0 && this.#intervalId) {\n clearInterval(this.#intervalId);\n this.#intervalId = undefined;\n }\n this.#intervalCount = this.#carryoverConcurrencyCount ? this.#pending : 0;\n this.#processQueue();\n }\n /**\n Executes all queued functions until it reaches the limit.\n */\n #processQueue() {\n // eslint-disable-next-line no-empty\n while (this.#tryToStartAnother()) { }\n }\n get concurrency() {\n return this.#concurrency;\n }\n set concurrency(newConcurrency) {\n if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n }\n this.#concurrency = newConcurrency;\n this.#processQueue();\n }\n async #throwOnAbort(signal) {\n return new Promise((_resolve, reject) => {\n signal.addEventListener('abort', () => {\n reject(signal.reason);\n }, { once: true });\n });\n }\n async add(function_, options = {}) {\n options = {\n timeout: this.timeout,\n throwOnTimeout: this.#throwOnTimeout,\n ...options,\n };\n return new Promise((resolve, reject) => {\n this.#queue.enqueue(async () => {\n this.#pending++;\n this.#intervalCount++;\n try {\n options.signal?.throwIfAborted();\n let operation = function_({ signal: options.signal });\n if (options.timeout) {\n operation = pTimeout(Promise.resolve(operation), { milliseconds: options.timeout });\n }\n if (options.signal) {\n operation = Promise.race([operation, this.#throwOnAbort(options.signal)]);\n }\n const result = await operation;\n resolve(result);\n this.emit('completed', result);\n }\n catch (error) {\n if (error instanceof TimeoutError && !options.throwOnTimeout) {\n resolve();\n return;\n }\n reject(error);\n this.emit('error', error);\n }\n finally {\n this.#next();\n }\n }, options);\n this.emit('add');\n this.#tryToStartAnother();\n });\n }\n async addAll(functions, options) {\n return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n }\n /**\n Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n */\n start() {\n if (!this.#isPaused) {\n return this;\n }\n this.#isPaused = false;\n this.#processQueue();\n return this;\n }\n /**\n Put queue execution on hold.\n */\n pause() {\n this.#isPaused = true;\n }\n /**\n Clear the queue.\n */\n clear() {\n this.#queue = new this.#queueClass();\n }\n /**\n Can be called multiple times. Useful if you for example add additional items at a later time.\n\n @returns A promise that settles when the queue becomes empty.\n */\n async onEmpty() {\n // Instantly resolve if the queue is empty\n if (this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('empty');\n }\n /**\n @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n */\n async onSizeLessThan(limit) {\n // Instantly resolve if the queue is empty.\n if (this.#queue.size < limit) {\n return;\n }\n await this.#onEvent('next', () => this.#queue.size < limit);\n }\n /**\n The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n */\n async onIdle() {\n // Instantly resolve if none pending and if nothing else is queued\n if (this.#pending === 0 && this.#queue.size === 0) {\n return;\n }\n await this.#onEvent('idle');\n }\n async #onEvent(event, filter) {\n return new Promise(resolve => {\n const listener = () => {\n if (filter && !filter()) {\n return;\n }\n this.off(event, listener);\n resolve();\n };\n this.on(event, listener);\n });\n }\n /**\n Size of the queue, the number of queued items waiting to run.\n */\n get size() {\n return this.#queue.size;\n }\n /**\n Size of the queue, filtered by the given options.\n\n For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n */\n sizeBy(options) {\n // eslint-disable-next-line unicorn/no-array-callback-reference\n return this.#queue.filter(options).length;\n }\n /**\n Number of running items (no longer in the queue).\n */\n get pending() {\n return this.#pending;\n }\n /**\n Whether the queue is currently paused.\n */\n get isPaused() {\n return this.#isPaused;\n }\n}\n","import EventEmitter from './index.js'\n\nexport { EventEmitter }\nexport default EventEmitter\n","export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined\n\t? new AbortError(errorMessage)\n\t: new DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined\n\t\t? getDOMException('This operation was aborted.')\n\t\t: signal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, options) {\n\tconst {\n\t\tmilliseconds,\n\t\tfallback,\n\t\tmessage,\n\t\tcustomTimers = {setTimeout, clearTimeout},\n\t} = options;\n\n\tlet timer;\n\n\tconst wrappedPromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tpromise.then(resolve, reject);\n\t\t\treturn;\n\t\t}\n\n\t\t// We create the error outside of `setTimeout` to preserve the stack trace.\n\t\tconst timeoutError = new TimeoutError();\n\n\t\ttimer = customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (fallback) {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\tif (message === false) {\n\t\t\t\tresolve();\n\t\t\t} else if (message instanceof Error) {\n\t\t\t\treject(message);\n\t\t\t} else {\n\t\t\t\ttimeoutError.message = message ?? `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\t\treject(timeoutError);\n\t\t\t}\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t})();\n\t});\n\n\tconst cancelablePromise = wrappedPromise.finally(() => {\n\t\tcancelablePromise.clear();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tcustomTimers.clearTimeout.call(undefined, timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n","import lowerBound from './lower-bound.js';\nexport default class PriorityQueue {\n #queue = [];\n enqueue(run, options) {\n options = {\n priority: 0,\n ...options,\n };\n const element = {\n priority: options.priority,\n run,\n };\n if (this.size && this.#queue[this.size - 1].priority >= options.priority) {\n this.#queue.push(element);\n return;\n }\n const index = lowerBound(this.#queue, element, (a, b) => b.priority - a.priority);\n this.#queue.splice(index, 0, element);\n }\n dequeue() {\n const item = this.#queue.shift();\n return item?.run;\n }\n filter(options) {\n return this.#queue.filter((element) => element.priority === options.priority).map((element) => element.run);\n }\n get size() {\n return this.#queue.length;\n }\n}\n","// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n let first = 0;\n let count = array.length;\n while (count > 0) {\n const step = Math.trunc(count / 2);\n let it = first + step;\n if (comparator(array[it], value) <= 0) {\n first = ++it;\n count -= step + 1;\n }\n else {\n count = step;\n }\n }\n return first;\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -10,7 +10,7 @@ var _chunkIPZQXBA2cjs = require('./chunk-IPZQXBA2.cjs');
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _chunk5IGANEGEcjs = require('./chunk-5IGANEGE.cjs');
|
|
14
14
|
require('./chunk-A6PCLWEY.cjs');
|
|
15
15
|
require('./chunk-5E2I6KH4.cjs');
|
|
16
16
|
|
|
@@ -194,7 +194,7 @@ var PluginManager = (_class = class {
|
|
|
194
194
|
this.config = config;
|
|
195
195
|
this.options = options;
|
|
196
196
|
this.logger = options.logger;
|
|
197
|
-
this.fileManager = new (0,
|
|
197
|
+
this.fileManager = new (0, _chunk5IGANEGEcjs.FileManager)();
|
|
198
198
|
this.#promiseManager = new PromiseManager({
|
|
199
199
|
nullCheck: (state) => !!_optionalChain([state, 'optionalAccess', _8 => _8.result])
|
|
200
200
|
});
|
|
@@ -610,7 +610,7 @@ Falling back on the first item.
|
|
|
610
610
|
}
|
|
611
611
|
#parse(plugin, pluginManager, context) {
|
|
612
612
|
const usedPluginNames = pluginManager.#usedPluginNames;
|
|
613
|
-
|
|
613
|
+
_chunk5IGANEGEcjs.setUniqueName.call(void 0, plugin.name, usedPluginNames);
|
|
614
614
|
const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean);
|
|
615
615
|
if (plugin.context && typeof plugin.context === "function") {
|
|
616
616
|
return {
|
|
@@ -659,7 +659,7 @@ function isInputPath(result) {
|
|
|
659
659
|
async function setup(options) {
|
|
660
660
|
const { config, logger = _chunkIPZQXBA2cjs.createLogger.call(void 0, ) } = options;
|
|
661
661
|
try {
|
|
662
|
-
if (isInputPath(config) && !new (0,
|
|
662
|
+
if (isInputPath(config) && !new (0, _chunk5IGANEGEcjs.URLPath)(config.input.path).isURL) {
|
|
663
663
|
await _fs.read.call(void 0, config.input.path);
|
|
664
664
|
}
|
|
665
665
|
} catch (e) {
|
|
@@ -694,14 +694,14 @@ async function safeBuild(options) {
|
|
|
694
694
|
const root = _path.resolve.call(void 0, options.config.root);
|
|
695
695
|
const rootPath = _path.resolve.call(void 0, root, options.config.output.path, "index.ts");
|
|
696
696
|
const barrelFiles = pluginManager.fileManager.files.filter((file) => {
|
|
697
|
-
return file.sources.some((source) => source.
|
|
697
|
+
return file.sources.some((source) => source.isIndexable);
|
|
698
698
|
});
|
|
699
699
|
const rootFile = {
|
|
700
700
|
path: rootPath,
|
|
701
701
|
baseName: "index.ts",
|
|
702
702
|
exports: barrelFiles.flatMap((file) => {
|
|
703
703
|
return _optionalChain([file, 'access', _28 => _28.sources, 'optionalAccess', _29 => _29.map, 'call', _30 => _30((source) => {
|
|
704
|
-
if (!file.path || !source.
|
|
704
|
+
if (!file.path || !source.isIndexable) {
|
|
705
705
|
return void 0;
|
|
706
706
|
}
|
|
707
707
|
const plugin = pluginManager.plugins.find((item) => {
|
|
@@ -711,11 +711,11 @@ async function safeBuild(options) {
|
|
|
711
711
|
if (_optionalChain([plugin, 'optionalAccess', _33 => _33.output, 'optionalAccess', _34 => _34.exportType]) === false) {
|
|
712
712
|
return void 0;
|
|
713
713
|
}
|
|
714
|
-
if (
|
|
714
|
+
if (_chunk5IGANEGEcjs.FileManager.getMode(_optionalChain([plugin, 'optionalAccess', _35 => _35.output, 'optionalAccess', _36 => _36.path])) === "single") {
|
|
715
715
|
return void 0;
|
|
716
716
|
}
|
|
717
717
|
return {
|
|
718
|
-
name: [source.name],
|
|
718
|
+
name: options.config.output.exportType === "barrel" ? void 0 : [source.name],
|
|
719
719
|
path: _fs.getRelativePath.call(void 0, rootPath, file.path),
|
|
720
720
|
isTypeOnly: source.isTypeOnly
|
|
721
721
|
};
|
|
@@ -727,7 +727,7 @@ async function safeBuild(options) {
|
|
|
727
727
|
if (options.config.output.exportType) {
|
|
728
728
|
await pluginManager.fileManager.add(rootFile);
|
|
729
729
|
}
|
|
730
|
-
files = await
|
|
730
|
+
files = await _chunk5IGANEGEcjs.processFiles.call(void 0, {
|
|
731
731
|
config: options.config,
|
|
732
732
|
dryRun: !options.config.output.write,
|
|
733
733
|
files: pluginManager.fileManager.files,
|
|
@@ -748,9 +748,9 @@ async function safeBuild(options) {
|
|
|
748
748
|
};
|
|
749
749
|
}
|
|
750
750
|
|
|
751
|
-
// src/
|
|
751
|
+
// src/BaseGenerator.ts
|
|
752
752
|
_chunkSEH6NUCXcjs.init_cjs_shims.call(void 0, );
|
|
753
|
-
var
|
|
753
|
+
var BaseGenerator = class {
|
|
754
754
|
#options = {};
|
|
755
755
|
#context = {};
|
|
756
756
|
constructor(options, context) {
|
|
@@ -1212,5 +1212,5 @@ var PackageManager = class _PackageManager {
|
|
|
1212
1212
|
|
|
1213
1213
|
|
|
1214
1214
|
|
|
1215
|
-
exports.
|
|
1215
|
+
exports.BaseGenerator = BaseGenerator; exports.FileManager = _chunk5IGANEGEcjs.FileManager; exports.PackageManager = PackageManager; exports.PluginManager = PluginManager; exports.PromiseManager = PromiseManager; exports.build = build; exports.createPlugin = createPlugin; exports.default = build; exports.defineConfig = defineConfig; exports.isInputPath = isInputPath; exports.safeBuild = safeBuild;
|
|
1216
1216
|
//# sourceMappingURL=index.cjs.map
|