@kubb/core 2.0.0-beta.10 → 2.0.0-beta.11
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/Queue-2-6pMcCx.d.cts +32 -0
- package/dist/Queue-2-6pMcCx.d.ts +32 -0
- package/dist/fs.cjs +2383 -0
- package/dist/fs.cjs.map +1 -0
- package/dist/fs.d.cts +5 -0
- package/dist/fs.d.ts +5 -0
- package/dist/fs.js +2380 -0
- package/dist/fs.js.map +1 -0
- package/dist/index.cjs +3168 -166
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -69
- package/dist/index.d.ts +19 -69
- package/dist/index.js +3494 -209
- package/dist/index.js.map +1 -1
- package/dist/logger.cjs +90 -0
- package/dist/logger.cjs.map +1 -0
- package/dist/logger.d.cts +32 -0
- package/dist/logger.d.ts +32 -0
- package/dist/logger.js +78 -0
- package/dist/logger.js.map +1 -0
- package/dist/utils.cjs +10 -763
- package/dist/utils.cjs.map +1 -1
- package/dist/utils.d.cts +3 -595
- package/dist/utils.d.ts +3 -595
- package/dist/utils.js +11 -724
- package/dist/utils.js.map +1 -1
- package/dist/write-46ytbnu9.d.cts +7 -0
- package/dist/write-46ytbnu9.d.ts +7 -0
- package/package.json +18 -8
- package/src/FileManager.ts +34 -62
- package/src/PluginManager.ts +20 -15
- package/src/build.ts +4 -5
- package/src/fs/index.ts +3 -0
- package/src/index.ts +4 -4
- package/src/{utils/logger.ts → logger.ts} +37 -0
- package/src/types.ts +1 -1
- package/src/utils/index.ts +10 -18
- package/src/utils/randomColour.ts +0 -39
- package/src/utils/throttle.ts +0 -30
- /package/src/{utils → fs}/clean.ts +0 -0
- /package/src/{utils → fs}/read.ts +0 -0
- /package/src/{utils → fs}/write.ts +0 -0
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/cache.ts","../src/utils/clean.ts","../src/utils/FunctionParams.ts","../src/transformers/casing.ts","../src/transformers/combineCodes.ts","../src/transformers/createJSDocBlockText.ts","../src/transformers/escape.ts","../src/transformers/indent.ts","../src/transformers/nameSorter.ts","../src/transformers/searchAndReplace.ts","../src/transformers/transformReservedWord.ts","../src/transformers/trim.ts","../src/transformers/index.ts","../src/utils/logger.ts","../src/utils/promise.ts","../src/utils/Queue.ts","../src/utils/EventEmitter.ts","../src/utils/randomColour.ts","../src/utils/read.ts","../src/utils/renderTemplate.ts","../src/utils/throttle.ts","../src/utils/timeout.ts","../src/utils/TreeNode.ts","../src/FileManager.ts","../src/utils/write.ts","../src/BarrelManager.ts","../src/utils/uniqueName.ts","../src/utils/URLPath.ts"],"names":["path","default","resolve","pc","timeout","crypto","extname","orderBy","fs","switcher","treeNode","KubbFile","_queue","name"],"mappings":"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","sourcesContent":["import type { PluginCache } from '../types.ts'\n\nexport interface Cache<TStore extends object = object> {\n delete(id: keyof TStore): boolean\n get(id: keyof TStore): TStore[keyof TStore] | null\n has(id: keyof TStore): boolean\n set(id: keyof TStore, value: unknown): void\n}\n\nexport function createPluginCache<TStore extends PluginCache>(Store: TStore = Object.create(null) as TStore): Cache<TStore> {\n return {\n set(id, value): void {\n Store[id] = [0, value] as TStore[keyof TStore]\n },\n get(id): TStore[keyof TStore] | null {\n const item = Store[id]\n if (!item) {\n return null\n }\n item[0] = 0\n return item[1] as TStore[keyof TStore]\n },\n has(id): boolean {\n const item = Store[id]\n if (!item) {\n return false\n }\n item[0] = 0\n return true\n },\n delete(id: keyof TStore): boolean {\n return delete Store[id]\n },\n }\n}\n","import { remove } from 'fs-extra'\n\nexport async function clean(path: string): Promise<void> {\n return remove(path)\n}\n","import { orderBy } from 'natural-orderby'\n\nimport transformers from '../transformers/index.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\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\nexport class FunctionParams {\n public type?: 'generics' | 'typed'\n public items: FunctionParamsAST[] = []\n constructor(type?: 'generics' | 'typed') {\n this.type = type\n\n return this\n }\n\n add(item: FunctionParamsAST | Array<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\n toString(): string {\n const sortedData = orderBy(this.items.filter(Boolean), [(v) => !v.default, (v) => v.required ?? true], ['desc', 'desc'])\n\n return sortedData\n .filter(({ enabled = true }) => enabled)\n .reduce((acc, { name, type, required = true, ...rest }) => {\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 : transformers.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 }, [] as string[])\n .join(', ')\n }\n}\n","import { camelCase as changeCaseCamel, camelCaseTransformMerge, pascalCase as changePascalCase, pascalCaseTransformMerge } from 'change-case'\n\nexport function camelCase(text: string): string {\n return changeCaseCamel(text, { delimiter: '', stripRegexp: /[^A-Z0-9$]/gi, transform: camelCaseTransformMerge })\n}\n\nexport function pascalCase(text: string): string {\n return changePascalCase(text, { delimiter: '', stripRegexp: /[^A-Z0-9$]/gi, transform: pascalCaseTransformMerge })\n}\n","export function combineCodes(codes: string[]): string {\n return codes.join('\\n')\n}\n","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n return `/**\\n * ${filteredComments.join('\\n * ')}\\n */`\n}\n","export function escape(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n\n/**\n * Escape all characters not included in SingleStringCharacters and DoubleStringCharacters on\n * @link http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n * @link https://github.com/joliss/js-string-escape/blob/master/index.js\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function jsStringEscape(input: any): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return '\\\\' + character\n // Four possible LineTerminator characters need to be escaped:\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n","export function createIndent(size: number): string {\n return Array.from({ length: size + 1 }).join(' ')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T): 0 | 1 | -1 {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n","type Options = {\n text: string\n replaceBy: string\n prefix?: string\n key: string\n searchValues?: (prefix: string, key: string) => Array<RegExp | string>\n}\n\nexport function searchAndReplace(options: Options): string {\n const { text, replaceBy, prefix = '', key } = options\n\n const searchValues = options.searchValues?.(prefix, key) || [\n `${prefix}[\"${key}\"]`,\n `${prefix}['${key}']`,\n `${prefix}[\\`${key}\\`]`,\n `${prefix}\"${key}\"`,\n `${prefix}'${key}'`,\n `${prefix}\\`${key}\\``,\n new RegExp(`${prefix}${key}`, 'g'),\n ]\n\n return searchValues.reduce((prev, searchValue) => {\n return prev.toString().replaceAll(searchValue, replaceBy)\n }, text) as string\n}\n","/**\n * @link https://github.com/jonschlinkert/reserved/blob/master/index.js\n */\nconst reservedWords = [\n 'abstract',\n 'arguments',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'eval',\n 'export',\n 'extends',\n 'false',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'function',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'int',\n 'interface',\n 'let',\n 'long',\n 'native',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'volatile',\n 'while',\n 'with',\n 'yield',\n\n 'Array',\n 'Date',\n 'eval',\n 'function',\n 'hasOwnProperty',\n 'Infinity',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'length',\n 'Math',\n 'name',\n 'NaN',\n 'Number',\n 'Object',\n 'prototype',\n 'String',\n 'toString',\n 'undefined',\n 'valueOf',\n]\n\nexport function transformReservedWord(word: string): string {\n if ((word && reservedWords.includes(word)) || word?.match(/^\\d/)) {\n return `_${word}`\n }\n\n return word\n}\n","export function trim(text: string): string {\n return text.replaceAll(/\\n/g, '').trim()\n}\n\nexport function trimExtName(text: string): string {\n return text.replace(/\\.[^/.]+$/, '')\n}\n","import { camelCase, pascalCase } from './casing.ts'\nimport { combineCodes } from './combineCodes.ts'\nimport { createJSDocBlockText } from './createJSDocBlockText.ts'\nimport { escape, jsStringEscape } from './escape.ts'\nimport { createIndent } from './indent.ts'\nimport { nameSorter } from './nameSorter.ts'\nimport { searchAndReplace } from './searchAndReplace.ts'\nimport { transformReservedWord } from './transformReservedWord.ts'\nimport { trim, trimExtName } from './trim.ts'\n\nexport { camelCase, pascalCase } from './casing.ts'\nexport { combineCodes } from './combineCodes.ts'\nexport { createJSDocBlockText } from './createJSDocBlockText.ts'\nexport { escape, jsStringEscape } from './escape.ts'\nexport { createIndent } from './indent.ts'\nexport { nameSorter } from './nameSorter.ts'\nexport { searchAndReplace } from './searchAndReplace.ts'\nexport { transformReservedWord } from './transformReservedWord.ts'\nexport { trim, trimExtName } from './trim.ts'\n\nexport default {\n combineCodes,\n escape,\n jsStringEscape,\n createIndent,\n transformReservedWord,\n nameSorter,\n searchAndReplace,\n trim,\n trimExtName,\n JSDoc: {\n createJSDocBlockText,\n },\n camelCase,\n pascalCase,\n} as const\n","import pc from 'picocolors'\n\nimport type { Ora } from 'ora'\n\nexport const LogLevel = {\n silent: 'silent',\n info: 'info',\n debug: 'debug',\n} as const\n\nexport type LogLevel = keyof typeof LogLevel\n\nexport type Logger = {\n /**\n * Optional config name to show in CLI output\n */\n name?: string\n logLevel: LogLevel\n log: (message: string | null) => void\n error: (message: string | null) => void\n info: (message: string | null) => void\n warn: (message: string | null) => void\n spinner?: Ora\n logs: string[]\n}\n\ntype Props = {\n name?: string\n logLevel: LogLevel\n spinner?: Ora\n}\n\nexport function createLogger({ logLevel, name, spinner }: Props): Logger {\n const logs: string[] = []\n const log: Logger['log'] = (message) => {\n if (message && spinner) {\n spinner.text = message\n logs.push(message)\n }\n }\n\n const error: Logger['error'] = (message) => {\n if (message) {\n throw new Error(message || 'Something went wrong')\n }\n }\n\n const warn: Logger['warn'] = (message) => {\n if (message && spinner) {\n spinner.warn(pc.yellow(message))\n logs.push(message)\n }\n }\n\n const info: Logger['warn'] = (message) => {\n if (message && spinner && logLevel !== LogLevel.silent) {\n spinner.info(message)\n logs.push(message)\n }\n }\n\n const logger: Logger = {\n name,\n logLevel,\n log,\n error,\n warn,\n info,\n spinner,\n logs,\n }\n\n return logger\n}\n\nexport { default as pc } from 'picocolors'\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","import crypto from 'node:crypto'\nimport { performance } from 'node:perf_hooks'\n\nimport { EventEmitter } from './EventEmitter.ts'\n\nexport type QueueJob<T = unknown> = {\n (...args: unknown[]): Promise<T | void>\n}\n\ntype RunOptions = {\n controller?: AbortController\n name?: string\n description?: string\n}\n\ntype QueueItem = {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n job: QueueJob<unknown>\n} & Required<RunOptions>\n\ntype Events = {\n jobDone: [result: unknown]\n jobFailed: [error: Error]\n}\n\nexport class Queue {\n #queue: QueueItem[] = []\n readonly eventEmitter: EventEmitter<Events> = new EventEmitter()\n\n #workerCount = 0\n\n #maxParallel: number\n #debug = false\n\n constructor(maxParallel: number, debug = false) {\n this.#maxParallel = maxParallel\n this.#debug = debug\n }\n\n run<T>(job: QueueJob<T>, options: RunOptions = { controller: new AbortController(), name: crypto.randomUUID(), description: '' }): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item = { reject, resolve, job, name: options.name, description: options.description || options.name } as QueueItem\n\n options.controller?.signal.addEventListener('abort', () => {\n this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name)\n\n reject('Aborted')\n })\n\n this.#queue.push(item)\n this.#work()\n })\n }\n\n runSync<T>(job: QueueJob<T>, options: RunOptions = { controller: new AbortController(), name: crypto.randomUUID(), description: '' }): void {\n new Promise<T>((resolve, reject) => {\n const item = { reject, resolve, job, name: options.name, description: options.description || options.name } as QueueItem\n\n options.controller?.signal.addEventListener('abort', () => {\n this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name)\n })\n\n this.#queue.push(item)\n this.#work()\n })\n }\n\n get hasJobs(): boolean {\n return this.#workerCount > 0 || this.#queue.length > 0\n }\n\n get count(): number {\n return this.#workerCount\n }\n\n #work(): void {\n if (this.#workerCount >= this.#maxParallel) {\n return\n }\n\n this.#workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.#queue.shift())) {\n const { reject, resolve, job, name, description } = entry\n\n if (this.#debug) {\n performance.mark(name + '_start')\n }\n\n job()\n .then((result) => {\n this.eventEmitter.emit('jobDone', result)\n\n resolve(result)\n\n if (this.#debug) {\n performance.mark(name + '_stop')\n performance.measure(description, name + '_start', name + '_stop')\n }\n })\n .catch((err) => {\n this.eventEmitter.emit('jobFailed', err as Error)\n reject(err)\n })\n }\n this.#workerCount--\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class EventEmitter<TEvents extends Record<string, any>> {\n constructor() {\n this.#emitter.setMaxListeners(100)\n }\n #emitter = new NodeEventEmitter()\n\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArg: TEvents[TEventName]): void {\n this.#emitter.emit(eventName, ...(eventArg as []))\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\n}\n","import pc from 'picocolors'\nimport seedrandom from 'seedrandom'\n\nimport type { Formatter } from 'picocolors/types.ts'\n\nconst defaultColours = ['black', 'blue', 'darkBlue', 'cyan', 'gray', 'green', 'darkGreen', 'magenta', 'red', 'darkRed', 'yellow', 'darkYellow'] as const\n\nexport function randomColour(text?: string, colours = defaultColours): string {\n if (!text) {\n return 'white'\n }\n\n const random = seedrandom(text)\n const colour = colours.at(Math.floor(random() * colours.length)) || 'white'\n\n return colour\n}\n\nexport function randomPicoColour(text?: string, colors = defaultColours): string {\n const colours = pc.createColors(true)\n\n if (!text) {\n return colours.white(text)\n }\n\n const colour = randomColour(text, colors)\n const isDark = colour.includes('dark')\n const key = colour.replace('dark', '').toLowerCase() as keyof typeof colours\n const formatter: Formatter = colours[key] as Formatter\n\n if (isDark) {\n return pc.bold(formatter(text))\n }\n\n if (typeof formatter !== 'function') {\n throw new Error('Formatter for picoColor is not of type function/Formatter')\n }\n return formatter(text)\n}\n","import { basename, extname, relative } from 'node:path'\n\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nfunction slash(path: string, platform: 'windows' | 'mac' | 'linux' = 'linux') {\n const isWindowsPath = /^\\\\\\\\\\?\\\\/.test(path)\n\n if (['linux', 'mac'].includes(platform) && !isWindowsPath) {\n // linux and mac\n return path.replaceAll(/\\\\/g, '/').replace('../', '').trimEnd()\n }\n\n // windows\n return path.replaceAll(/\\\\/g, '/').replace('../', '').trimEnd()\n}\n\nexport function getRelativePath(rootDir?: string | null, filePath?: string | null, platform: 'windows' | 'mac' | 'linux' = 'linux'): string {\n if (!rootDir || !filePath) {\n throw new Error(`Root and file should be filled in when retrieving the relativePath, ${rootDir || ''} ${filePath || ''}`)\n }\n\n const relativePath = relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const slashedPath = slash(relativePath, platform)\n\n if (slashedPath.startsWith('../')) {\n return slashedPath.replace(basename(slashedPath), basename(slashedPath, extname(filePath)))\n }\n\n return `./${slashedPath.replace(basename(slashedPath), basename(slashedPath, extname(filePath)))}`\n}\n\nconst reader = switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n)\n\nconst syncReader = switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n)\n\nexport async function read(path: string): Promise<string> {\n return reader(path)\n}\n\nexport function readSync(path: string): string {\n return syncReader(path)\n}\n","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 const throttle = <R, A extends any[]>(fn: (...args: A) => R, delay: number): [(...args: A) => R | undefined, () => void] => {\n let wait = false\n let timeout: NodeJS.Timeout\n let cancelled = false\n\n return [\n (...args: A) => {\n if (cancelled) {\n return undefined\n }\n if (wait) {\n return undefined\n }\n\n const val = fn(...args)\n\n wait = true\n\n timeout = setTimeout(() => {\n wait = false\n }, delay)\n\n return val\n },\n () => {\n cancelled = true\n clearTimeout(timeout)\n },\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","import dirTree from 'directory-tree'\n\nimport { FileManager } from '../FileManager.ts'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from '../FileManager.ts'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\ntype BarrelData = { type: KubbFile.Mode; path: KubbFile.Path; name: string }\n\nexport class TreeNode<T = BarrelData> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\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?: T): TreeNode<T> | 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<T> | 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(): TreeNode<T>[] {\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<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n // eslint-disable-next-line prefer-spread\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n return leaves\n }\n\n get root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => 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 public static build(path: string, options: TreeNodeOptions = {}): TreeNode | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude].filter(Boolean)\n const filteredTree = dirTree(path, { extensions: options.extensions, exclude: [/node_modules/, ...exclude] })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({ name: filteredTree.name, path: filteredTree.path, type: filteredTree.type || FileManager.getMode(filteredTree.path) })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({ name: item.name, path: item.path, type: item.type || FileManager.getMode(item.path) })\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 index files with the TreehNode class', { cause: e })\n }\n }\n}\n","/* eslint-disable @typescript-eslint/no-namespace */\nimport crypto from 'node:crypto'\nimport { extname, resolve } from 'node:path'\n\nimport { print } from '@kubb/parser'\nimport * as factory from '@kubb/parser/factory'\n\nimport isEqual from 'lodash.isequal'\nimport { orderBy } from 'natural-orderby'\n\nimport transformers from './transformers/index.ts'\nimport { getRelativePath, read } from './utils/read.ts'\nimport { timeout } from './utils/timeout.ts'\nimport { write } from './utils/write.ts'\nimport { BarrelManager } from './BarrelManager.ts'\n\nimport type { GreaterThan } from '@kubb/types'\nimport type { BarrelManagerOptions } from './BarrelManager.ts'\nimport type { KubbPlugin } from './types.ts'\nimport type { Queue, QueueJob } from './utils/Queue.ts'\n\ntype BasePath<T extends string = string> = `${T}/`\n\nexport namespace KubbFile {\n export type Import = {\n /**\n * Import name to be used\n * @example [\"useState\"]\n * @example \"React\"\n */\n name:\n | string\n | Array<\n string | {\n propertyName: string\n name?: string\n }\n >\n /**\n * Path for the import\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the import, this will result in: `import type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Add `* as` prefix to the import, this will result in: `import * as path from './path'`.\n */\n isNameSpace?: boolean\n /**\n * When root is set it will get the path with relative getRelativePath(root, path).\n */\n root?: string\n }\n\n export type Export = {\n /**\n * Export name to be used.\n * @example [\"useState\"]\n * @example \"React\"\n */\n name?: string | Array<string>\n /**\n * Path for the import.\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the export, this will result in: `export type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Make it possible to override the name, this will result in: `export * as aliasName from './path'`.\n */\n asAlias?: boolean\n }\n\n export declare const dataTagSymbol: unique symbol\n export type DataTag<Type, Value> = Type & {\n [dataTagSymbol]: Value\n }\n\n export type UUID = string\n export type Source = string\n\n export type Extname = '.ts' | '.js' | '.tsx' | '.json' | `.${string}`\n\n export type Mode = 'file' | 'directory'\n\n /**\n * Name to be used to dynamicly create the baseName(based on input.path)\n * Based on UNIX basename\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n export type BaseName = `${string}${Extname}`\n\n /**\n * Path will be full qualified path to a specified file\n */\n export type Path = string\n\n export type AdvancedPath<T extends BaseName = BaseName> = `${BasePath}${T}`\n\n export type OptionalPath = Path | undefined | null\n\n export type FileMetaBase = {\n pluginKey?: KubbPlugin['key']\n }\n\n export type File<\n TMeta extends FileMetaBase = FileMetaBase,\n TBaseName extends BaseName = BaseName,\n > = {\n /**\n * Unique identifier to reuse later\n * @default crypto.randomUUID()\n */\n id?: string\n /**\n * Name to be used to create the path\n * Based on UNIX basename, `${name}.extName`\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n baseName: TBaseName\n /**\n * Path will be full qualified path to a specified file\n */\n path: AdvancedPath<TBaseName> | Path\n source: Source\n imports?: Import[]\n exports?: Export[]\n /**\n * This will call fileManager.add instead of fileManager.addOrAppend, adding the source when the files already exists\n * This will also ignore the combinefiles utils\n * @default `false`\n */\n override?: boolean\n /**\n * Use extra meta, this is getting used to generate the barrel/index files.\n */\n meta?: TMeta\n /**\n * This will override `process.env[key]` inside the `source`, see `getFileSource`.\n */\n env?: NodeJS.ProcessEnv\n }\n\n export type ResolvedFile<\n TMeta extends FileMetaBase = FileMetaBase,\n TBaseName extends BaseName = BaseName,\n > = KubbFile.File<TMeta, TBaseName> & {\n /**\n * @default crypto.randomUUID()\n */\n id: UUID\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n\n name: string\n }\n}\n\ntype CacheItem = KubbFile.ResolvedFile & {\n cancel?: () => void\n}\n\ntype AddResult<T extends Array<KubbFile.File>> = Promise<\n Awaited<GreaterThan<T['length'], 1> extends true ? Promise<KubbFile.ResolvedFile[]> : Promise<KubbFile.ResolvedFile>>\n>\n\ntype AddIndexesProps = {\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 exportAs?: string\n extName?: KubbFile.Extname\n exportType?: 'barrel' | false\n }\n options?: BarrelManagerOptions\n meta?: KubbFile.File['meta']\n}\n\ntype Options = {\n queue?: Queue\n task?: QueueJob<KubbFile.ResolvedFile>\n /**\n * Timeout between writes\n */\n timeout?: number\n}\n\nexport class FileManager {\n #cache: Map<KubbFile.Path, CacheItem[]> = new Map()\n\n #task?: QueueJob<KubbFile.ResolvedFile>\n #isWriting = false\n /**\n * Timeout between writes\n */\n #timeout: number = 0\n #queue?: Queue\n\n constructor(options?: Options) {\n if (options) {\n this.#task = options.task\n this.#queue = options.queue\n this.#timeout = options.timeout || 0\n }\n\n return this\n }\n\n get files(): Array<KubbFile.File> {\n const files: Array<KubbFile.File> = []\n this.#cache.forEach((item) => {\n files.push(...item.flat(1))\n })\n\n return files\n }\n get isExecuting(): boolean {\n return this.#queue?.hasJobs ?? this.#isWriting ?? false\n }\n\n #validate(file: KubbFile.File): void {\n if (!file.path.toLowerCase().endsWith(file.baseName.toLowerCase())) {\n throw new Error(`${file.path} should end with the baseName ${file.baseName}`)\n }\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(\n ...files: T\n ): AddResult<T> {\n const promises = files.map((file) => {\n // this.#validate(file)\n\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<KubbFile.ResolvedFile> {\n const controller = new AbortController()\n const resolvedFile: KubbFile.ResolvedFile = { id: crypto.randomUUID(), name: transformers.trimExtName(file.baseName), ...file }\n\n this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }])\n\n if (this.#queue) {\n await this.#queue.run(\n async () => {\n return this.#task?.(resolvedFile)\n },\n { controller },\n )\n }\n\n return resolvedFile\n }\n\n async #addOrAppend(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const previousCaches = this.#cache.get(file.path)\n const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : undefined\n\n if (previousCache) {\n this.#cache.delete(previousCache.path)\n\n return this.#add({\n ...file,\n source: previousCache.source && file.source ? `${previousCache.source}\\n${file.source}` : '',\n imports: [...(previousCache.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.exports || []), ...(file.exports || [])],\n env: { ...(previousCache.env || {}), ...(file.env || {}) },\n })\n }\n return this.#add(file)\n }\n\n async addIndexes({ root, output, meta, options = {} }: AddIndexesProps): Promise<Array<KubbFile.File> | undefined> {\n const { exportType = 'barrel' } = output\n\n if (!exportType) {\n return undefined\n }\n\n const exportPath = output.path.startsWith('./') ? output.path : `./${output.path}`\n const barrelManager = new BarrelManager({ extName: output.extName, ...options })\n const files = barrelManager.getIndexes(resolve(root, output.path))\n\n if (!files) {\n return undefined\n }\n\n const rootFile: KubbFile.File = {\n path: resolve(root, 'index.ts'),\n baseName: 'index.ts',\n source: '',\n exports: [\n output.exportAs\n ? {\n name: output.exportAs,\n asAlias: true,\n path: exportPath,\n isTypeOnly: options.isTypeOnly,\n }\n : {\n path: exportPath,\n isTypeOnly: options.isTypeOnly,\n },\n ],\n }\n\n await this.#addOrAppend({\n ...rootFile,\n meta: meta ? meta : rootFile.meta,\n })\n\n return await Promise.all(\n files.map((file) => {\n return this.#addOrAppend({\n ...file,\n meta: meta ? meta : file.meta,\n })\n }),\n )\n }\n\n getCacheByUUID(UUID: KubbFile.UUID): KubbFile.File | undefined {\n let cache: KubbFile.File | undefined\n\n this.#cache.forEach((files) => {\n cache = files.find((item) => item.id === UUID)\n })\n return cache\n }\n\n get(path: KubbFile.Path): Array<KubbFile.File> | undefined {\n return this.#cache.get(path)\n }\n\n remove(path: KubbFile.Path): void {\n const cacheItem = this.get(path)\n if (!cacheItem) {\n return\n }\n\n this.#cache.delete(path)\n }\n\n async write(...params: Parameters<typeof write>): Promise<string | undefined> {\n if (!this.#isWriting) {\n this.#isWriting = true\n\n const text = await write(...params)\n\n this.#isWriting = false\n return text\n }\n\n await timeout(this.#timeout)\n\n return this.write(...params)\n }\n\n async read(...params: Parameters<typeof read>): Promise<string> {\n return read(...params)\n }\n\n // statics\n\n static getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {\n if (!FileManager.isExtensionAllowed(file.baseName)) {\n return file.source\n }\n\n const exports = file.exports ? combineExports(file.exports) : []\n const imports = file.imports ? combineImports(file.imports, exports, file.source) : []\n\n const importNodes = imports.filter(item => {\n // isImportNotNeeded\n // trim extName\n return item.path !== transformers.trimExtName(file.path)\n }).map((item) => {\n return factory.createImportDeclaration({\n name: item.name,\n path: item.root ? getRelativePath(item.root, item.path) : item.path,\n isTypeOnly: item.isTypeOnly,\n })\n })\n const exportNodes = exports.map((item) =>\n factory.createExportDeclaration({\n name: item.name,\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n )\n\n return [print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\\n')\n }\n static combineFiles<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(files: Array<KubbFile.File<TMeta> | null>): Array<KubbFile.File<TMeta>> {\n return files.filter(Boolean).reduce((acc, file: KubbFile.File<TMeta>) => {\n const prevIndex = acc.findIndex((item) => item.path === file.path)\n\n if (prevIndex === -1) {\n return [...acc, file]\n }\n\n const prev = acc[prevIndex]\n\n if (prev && file.override) {\n acc[prevIndex] = {\n imports: [],\n exports: [],\n ...file,\n }\n return acc\n }\n\n if (prev) {\n acc[prevIndex] = {\n ...file,\n source: prev.source && file.source ? `${prev.source}\\n${file.source}` : '',\n imports: [...(prev.imports || []), ...(file.imports || [])],\n exports: [...(prev.exports || []), ...(file.exports || [])],\n env: { ...(prev.env || {}), ...(file.env || {}) },\n }\n }\n\n return acc\n }, [] as Array<KubbFile.File<TMeta>>)\n }\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'directory'\n }\n return extname(path) ? 'file' : 'directory'\n }\n\n static get extensions(): Array<KubbFile.Extname> {\n return ['.js', '.ts', '.tsx']\n }\n\n static isExtensionAllowed(baseName: string): boolean {\n return FileManager.extensions.some((extension) => baseName.endsWith(extension))\n }\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const combinedExports = orderBy(exports, [(v) => !v.isTypeOnly], ['asc']).reduce((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 && isEqual(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 && isEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\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 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 }, [] as Array<KubbFile.Export>)\n\n return orderBy(combinedExports, [(v) => !v.isTypeOnly, (v) => v.asAlias], ['desc', 'desc'])\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const combinedImports = orderBy(imports, [(v) => !v.isTypeOnly], ['asc']).reduce((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 return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\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 && isEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isEqual(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 if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\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 if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n }, [] as Array<KubbFile.Import>)\n\n return orderBy(combinedImports, [(v) => !v.isTypeOnly], ['desc'])\n}\n\nfunction getEnvSource(source: string, env: NodeJS.ProcessEnv | undefined): string {\n if (!env) {\n return source\n }\n\n const keys = Object.keys(env)\n\n if (!keys.length) {\n return source\n }\n\n return keys.reduce((prev, key: string) => {\n const environmentValue = env[key]\n const replaceBy = environmentValue ? `'${environmentValue.replaceAll('\"', '')?.replaceAll(\"'\", '')}'` : 'undefined'\n\n if (key.toUpperCase() !== key) {\n throw new TypeError(`Environment should be in upperCase for ${key}`)\n }\n\n if (typeof replaceBy === 'string') {\n prev = transformers.searchAndReplace({ text: prev.replaceAll(`process.env.${key}`, replaceBy), replaceBy, prefix: 'process.env', key })\n // removes `declare const ...`\n prev = transformers.searchAndReplace({ text: prev.replaceAll(new RegExp(`(declare const).*\\n`, 'ig'), ''), replaceBy, key })\n }\n\n return prev\n }, source)\n}\n","import { dirname, resolve } from 'node:path'\n\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\nasync function saveCreateDirectory(path: string): Promise<void> {\n // resolve the full path and get just the directory, ignoring the file and extension\n const passedPath = dirname(resolve(path))\n // make the directory, recursively. Theoretically, if every directory in the path exists, this won't do anything.\n await fs.mkdir(passedPath, { recursive: true })\n}\n\nconst writer = switcher(\n {\n node: async (path: string, data: string) => {\n try {\n await fs.stat(resolve(path))\n const oldContent = await fs.readFile(resolve(path), { encoding: 'utf-8' })\n if (oldContent?.toString() === data?.toString()) {\n return\n }\n } catch (_err) {\n /* empty */\n }\n\n await saveCreateDirectory(path)\n await fs.writeFile(resolve(path), data, { encoding: 'utf-8' })\n\n const savedData = await fs.readFile(resolve(path), { encoding: 'utf-8' })\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${data.length}]:\\n${data}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n },\n bun: async (path: string, data: string) => {\n try {\n await saveCreateDirectory(path)\n await Bun.write(resolve(path), data)\n\n const file = Bun.file(resolve(path))\n const savedData = await file.text()\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${data.length}]:\\n${data}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n } catch (e) {\n console.log(e, resolve(path))\n }\n },\n },\n 'node',\n)\n\nexport async function write(data: string, path: string): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n return writer(path, data.trim())\n}\n","import path from 'path'\n\nimport transformers from './transformers/index.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\nimport type { DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from './FileManager.ts'\nimport type { KubbPlugin } from './index.ts'\n\ntype FileMeta = {\n pluginKey?: KubbPlugin['key']\n treeNode: TreeNode\n}\n\nexport type BarrelManagerOptions = {\n treeNode?: DirectoryTreeOptions\n isTypeOnly?: boolean\n /**\n * Add .ts or .js\n */\n extName?: KubbFile.Extname\n}\n\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n getIndexes(\n pathToBuild: string,\n ): Array<KubbFile.File<FileMeta>> | null {\n const { treeNode = {}, isTypeOnly, extName } = this.#options\n const tree = TreeNode.build(pathToBuild, treeNode)\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: Array<KubbFile.File<FileMeta>>, treeNode: TreeNode) => {\n if (!treeNode.children) {\n return []\n }\n\n if (treeNode.children.length > 1) {\n const indexPath: KubbFile.Path = path.resolve(treeNode.data.path, 'index.ts')\n\n const exports: KubbFile.Export[] = treeNode.children\n .filter(Boolean)\n .map((file) => {\n const importPath: string = file.data.type === 'directory' ? `./${file.data.name}/index` : `./${transformers.trimExtName(file.data.name)}`\n\n if (importPath.endsWith('index') && file.data.type === 'file') {\n return undefined\n }\n\n return {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n meta: {\n treeNode,\n },\n })\n } else if (treeNode.children.length === 1) {\n const [treeNodeChild] = treeNode.children as [TreeNode]\n\n const indexPath = path.resolve(treeNode.data.path, 'index.ts')\n const importPath = treeNodeChild.data.type === 'directory'\n ? `./${treeNodeChild.data.name}/index`\n : `./${transformers.trimExtName(treeNodeChild.data.name)}`\n\n const exports = [\n {\n path: extName\n ? `${importPath}${extName}`\n : importPath,\n isTypeOnly,\n },\n ]\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n meta: {\n treeNode,\n },\n })\n }\n\n treeNode.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n return fileReducer([], tree).reverse()\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 transformers from '../transformers/index.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\n ? replacer(transformers.camelCase(curr))\n : transformers.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\n ? replacer(transformers.camelCase(item))\n : transformers.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"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/FunctionParams.ts","../src/transformers/casing.ts","../src/transformers/combineCodes.ts","../src/transformers/createJSDocBlockText.ts","../src/transformers/escape.ts","../src/transformers/indent.ts","../src/transformers/nameSorter.ts","../src/transformers/searchAndReplace.ts","../src/transformers/transformReservedWord.ts","../src/transformers/trim.ts","../src/transformers/index.ts","../src/utils/promise.ts","../src/utils/Queue.ts","../src/utils/EventEmitter.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts","../src/utils/uniqueName.ts","../src/utils/URLPath.ts"],"names":[],"mappings":"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","sourcesContent":["import { orderBy } from 'natural-orderby'\n\nimport transformers from '../transformers/index.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\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\nexport class FunctionParams {\n public type?: 'generics' | 'typed'\n public items: FunctionParamsAST[] = []\n constructor(type?: 'generics' | 'typed') {\n this.type = type\n\n return this\n }\n\n add(item: FunctionParamsAST | Array<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\n toString(): string {\n const sortedData = orderBy(this.items.filter(Boolean), [(v) => !v.default, (v) => v.required ?? true], ['desc', 'desc'])\n\n return sortedData\n .filter(({ enabled = true }) => enabled)\n .reduce((acc, { name, type, required = true, ...rest }) => {\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 : transformers.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 }, [] as string[])\n .join(', ')\n }\n}\n","import { camelCase as changeCaseCamel, camelCaseTransformMerge, pascalCase as changePascalCase, pascalCaseTransformMerge } from 'change-case'\n\nexport function camelCase(text: string): string {\n return changeCaseCamel(text, { delimiter: '', stripRegexp: /[^A-Z0-9$]/gi, transform: camelCaseTransformMerge })\n}\n\nexport function pascalCase(text: string): string {\n return changePascalCase(text, { delimiter: '', stripRegexp: /[^A-Z0-9$]/gi, transform: pascalCaseTransformMerge })\n}\n","export function combineCodes(codes: string[]): string {\n return codes.join('\\n')\n}\n","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n return `/**\\n * ${filteredComments.join('\\n * ')}\\n */`\n}\n","export function escape(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n\n/**\n * Escape all characters not included in SingleStringCharacters and DoubleStringCharacters on\n * @link http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n * @link https://github.com/joliss/js-string-escape/blob/master/index.js\n */\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function jsStringEscape(input: any): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return '\\\\' + character\n // Four possible LineTerminator characters need to be escaped:\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n","export function createIndent(size: number): string {\n return Array.from({ length: size + 1 }).join(' ')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T): 0 | 1 | -1 {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n","type Options = {\n text: string\n replaceBy: string\n prefix?: string\n key: string\n searchValues?: (prefix: string, key: string) => Array<RegExp | string>\n}\n\nexport function searchAndReplace(options: Options): string {\n const { text, replaceBy, prefix = '', key } = options\n\n const searchValues = options.searchValues?.(prefix, key) || [\n `${prefix}[\"${key}\"]`,\n `${prefix}['${key}']`,\n `${prefix}[\\`${key}\\`]`,\n `${prefix}\"${key}\"`,\n `${prefix}'${key}'`,\n `${prefix}\\`${key}\\``,\n new RegExp(`${prefix}${key}`, 'g'),\n ]\n\n return searchValues.reduce((prev, searchValue) => {\n return prev.toString().replaceAll(searchValue, replaceBy)\n }, text) as string\n}\n","/**\n * @link https://github.com/jonschlinkert/reserved/blob/master/index.js\n */\nconst reservedWords = [\n 'abstract',\n 'arguments',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'eval',\n 'export',\n 'extends',\n 'false',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'function',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'int',\n 'interface',\n 'let',\n 'long',\n 'native',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'volatile',\n 'while',\n 'with',\n 'yield',\n\n 'Array',\n 'Date',\n 'eval',\n 'function',\n 'hasOwnProperty',\n 'Infinity',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'length',\n 'Math',\n 'name',\n 'NaN',\n 'Number',\n 'Object',\n 'prototype',\n 'String',\n 'toString',\n 'undefined',\n 'valueOf',\n]\n\nexport function transformReservedWord(word: string): string {\n if ((word && reservedWords.includes(word)) || word?.match(/^\\d/)) {\n return `_${word}`\n }\n\n return word\n}\n","export function trim(text: string): string {\n return text.replaceAll(/\\n/g, '').trim()\n}\n\nexport function trimExtName(text: string): string {\n return text.replace(/\\.[^/.]+$/, '')\n}\n","import { camelCase, pascalCase } from './casing.ts'\nimport { combineCodes } from './combineCodes.ts'\nimport { createJSDocBlockText } from './createJSDocBlockText.ts'\nimport { escape, jsStringEscape } from './escape.ts'\nimport { createIndent } from './indent.ts'\nimport { nameSorter } from './nameSorter.ts'\nimport { searchAndReplace } from './searchAndReplace.ts'\nimport { transformReservedWord } from './transformReservedWord.ts'\nimport { trim, trimExtName } from './trim.ts'\n\nexport { camelCase, pascalCase } from './casing.ts'\nexport { combineCodes } from './combineCodes.ts'\nexport { createJSDocBlockText } from './createJSDocBlockText.ts'\nexport { escape, jsStringEscape } from './escape.ts'\nexport { createIndent } from './indent.ts'\nexport { nameSorter } from './nameSorter.ts'\nexport { searchAndReplace } from './searchAndReplace.ts'\nexport { transformReservedWord } from './transformReservedWord.ts'\nexport { trim, trimExtName } from './trim.ts'\n\nexport default {\n combineCodes,\n escape,\n jsStringEscape,\n createIndent,\n transformReservedWord,\n nameSorter,\n searchAndReplace,\n trim,\n trimExtName,\n JSDoc: {\n createJSDocBlockText,\n },\n camelCase,\n pascalCase,\n} as const\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","import crypto from 'node:crypto'\nimport { performance } from 'node:perf_hooks'\n\nimport { EventEmitter } from './EventEmitter.ts'\n\nexport type QueueJob<T = unknown> = {\n (...args: unknown[]): Promise<T | void>\n}\n\ntype RunOptions = {\n controller?: AbortController\n name?: string\n description?: string\n}\n\ntype QueueItem = {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n job: QueueJob<unknown>\n} & Required<RunOptions>\n\ntype Events = {\n jobDone: [result: unknown]\n jobFailed: [error: Error]\n}\n\nexport class Queue {\n #queue: QueueItem[] = []\n readonly eventEmitter: EventEmitter<Events> = new EventEmitter()\n\n #workerCount = 0\n\n #maxParallel: number\n #debug = false\n\n constructor(maxParallel: number, debug = false) {\n this.#maxParallel = maxParallel\n this.#debug = debug\n }\n\n run<T>(job: QueueJob<T>, options: RunOptions = { controller: new AbortController(), name: crypto.randomUUID(), description: '' }): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item = { reject, resolve, job, name: options.name, description: options.description || options.name } as QueueItem\n\n options.controller?.signal.addEventListener('abort', () => {\n this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name)\n\n reject('Aborted')\n })\n\n this.#queue.push(item)\n this.#work()\n })\n }\n\n runSync<T>(job: QueueJob<T>, options: RunOptions = { controller: new AbortController(), name: crypto.randomUUID(), description: '' }): void {\n new Promise<T>((resolve, reject) => {\n const item = { reject, resolve, job, name: options.name, description: options.description || options.name } as QueueItem\n\n options.controller?.signal.addEventListener('abort', () => {\n this.#queue = this.#queue.filter((queueItem) => queueItem.name === item.name)\n })\n\n this.#queue.push(item)\n this.#work()\n })\n }\n\n get hasJobs(): boolean {\n return this.#workerCount > 0 || this.#queue.length > 0\n }\n\n get count(): number {\n return this.#workerCount\n }\n\n #work(): void {\n if (this.#workerCount >= this.#maxParallel) {\n return\n }\n\n this.#workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.#queue.shift())) {\n const { reject, resolve, job, name, description } = entry\n\n if (this.#debug) {\n performance.mark(name + '_start')\n }\n\n job()\n .then((result) => {\n this.eventEmitter.emit('jobDone', result)\n\n resolve(result)\n\n if (this.#debug) {\n performance.mark(name + '_stop')\n performance.measure(description, name + '_start', name + '_stop')\n }\n })\n .catch((err) => {\n this.eventEmitter.emit('jobFailed', err as Error)\n reject(err)\n })\n }\n this.#workerCount--\n }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { EventEmitter as NodeEventEmitter } from 'node:events'\n\nexport class EventEmitter<TEvents extends Record<string, any>> {\n constructor() {\n this.#emitter.setMaxListeners(100)\n }\n #emitter = new NodeEventEmitter()\n\n emit<TEventName extends keyof TEvents & string>(eventName: TEventName, ...eventArg: TEvents[TEventName]): void {\n this.#emitter.emit(eventName, ...(eventArg as []))\n }\n\n on<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.on(eventName, handler as any)\n }\n\n off<TEventName extends keyof TEvents & string>(eventName: TEventName, handler: (...eventArg: TEvents[TEventName]) => void): void {\n this.#emitter.off(eventName, handler as any)\n }\n removeAll(): void {\n this.#emitter.removeAllListeners()\n }\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 transformers from '../transformers/index.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\n ? replacer(transformers.camelCase(curr))\n : transformers.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\n ? replacer(transformers.camelCase(item))\n : transformers.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"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare function getRelativePath(rootDir?: string | null, filePath?: string | null, platform?: 'windows' | 'mac' | 'linux'): string;
|
|
2
|
+
declare function read(path: string): Promise<string>;
|
|
3
|
+
declare function readSync(path: string): string;
|
|
4
|
+
|
|
5
|
+
declare function write(data: string, path: string): Promise<string | undefined>;
|
|
6
|
+
|
|
7
|
+
export { readSync as a, getRelativePath as g, read as r, write as w };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
declare function getRelativePath(rootDir?: string | null, filePath?: string | null, platform?: 'windows' | 'mac' | 'linux'): string;
|
|
2
|
+
declare function read(path: string): Promise<string>;
|
|
3
|
+
declare function readSync(path: string): string;
|
|
4
|
+
|
|
5
|
+
declare function write(data: string, path: string): Promise<string | undefined>;
|
|
6
|
+
|
|
7
|
+
export { readSync as a, getRelativePath as g, read as r, write as w };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kubb/core",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.11",
|
|
4
4
|
"description": "Generator core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"typescript",
|
|
@@ -33,6 +33,16 @@
|
|
|
33
33
|
"require": "./dist/transformers.cjs",
|
|
34
34
|
"default": "./dist/transformers.cjs"
|
|
35
35
|
},
|
|
36
|
+
"./logger": {
|
|
37
|
+
"import": "./dist/logger.js",
|
|
38
|
+
"require": "./dist/logger.cjs",
|
|
39
|
+
"default": "./dist/logger.cjs"
|
|
40
|
+
},
|
|
41
|
+
"./fs": {
|
|
42
|
+
"import": "./dist/fs.js",
|
|
43
|
+
"require": "./dist/fs.cjs",
|
|
44
|
+
"default": "./dist/fs.cjs"
|
|
45
|
+
},
|
|
36
46
|
"./package.json": "./package.json",
|
|
37
47
|
"./globals": {
|
|
38
48
|
"types": "./globals.d.ts"
|
|
@@ -54,24 +64,24 @@
|
|
|
54
64
|
"dependencies": {
|
|
55
65
|
"change-case": "^4.1.2",
|
|
56
66
|
"directory-tree": "^3.5.1",
|
|
57
|
-
"find-up": "^6.3.0",
|
|
58
|
-
"fs-extra": "^11.2.0",
|
|
59
67
|
"js-runtime": "^0.0.6",
|
|
60
|
-
"lodash.isequal": "^4.5.0",
|
|
61
68
|
"natural-orderby": "^3.0.2",
|
|
62
69
|
"picocolors": "^1.0.0",
|
|
63
70
|
"seedrandom": "^3.0.5",
|
|
64
71
|
"semver": "^7.5.4",
|
|
65
|
-
"@kubb/parser": "2.0.0-beta.
|
|
66
|
-
"@kubb/types": "2.0.0-beta.
|
|
72
|
+
"@kubb/parser": "2.0.0-beta.11",
|
|
73
|
+
"@kubb/types": "2.0.0-beta.11"
|
|
67
74
|
},
|
|
68
75
|
"devDependencies": {
|
|
69
76
|
"@types/fs-extra": "^11.0.4",
|
|
70
77
|
"@types/lodash.isequal": "4.5.6",
|
|
71
|
-
"@types/react": "^18.2.
|
|
78
|
+
"@types/react": "^18.2.41",
|
|
72
79
|
"@types/seedrandom": "^3.0.8",
|
|
73
80
|
"@types/semver": "^7.5.6",
|
|
74
|
-
"eslint": "^8.
|
|
81
|
+
"eslint": "^8.55.0",
|
|
82
|
+
"find-up": "^6.3.0",
|
|
83
|
+
"fs-extra": "^11.2.0",
|
|
84
|
+
"lodash.isequal": "^4.5.0",
|
|
75
85
|
"ora": "^7.0.1",
|
|
76
86
|
"tsup": "^8.0.1",
|
|
77
87
|
"typescript": "^5.3.2",
|
package/src/FileManager.ts
CHANGED
|
@@ -8,10 +8,10 @@ import * as factory from '@kubb/parser/factory'
|
|
|
8
8
|
import isEqual from 'lodash.isequal'
|
|
9
9
|
import { orderBy } from 'natural-orderby'
|
|
10
10
|
|
|
11
|
+
import { getRelativePath, read } from './fs/read.ts'
|
|
12
|
+
import { write } from './fs/write.ts'
|
|
11
13
|
import transformers from './transformers/index.ts'
|
|
12
|
-
import { getRelativePath, read } from './utils/read.ts'
|
|
13
14
|
import { timeout } from './utils/timeout.ts'
|
|
14
|
-
import { write } from './utils/write.ts'
|
|
15
15
|
import { BarrelManager } from './BarrelManager.ts'
|
|
16
16
|
|
|
17
17
|
import type { GreaterThan } from '@kubb/types'
|
|
@@ -389,66 +389,7 @@ export class FileManager {
|
|
|
389
389
|
// statics
|
|
390
390
|
|
|
391
391
|
static getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {
|
|
392
|
-
|
|
393
|
-
return file.source
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
const exports = file.exports ? combineExports(file.exports) : []
|
|
397
|
-
const imports = file.imports ? combineImports(file.imports, exports, file.source) : []
|
|
398
|
-
|
|
399
|
-
const importNodes = imports.filter(item => {
|
|
400
|
-
// isImportNotNeeded
|
|
401
|
-
// trim extName
|
|
402
|
-
return item.path !== transformers.trimExtName(file.path)
|
|
403
|
-
}).map((item) => {
|
|
404
|
-
return factory.createImportDeclaration({
|
|
405
|
-
name: item.name,
|
|
406
|
-
path: item.root ? getRelativePath(item.root, item.path) : item.path,
|
|
407
|
-
isTypeOnly: item.isTypeOnly,
|
|
408
|
-
})
|
|
409
|
-
})
|
|
410
|
-
const exportNodes = exports.map((item) =>
|
|
411
|
-
factory.createExportDeclaration({
|
|
412
|
-
name: item.name,
|
|
413
|
-
path: item.path,
|
|
414
|
-
isTypeOnly: item.isTypeOnly,
|
|
415
|
-
asAlias: item.asAlias,
|
|
416
|
-
})
|
|
417
|
-
)
|
|
418
|
-
|
|
419
|
-
return [print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\n')
|
|
420
|
-
}
|
|
421
|
-
static combineFiles<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(files: Array<KubbFile.File<TMeta> | null>): Array<KubbFile.File<TMeta>> {
|
|
422
|
-
return files.filter(Boolean).reduce((acc, file: KubbFile.File<TMeta>) => {
|
|
423
|
-
const prevIndex = acc.findIndex((item) => item.path === file.path)
|
|
424
|
-
|
|
425
|
-
if (prevIndex === -1) {
|
|
426
|
-
return [...acc, file]
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
const prev = acc[prevIndex]
|
|
430
|
-
|
|
431
|
-
if (prev && file.override) {
|
|
432
|
-
acc[prevIndex] = {
|
|
433
|
-
imports: [],
|
|
434
|
-
exports: [],
|
|
435
|
-
...file,
|
|
436
|
-
}
|
|
437
|
-
return acc
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
if (prev) {
|
|
441
|
-
acc[prevIndex] = {
|
|
442
|
-
...file,
|
|
443
|
-
source: prev.source && file.source ? `${prev.source}\n${file.source}` : '',
|
|
444
|
-
imports: [...(prev.imports || []), ...(file.imports || [])],
|
|
445
|
-
exports: [...(prev.exports || []), ...(file.exports || [])],
|
|
446
|
-
env: { ...(prev.env || {}), ...(file.env || {}) },
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
return acc
|
|
451
|
-
}, [] as Array<KubbFile.File<TMeta>>)
|
|
392
|
+
return getSource<TMeta>(file)
|
|
452
393
|
}
|
|
453
394
|
static getMode(path: string | undefined | null): KubbFile.Mode {
|
|
454
395
|
if (!path) {
|
|
@@ -466,6 +407,37 @@ export class FileManager {
|
|
|
466
407
|
}
|
|
467
408
|
}
|
|
468
409
|
|
|
410
|
+
export function getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): string {
|
|
411
|
+
if (!FileManager.isExtensionAllowed(file.baseName)) {
|
|
412
|
+
return file.source
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
const exports = file.exports ? combineExports(file.exports) : []
|
|
416
|
+
const imports = file.imports ? combineImports(file.imports, exports, file.source) : []
|
|
417
|
+
|
|
418
|
+
const importNodes = imports.filter(item => {
|
|
419
|
+
// isImportNotNeeded
|
|
420
|
+
// trim extName
|
|
421
|
+
return item.path !== transformers.trimExtName(file.path)
|
|
422
|
+
}).map((item) => {
|
|
423
|
+
return factory.createImportDeclaration({
|
|
424
|
+
name: item.name,
|
|
425
|
+
path: item.root ? getRelativePath(item.root, item.path) : item.path,
|
|
426
|
+
isTypeOnly: item.isTypeOnly,
|
|
427
|
+
})
|
|
428
|
+
})
|
|
429
|
+
const exportNodes = exports.map((item) =>
|
|
430
|
+
factory.createExportDeclaration({
|
|
431
|
+
name: item.name,
|
|
432
|
+
path: item.path,
|
|
433
|
+
isTypeOnly: item.isTypeOnly,
|
|
434
|
+
asAlias: item.asAlias,
|
|
435
|
+
})
|
|
436
|
+
)
|
|
437
|
+
|
|
438
|
+
return [print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\n')
|
|
439
|
+
}
|
|
440
|
+
|
|
469
441
|
export function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {
|
|
470
442
|
const combinedExports = orderBy(exports, [(v) => !v.isTypeOnly], ['asc']).reduce((prev, curr) => {
|
|
471
443
|
const name = curr.name
|
package/src/PluginManager.ts
CHANGED
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
import { transformReservedWord } from './transformers/transformReservedWord.ts'
|
|
4
4
|
import { EventEmitter } from './utils/EventEmitter.ts'
|
|
5
|
-
import { LogLevel } from './utils/logger.ts'
|
|
6
5
|
import { Queue } from './utils/Queue.ts'
|
|
7
6
|
import { setUniqueName } from './utils/uniqueName.ts'
|
|
8
7
|
import { ValidationPluginError } from './errors.ts'
|
|
9
8
|
import { FileManager } from './FileManager.ts'
|
|
9
|
+
import { LogLevel } from './logger.ts'
|
|
10
10
|
import { definePlugin as defineCorePlugin } from './plugin.ts'
|
|
11
11
|
import { isPromise, isPromiseRejectedResult } from './PromiseManager.ts'
|
|
12
12
|
import { PromiseManager } from './PromiseManager.ts'
|
|
13
13
|
|
|
14
14
|
import type { PossiblePromise } from '@kubb/types'
|
|
15
15
|
import type { KubbFile } from './FileManager.ts'
|
|
16
|
+
import type { Logger } from './logger.ts'
|
|
16
17
|
import type { CorePluginOptions } from './plugin.ts'
|
|
17
18
|
import type {
|
|
18
19
|
GetPluginFactoryOptions,
|
|
@@ -28,7 +29,6 @@ import type {
|
|
|
28
29
|
ResolveNameParams,
|
|
29
30
|
ResolvePathParams,
|
|
30
31
|
} from './types.ts'
|
|
31
|
-
import type { Logger } from './utils/logger.ts'
|
|
32
32
|
import type { QueueJob } from './utils/Queue.ts'
|
|
33
33
|
|
|
34
34
|
type RequiredPluginLifecycle = Required<PluginLifecycle>
|
|
@@ -80,12 +80,12 @@ type Events = {
|
|
|
80
80
|
export class PluginManager {
|
|
81
81
|
readonly plugins: KubbPluginWithLifeCycle[]
|
|
82
82
|
readonly fileManager: FileManager
|
|
83
|
-
readonly
|
|
83
|
+
readonly events: EventEmitter<Events> = new EventEmitter()
|
|
84
84
|
|
|
85
85
|
readonly queue: Queue
|
|
86
86
|
readonly config: KubbConfig
|
|
87
87
|
|
|
88
|
-
readonly executed: Executer
|
|
88
|
+
readonly executed: Array<Executer> = []
|
|
89
89
|
readonly logger: Logger
|
|
90
90
|
readonly #core: KubbPlugin<CorePluginOptions>
|
|
91
91
|
|
|
@@ -144,7 +144,6 @@ export class PluginManager {
|
|
|
144
144
|
parameters: [params.baseName, params.directory, params.options as object],
|
|
145
145
|
}).result
|
|
146
146
|
}
|
|
147
|
-
|
|
148
147
|
resolveName = (params: ResolveNameParams): string => {
|
|
149
148
|
if (params.pluginKey) {
|
|
150
149
|
const names = this.hookForPluginSync({
|
|
@@ -172,12 +171,15 @@ export class PluginManager {
|
|
|
172
171
|
return transformReservedWord(name)
|
|
173
172
|
}
|
|
174
173
|
|
|
174
|
+
/**
|
|
175
|
+
* Instead of calling `pluginManager.events.on` you can use `pluginManager.on`. This one also has better types.
|
|
176
|
+
*/
|
|
175
177
|
on<TEventName extends keyof Events & string>(eventName: TEventName, handler: (...eventArg: Events[TEventName]) => void): void {
|
|
176
|
-
this.
|
|
178
|
+
this.events.on(eventName, handler as any)
|
|
177
179
|
}
|
|
178
180
|
|
|
179
181
|
/**
|
|
180
|
-
* Run
|
|
182
|
+
* Run a specific hookName for plugin x.
|
|
181
183
|
*/
|
|
182
184
|
hookForPlugin<H extends PluginLifecycleHooks>({
|
|
183
185
|
pluginKey,
|
|
@@ -203,6 +205,9 @@ export class PluginManager {
|
|
|
203
205
|
|
|
204
206
|
return Promise.all(promises)
|
|
205
207
|
}
|
|
208
|
+
/**
|
|
209
|
+
* Run a specific hookName for plugin x.
|
|
210
|
+
*/
|
|
206
211
|
|
|
207
212
|
hookForPluginSync<H extends PluginLifecycleHooks>({
|
|
208
213
|
pluginKey,
|
|
@@ -228,7 +233,7 @@ export class PluginManager {
|
|
|
228
233
|
}
|
|
229
234
|
|
|
230
235
|
/**
|
|
231
|
-
*
|
|
236
|
+
* First non-null result stops and will return it's value.
|
|
232
237
|
*/
|
|
233
238
|
async hookFirst<H extends PluginLifecycleHooks>({
|
|
234
239
|
hookName,
|
|
@@ -263,7 +268,7 @@ export class PluginManager {
|
|
|
263
268
|
}
|
|
264
269
|
|
|
265
270
|
/**
|
|
266
|
-
*
|
|
271
|
+
* First non-null result stops and will return it's value.
|
|
267
272
|
*/
|
|
268
273
|
hookFirstSync<H extends PluginLifecycleHooks>({
|
|
269
274
|
hookName,
|
|
@@ -299,7 +304,7 @@ export class PluginManager {
|
|
|
299
304
|
}
|
|
300
305
|
|
|
301
306
|
/**
|
|
302
|
-
*
|
|
307
|
+
* Run all plugins in parallel(order will be based on `this.plugin` and if `pre` or `post` is set).
|
|
303
308
|
*/
|
|
304
309
|
async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({
|
|
305
310
|
hookName,
|
|
@@ -327,7 +332,7 @@ export class PluginManager {
|
|
|
327
332
|
}
|
|
328
333
|
|
|
329
334
|
/**
|
|
330
|
-
*
|
|
335
|
+
* Chain all plugins, `reduce` can be passed through to handle every returned value. The return value of the first plugin will be used as the first parameter for the plugin after that.
|
|
331
336
|
*/
|
|
332
337
|
hookReduceArg0<H extends PluginLifecycleHooks>({
|
|
333
338
|
hookName,
|
|
@@ -451,7 +456,7 @@ export class PluginManager {
|
|
|
451
456
|
|
|
452
457
|
#addExecutedToCallStack(executer: Executer | undefined) {
|
|
453
458
|
if (executer) {
|
|
454
|
-
this.
|
|
459
|
+
this.events.emit('executed', executer)
|
|
455
460
|
this.executed.push(executer)
|
|
456
461
|
}
|
|
457
462
|
}
|
|
@@ -481,7 +486,7 @@ export class PluginManager {
|
|
|
481
486
|
return null
|
|
482
487
|
}
|
|
483
488
|
|
|
484
|
-
this.
|
|
489
|
+
this.events.emit('execute', { strategy, hookName, parameters, plugin })
|
|
485
490
|
|
|
486
491
|
const task = Promise.resolve()
|
|
487
492
|
.then(() => {
|
|
@@ -543,7 +548,7 @@ export class PluginManager {
|
|
|
543
548
|
return null
|
|
544
549
|
}
|
|
545
550
|
|
|
546
|
-
this.
|
|
551
|
+
this.events.emit('execute', { strategy, hookName, parameters, plugin })
|
|
547
552
|
|
|
548
553
|
try {
|
|
549
554
|
if (typeof hook === 'function') {
|
|
@@ -575,7 +580,7 @@ export class PluginManager {
|
|
|
575
580
|
const text = `${e.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})\n`
|
|
576
581
|
|
|
577
582
|
this.logger.error(text)
|
|
578
|
-
this.
|
|
583
|
+
this.events.emit('error', e)
|
|
579
584
|
}
|
|
580
585
|
|
|
581
586
|
#parse<TPlugin extends KubbUserPluginWithLifeCycle>(
|
package/src/build.ts
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import pc from 'picocolors'
|
|
2
2
|
|
|
3
|
-
import { clean } from './
|
|
4
|
-
import {
|
|
5
|
-
import { randomPicoColour } from './utils/randomColour.ts'
|
|
6
|
-
import { read } from './utils/read.ts'
|
|
3
|
+
import { clean } from './fs/clean.ts'
|
|
4
|
+
import { read } from './fs/read.ts'
|
|
7
5
|
import { URLPath } from './utils/URLPath.ts'
|
|
8
6
|
import { isInputPath } from './config.ts'
|
|
9
7
|
import { FileManager } from './FileManager.ts'
|
|
8
|
+
import { createLogger, LogLevel, randomPicoColour } from './logger.ts'
|
|
10
9
|
import { PluginManager } from './PluginManager.ts'
|
|
11
10
|
import { isPromise } from './PromiseManager.ts'
|
|
12
11
|
|
|
13
12
|
import type { KubbFile } from './FileManager.ts'
|
|
13
|
+
import type { Logger } from './logger.ts'
|
|
14
14
|
import type { KubbPlugin, PluginContext, PluginParameter, TransformResult } from './types.ts'
|
|
15
|
-
import type { Logger } from './utils/logger.ts'
|
|
16
15
|
import type { QueueJob } from './utils/Queue.ts'
|
|
17
16
|
|
|
18
17
|
type BuildOptions = {
|
package/src/fs/index.ts
ADDED