@kubb/core 1.1.12 → 1.1.13

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/index.cjs CHANGED
@@ -526,9 +526,19 @@ ${file.source}`,
526
526
  this.setStatus(id, "removed");
527
527
  }
528
528
  async write(...params) {
529
+ if (this.queue) {
530
+ return this.queue.run(async () => {
531
+ return write(...params);
532
+ });
533
+ }
529
534
  return write(...params);
530
535
  }
531
536
  async read(...params) {
537
+ if (this.queue) {
538
+ return this.queue.run(async () => {
539
+ return read(...params);
540
+ });
541
+ }
532
542
  return read(...params);
533
543
  }
534
544
  };
@@ -734,6 +744,7 @@ var ParallelPluginError = class extends Error {
734
744
  pluginManager;
735
745
  constructor(message, options) {
736
746
  super(message, { cause: options.cause });
747
+ this.name = "ParallelPluginError";
737
748
  this.errors = options.errors;
738
749
  this.pluginManager = options.pluginManager;
739
750
  }
@@ -744,6 +755,7 @@ var PluginError = class extends Error {
744
755
  pluginManager;
745
756
  constructor(message, options) {
746
757
  super(message, { cause: options.cause });
758
+ this.name = "PluginError";
747
759
  this.pluginManager = options.pluginManager;
748
760
  }
749
761
  };
@@ -926,7 +938,6 @@ var PluginManager = class {
926
938
  const results = await Promise.allSettled(parallelPromises);
927
939
  const errors = results.filter((result) => result.status === "rejected").map((result) => result.reason);
928
940
  if (errors.length) {
929
- console.log(errors);
930
941
  throw new ParallelPluginError("Error", { errors, pluginManager: this });
931
942
  }
932
943
  return results.filter((result) => result.status === "fulfilled").map((result) => result.value);
@@ -1108,6 +1119,16 @@ function validatePlugins(plugins, dependedPluginNames) {
1108
1119
  return true;
1109
1120
  }
1110
1121
 
1122
+ // src/managers/pluginManager/SummaryError.ts
1123
+ var SummaryError = class extends Error {
1124
+ summary;
1125
+ constructor(message, options) {
1126
+ super(message, { cause: options.cause });
1127
+ this.name = "SummaryError";
1128
+ this.summary = options.summary || [];
1129
+ }
1130
+ };
1131
+
1111
1132
  // src/build.ts
1112
1133
  async function transformReducer(_previousCode, result, _plugin) {
1113
1134
  return result;
@@ -1208,6 +1229,7 @@ exports.PluginError = PluginError;
1208
1229
  exports.PluginManager = PluginManager;
1209
1230
  exports.Queue = Queue;
1210
1231
  exports.SchemaGenerator = SchemaGenerator;
1232
+ exports.SummaryError = SummaryError;
1211
1233
  exports.TreeNode = TreeNode;
1212
1234
  exports.ValidationPluginError = ValidationPluginError;
1213
1235
  exports.build = build;
@@ -1239,3 +1261,5 @@ exports.uniqueId = uniqueId;
1239
1261
  exports.validatePlugins = validatePlugins;
1240
1262
  exports.write = write;
1241
1263
  exports.writeIndexes = writeIndexes;
1264
+ //# sourceMappingURL=out.js.map
1265
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/managers/fileManager/FileManager.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/utils/isURL.ts","../src/utils/objectToParameters.ts","../src/utils/nameSorter.ts","../src/utils/jsdoc.ts","../src/utils/getUniqueName.ts","../src/utils/timeout.ts","../src/utils/Queue.ts","../src/utils/getEncodedText.ts","../src/utils/renderTemplate.ts","../src/utils/clean.ts","../src/utils/TreeNode.ts","../src/utils/transformReservedWord.ts","../src/utils/getStackTrace.ts","../src/utils/uniqueId.ts","../src/utils/throttle.ts","../src/managers/fileManager/utils.ts","../src/plugin.ts","../src/managers/pluginManager/ParallelPluginError.ts","../src/managers/pluginManager/PluginError.ts","../src/managers/pluginManager/PluginManager.ts","../src/managers/pluginManager/validate.ts","../src/managers/pluginManager/SummaryError.ts","../src/build.ts","../src/config.ts","../src/generators/Generator.ts","../src/generators/SchemaGenerator.ts","../src/index.ts"],"names":["pathParser","fs","dummyObject","v8StackTrace","timeout","files","name"],"mappings":"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","sourcesContent":["import crypto from 'node:crypto'\n\nimport { read, write } from '../../utils/index.ts'\n\nimport type { Queue, QueueTask } from '../../utils/index.ts'\nimport type { CacheStore, File, Status, UUID } from './types.ts'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n\n private task?: QueueTask<File>\n\n private queue?: Queue\n\n constructor(options?: { queue: Queue; task?: QueueTask<File> }) {\n if (options) {\n this.task = options.task\n this.queue = options.queue\n }\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n\n getCacheByPath(path: string | undefined): CacheStore | undefined {\n let cache\n\n this.cache.forEach((item) => {\n if (item.file.path === path) {\n cache = item\n }\n })\n return cache as unknown as CacheStore\n }\n\n get files() {\n const files: File[] = []\n this.cache.forEach((item) => {\n files.push(item.file)\n })\n\n return files\n }\n\n get cachedFiles() {\n const files: CacheStore[] = []\n this.cache.forEach((item) => {\n files.push(item)\n })\n\n return files\n }\n\n async add(file: File) {\n const cacheItem: CacheStore = { id: crypto.randomUUID(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n\n if (this.queue) {\n await this.queue.run(async () => {\n await this.task?.(cacheItem.id, file)\n })\n }\n\n return file\n }\n\n addOrAppend(file: File) {\n if (!file.path.endsWith(file.fileName)) {\n // console.warn(`Path ${file.path}(file.path) should end with the fileName ${file.fileName}(file.filename)`)\n }\n\n const previousCache = this.getCacheByPath(file.path)\n\n if (previousCache) {\n // empty source will also return true when using includes\n const sourceAlreadyExists = file.source && previousCache.file.source.includes(file.source)\n\n if (sourceAlreadyExists) {\n return Promise.resolve(file)\n }\n\n this.cache.delete(previousCache.id)\n\n return this.add({\n ...file,\n source: `${previousCache.file.source}\\n${file.source}`,\n imports: [...(previousCache.file.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.file.exports || []), ...(file.exports || [])],\n })\n }\n return this.add(file)\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n }\n\n async write(...params: Parameters<typeof write>) {\n if (this.queue) {\n return this.queue.run(async () => {\n return write(...params)\n })\n }\n\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>) {\n if (this.queue) {\n return this.queue.run(async () => {\n return read(...params)\n })\n }\n\n return read(...params)\n }\n}\n","import type { MaybePromise } from '../types.ts'\n\nexport function isPromise<T>(result: MaybePromise<T>): result is Promise<T> {\n return typeof (result as Promise<unknown>)?.then === 'function'\n}\n","import fs from 'fs-extra'\nimport pathParser from 'node:path'\n\nasync function safeWriteFileToPath(path: string, data: string): Promise<void> {\n // resolve the full path and get just the directory, ignoring the file and extension\n const passedPath = pathParser.dirname(pathParser.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 // write the file to the newly created directory\n return fs.writeFile(pathParser.resolve(path), data, { encoding: 'utf-8' })\n}\n\nexport async function write(data: string, path: string): Promise<void> {\n try {\n await fs.stat(path)\n const oldContent = await fs.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === data) {\n return\n }\n } catch (_err) {\n return safeWriteFileToPath(path, data)\n }\n\n return safeWriteFileToPath(path, data)\n}\n","export 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 Record<string, [number, unknown]>>(Store: 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 pathParser from 'node:path'\nimport fs from 'fs-extra'\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 = pathParser.relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const path = slash(relativePath, platform)\n\n if (path.startsWith('../')) {\n return path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))\n }\n\n return `./${path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))}`\n}\n\nexport type PathMode = 'file' | 'directory'\n\nexport function getPathMode(path: string | undefined | null): PathMode {\n if (!path) {\n return 'directory'\n }\n return pathParser.extname(path) ? 'file' : 'directory'\n}\n\nexport async function read(path: string): Promise<string> {\n return fs.readFile(path, { encoding: 'utf8' })\n}\n","export function isURL(data: string) {\n try {\n const url = new URL(data)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n}\n","import { camelCase, camelCaseTransformMerge } from 'change-case'\n\ntype Data = string[][]\n\ntype Options = {\n typed?: boolean\n}\n/**\n * Convert an string array to a string of parameters that can be used inside a function\n * The parameter name is converted to `camelcase`\n */\nexport function objectToParameters(data: Data, options: Options = {}) {\n const { typed } = options\n\n return data\n .reduce((acc, [key, value]) => {\n const parameterName = camelCase(key, { delimiter: '', transform: camelCaseTransformMerge })\n\n if (typed) {\n acc.push(`${parameterName}: ${value}[\"${key}\"]`)\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }, [] as string[])\n .join(', ')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T) {\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","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n const text = filteredComments.reduce((acc, comment) => {\n return `${acc}\\n* ${comment}`\n }, '/**')\n\n return `${text}\\n*/`\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>) {\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","export async function timeout(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","export type QueueTask<T = unknown> = {\n (...args: unknown[]): Promise<T> | Promise<void>\n}\n\ninterface QueueItem {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n task: QueueTask<unknown>\n}\n\nexport class Queue {\n private readonly queue: QueueItem[] = []\n\n workerCount = 0\n\n private maxParallel: number\n\n constructor(maxParallel: number) {\n this.maxParallel = maxParallel\n }\n\n run<T>(task: QueueTask<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item: QueueItem = { reject, resolve, task } as QueueItem\n this.queue.push(item)\n this.work()\n })\n }\n\n private work(): void {\n if (this.workerCount >= this.maxParallel) {\n return\n }\n this.workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.queue.shift())) {\n const { reject, resolve, task } = entry\n task()\n .then((result) => resolve(result))\n .catch((err) => reject(err))\n }\n\n this.workerCount--\n }\n}\n","export function getEncodedText(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n","export function renderTemplate<TData extends Record<string, string> = Record<string, string>>(template: string, data: TData | undefined = undefined) {\n if (!data) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n return template.replace(/{{(.*?)}}/g, (match) => {\n const value = data[match.split(/{{|}}/).filter(Boolean)[0].trim()]\n\n return value || ''\n })\n}\n","import { rimraf } from 'rimraf'\n\nexport async function clean(path: string) {\n return rimraf(path)\n}\n","import dirTree from 'directory-tree'\n\nimport { getPathMode } from '../utils/read.ts'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\nexport class TreeNode<T = unknown> {\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<T = unknown>(path: string, options: TreeNodeOptions = {}): TreeNode<T> | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : ([options.exclude].filter(Boolean) as RegExp[])\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 || getPathMode(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 || getPathMode(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 as TreeNode<T>\n } catch (e) {\n throw new Error('Something went wrong with creating index files with the TreehNode class', { cause: e })\n }\n }\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 | null) {\n if (word && reservedWords.includes(word)) {\n return `_${word}`\n }\n\n return word\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getStackTrace(belowFn?: Function): NodeJS.CallSite[] {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n\n const dummyObject = {} as any\n\n const v8Handler = Error.prepareStackTrace\n Error.prepareStackTrace = function prepareStackTrace(dummyObject, v8StackTrace) {\n return v8StackTrace\n }\n Error.captureStackTrace(dummyObject as object, belowFn || getStackTrace)\n\n const v8StackTrace = dummyObject.stack\n Error.prepareStackTrace = v8Handler\n Error.stackTraceLimit = oldLimit\n\n return v8StackTrace as NodeJS.CallSite[]\n}\n","export const uniqueId = (\n (counter) =>\n (str = '') =>\n `${str}${++counter}`\n)(0)\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","import pathParser from 'node:path'\n\nimport { createExportDeclaration, createImportDeclaration, print } from '@kubb/ts-codegen'\n\nimport { TreeNode } from '../../utils/index.ts'\n\nimport type ts from 'typescript'\nimport type { Path } from '../../types.ts'\nimport type { PathMode, TreeNodeOptions } from '../../utils/index.ts'\nimport type { File } from './types.ts'\n\ntype TreeNodeData = { type: PathMode; path: Path; name: string }\n\nexport function writeIndexes(root: string, options: TreeNodeOptions = {}): File[] | null {\n const tree = TreeNode.build<TreeNodeData>(root, { extensions: /\\.ts/, ...options })\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: File[], currentTree: typeof tree) => {\n if (!currentTree.children) {\n return []\n }\n\n if (currentTree.children?.length > 1) {\n const path = pathParser.resolve(currentTree.data.path, 'index.ts')\n const exports = currentTree.children\n .map((file) => {\n if (!file) {\n return undefined\n }\n\n const importPath: string = file.data.type === 'directory' ? `./${file.data.name}` : `./${file.data.name.replace(/\\.[^.]*$/, '')}`\n\n // TODO weird hacky fix\n if (importPath.includes('index') && path.includes('index')) {\n return undefined\n }\n\n return { path: importPath }\n })\n .filter(Boolean) as File['exports']\n\n files.push({\n path,\n fileName: 'index.ts',\n source: '',\n exports,\n })\n } else {\n currentTree.children?.forEach((child) => {\n const path = pathParser.resolve(currentTree.data.path, 'index.ts')\n const importPath = child.data.type === 'directory' ? `./${child.data.name}` : `./${child.data.name.replace(/\\.[^.]*$/, '')}`\n\n files.push({\n path,\n fileName: 'index.ts',\n source: '',\n exports: [{ path: importPath }],\n })\n })\n }\n\n currentTree.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n const files = fileReducer([], tree)\n\n return files\n}\n\nexport function combineFiles(files: Array<File | null>): File[] {\n return (files.filter(Boolean) as File[]).reduce((acc, curr: File) => {\n const prevIndex = acc.findIndex((item) => item.path === curr.path)\n\n if (prevIndex !== -1) {\n const prev = acc[prevIndex]\n acc[prevIndex] = {\n ...curr,\n source: prev.source && curr.source ? `${prev.source}\\n${curr.source}` : \"'\",\n imports: [...(prev.imports || []), ...(curr.imports || [])],\n exports: [...(prev.exports || []), ...(curr.exports || [])],\n }\n } else {\n acc.push(curr)\n }\n\n return acc\n }, [] as File[])\n}\n\nexport function getFileSource(file: File): string {\n let { source } = file\n\n // TODO make generic check\n if (!file.fileName.endsWith('.ts')) {\n return file.source\n }\n const imports: File['imports'] = []\n const exports: File['exports'] = []\n\n file.imports?.forEach((curr) => {\n const existingImport = imports.find((imp) => imp.path === curr.path)\n\n if (!existingImport) {\n imports.push({\n ...curr,\n name: Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name,\n })\n }\n\n if (existingImport && !Array.isArray(existingImport.name) && existingImport.name !== curr.name) {\n imports.push(curr)\n }\n\n if (existingImport && Array.isArray(existingImport.name)) {\n if (Array.isArray(curr.name)) {\n existingImport.name = [...new Set([...existingImport.name, ...curr.name])]\n }\n }\n })\n\n file.exports?.forEach((curr) => {\n const exists = exports.find((imp) => imp.path === curr.path)\n if (!exists) {\n exports.push({\n ...curr,\n name: Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name,\n })\n }\n\n if (exists && !Array.isArray(exists.name) && exists.name !== curr.name && exists.asAlias === curr.asAlias) {\n exports.push(curr)\n }\n\n if (exists && Array.isArray(exists.name)) {\n if (Array.isArray(curr.name)) {\n exists.name = [...new Set([...exists.name, ...curr.name])]\n }\n }\n })\n\n const importNodes = imports.reduce((prev, curr) => {\n return [...prev, createImportDeclaration({ name: curr.name, path: curr.path, isTypeOnly: curr.isTypeOnly })]\n }, [] as ts.ImportDeclaration[])\n const importSource = print(importNodes)\n\n const exportNodes = exports.reduce((prev, curr) => {\n return [...prev, createExportDeclaration({ name: curr.name, path: curr.path, isTypeOnly: curr.isTypeOnly, asAlias: curr.asAlias })]\n }, [] as ts.ExportDeclaration[])\n const exportSource = print(exportNodes)\n\n if (importSource) {\n source = `${importSource}\\n${source}`\n }\n\n if (exportSource) {\n source = `${exportSource}\\n${source}`\n }\n\n return source\n}\n","import pathParser from 'node:path'\n\nimport { createPluginCache, getStackTrace, transformReservedWord } from './utils/index.ts'\n\nimport type { FileManager } from './managers/fileManager/FileManager.ts'\nimport type { Executer } from './managers/index.ts'\nimport type { KubbPlugin, PluginContext, PluginFactoryOptions, PluginLifecycleHooks } from './types.ts'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n load: PluginContext['load']\n getExecuter: () => Executer<PluginLifecycleHooks> | undefined\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolvePath, resolveName, load } = options\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n fileManager,\n async addFile(...files) {\n // TODO unstable, based on stack trace and name of the file(can be different)\n const trace = getStackTrace()\n const plugins = options.config.plugins\n ?.filter((plugin) => trace[1].getFileName()?.includes(plugin.name))\n .sort((a, b) => {\n if (a.name.length < b.name.length) {\n return 1\n }\n if (a.name.length > b.name.length) {\n return -1\n }\n return 0\n })\n\n const pluginName = plugins?.[0]?.name\n\n return Promise.all(\n files.map((file) => {\n const fileWithMeta = {\n ...file,\n meta: {\n ...(file.meta || {}),\n pluginName,\n },\n }\n\n if (file.override) {\n return fileManager.add(fileWithMeta)\n }\n\n return fileManager.addOrAppend(fileWithMeta)\n })\n )\n },\n resolvePath,\n resolveName: (params) => {\n const name = resolveName(params)\n\n return transformReservedWord(name)\n },\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n options,\n api,\n resolvePath(fileName) {\n const root = pathParser.resolve(this.config.root, this.config.output.path)\n\n return pathParser.resolve(root, fileName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import type { PluginError } from './PluginError.ts'\nimport type { PluginManager } from './PluginManager'\n\nexport class ParallelPluginError extends Error {\n public errors: PluginError[]\n\n public pluginManager: PluginManager\n\n constructor(message: string, options: { cause?: Error; errors: PluginError[]; pluginManager: PluginManager }) {\n super(message, { cause: options.cause })\n\n this.name = 'ParallelPluginError'\n this.errors = options.errors\n this.pluginManager = options.pluginManager\n }\n}\n","import type { PluginManager } from './PluginManager'\n\nexport class PluginError extends Error {\n public pluginManager: PluginManager\n\n constructor(message: string, options: { cause?: Error; pluginManager: PluginManager }) {\n super(message, { cause: options.cause })\n\n this.name = 'PluginError'\n this.pluginManager = options.pluginManager\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n\nimport { definePlugin } from '../../plugin.ts'\nimport { isPromise } from '../../utils/isPromise.ts'\nimport { Queue } from '../../utils/Queue.ts'\nimport { FileManager } from '../fileManager/FileManager.ts'\nimport type { File } from '../fileManager/types.ts'\nimport { ParallelPluginError } from './ParallelPluginError.ts'\nimport { PluginError } from './PluginError.ts'\n\nimport type { CorePluginOptions } from '../../plugin.ts'\nimport type { KubbConfig, KubbPlugin, MaybePromise, PluginLifecycle, PluginLifecycleHooks, ResolveNameParams, ResolvePathParams } from '../../types.ts'\nimport type { QueueTask } from '../../utils/Queue.ts'\nimport type { Argument0, Executer, OnExecute, ParseResult, SafeParseResult, Strategy } from './types.ts'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolvePath: 1,\n resolveName: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\ntype Options = { task: QueueTask<File>; onExecute?: OnExecute<PluginLifecycleHooks> }\n\nexport class PluginManager {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager\n\n private readonly onExecute?: OnExecute\n\n private readonly core: KubbPlugin<CorePluginOptions>\n\n public queue: Queue\n\n public executer: Executer | undefined\n\n public executed: Executer[] = []\n\n constructor(config: KubbConfig, options: Options) {\n this.onExecute = options.onExecute?.bind(this)\n this.queue = new Queue(10)\n\n this.fileManager = new FileManager({ task: options.task, queue: this.queue })\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolvePath: this.resolvePath,\n resolveName: this.resolveName,\n getExecuter: this.getExecuter.bind(this),\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n getExecuter() {\n return this.executer\n }\n\n resolvePath = (params: ResolvePathParams) => {\n if (params.pluginName) {\n return this.hookForPluginSync({\n pluginName: params.pluginName,\n hookName: 'resolvePath',\n parameters: [params.fileName, params.directory, params.options],\n })\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.fileName, params.directory, params.options],\n }).result\n }\n\n resolveName = (params: ResolveNameParams) => {\n if (params.pluginName) {\n return this.hookForPluginSync({\n pluginName: params.pluginName,\n hookName: 'resolveName',\n parameters: [params.name],\n })\n }\n return this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [params.name],\n }).result\n }\n\n load = async (id: string) => {\n return this.hookFirst({\n hookName: 'load',\n parameters: [id],\n })\n }\n\n /**\n *\n * Run only hook for a specific plugin name\n */\n hookForPlugin<H extends PluginLifecycleHooks>({\n pluginName,\n hookName,\n parameters,\n }: {\n pluginName: string\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const plugin = this.getPlugin(hookName, pluginName)\n\n return this.execute({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n }\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginName,\n hookName,\n parameters,\n }: {\n pluginName: string\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n }): ReturnType<ParseResult<H>> | null {\n const plugin = this.getPlugin(hookName, pluginName)\n\n return this.executeSync({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n }\n\n /**\n *\n * Chains, first non-null result stops and returns\n */\n hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): Promise<SafeParseResult<H>> {\n let promise: Promise<SafeParseResult<H>> = Promise.resolve(null as unknown as SafeParseResult<H>)\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) {\n continue\n }\n promise = promise.then(async (parseResult) => {\n if (parseResult?.result != null) {\n return parseResult\n }\n const value = await this.execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n\n return Promise.resolve({\n plugin,\n result: value,\n } as typeof parseResult)\n })\n }\n\n return promise\n }\n\n /**\n *\n * Chains, first non-null result stops and returns\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) {\n continue\n }\n\n parseResult = {\n result: this.executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n }),\n plugin,\n } as SafeParseResult<H>\n\n if (parseResult?.result != null) {\n break\n }\n }\n return parseResult\n }\n\n /**\n *\n * Parallel, runs all plugins\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n }: {\n hookName: H\n parameters?: Parameters<PluginLifecycle[H]> | undefined\n }): Promise<Awaited<TOuput>[]> {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n // TODO implement sequential with `buildStart` as an object({ sequential: boolean; handler: PluginContext[\"buildStart\"] })\n // if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n // await Promise.all(parallelPromises)\n // parallelPromises.length = 0\n // await this.execute({\n // strategy: 'hookParallel',\n // hookName,\n // parameters,\n // plugin,\n // })\n // }\n const promise: Promise<TOuput> | null = this.execute({ strategy: 'hookParallel', hookName, parameters, plugin })\n\n if (promise) {\n parallelPromises.push(promise)\n }\n }\n const results = await Promise.allSettled(parallelPromises)\n const errors = results.filter((result) => result.status === 'rejected').map((result) => (result as PromiseRejectedResult).reason) as PluginError[]\n\n if (errors.length) {\n throw new ParallelPluginError('Error', { errors, pluginManager: this })\n }\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n *\n * Chains, reduces returned value, handling the reduced value as the first hook argument\n */\n hookReduceArg0<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n reduce,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n reduce: (reduction: Argument0<H>, result: ReturnType<ParseResult<H>>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n }): Promise<Argument0<H>> {\n const [argument0, ...rest] = parameters\n\n let promise: Promise<Argument0<H>> = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise\n .then((arg0) => {\n const value = this.execute({\n strategy: 'hookReduceArg0',\n hookName,\n parameters: [arg0, ...rest] as Parameters<PluginLifecycle[H]>,\n plugin,\n })\n return value\n })\n .then((result) => reduce.call(this.core.api, argument0, result as ReturnType<ParseResult<H>>, plugin)) as Promise<Argument0<H>>\n }\n return promise\n }\n\n /**\n * Chains plugins\n */\n hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: { hookName: H; parameters?: Parameters<PluginLifecycle[H]> }) {\n let promise: Promise<void | null> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() =>\n this.execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n })\n )\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle): KubbPlugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n return plugins\n }\n\n public getPlugin(hookName: keyof PluginLifecycle, pluginName: string): KubbPlugin {\n const plugins = [...this.plugins]\n\n const pluginByPluginName = plugins.find((item) => item.name === pluginName && item[hookName])\n if (!pluginByPluginName) {\n // fallback on the core plugin when there is no match\n\n return this.core\n }\n return pluginByPluginName\n }\n\n private addExecuter(executer: Executer | undefined) {\n this.onExecute?.call(this, executer, this)\n\n if (executer) {\n this.executed.push(executer)\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private execute<H extends PluginLifecycleHooks, TResult = void>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: KubbPlugin\n }): Promise<TResult> | null {\n const hook = plugin[hookName]\n\n if (!hook) {\n return null\n }\n\n return Promise.resolve()\n .then(() => {\n // add current execution to the variable `this.executer` so we can track which plugin is getting called\n this.executer = {\n strategy,\n hookName,\n plugin,\n }\n\n if (typeof hook === 'function') {\n const hookResult = (hook as Function).apply(this.core.api, parameters) as TResult\n\n if (isPromise(hookResult)) {\n return Promise.resolve(hookResult).then((result: TResult) => {\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return result\n })\n }\n\n return hookResult\n }\n\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return hook\n })\n .catch((e: Error) => {\n this.catcher<H>(e, plugin, hookName)\n }) as Promise<TResult>\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n plugin: KubbPlugin\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n\n if (!hook) {\n return null\n }\n\n try {\n // add current execution to the variable `this.executer` so we can track which plugin is getting called\n this.executer = {\n strategy,\n hookName,\n plugin,\n }\n\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply(this.core.api, parameters) as ReturnType<ParseResult<H>>\n\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return fn\n }\n\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return hook\n } catch (e) {\n this.catcher<H>(e as Error, plugin, hookName)\n\n return null as ReturnType<ParseResult<H>>\n }\n }\n\n private catcher<H extends PluginLifecycleHooks>(e: Error, plugin: KubbPlugin, hookName: H) {\n const text = `${e.message} (plugin: ${plugin.name}, hook: ${hookName})\\n`\n\n throw new PluginError(text, { cause: e, pluginManager: this })\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { KubbPlugin } from '../../types.ts'\n\nexport class ValidationPluginError extends Error {}\n\nexport function validatePlugins(plugins: KubbPlugin[], dependedPluginNames: string | string[]): true {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n pluginNames.forEach((pluginName) => {\n const exists = plugins.some((plugin) => plugin.name === pluginName)\n if (!exists) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n })\n\n return true\n}\n","export class SummaryError extends Error {\n public summary: string[]\n\n constructor(message: string, options: { cause: Error; summary?: string[] }) {\n super(message, { cause: options.cause })\n\n this.name = 'SummaryError'\n this.summary = options.summary || []\n }\n}\n","import { getFileSource } from './managers/fileManager/index.ts'\nimport { PluginManager } from './managers/pluginManager/index.ts'\nimport { clean, isURL, read } from './utils/index.ts'\nimport { isPromise } from './utils/isPromise.ts'\n\nimport type { Ora } from 'ora'\nimport type { File } from './managers/fileManager/index.ts'\nimport type { OnExecute } from './managers/pluginManager/index.ts'\nimport type { BuildOutput, KubbPlugin, LogLevel, PluginContext, TransformResult } from './types.ts'\nimport type { QueueTask } from './utils/index.ts'\n\nexport type Logger<TParams = Record<string, any>> = {\n log: (message: string | null, options: { logLevel: LogLevel; params?: TParams }) => void\n spinner?: Ora\n}\ntype BuildOptions = {\n config: PluginContext['config']\n logger?: Logger\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n\n _plugin: KubbPlugin\n): Promise<string | null> {\n return result\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const { config, logger } = options\n\n try {\n if (!isURL(config.input.path)) {\n await read(config.input.path)\n }\n } catch (e: any) {\n throw new Error('Cannot read file/URL defined in `input.path` or set with --input in the CLI of your Kubb config', { cause: e })\n }\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const queueTask = async (id: string, file: File) => {\n const { path } = file\n\n let code: string | null = getFileSource(file)\n\n const { result: loadedResult } = await pluginManager.hookFirst({\n hookName: 'load',\n parameters: [path],\n })\n if (loadedResult && isPromise(loadedResult)) {\n code = await loadedResult\n }\n if (loadedResult && !isPromise(loadedResult)) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0({\n hookName: 'transform',\n parameters: [code, path],\n reduce: transformReducer,\n })\n\n if (config.output.write || config.output.write === undefined) {\n await pluginManager.hookParallel({\n hookName: 'writeFile',\n parameters: [transformedCode, path],\n })\n }\n }\n }\n\n const onExecute: OnExecute = (executer) => {\n if (!executer) {\n return\n }\n\n const { hookName, plugin } = executer\n\n if (config.logLevel === 'info' && logger) {\n logger.log(null, { logLevel: config.logLevel, params: { hookName, pluginName: plugin.name } })\n }\n }\n\n const pluginManager = new PluginManager(config, { task: queueTask as QueueTask<File>, onExecute })\n const { plugins, fileManager } = pluginManager\n\n await pluginManager.hookParallel<'validate', true>({\n hookName: 'validate',\n parameters: [plugins],\n })\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n return { files: fileManager.files.map((file) => ({ ...file, source: getFileSource(file) })), pluginManager }\n}\n","import type { CLIOptions, KubbUserConfig, MaybePromise } from './types.ts'\n\n/**\n * Type helper to make it easier to use kubb.config.js\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class Generator<TOptions extends object = object> {\n private _options: TOptions = {} as TOptions\n\n constructor(options: TOptions = {} as TOptions) {\n if (options) {\n this._options = {\n ...this._options,\n ...options,\n }\n }\n return this\n }\n\n get options() {\n return this._options\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import { Generator } from './Generator.ts'\n\n/**\n * Abstract class that contains the building blocks for plugins to create their own SchemaGenerator\n */\nexport abstract class SchemaGenerator<TOptions extends object, TInput, TOutput> extends Generator<TOptions> {\n abstract build(schema: TInput, name: string, description?: string): TOutput\n}\n","import { build } from './build.ts'\n\nexport * from './config.ts'\nexport * from './build.ts'\nexport * from './types.ts'\nexport { CorePluginOptions, createPlugin, name } from './plugin.ts'\n\nexport * from './utils/index.ts'\nexport * from './managers/index.ts'\nexport * from './generators/index.ts'\n\nexport default build\n"]}
package/dist/index.d.ts CHANGED
@@ -282,6 +282,14 @@ declare class ParallelPluginError extends Error {
282
282
  });
283
283
  }
284
284
 
285
+ declare class SummaryError extends Error {
286
+ summary: string[];
287
+ constructor(message: string, options: {
288
+ cause: Error;
289
+ summary?: string[];
290
+ });
291
+ }
292
+
285
293
  interface Register {
286
294
  }
287
295
  type MaybePromise<T> = Promise<T> | T;
@@ -560,4 +568,4 @@ declare abstract class SchemaGenerator<TOptions extends object, TInput, TOutput>
560
568
  abstract build(schema: TInput, name: string, description?: string): TOutput;
561
569
  }
562
570
 
563
- export { Argument0, BuildOutput, CLIOptions, Cache, CacheStore, CorePluginOptions, Executer, File, FileManager, FileName, Generator, KubbConfig, KubbJSONPlugin, KubbObjectPlugin, KubbPlugin, KubbPluginKind, KubbUserConfig, LogLevel, Logger, MaybePromise, OnExecute, OptionalPath, ParallelPluginError, ParseResult, Path, PathMode, PluginContext, PluginError, PluginFactoryOptions, PluginLifecycle, PluginLifecycleHooks, PluginManager, Queue, QueueTask, Register, ResolveNameParams, ResolvePathParams, SafeParseResult, SchemaGenerator, Status, Strategy, TransformResult, TreeNode, TreeNodeOptions, UUID, ValidationPluginError, build, clean, combineFiles, createJSDocBlockText, createPlugin, createPluginCache, build as default, defineConfig, getEncodedText, getFileSource, getPathMode, getRelativePath, getStackTrace, getUniqueName, hooks, isPromise, isURL, name, nameSorter, objectToParameters, read, renderTemplate, throttle, timeout, transformReservedWord, uniqueId, validatePlugins, write, writeIndexes };
571
+ export { Argument0, BuildOutput, CLIOptions, Cache, CacheStore, CorePluginOptions, Executer, File, FileManager, FileName, Generator, KubbConfig, KubbJSONPlugin, KubbObjectPlugin, KubbPlugin, KubbPluginKind, KubbUserConfig, LogLevel, Logger, MaybePromise, OnExecute, OptionalPath, ParallelPluginError, ParseResult, Path, PathMode, PluginContext, PluginError, PluginFactoryOptions, PluginLifecycle, PluginLifecycleHooks, PluginManager, Queue, QueueTask, Register, ResolveNameParams, ResolvePathParams, SafeParseResult, SchemaGenerator, Status, Strategy, SummaryError, TransformResult, TreeNode, TreeNodeOptions, UUID, ValidationPluginError, build, clean, combineFiles, createJSDocBlockText, createPlugin, createPluginCache, build as default, defineConfig, getEncodedText, getFileSource, getPathMode, getRelativePath, getStackTrace, getUniqueName, hooks, isPromise, isURL, name, nameSorter, objectToParameters, read, renderTemplate, throttle, timeout, transformReservedWord, uniqueId, validatePlugins, write, writeIndexes };
package/dist/index.js CHANGED
@@ -516,9 +516,19 @@ ${file.source}`,
516
516
  this.setStatus(id, "removed");
517
517
  }
518
518
  async write(...params) {
519
+ if (this.queue) {
520
+ return this.queue.run(async () => {
521
+ return write(...params);
522
+ });
523
+ }
519
524
  return write(...params);
520
525
  }
521
526
  async read(...params) {
527
+ if (this.queue) {
528
+ return this.queue.run(async () => {
529
+ return read(...params);
530
+ });
531
+ }
522
532
  return read(...params);
523
533
  }
524
534
  };
@@ -724,6 +734,7 @@ var ParallelPluginError = class extends Error {
724
734
  pluginManager;
725
735
  constructor(message, options) {
726
736
  super(message, { cause: options.cause });
737
+ this.name = "ParallelPluginError";
727
738
  this.errors = options.errors;
728
739
  this.pluginManager = options.pluginManager;
729
740
  }
@@ -734,6 +745,7 @@ var PluginError = class extends Error {
734
745
  pluginManager;
735
746
  constructor(message, options) {
736
747
  super(message, { cause: options.cause });
748
+ this.name = "PluginError";
737
749
  this.pluginManager = options.pluginManager;
738
750
  }
739
751
  };
@@ -916,7 +928,6 @@ var PluginManager = class {
916
928
  const results = await Promise.allSettled(parallelPromises);
917
929
  const errors = results.filter((result) => result.status === "rejected").map((result) => result.reason);
918
930
  if (errors.length) {
919
- console.log(errors);
920
931
  throw new ParallelPluginError("Error", { errors, pluginManager: this });
921
932
  }
922
933
  return results.filter((result) => result.status === "fulfilled").map((result) => result.value);
@@ -1098,6 +1109,16 @@ function validatePlugins(plugins, dependedPluginNames) {
1098
1109
  return true;
1099
1110
  }
1100
1111
 
1112
+ // src/managers/pluginManager/SummaryError.ts
1113
+ var SummaryError = class extends Error {
1114
+ summary;
1115
+ constructor(message, options) {
1116
+ super(message, { cause: options.cause });
1117
+ this.name = "SummaryError";
1118
+ this.summary = options.summary || [];
1119
+ }
1120
+ };
1121
+
1101
1122
  // src/build.ts
1102
1123
  async function transformReducer(_previousCode, result, _plugin) {
1103
1124
  return result;
@@ -1191,4 +1212,6 @@ var SchemaGenerator = class extends Generator {
1191
1212
  // src/index.ts
1192
1213
  var src_default = build;
1193
1214
 
1194
- export { FileManager, Generator, ParallelPluginError, PluginError, PluginManager, Queue, SchemaGenerator, TreeNode, ValidationPluginError, build, clean, combineFiles, createJSDocBlockText, createPlugin, createPluginCache, src_default as default, defineConfig, getEncodedText, getFileSource, getPathMode, getRelativePath, getStackTrace, getUniqueName, hooks, isPromise, isURL, name, nameSorter, objectToParameters, read, renderTemplate, throttle, timeout, transformReservedWord, uniqueId, validatePlugins, write, writeIndexes };
1215
+ export { FileManager, Generator, ParallelPluginError, PluginError, PluginManager, Queue, SchemaGenerator, SummaryError, TreeNode, ValidationPluginError, build, clean, combineFiles, createJSDocBlockText, createPlugin, createPluginCache, src_default as default, defineConfig, getEncodedText, getFileSource, getPathMode, getRelativePath, getStackTrace, getUniqueName, hooks, isPromise, isURL, name, nameSorter, objectToParameters, read, renderTemplate, throttle, timeout, transformReservedWord, uniqueId, validatePlugins, write, writeIndexes };
1216
+ //# sourceMappingURL=out.js.map
1217
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/managers/fileManager/FileManager.ts","../src/utils/isPromise.ts","../src/utils/write.ts","../src/utils/cache.ts","../src/utils/read.ts","../src/utils/isURL.ts","../src/utils/objectToParameters.ts","../src/utils/nameSorter.ts","../src/utils/jsdoc.ts","../src/utils/getUniqueName.ts","../src/utils/timeout.ts","../src/utils/Queue.ts","../src/utils/getEncodedText.ts","../src/utils/renderTemplate.ts","../src/utils/clean.ts","../src/utils/TreeNode.ts","../src/utils/transformReservedWord.ts","../src/utils/getStackTrace.ts","../src/utils/uniqueId.ts","../src/utils/throttle.ts","../src/managers/fileManager/utils.ts","../src/plugin.ts","../src/managers/pluginManager/ParallelPluginError.ts","../src/managers/pluginManager/PluginError.ts","../src/managers/pluginManager/PluginManager.ts","../src/managers/pluginManager/validate.ts","../src/managers/pluginManager/SummaryError.ts","../src/build.ts","../src/config.ts","../src/generators/Generator.ts","../src/generators/SchemaGenerator.ts","../src/index.ts"],"names":["pathParser","fs","dummyObject","v8StackTrace","timeout","files","name"],"mappings":"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","sourcesContent":["import crypto from 'node:crypto'\n\nimport { read, write } from '../../utils/index.ts'\n\nimport type { Queue, QueueTask } from '../../utils/index.ts'\nimport type { CacheStore, File, Status, UUID } from './types.ts'\n\nexport class FileManager {\n private cache: Map<CacheStore['id'], CacheStore> = new Map()\n\n private task?: QueueTask<File>\n\n private queue?: Queue\n\n constructor(options?: { queue: Queue; task?: QueueTask<File> }) {\n if (options) {\n this.task = options.task\n this.queue = options.queue\n }\n }\n\n private getCache(id: UUID) {\n return this.cache.get(id)\n }\n\n getCacheByPath(path: string | undefined): CacheStore | undefined {\n let cache\n\n this.cache.forEach((item) => {\n if (item.file.path === path) {\n cache = item\n }\n })\n return cache as unknown as CacheStore\n }\n\n get files() {\n const files: File[] = []\n this.cache.forEach((item) => {\n files.push(item.file)\n })\n\n return files\n }\n\n get cachedFiles() {\n const files: CacheStore[] = []\n this.cache.forEach((item) => {\n files.push(item)\n })\n\n return files\n }\n\n async add(file: File) {\n const cacheItem: CacheStore = { id: crypto.randomUUID(), file, status: 'new' as Status }\n\n this.cache.set(cacheItem.id, cacheItem)\n\n if (this.queue) {\n await this.queue.run(async () => {\n await this.task?.(cacheItem.id, file)\n })\n }\n\n return file\n }\n\n addOrAppend(file: File) {\n if (!file.path.endsWith(file.fileName)) {\n // console.warn(`Path ${file.path}(file.path) should end with the fileName ${file.fileName}(file.filename)`)\n }\n\n const previousCache = this.getCacheByPath(file.path)\n\n if (previousCache) {\n // empty source will also return true when using includes\n const sourceAlreadyExists = file.source && previousCache.file.source.includes(file.source)\n\n if (sourceAlreadyExists) {\n return Promise.resolve(file)\n }\n\n this.cache.delete(previousCache.id)\n\n return this.add({\n ...file,\n source: `${previousCache.file.source}\\n${file.source}`,\n imports: [...(previousCache.file.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.file.exports || []), ...(file.exports || [])],\n })\n }\n return this.add(file)\n }\n\n setStatus(id: UUID, status: Status) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n cacheItem.status = status\n this.cache.set(id, cacheItem)\n }\n\n get(id: UUID) {\n const cacheItem = this.getCache(id)\n return cacheItem?.file\n }\n\n remove(id: UUID) {\n const cacheItem = this.getCache(id)\n if (!cacheItem) {\n return\n }\n\n this.setStatus(id, 'removed')\n }\n\n async write(...params: Parameters<typeof write>) {\n if (this.queue) {\n return this.queue.run(async () => {\n return write(...params)\n })\n }\n\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>) {\n if (this.queue) {\n return this.queue.run(async () => {\n return read(...params)\n })\n }\n\n return read(...params)\n }\n}\n","import type { MaybePromise } from '../types.ts'\n\nexport function isPromise<T>(result: MaybePromise<T>): result is Promise<T> {\n return typeof (result as Promise<unknown>)?.then === 'function'\n}\n","import fs from 'fs-extra'\nimport pathParser from 'node:path'\n\nasync function safeWriteFileToPath(path: string, data: string): Promise<void> {\n // resolve the full path and get just the directory, ignoring the file and extension\n const passedPath = pathParser.dirname(pathParser.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 // write the file to the newly created directory\n return fs.writeFile(pathParser.resolve(path), data, { encoding: 'utf-8' })\n}\n\nexport async function write(data: string, path: string): Promise<void> {\n try {\n await fs.stat(path)\n const oldContent = await fs.readFile(path, { encoding: 'utf-8' })\n if (oldContent?.toString() === data) {\n return\n }\n } catch (_err) {\n return safeWriteFileToPath(path, data)\n }\n\n return safeWriteFileToPath(path, data)\n}\n","export 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 Record<string, [number, unknown]>>(Store: 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 pathParser from 'node:path'\nimport fs from 'fs-extra'\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 = pathParser.relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const path = slash(relativePath, platform)\n\n if (path.startsWith('../')) {\n return path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))\n }\n\n return `./${path.replace(pathParser.basename(path), pathParser.basename(path, pathParser.extname(filePath)))}`\n}\n\nexport type PathMode = 'file' | 'directory'\n\nexport function getPathMode(path: string | undefined | null): PathMode {\n if (!path) {\n return 'directory'\n }\n return pathParser.extname(path) ? 'file' : 'directory'\n}\n\nexport async function read(path: string): Promise<string> {\n return fs.readFile(path, { encoding: 'utf8' })\n}\n","export function isURL(data: string) {\n try {\n const url = new URL(data)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n}\n","import { camelCase, camelCaseTransformMerge } from 'change-case'\n\ntype Data = string[][]\n\ntype Options = {\n typed?: boolean\n}\n/**\n * Convert an string array to a string of parameters that can be used inside a function\n * The parameter name is converted to `camelcase`\n */\nexport function objectToParameters(data: Data, options: Options = {}) {\n const { typed } = options\n\n return data\n .reduce((acc, [key, value]) => {\n const parameterName = camelCase(key, { delimiter: '', transform: camelCaseTransformMerge })\n\n if (typed) {\n acc.push(`${parameterName}: ${value}[\"${key}\"]`)\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }, [] as string[])\n .join(', ')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T) {\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","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n const text = filteredComments.reduce((acc, comment) => {\n return `${acc}\\n* ${comment}`\n }, '/**')\n\n return `${text}\\n*/`\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>) {\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","export async function timeout(ms: number) {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","export type QueueTask<T = unknown> = {\n (...args: unknown[]): Promise<T> | Promise<void>\n}\n\ninterface QueueItem {\n reject: <T>(reason?: T) => void\n resolve: <T>(value: T | PromiseLike<T>) => void\n task: QueueTask<unknown>\n}\n\nexport class Queue {\n private readonly queue: QueueItem[] = []\n\n workerCount = 0\n\n private maxParallel: number\n\n constructor(maxParallel: number) {\n this.maxParallel = maxParallel\n }\n\n run<T>(task: QueueTask<T>): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const item: QueueItem = { reject, resolve, task } as QueueItem\n this.queue.push(item)\n this.work()\n })\n }\n\n private work(): void {\n if (this.workerCount >= this.maxParallel) {\n return\n }\n this.workerCount++\n\n let entry: QueueItem | undefined\n while ((entry = this.queue.shift())) {\n const { reject, resolve, task } = entry\n task()\n .then((result) => resolve(result))\n .catch((err) => reject(err))\n }\n\n this.workerCount--\n }\n}\n","export function getEncodedText(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n","export function renderTemplate<TData extends Record<string, string> = Record<string, string>>(template: string, data: TData | undefined = undefined) {\n if (!data) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n return template.replace(/{{(.*?)}}/g, (match) => {\n const value = data[match.split(/{{|}}/).filter(Boolean)[0].trim()]\n\n return value || ''\n })\n}\n","import { rimraf } from 'rimraf'\n\nexport async function clean(path: string) {\n return rimraf(path)\n}\n","import dirTree from 'directory-tree'\n\nimport { getPathMode } from '../utils/read.ts'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\nexport class TreeNode<T = unknown> {\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<T = unknown>(path: string, options: TreeNodeOptions = {}): TreeNode<T> | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : ([options.exclude].filter(Boolean) as RegExp[])\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 || getPathMode(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 || getPathMode(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 as TreeNode<T>\n } catch (e) {\n throw new Error('Something went wrong with creating index files with the TreehNode class', { cause: e })\n }\n }\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 | null) {\n if (word && reservedWords.includes(word)) {\n return `_${word}`\n }\n\n return word\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function getStackTrace(belowFn?: Function): NodeJS.CallSite[] {\n const oldLimit = Error.stackTraceLimit\n Error.stackTraceLimit = Infinity\n\n const dummyObject = {} as any\n\n const v8Handler = Error.prepareStackTrace\n Error.prepareStackTrace = function prepareStackTrace(dummyObject, v8StackTrace) {\n return v8StackTrace\n }\n Error.captureStackTrace(dummyObject as object, belowFn || getStackTrace)\n\n const v8StackTrace = dummyObject.stack\n Error.prepareStackTrace = v8Handler\n Error.stackTraceLimit = oldLimit\n\n return v8StackTrace as NodeJS.CallSite[]\n}\n","export const uniqueId = (\n (counter) =>\n (str = '') =>\n `${str}${++counter}`\n)(0)\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","import pathParser from 'node:path'\n\nimport { createExportDeclaration, createImportDeclaration, print } from '@kubb/ts-codegen'\n\nimport { TreeNode } from '../../utils/index.ts'\n\nimport type ts from 'typescript'\nimport type { Path } from '../../types.ts'\nimport type { PathMode, TreeNodeOptions } from '../../utils/index.ts'\nimport type { File } from './types.ts'\n\ntype TreeNodeData = { type: PathMode; path: Path; name: string }\n\nexport function writeIndexes(root: string, options: TreeNodeOptions = {}): File[] | null {\n const tree = TreeNode.build<TreeNodeData>(root, { extensions: /\\.ts/, ...options })\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: File[], currentTree: typeof tree) => {\n if (!currentTree.children) {\n return []\n }\n\n if (currentTree.children?.length > 1) {\n const path = pathParser.resolve(currentTree.data.path, 'index.ts')\n const exports = currentTree.children\n .map((file) => {\n if (!file) {\n return undefined\n }\n\n const importPath: string = file.data.type === 'directory' ? `./${file.data.name}` : `./${file.data.name.replace(/\\.[^.]*$/, '')}`\n\n // TODO weird hacky fix\n if (importPath.includes('index') && path.includes('index')) {\n return undefined\n }\n\n return { path: importPath }\n })\n .filter(Boolean) as File['exports']\n\n files.push({\n path,\n fileName: 'index.ts',\n source: '',\n exports,\n })\n } else {\n currentTree.children?.forEach((child) => {\n const path = pathParser.resolve(currentTree.data.path, 'index.ts')\n const importPath = child.data.type === 'directory' ? `./${child.data.name}` : `./${child.data.name.replace(/\\.[^.]*$/, '')}`\n\n files.push({\n path,\n fileName: 'index.ts',\n source: '',\n exports: [{ path: importPath }],\n })\n })\n }\n\n currentTree.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n const files = fileReducer([], tree)\n\n return files\n}\n\nexport function combineFiles(files: Array<File | null>): File[] {\n return (files.filter(Boolean) as File[]).reduce((acc, curr: File) => {\n const prevIndex = acc.findIndex((item) => item.path === curr.path)\n\n if (prevIndex !== -1) {\n const prev = acc[prevIndex]\n acc[prevIndex] = {\n ...curr,\n source: prev.source && curr.source ? `${prev.source}\\n${curr.source}` : \"'\",\n imports: [...(prev.imports || []), ...(curr.imports || [])],\n exports: [...(prev.exports || []), ...(curr.exports || [])],\n }\n } else {\n acc.push(curr)\n }\n\n return acc\n }, [] as File[])\n}\n\nexport function getFileSource(file: File): string {\n let { source } = file\n\n // TODO make generic check\n if (!file.fileName.endsWith('.ts')) {\n return file.source\n }\n const imports: File['imports'] = []\n const exports: File['exports'] = []\n\n file.imports?.forEach((curr) => {\n const existingImport = imports.find((imp) => imp.path === curr.path)\n\n if (!existingImport) {\n imports.push({\n ...curr,\n name: Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name,\n })\n }\n\n if (existingImport && !Array.isArray(existingImport.name) && existingImport.name !== curr.name) {\n imports.push(curr)\n }\n\n if (existingImport && Array.isArray(existingImport.name)) {\n if (Array.isArray(curr.name)) {\n existingImport.name = [...new Set([...existingImport.name, ...curr.name])]\n }\n }\n })\n\n file.exports?.forEach((curr) => {\n const exists = exports.find((imp) => imp.path === curr.path)\n if (!exists) {\n exports.push({\n ...curr,\n name: Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name,\n })\n }\n\n if (exists && !Array.isArray(exists.name) && exists.name !== curr.name && exists.asAlias === curr.asAlias) {\n exports.push(curr)\n }\n\n if (exists && Array.isArray(exists.name)) {\n if (Array.isArray(curr.name)) {\n exists.name = [...new Set([...exists.name, ...curr.name])]\n }\n }\n })\n\n const importNodes = imports.reduce((prev, curr) => {\n return [...prev, createImportDeclaration({ name: curr.name, path: curr.path, isTypeOnly: curr.isTypeOnly })]\n }, [] as ts.ImportDeclaration[])\n const importSource = print(importNodes)\n\n const exportNodes = exports.reduce((prev, curr) => {\n return [...prev, createExportDeclaration({ name: curr.name, path: curr.path, isTypeOnly: curr.isTypeOnly, asAlias: curr.asAlias })]\n }, [] as ts.ExportDeclaration[])\n const exportSource = print(exportNodes)\n\n if (importSource) {\n source = `${importSource}\\n${source}`\n }\n\n if (exportSource) {\n source = `${exportSource}\\n${source}`\n }\n\n return source\n}\n","import pathParser from 'node:path'\n\nimport { createPluginCache, getStackTrace, transformReservedWord } from './utils/index.ts'\n\nimport type { FileManager } from './managers/fileManager/FileManager.ts'\nimport type { Executer } from './managers/index.ts'\nimport type { KubbPlugin, PluginContext, PluginFactoryOptions, PluginLifecycleHooks } from './types.ts'\n\ntype KubbPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (\n options: T['options']\n) => T['nested'] extends true ? Array<KubbPlugin<T>> : KubbPlugin<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: KubbPluginFactory<T>) {\n return (options: T['options']) => {\n const plugin = factory(options)\n if (Array.isArray(plugin)) {\n throw new Error('Not implemented')\n }\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n return plugin\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n load: PluginContext['load']\n getExecuter: () => Executer<PluginLifecycleHooks> | undefined\n}\n\n// not publicly exported\nexport type CorePluginOptions = PluginFactoryOptions<Options, false, PluginContext>\n\nexport const name = 'core' as const\n\nexport const definePlugin = createPlugin<CorePluginOptions>((options) => {\n const { fileManager, resolvePath, resolveName, load } = options\n\n const api: PluginContext = {\n get config() {\n return options.config\n },\n fileManager,\n async addFile(...files) {\n // TODO unstable, based on stack trace and name of the file(can be different)\n const trace = getStackTrace()\n const plugins = options.config.plugins\n ?.filter((plugin) => trace[1].getFileName()?.includes(plugin.name))\n .sort((a, b) => {\n if (a.name.length < b.name.length) {\n return 1\n }\n if (a.name.length > b.name.length) {\n return -1\n }\n return 0\n })\n\n const pluginName = plugins?.[0]?.name\n\n return Promise.all(\n files.map((file) => {\n const fileWithMeta = {\n ...file,\n meta: {\n ...(file.meta || {}),\n pluginName,\n },\n }\n\n if (file.override) {\n return fileManager.add(fileWithMeta)\n }\n\n return fileManager.addOrAppend(fileWithMeta)\n })\n )\n },\n resolvePath,\n resolveName: (params) => {\n const name = resolveName(params)\n\n return transformReservedWord(name)\n },\n load,\n cache: createPluginCache(Object.create(null)),\n }\n\n return {\n name,\n options,\n api,\n resolvePath(fileName) {\n const root = pathParser.resolve(this.config.root, this.config.output.path)\n\n return pathParser.resolve(root, fileName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import type { PluginError } from './PluginError.ts'\nimport type { PluginManager } from './PluginManager'\n\nexport class ParallelPluginError extends Error {\n public errors: PluginError[]\n\n public pluginManager: PluginManager\n\n constructor(message: string, options: { cause?: Error; errors: PluginError[]; pluginManager: PluginManager }) {\n super(message, { cause: options.cause })\n\n this.name = 'ParallelPluginError'\n this.errors = options.errors\n this.pluginManager = options.pluginManager\n }\n}\n","import type { PluginManager } from './PluginManager'\n\nexport class PluginError extends Error {\n public pluginManager: PluginManager\n\n constructor(message: string, options: { cause?: Error; pluginManager: PluginManager }) {\n super(message, { cause: options.cause })\n\n this.name = 'PluginError'\n this.pluginManager = options.pluginManager\n }\n}\n","/* eslint-disable @typescript-eslint/ban-types */\n\nimport { definePlugin } from '../../plugin.ts'\nimport { isPromise } from '../../utils/isPromise.ts'\nimport { Queue } from '../../utils/Queue.ts'\nimport { FileManager } from '../fileManager/FileManager.ts'\nimport type { File } from '../fileManager/types.ts'\nimport { ParallelPluginError } from './ParallelPluginError.ts'\nimport { PluginError } from './PluginError.ts'\n\nimport type { CorePluginOptions } from '../../plugin.ts'\nimport type { KubbConfig, KubbPlugin, MaybePromise, PluginLifecycle, PluginLifecycleHooks, ResolveNameParams, ResolvePathParams } from '../../types.ts'\nimport type { QueueTask } from '../../utils/Queue.ts'\nimport type { Argument0, Executer, OnExecute, ParseResult, SafeParseResult, Strategy } from './types.ts'\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\n// This will make sure no input hook is omitted\nconst hookNames: {\n [P in PluginLifecycleHooks]: 1\n} = {\n validate: 1,\n buildStart: 1,\n resolvePath: 1,\n resolveName: 1,\n load: 1,\n transform: 1,\n writeFile: 1,\n buildEnd: 1,\n}\nexport const hooks = Object.keys(hookNames) as [PluginLifecycleHooks]\n\ntype Options = { task: QueueTask<File>; onExecute?: OnExecute<PluginLifecycleHooks> }\n\nexport class PluginManager {\n public plugins: KubbPlugin[]\n\n public readonly fileManager: FileManager\n\n private readonly onExecute?: OnExecute\n\n private readonly core: KubbPlugin<CorePluginOptions>\n\n public queue: Queue\n\n public executer: Executer | undefined\n\n public executed: Executer[] = []\n\n constructor(config: KubbConfig, options: Options) {\n this.onExecute = options.onExecute?.bind(this)\n this.queue = new Queue(10)\n\n this.fileManager = new FileManager({ task: options.task, queue: this.queue })\n this.core = definePlugin({\n config,\n fileManager: this.fileManager,\n load: this.load,\n resolvePath: this.resolvePath,\n resolveName: this.resolveName,\n getExecuter: this.getExecuter.bind(this),\n }) as KubbPlugin<CorePluginOptions> & {\n api: CorePluginOptions['api']\n }\n this.plugins = [this.core, ...(config.plugins || [])]\n }\n\n getExecuter() {\n return this.executer\n }\n\n resolvePath = (params: ResolvePathParams) => {\n if (params.pluginName) {\n return this.hookForPluginSync({\n pluginName: params.pluginName,\n hookName: 'resolvePath',\n parameters: [params.fileName, params.directory, params.options],\n })\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.fileName, params.directory, params.options],\n }).result\n }\n\n resolveName = (params: ResolveNameParams) => {\n if (params.pluginName) {\n return this.hookForPluginSync({\n pluginName: params.pluginName,\n hookName: 'resolveName',\n parameters: [params.name],\n })\n }\n return this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [params.name],\n }).result\n }\n\n load = async (id: string) => {\n return this.hookFirst({\n hookName: 'load',\n parameters: [id],\n })\n }\n\n /**\n *\n * Run only hook for a specific plugin name\n */\n hookForPlugin<H extends PluginLifecycleHooks>({\n pluginName,\n hookName,\n parameters,\n }: {\n pluginName: string\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const plugin = this.getPlugin(hookName, pluginName)\n\n return this.execute({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n }\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginName,\n hookName,\n parameters,\n }: {\n pluginName: string\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n }): ReturnType<ParseResult<H>> | null {\n const plugin = this.getPlugin(hookName, pluginName)\n\n return this.executeSync({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n }\n\n /**\n *\n * Chains, first non-null result stops and returns\n */\n hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): Promise<SafeParseResult<H>> {\n let promise: Promise<SafeParseResult<H>> = Promise.resolve(null as unknown as SafeParseResult<H>)\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) {\n continue\n }\n promise = promise.then(async (parseResult) => {\n if (parseResult?.result != null) {\n return parseResult\n }\n const value = await this.execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n\n return Promise.resolve({\n plugin,\n result: value,\n } as typeof parseResult)\n })\n }\n\n return promise\n }\n\n /**\n *\n * Chains, first non-null result stops and returns\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n skipped?: ReadonlySet<KubbPlugin> | null\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n if (skipped && skipped.has(plugin)) {\n continue\n }\n\n parseResult = {\n result: this.executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n }),\n plugin,\n } as SafeParseResult<H>\n\n if (parseResult?.result != null) {\n break\n }\n }\n return parseResult\n }\n\n /**\n *\n * Parallel, runs all plugins\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n }: {\n hookName: H\n parameters?: Parameters<PluginLifecycle[H]> | undefined\n }): Promise<Awaited<TOuput>[]> {\n const parallelPromises: Promise<TOuput>[] = []\n\n for (const plugin of this.getSortedPlugins(hookName)) {\n // TODO implement sequential with `buildStart` as an object({ sequential: boolean; handler: PluginContext[\"buildStart\"] })\n // if ((plugin[hookName] as { sequential?: boolean })?.sequential) {\n // await Promise.all(parallelPromises)\n // parallelPromises.length = 0\n // await this.execute({\n // strategy: 'hookParallel',\n // hookName,\n // parameters,\n // plugin,\n // })\n // }\n const promise: Promise<TOuput> | null = this.execute({ strategy: 'hookParallel', hookName, parameters, plugin })\n\n if (promise) {\n parallelPromises.push(promise)\n }\n }\n const results = await Promise.allSettled(parallelPromises)\n const errors = results.filter((result) => result.status === 'rejected').map((result) => (result as PromiseRejectedResult).reason) as PluginError[]\n\n if (errors.length) {\n throw new ParallelPluginError('Error', { errors, pluginManager: this })\n }\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n *\n * Chains, reduces returned value, handling the reduced value as the first hook argument\n */\n hookReduceArg0<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n reduce,\n }: {\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n reduce: (reduction: Argument0<H>, result: ReturnType<ParseResult<H>>, plugin: KubbPlugin) => MaybePromise<Argument0<H> | null>\n }): Promise<Argument0<H>> {\n const [argument0, ...rest] = parameters\n\n let promise: Promise<Argument0<H>> = Promise.resolve(argument0)\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise\n .then((arg0) => {\n const value = this.execute({\n strategy: 'hookReduceArg0',\n hookName,\n parameters: [arg0, ...rest] as Parameters<PluginLifecycle[H]>,\n plugin,\n })\n return value\n })\n .then((result) => reduce.call(this.core.api, argument0, result as ReturnType<ParseResult<H>>, plugin)) as Promise<Argument0<H>>\n }\n return promise\n }\n\n /**\n * Chains plugins\n */\n hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: { hookName: H; parameters?: Parameters<PluginLifecycle[H]> }) {\n let promise: Promise<void | null> = Promise.resolve()\n for (const plugin of this.getSortedPlugins(hookName)) {\n promise = promise.then(() =>\n this.execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n })\n )\n }\n return promise.then(noReturn)\n }\n\n private getSortedPlugins(_hookName: keyof PluginLifecycle): KubbPlugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n return plugins\n }\n\n public getPlugin(hookName: keyof PluginLifecycle, pluginName: string): KubbPlugin {\n const plugins = [...this.plugins]\n\n const pluginByPluginName = plugins.find((item) => item.name === pluginName && item[hookName])\n if (!pluginByPluginName) {\n // fallback on the core plugin when there is no match\n\n return this.core\n }\n return pluginByPluginName\n }\n\n private addExecuter(executer: Executer | undefined) {\n this.onExecute?.call(this, executer, this)\n\n if (executer) {\n this.executed.push(executer)\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n private execute<H extends PluginLifecycleHooks, TResult = void>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: KubbPlugin\n }): Promise<TResult> | null {\n const hook = plugin[hookName]\n\n if (!hook) {\n return null\n }\n\n return Promise.resolve()\n .then(() => {\n // add current execution to the variable `this.executer` so we can track which plugin is getting called\n this.executer = {\n strategy,\n hookName,\n plugin,\n }\n\n if (typeof hook === 'function') {\n const hookResult = (hook as Function).apply(this.core.api, parameters) as TResult\n\n if (isPromise(hookResult)) {\n return Promise.resolve(hookResult).then((result: TResult) => {\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return result\n })\n }\n\n return hookResult\n }\n\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return hook\n })\n .catch((e: Error) => {\n this.catcher<H>(e, plugin, hookName)\n }) as Promise<TResult>\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n private executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: Parameters<PluginLifecycle[H]>\n plugin: KubbPlugin\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n\n if (!hook) {\n return null\n }\n\n try {\n // add current execution to the variable `this.executer` so we can track which plugin is getting called\n this.executer = {\n strategy,\n hookName,\n plugin,\n }\n\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply(this.core.api, parameters) as ReturnType<ParseResult<H>>\n\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return fn\n }\n\n this.addExecuter({\n strategy,\n hookName,\n plugin,\n })\n\n return hook\n } catch (e) {\n this.catcher<H>(e as Error, plugin, hookName)\n\n return null as ReturnType<ParseResult<H>>\n }\n }\n\n private catcher<H extends PluginLifecycleHooks>(e: Error, plugin: KubbPlugin, hookName: H) {\n const text = `${e.message} (plugin: ${plugin.name}, hook: ${hookName})\\n`\n\n throw new PluginError(text, { cause: e, pluginManager: this })\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noReturn() {}\n","import type { KubbPlugin } from '../../types.ts'\n\nexport class ValidationPluginError extends Error {}\n\nexport function validatePlugins(plugins: KubbPlugin[], dependedPluginNames: string | string[]): true {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n pluginNames.forEach((pluginName) => {\n const exists = plugins.some((plugin) => plugin.name === pluginName)\n if (!exists) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n })\n\n return true\n}\n","export class SummaryError extends Error {\n public summary: string[]\n\n constructor(message: string, options: { cause: Error; summary?: string[] }) {\n super(message, { cause: options.cause })\n\n this.name = 'SummaryError'\n this.summary = options.summary || []\n }\n}\n","import { getFileSource } from './managers/fileManager/index.ts'\nimport { PluginManager } from './managers/pluginManager/index.ts'\nimport { clean, isURL, read } from './utils/index.ts'\nimport { isPromise } from './utils/isPromise.ts'\n\nimport type { Ora } from 'ora'\nimport type { File } from './managers/fileManager/index.ts'\nimport type { OnExecute } from './managers/pluginManager/index.ts'\nimport type { BuildOutput, KubbPlugin, LogLevel, PluginContext, TransformResult } from './types.ts'\nimport type { QueueTask } from './utils/index.ts'\n\nexport type Logger<TParams = Record<string, any>> = {\n log: (message: string | null, options: { logLevel: LogLevel; params?: TParams }) => void\n spinner?: Ora\n}\ntype BuildOptions = {\n config: PluginContext['config']\n logger?: Logger\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n\n _plugin: KubbPlugin\n): Promise<string | null> {\n return result\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const { config, logger } = options\n\n try {\n if (!isURL(config.input.path)) {\n await read(config.input.path)\n }\n } catch (e: any) {\n throw new Error('Cannot read file/URL defined in `input.path` or set with --input in the CLI of your Kubb config', { cause: e })\n }\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const queueTask = async (id: string, file: File) => {\n const { path } = file\n\n let code: string | null = getFileSource(file)\n\n const { result: loadedResult } = await pluginManager.hookFirst({\n hookName: 'load',\n parameters: [path],\n })\n if (loadedResult && isPromise(loadedResult)) {\n code = await loadedResult\n }\n if (loadedResult && !isPromise(loadedResult)) {\n code = loadedResult\n }\n\n if (code) {\n const transformedCode = await pluginManager.hookReduceArg0({\n hookName: 'transform',\n parameters: [code, path],\n reduce: transformReducer,\n })\n\n if (config.output.write || config.output.write === undefined) {\n await pluginManager.hookParallel({\n hookName: 'writeFile',\n parameters: [transformedCode, path],\n })\n }\n }\n }\n\n const onExecute: OnExecute = (executer) => {\n if (!executer) {\n return\n }\n\n const { hookName, plugin } = executer\n\n if (config.logLevel === 'info' && logger) {\n logger.log(null, { logLevel: config.logLevel, params: { hookName, pluginName: plugin.name } })\n }\n }\n\n const pluginManager = new PluginManager(config, { task: queueTask as QueueTask<File>, onExecute })\n const { plugins, fileManager } = pluginManager\n\n await pluginManager.hookParallel<'validate', true>({\n hookName: 'validate',\n parameters: [plugins],\n })\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n return { files: fileManager.files.map((file) => ({ ...file, source: getFileSource(file) })), pluginManager }\n}\n","import type { CLIOptions, KubbUserConfig, MaybePromise } from './types.ts'\n\n/**\n * Type helper to make it easier to use kubb.config.js\n * accepts a direct {@link KubbConfig} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport const defineConfig = (\n options:\n | MaybePromise<KubbUserConfig>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions\n ) => MaybePromise<KubbUserConfig>)\n) => options\n","/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class Generator<TOptions extends object = object> {\n private _options: TOptions = {} as TOptions\n\n constructor(options: TOptions = {} as TOptions) {\n if (options) {\n this._options = {\n ...this._options,\n ...options,\n }\n }\n return this\n }\n\n get options() {\n return this._options\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import { Generator } from './Generator.ts'\n\n/**\n * Abstract class that contains the building blocks for plugins to create their own SchemaGenerator\n */\nexport abstract class SchemaGenerator<TOptions extends object, TInput, TOutput> extends Generator<TOptions> {\n abstract build(schema: TInput, name: string, description?: string): TOutput\n}\n","import { build } from './build.ts'\n\nexport * from './config.ts'\nexport * from './build.ts'\nexport * from './types.ts'\nexport { CorePluginOptions, createPlugin, name } from './plugin.ts'\n\nexport * from './utils/index.ts'\nexport * from './managers/index.ts'\nexport * from './generators/index.ts'\n\nexport default build\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/core",
3
- "version": "1.1.12",
3
+ "version": "1.1.13",
4
4
  "description": "Generator core",
5
5
  "keywords": [
6
6
  "typescript",
@@ -44,7 +44,7 @@
44
44
  "fs-extra": "^11.1.1",
45
45
  "graceful-fs": "^4.2.11",
46
46
  "rimraf": "^5.0.1",
47
- "@kubb/ts-codegen": "1.1.12"
47
+ "@kubb/ts-codegen": "1.1.13"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/fs-extra": "^11.0.1",