@kubb/core 2.18.0 → 2.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/{chunk-SU2W2A6V.cjs → chunk-CURDPCUG.cjs} +14 -14
  2. package/dist/{chunk-ECWTIHD5.js → chunk-FRT5NM5I.js} +2 -2
  3. package/dist/{chunk-ECWTIHD5.js.map → chunk-FRT5NM5I.js.map} +1 -1
  4. package/dist/{chunk-OCUNVJPQ.cjs → chunk-I6K57NKM.cjs} +18 -18
  5. package/dist/{chunk-PXP5K73S.js → chunk-J7SXH3YG.js} +11 -13
  6. package/dist/chunk-J7SXH3YG.js.map +1 -0
  7. package/dist/{chunk-T6TAUAYN.cjs → chunk-KSXPJNIA.cjs} +304 -306
  8. package/dist/chunk-KSXPJNIA.cjs.map +1 -0
  9. package/dist/{chunk-XF35HUZ2.cjs → chunk-LSRMKE3Q.cjs} +30 -30
  10. package/dist/{chunk-XF35HUZ2.cjs.map → chunk-LSRMKE3Q.cjs.map} +1 -1
  11. package/dist/{chunk-2H4XNW5D.cjs → chunk-RPDYCQHF.cjs} +90 -90
  12. package/dist/{chunk-OOZTXU7F.cjs → chunk-SJLROYQM.cjs} +3 -3
  13. package/dist/{chunk-OOZTXU7F.cjs.map → chunk-SJLROYQM.cjs.map} +1 -1
  14. package/dist/{chunk-7HFYOZ7F.cjs → chunk-U2XQEWRF.cjs} +7 -7
  15. package/dist/{chunk-5T2QA53B.cjs → chunk-WNT5FJKX.cjs} +5 -5
  16. package/dist/fs.cjs +5 -5
  17. package/dist/index.cjs +9 -12
  18. package/dist/index.d.cts +6 -5
  19. package/dist/index.d.ts +6 -5
  20. package/dist/index.js +2 -5
  21. package/dist/logger.cjs +4 -4
  22. package/dist/mocks.cjs +12 -12
  23. package/dist/mocks.js +2 -2
  24. package/dist/transformers.cjs +4 -4
  25. package/dist/utils.cjs +4 -4
  26. package/dist/utils.d.cts +2 -2
  27. package/dist/utils.d.ts +2 -2
  28. package/dist/utils.js +1 -1
  29. package/globals.d.ts +9 -12
  30. package/package.json +7 -7
  31. package/src/BarrelManager.ts +1 -1
  32. package/src/PluginManager.ts +6 -6
  33. package/src/index.ts +1 -1
  34. package/src/plugin.ts +7 -9
  35. package/src/types.ts +4 -2
  36. package/src/utils/getParser.ts +2 -2
  37. package/dist/chunk-PXP5K73S.js.map +0 -1
  38. package/dist/chunk-T6TAUAYN.cjs.map +0 -1
  39. /package/dist/{chunk-SU2W2A6V.cjs.map → chunk-CURDPCUG.cjs.map} +0 -0
  40. /package/dist/{chunk-OCUNVJPQ.cjs.map → chunk-I6K57NKM.cjs.map} +0 -0
  41. /package/dist/{chunk-2H4XNW5D.cjs.map → chunk-RPDYCQHF.cjs.map} +0 -0
  42. /package/dist/{chunk-7HFYOZ7F.cjs.map → chunk-U2XQEWRF.cjs.map} +0 -0
  43. /package/dist/{chunk-5T2QA53B.cjs.map → chunk-WNT5FJKX.cjs.map} +0 -0
@@ -1,21 +1,21 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
2
 
3
- var _chunk2H4XNW5Dcjs = require('./chunk-2H4XNW5D.cjs');
3
+ var _chunkRPDYCQHFcjs = require('./chunk-RPDYCQHF.cjs');
4
4
 
5
5
 
6
6
 
7
7
 
8
- var _chunkOOZTXU7Fcjs = require('./chunk-OOZTXU7F.cjs');
8
+ var _chunkSJLROYQMcjs = require('./chunk-SJLROYQM.cjs');
9
9
 
10
10
  // src/logger.ts
11
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
11
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
12
12
  var _seedrandom = require('seedrandom'); var _seedrandom2 = _interopRequireDefault(_seedrandom);
13
13
 
14
14
  // ../../node_modules/.pnpm/tinyrainbow@1.1.1/node_modules/tinyrainbow/dist/node.js
15
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
15
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
16
16
 
17
17
  // ../../node_modules/.pnpm/tinyrainbow@1.1.1/node_modules/tinyrainbow/dist/chunk-5WCZOS7T.js
18
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
18
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
19
19
  var b = {
20
20
  reset: [0, 0],
21
21
  bold: [1, 22, "\x1B[22m\x1B[1m"],
@@ -80,25 +80,25 @@ var _tty = require('tty');
80
80
  var p2 = w(_tty.isatty.call(void 0, 1));
81
81
 
82
82
  // src/utils/EventEmitter.ts
83
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
83
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
84
84
  var _events = require('events');
85
85
  var _emitter;
86
86
  var EventEmitter = class {
87
87
  constructor() {
88
- _chunkOOZTXU7Fcjs.__privateAdd.call(void 0, this, _emitter, new (0, _events.EventEmitter)());
89
- _chunkOOZTXU7Fcjs.__privateGet.call(void 0, this, _emitter).setMaxListeners(100);
88
+ _chunkSJLROYQMcjs.__privateAdd.call(void 0, this, _emitter, new (0, _events.EventEmitter)());
89
+ _chunkSJLROYQMcjs.__privateGet.call(void 0, this, _emitter).setMaxListeners(100);
90
90
  }
91
91
  emit(eventName, ...eventArg) {
92
- _chunkOOZTXU7Fcjs.__privateGet.call(void 0, this, _emitter).emit(eventName, ...eventArg);
92
+ _chunkSJLROYQMcjs.__privateGet.call(void 0, this, _emitter).emit(eventName, ...eventArg);
93
93
  }
94
94
  on(eventName, handler) {
95
- _chunkOOZTXU7Fcjs.__privateGet.call(void 0, this, _emitter).on(eventName, handler);
95
+ _chunkSJLROYQMcjs.__privateGet.call(void 0, this, _emitter).on(eventName, handler);
96
96
  }
97
97
  off(eventName, handler) {
98
- _chunkOOZTXU7Fcjs.__privateGet.call(void 0, this, _emitter).off(eventName, handler);
98
+ _chunkSJLROYQMcjs.__privateGet.call(void 0, this, _emitter).off(eventName, handler);
99
99
  }
100
100
  removeAll() {
101
- _chunkOOZTXU7Fcjs.__privateGet.call(void 0, this, _emitter).removeAllListeners();
101
+ _chunkSJLROYQMcjs.__privateGet.call(void 0, this, _emitter).removeAllListeners();
102
102
  }
103
103
  };
104
104
  _emitter = new WeakMap();
@@ -134,7 +134,7 @@ function createLogger({ logLevel, name, spinner }) {
134
134
  });
135
135
  events.on("debug", async (messages) => {
136
136
  if (logLevel === LogLevel.debug) {
137
- await _chunk2H4XNW5Dcjs.writeLog.call(void 0, messages.join("\n"));
137
+ await _chunkRPDYCQHFcjs.writeLog.call(void 0, messages.join("\n"));
138
138
  }
139
139
  });
140
140
  const logger = {
@@ -185,4 +185,4 @@ function randomCliColour(text, colors = defaultColours) {
185
185
 
186
186
 
187
187
  exports.p = p2; exports.EventEmitter = EventEmitter; exports.LogLevel = LogLevel; exports.createLogger = createLogger; exports.randomColour = randomColour; exports.randomCliColour = randomCliColour;
188
- //# sourceMappingURL=chunk-SU2W2A6V.cjs.map
188
+ //# sourceMappingURL=chunk-CURDPCUG.cjs.map
@@ -289,7 +289,7 @@ async function getParser(language) {
289
289
  let modulePromise;
290
290
  switch (language) {
291
291
  default:
292
- modulePromise = import("@kubb/ts-parser");
292
+ modulePromise = import("@kubb/parser-ts");
293
293
  break;
294
294
  }
295
295
  const module = await modulePromise;
@@ -308,4 +308,4 @@ export {
308
308
  URLPath,
309
309
  getParser
310
310
  };
311
- //# sourceMappingURL=chunk-ECWTIHD5.js.map
311
+ //# sourceMappingURL=chunk-FRT5NM5I.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts","../src/utils/uniqueName.ts","../src/utils/URLPath.ts","../src/utils/getParser.ts"],"sourcesContent":["import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => this.#items.push(it))\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from '@kubb/types'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n\nexport function setUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n\n return originalName\n }\n data[originalName] = 1\n return originalName\n}\n","import { camelCase } from '../transformers/casing.ts'\n\nexport type URLObject = {\n url: string\n params?: Record<string, string>\n}\n\ntype ObjectOptions = {\n type?: 'path' | 'template'\n replacer?: (pathParam: string) => string\n stringify?: boolean\n}\n\nexport class URLPath {\n path: string\n\n constructor(path: string) {\n this.path = path\n\n return this\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n get URL(): string {\n return this.toURLPath()\n }\n get isURL(): boolean {\n try {\n const url = new URL(this.path)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n get template(): string {\n return this.toTemplateString()\n }\n get object(): URLObject | string {\n return this.toObject()\n }\n get params(): Record<string, string> | undefined {\n return this.getParams()\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString(replacer),\n params: this.getParams(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n toTemplateString(replacer?: (pathParam: string) => string): string {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n let newPath = this.path.replaceAll('{', '${')\n\n if (found) {\n newPath = found.reduce((prev, curr) => {\n const pathParam = replacer ? replacer(camelCase(curr)) : camelCase(curr)\n const replacement = `\\${${pathParam}}`\n\n return prev.replace(curr, replacement)\n }, this.path)\n }\n\n return `\\`${newPath}\\``\n }\n\n getParams(replacer?: (pathParam: string) => string): Record<string, string> | undefined {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n\n if (!found) {\n return undefined\n }\n\n const params: Record<string, string> = {}\n found.forEach((item) => {\n item = item.replaceAll('{', '').replaceAll('}', '')\n\n const pathParam = replacer ? replacer(camelCase(item)) : camelCase(item)\n\n params[pathParam] = pathParam\n }, this.path)\n\n return params\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n toURLPath(): string {\n return this.path.replaceAll('{', ':').replaceAll('}', '')\n }\n}\n","type ParserModuleTs = typeof import('@kubb/ts-parser')\n\nexport type ParserModule = ParserModuleTs\n\nexport async function getParser(language: string | undefined) {\n let modulePromise: Promise<ParserModule>\n\n switch (language) {\n default:\n modulePromise = import('@kubb/ts-parser')\n break\n }\n\n const module = await modulePromise\n\n return module\n}\n"],"mappings":"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","names":["item","_a"]}
1
+ {"version":3,"sources":["../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts","../src/utils/uniqueName.ts","../src/utils/URLPath.ts","../src/utils/getParser.ts"],"sourcesContent":["import { orderBy } from 'natural-orderby'\n\nimport { camelCase } from '../transformers/casing.ts'\n\ntype FunctionParamsASTWithoutType = {\n name?: string\n type?: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n\ntype FunctionParamsASTWithType = {\n name?: never\n type: string\n /**\n * @default true\n */\n required?: boolean\n /**\n * @default true\n */\n enabled?: boolean\n default?: string\n}\n/**\n * @deprecated\n */\nexport type FunctionParamsAST = FunctionParamsASTWithoutType | FunctionParamsASTWithType\n\n/**\n * @deprecated\n */\nexport class FunctionParams {\n #items: Array<FunctionParamsAST | FunctionParamsAST[]> = []\n constructor() {\n return this\n }\n\n get items(): FunctionParamsAST[] {\n return this.#items.flat()\n }\n\n add(item: FunctionParamsAST | Array<FunctionParamsAST | FunctionParamsAST[] | undefined> | undefined): FunctionParams {\n if (!item) {\n return this\n }\n\n if (Array.isArray(item)) {\n item.filter(Boolean).forEach((it) => this.#items.push(it))\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from '@kubb/types'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n","export function getUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n originalName += used\n }\n data[originalName] = 1\n return originalName\n}\n\nexport function setUniqueName(originalName: string, data: Record<string, number>): string {\n let used = data[originalName] || 0\n if (used) {\n data[originalName] = ++used\n\n return originalName\n }\n data[originalName] = 1\n return originalName\n}\n","import { camelCase } from '../transformers/casing.ts'\n\nexport type URLObject = {\n url: string\n params?: Record<string, string>\n}\n\ntype ObjectOptions = {\n type?: 'path' | 'template'\n replacer?: (pathParam: string) => string\n stringify?: boolean\n}\n\nexport class URLPath {\n path: string\n\n constructor(path: string) {\n this.path = path\n\n return this\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n get URL(): string {\n return this.toURLPath()\n }\n get isURL(): boolean {\n try {\n const url = new URL(this.path)\n if (url?.href) {\n return true\n }\n } catch (error) {\n return false\n }\n return false\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n get template(): string {\n return this.toTemplateString()\n }\n get object(): URLObject | string {\n return this.toObject()\n }\n get params(): Record<string, string> | undefined {\n return this.getParams()\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString(replacer),\n params: this.getParams(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Convert Swagger path to template literals/ template strings(camelcase)\n * @example /pet/{petId} => `/pet/${petId}`\n * @example /account/monetary-accountID => `/account/${monetaryAccountId}`\n * @example /account/userID => `/account/${userId}`\n */\n toTemplateString(replacer?: (pathParam: string) => string): string {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n let newPath = this.path.replaceAll('{', '${')\n\n if (found) {\n newPath = found.reduce((prev, curr) => {\n const pathParam = replacer ? replacer(camelCase(curr)) : camelCase(curr)\n const replacement = `\\${${pathParam}}`\n\n return prev.replace(curr, replacement)\n }, this.path)\n }\n\n return `\\`${newPath}\\``\n }\n\n getParams(replacer?: (pathParam: string) => string): Record<string, string> | undefined {\n const regex = /{(\\w|-)*}/g\n const found = this.path.match(regex)\n\n if (!found) {\n return undefined\n }\n\n const params: Record<string, string> = {}\n found.forEach((item) => {\n item = item.replaceAll('{', '').replaceAll('}', '')\n\n const pathParam = replacer ? replacer(camelCase(item)) : camelCase(item)\n\n params[pathParam] = pathParam\n }, this.path)\n\n return params\n }\n\n /**\n * Convert Swagger path to URLPath(syntax of Express)\n * @example /pet/{petId} => /pet/:petId\n */\n toURLPath(): string {\n return this.path.replaceAll('{', ':').replaceAll('}', '')\n }\n}\n","type ParserModuleTs = typeof import('@kubb/parser-ts')\n\nexport type ParserModule = ParserModuleTs\n\nexport async function getParser(language: string | undefined) {\n let modulePromise: Promise<ParserModule>\n\n switch (language) {\n default:\n modulePromise = import('@kubb/parser-ts')\n break\n }\n\n const module = await modulePromise\n\n return module\n}\n"],"mappings":"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","names":["item","_a"]}
@@ -3,23 +3,23 @@
3
3
 
4
4
 
5
5
 
6
- var _chunk5T2QA53Bcjs = require('./chunk-5T2QA53B.cjs');
6
+ var _chunkWNT5FJKXcjs = require('./chunk-WNT5FJKX.cjs');
7
7
 
8
8
 
9
- var _chunkOOZTXU7Fcjs = require('./chunk-OOZTXU7F.cjs');
9
+ var _chunkSJLROYQMcjs = require('./chunk-SJLROYQM.cjs');
10
10
 
11
11
  // src/transformers/index.ts
12
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
12
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
13
13
  var _remeda = require('remeda');
14
14
 
15
15
  // src/transformers/combineCodes.ts
16
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
16
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
17
17
  function combineCodes(codes) {
18
18
  return codes.join("\n");
19
19
  }
20
20
 
21
21
  // src/transformers/createJSDocBlockText.ts
22
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
22
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
23
23
  function createJSDocBlockText({ comments }) {
24
24
  const filteredComments = comments.filter(Boolean);
25
25
  if (!filteredComments.length) {
@@ -31,7 +31,7 @@ function createJSDocBlockText({ comments }) {
31
31
  }
32
32
 
33
33
  // src/transformers/escape.ts
34
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
34
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
35
35
  function escape(text) {
36
36
  return text ? text.replaceAll("`", "\\`") : "";
37
37
  }
@@ -57,13 +57,13 @@ function jsStringEscape(input) {
57
57
  }
58
58
 
59
59
  // src/transformers/indent.ts
60
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
60
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
61
61
  function createIndent(size) {
62
62
  return Array.from({ length: size + 1 }).join(" ");
63
63
  }
64
64
 
65
65
  // src/transformers/nameSorter.ts
66
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
66
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
67
67
  function nameSorter(a, b) {
68
68
  if (a.name < b.name) {
69
69
  return -1;
@@ -75,7 +75,7 @@ function nameSorter(a, b) {
75
75
  }
76
76
 
77
77
  // src/transformers/searchAndReplace.ts
78
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
78
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
79
79
  function searchAndReplace(options) {
80
80
  const { text, replaceBy, prefix = "", key } = options;
81
81
  const searchValues = _optionalChain([options, 'access', _ => _.searchValues, 'optionalCall', _2 => _2(prefix, key)]) || [
@@ -93,10 +93,10 @@ function searchAndReplace(options) {
93
93
  }
94
94
 
95
95
  // src/transformers/stringify.ts
96
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
96
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
97
97
 
98
98
  // src/transformers/trim.ts
99
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
99
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
100
100
  function trim(text) {
101
101
  return text.replaceAll(/\n/g, "").trim();
102
102
  }
@@ -136,7 +136,7 @@ function stringifyObject(value) {
136
136
  }
137
137
 
138
138
  // src/transformers/toRegExp.ts
139
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
139
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
140
140
  function stringToRegex(text) {
141
141
  const isStartWithSlash = text.startsWith("/");
142
142
  const isEndWithSlash = text.endsWith("/");
@@ -157,7 +157,7 @@ function toRegExpString(text) {
157
157
  }
158
158
 
159
159
  // src/transformers/transformReservedWord.ts
160
- _chunkOOZTXU7Fcjs.init_cjs_shims.call(void 0, );
160
+ _chunkSJLROYQMcjs.init_cjs_shims.call(void 0, );
161
161
  var reservedWords = [
162
162
  "abstract",
163
163
  "arguments",
@@ -270,11 +270,11 @@ var transformers_default = {
270
270
  JSDoc: {
271
271
  createJSDocBlockText
272
272
  },
273
- orderBy: _chunk5T2QA53Bcjs.orderBy,
273
+ orderBy: _chunkWNT5FJKXcjs.orderBy,
274
274
  merge: _remeda.merge,
275
- camelCase: _chunk5T2QA53Bcjs.camelCase,
276
- pascalCase: _chunk5T2QA53Bcjs.pascalCase,
277
- pathCase: _chunk5T2QA53Bcjs.pathCase
275
+ camelCase: _chunkWNT5FJKXcjs.camelCase,
276
+ pascalCase: _chunkWNT5FJKXcjs.pascalCase,
277
+ pathCase: _chunkWNT5FJKXcjs.pathCase
278
278
  };
279
279
 
280
280
 
@@ -296,4 +296,4 @@ var transformers_default = {
296
296
 
297
297
 
298
298
  exports.trim = trim; exports.trimQuotes = trimQuotes; exports.trimExtName = trimExtName; exports.searchAndReplace = searchAndReplace; exports.combineCodes = combineCodes; exports.createJSDocBlockText = createJSDocBlockText; exports.escape = escape; exports.jsStringEscape = jsStringEscape; exports.createIndent = createIndent; exports.nameSorter = nameSorter; exports.stringify = stringify; exports.stringifyObject = stringifyObject; exports.toRegExp = toRegExp; exports.toRegExpString = toRegExpString; exports.transformReservedWord = transformReservedWord; exports.transformers_default = transformers_default; exports.merge = _remeda.merge;
299
- //# sourceMappingURL=chunk-OCUNVJPQ.cjs.map
299
+ //# sourceMappingURL=chunk-I6K57NKM.cjs.map
@@ -8,7 +8,7 @@ import {
8
8
  URLPath,
9
9
  getParser,
10
10
  setUniqueName
11
- } from "./chunk-ECWTIHD5.js";
11
+ } from "./chunk-FRT5NM5I.js";
12
12
  import {
13
13
  orderBy
14
14
  } from "./chunk-4X5FFJPJ.js";
@@ -42,7 +42,7 @@ import PQueue from "p-queue";
42
42
  import { isDeepEqual } from "remeda";
43
43
 
44
44
  // src/BarrelManager.ts
45
- import { getExports } from "@kubb/ts-parser";
45
+ import { getExports } from "@kubb/parser-ts";
46
46
  import path from "path";
47
47
 
48
48
  // src/utils/TreeNode.ts
@@ -721,15 +721,14 @@ function createPluginCache(Store = /* @__PURE__ */ Object.create(null)) {
721
721
 
722
722
  // src/plugin.ts
723
723
  function createPlugin(factory) {
724
- return (options) => {
724
+ return (options = {}) => {
725
725
  return factory(options);
726
726
  };
727
727
  }
728
- var pluginName = "core";
729
- var definePlugin = createPlugin((options) => {
728
+ var pluginCore = createPlugin((options) => {
730
729
  const { fileManager, pluginManager, resolvePath, resolveName, logger } = options;
731
730
  return {
732
- name: pluginName,
731
+ name: "core",
733
732
  options,
734
733
  key: ["core"],
735
734
  api() {
@@ -857,7 +856,7 @@ Falling back on the first item.
857
856
  nullCheck: (state) => !!state?.result
858
857
  }));
859
858
  const plugins = config.plugins || [];
860
- const core = definePlugin({
859
+ const core = pluginCore({
861
860
  config,
862
861
  logger: this.logger,
863
862
  pluginManager: this,
@@ -1080,10 +1079,10 @@ Falling back on the first item.
1080
1079
  } else {
1081
1080
  pluginNames = dependedPluginNames;
1082
1081
  }
1083
- return pluginNames.map((pluginName2) => {
1084
- const plugin = plugins.find((plugin2) => plugin2.name === pluginName2);
1082
+ return pluginNames.map((pluginName) => {
1083
+ const plugin = plugins.find((plugin2) => plugin2.name === pluginName);
1085
1084
  if (!plugin) {
1086
- throw new ValidationPluginError(`This plugin depends on the ${pluginName2} plugin.`);
1085
+ throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`);
1087
1086
  }
1088
1087
  return plugin;
1089
1088
  });
@@ -1109,7 +1108,7 @@ getSortedPlugins_fn = function(hookName) {
1109
1108
  }
1110
1109
  return plugins.map((plugin) => {
1111
1110
  if (plugin.pre) {
1112
- const isValid = plugin.pre.every((pluginName2) => plugins.find((pluginToFind) => pluginToFind.name === pluginName2));
1111
+ const isValid = plugin.pre.every((pluginName) => plugins.find((pluginToFind) => pluginToFind.name === pluginName));
1113
1112
  if (!isValid) {
1114
1113
  throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, void 0, 2)})`);
1115
1114
  }
@@ -1586,7 +1585,6 @@ export {
1586
1585
  PromiseManager,
1587
1586
  Warning,
1588
1587
  createPlugin,
1589
- pluginName,
1590
1588
  PluginManager,
1591
1589
  defineConfig,
1592
1590
  isInputPath,
@@ -1596,4 +1594,4 @@ export {
1596
1594
  PackageManager,
1597
1595
  kubb_exports
1598
1596
  };
1599
- //# sourceMappingURL=chunk-PXP5K73S.js.map
1597
+ //# sourceMappingURL=chunk-J7SXH3YG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/FileManager.ts","../src/BarrelManager.ts","../src/utils/TreeNode.ts","../src/PluginManager.ts","../src/utils/executeStrategies.ts","../src/PromiseManager.ts","../src/errors.ts","../src/plugin.ts","../src/utils/cache.ts","../src/config.ts","../src/build.ts","../src/Generator.ts","../src/PackageManager.ts","../src/kubb.ts"],"sourcesContent":["import crypto from 'node:crypto'\nimport { extname, resolve } from 'node:path'\n\nimport { orderBy } from 'natural-orderby'\nimport PQueue from 'p-queue'\nimport { isDeepEqual } from 'remeda'\n\nimport { BarrelManager } from './BarrelManager.ts'\nimport { getRelativePath, read } from './fs/read.ts'\nimport { write } from './fs/write.ts'\nimport { searchAndReplace } from './transformers/searchAndReplace.ts'\nimport { trimExtName } from './transformers/trim.ts'\n\nimport type { GreaterThan } from '@kubb/types'\nimport type { BarrelManagerOptions } from './BarrelManager.ts'\nimport type { Logger } from './logger.ts'\nimport transformers from './transformers/index.ts'\nimport type { Plugin } from './types.ts'\nimport { getParser } from './utils'\n\ntype BasePath<T extends string = string> = `${T}/`\n\nexport namespace KubbFile {\n export type Import = {\n /**\n * Import name to be used\n * @example [\"useState\"]\n * @example \"React\"\n */\n name:\n | string\n | Array<\n | string\n | {\n propertyName: string\n name?: string\n }\n >\n /**\n * Path for the import\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the import, this will result in: `import type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Add `* as` prefix to the import, this will result in: `import * as path from './path'`.\n */\n\n isNameSpace?: boolean\n /**\n * When root is set it will get the path with relative getRelativePath(root, path).\n */\n root?: string\n }\n\n export type Export = {\n /**\n * Export name to be used.\n * @example [\"useState\"]\n * @example \"React\"\n */\n name?: string | Array<string>\n /**\n * Path for the import.\n * @xample '@kubb/core'\n */\n path: string\n /**\n * Add `type` prefix to the export, this will result in: `export type { Type } from './path'`.\n */\n isTypeOnly?: boolean\n /**\n * Make it possible to override the name, this will result in: `export * as aliasName from './path'`.\n */\n asAlias?: boolean\n }\n\n export declare const dataTagSymbol: unique symbol\n export type DataTag<Type, Value> = Type & {\n [dataTagSymbol]: Value\n }\n\n export type UUID = string\n export type Source = string\n\n export type Extname = '.ts' | '.js' | '.tsx' | '.json' | `.${string}`\n\n export type Mode = 'single' | 'split'\n\n /**\n * Name to be used to dynamicly create the baseName(based on input.path)\n * Based on UNIX basename\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n export type BaseName = `${string}${Extname}`\n\n /**\n * Path will be full qualified path to a specified file\n */\n export type Path = string\n\n export type AdvancedPath<T extends BaseName = BaseName> = `${BasePath}${T}`\n\n export type OptionalPath = Path | undefined | null\n\n export type FileMetaBase = {\n pluginKey?: Plugin['key']\n }\n\n export type File<TMeta extends FileMetaBase = FileMetaBase, TBaseName extends BaseName = BaseName> = {\n /**\n * Unique identifier to reuse later\n * @default crypto.randomUUID()\n */\n id?: string\n /**\n * Name to be used to create the path\n * Based on UNIX basename, `${name}.extName`\n * @link https://nodejs.org/api/path.html#pathbasenamepath-suffix\n */\n baseName: TBaseName\n /**\n * Path will be full qualified path to a specified file\n */\n path: AdvancedPath<TBaseName> | Path\n source: Source\n imports?: Import[]\n exports?: Export[]\n /**\n * This will call fileManager.add instead of fileManager.addOrAppend, adding the source when the files already exists\n * This will also ignore the combinefiles utils\n * @default `false`\n */\n override?: boolean\n /**\n * Use extra meta, this is getting used to generate the barrel/index files.\n */\n meta?: TMeta\n /**\n * Override if a file can be exported by the BarrelManager\n * @default true\n */\n exportable?: boolean\n /**\n * This will override `process.env[key]` inside the `source`, see `getFileSource`.\n */\n env?: NodeJS.ProcessEnv\n /**\n * The name of the language being used. This can be TypeScript, JavaScript and still have another ext.\n */\n language?: string\n }\n\n export type ResolvedFile<TMeta extends FileMetaBase = FileMetaBase, TBaseName extends BaseName = BaseName> = KubbFile.File<TMeta, TBaseName> & {\n /**\n * @default crypto.randomUUID()\n */\n id: UUID\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n\n name: string\n }\n}\n\ntype CacheItem = KubbFile.ResolvedFile & {\n cancel?: () => void\n}\n\ntype AddResult<T extends Array<KubbFile.File>> = Promise<\n Awaited<GreaterThan<T['length'], 1> extends true ? Promise<KubbFile.ResolvedFile[]> : Promise<KubbFile.ResolvedFile>>\n>\n\ntype AddIndexesProps = {\n /**\n * Root based on root and output.path specified in the config\n */\n root: string\n /**\n * Output for plugin\n */\n output: {\n path: string\n exportAs?: string\n extName?: KubbFile.Extname\n exportType?: 'barrel' | 'barrelNamed' | false\n }\n logger: Logger\n options?: BarrelManagerOptions\n meta?: KubbFile.File['meta']\n}\n\ntype Options = {\n queue?: PQueue\n task?: (file: KubbFile.ResolvedFile) => Promise<KubbFile.ResolvedFile>\n}\n\nexport class FileManager {\n #cache: Map<KubbFile.Path, CacheItem[]> = new Map()\n\n #task: Options['task']\n #queue: PQueue\n\n constructor({ task = async (file) => file, queue = new PQueue() }: Options = {}) {\n this.#task = task\n this.#queue = queue\n\n return this\n }\n\n get files(): Array<KubbFile.File> {\n const files: Array<KubbFile.File> = []\n this.#cache.forEach((item) => {\n files.push(...item.flat(1))\n })\n\n return files\n }\n get isExecuting(): boolean {\n return this.#queue.size !== 0 && this.#queue.pending !== 0\n }\n\n async add<T extends Array<KubbFile.File> = Array<KubbFile.File>>(...files: T): AddResult<T> {\n const promises = combineFiles(files).map((file) => {\n if (file.override) {\n return this.#add(file)\n }\n\n return this.#addOrAppend(file)\n })\n\n const resolvedFiles = await Promise.all(promises)\n\n if (files.length > 1) {\n return resolvedFiles as unknown as AddResult<T>\n }\n\n return resolvedFiles[0] as unknown as AddResult<T>\n }\n\n async #add(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const controller = new AbortController()\n const resolvedFile: KubbFile.ResolvedFile = {\n id: crypto.randomUUID(),\n name: trimExtName(file.baseName),\n ...file,\n }\n\n if (resolvedFile.exports?.length) {\n const folder = resolvedFile.path.replace(resolvedFile.baseName, '')\n\n resolvedFile.exports = resolvedFile.exports.filter((exportItem) => {\n const exportedFile = this.files.find((file) => file.path.includes(resolve(folder, exportItem.path)))\n\n if (exportedFile) {\n return exportedFile.exportable\n }\n\n return true\n })\n }\n\n this.#cache.set(resolvedFile.path, [{ cancel: () => controller.abort(), ...resolvedFile }])\n\n return this.#queue.add(\n async () => {\n return this.#task?.(resolvedFile)\n },\n { signal: controller.signal },\n ) as Promise<KubbFile.ResolvedFile>\n }\n\n async #addOrAppend(file: KubbFile.File): Promise<KubbFile.ResolvedFile> {\n const previousCaches = this.#cache.get(file.path)\n const previousCache = previousCaches ? previousCaches.at(previousCaches.length - 1) : undefined\n\n if (previousCache) {\n this.#cache.delete(previousCache.path)\n\n return this.#add({\n ...file,\n source: previousCache.source && file.source ? `${previousCache.source}\\n${file.source}` : '',\n imports: [...(previousCache.imports || []), ...(file.imports || [])],\n exports: [...(previousCache.exports || []), ...(file.exports || [])],\n env: { ...(previousCache.env || {}), ...(file.env || {}) },\n })\n }\n return this.#add(file)\n }\n\n async addIndexes({ root, output, meta, logger, options = {} }: AddIndexesProps): Promise<void> {\n const { exportType = 'barrel' } = output\n // ^?\n if (exportType === false) {\n return undefined\n }\n\n const pathToBuildFrom = resolve(root, output.path)\n\n if (transformers.trimExtName(pathToBuildFrom).endsWith('index')) {\n logger.emit('warning', 'Output has the same fileName as the barrelFiles, please disable barrel generation')\n return\n }\n\n const exportPath = output.path.startsWith('./') ? trimExtName(output.path) : `./${trimExtName(output.path)}`\n const mode = FileManager.getMode(output.path)\n const barrelManager = new BarrelManager({\n extName: output.extName,\n ...options,\n })\n let files = barrelManager.getIndexes(pathToBuildFrom)\n\n if (!files) {\n return undefined\n }\n\n if (exportType === 'barrelNamed') {\n files = files.map((file) => {\n if (file.exports) {\n return {\n ...file,\n exports: barrelManager.getNamedExports(pathToBuildFrom, file.exports),\n }\n }\n return file\n })\n }\n\n await Promise.all(\n files.map((file) => {\n return this.#addOrAppend({\n ...file,\n meta: meta ? meta : file.meta,\n })\n }),\n )\n\n const rootPath = mode === 'split' ? `${exportPath}/index${output.extName || ''}` : `${exportPath}${output.extName || ''}`\n const rootFile: KubbFile.File = {\n path: resolve(root, 'index.ts'),\n baseName: 'index.ts',\n source: '',\n exports: [\n output.exportAs\n ? {\n name: output.exportAs,\n asAlias: true,\n path: rootPath,\n isTypeOnly: options.isTypeOnly,\n }\n : {\n path: rootPath,\n isTypeOnly: options.isTypeOnly,\n },\n ],\n exportable: true,\n }\n\n if (exportType === 'barrelNamed' && !output.exportAs && rootFile.exports?.[0]) {\n rootFile.exports = barrelManager.getNamedExport(root, rootFile.exports[0])\n }\n\n await this.#addOrAppend({\n ...rootFile,\n meta: meta ? meta : rootFile.meta,\n })\n }\n\n getCacheByUUID(UUID: KubbFile.UUID): KubbFile.File | undefined {\n let cache: KubbFile.File | undefined\n\n this.#cache.forEach((files) => {\n cache = files.find((item) => item.id === UUID)\n })\n return cache\n }\n\n get(path: KubbFile.Path): Array<KubbFile.File> | undefined {\n return this.#cache.get(path)\n }\n\n remove(path: KubbFile.Path): void {\n const cacheItem = this.get(path)\n if (!cacheItem) {\n return\n }\n\n this.#cache.delete(path)\n }\n\n async write(...params: Parameters<typeof write>): Promise<string | undefined> {\n return write(...params)\n }\n\n async read(...params: Parameters<typeof read>): Promise<string> {\n return read(...params)\n }\n\n // statics\n\n static async getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): Promise<string> {\n return getSource<TMeta>(file)\n }\n\n static combineFiles<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(files: Array<KubbFile.File<TMeta> | null>): Array<KubbFile.File<TMeta>> {\n return combineFiles<TMeta>(files)\n }\n static getMode(path: string | undefined | null): KubbFile.Mode {\n if (!path) {\n return 'split'\n }\n return extname(path) ? 'single' : 'split'\n }\n\n static get extensions(): Array<KubbFile.Extname> {\n return ['.js', '.ts', '.tsx']\n }\n\n static isJavascript(baseName: string): boolean {\n return FileManager.extensions.some((extension) => baseName.endsWith(extension))\n }\n}\n\nfunction combineFiles<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(files: Array<KubbFile.File<TMeta> | null>): Array<KubbFile.File<TMeta>> {\n return files.filter(Boolean).reduce(\n (acc, file: KubbFile.File<TMeta>) => {\n const prevIndex = acc.findIndex((item) => item.path === file.path)\n\n if (prevIndex === -1) {\n return [...acc, file]\n }\n\n const prev = acc[prevIndex]\n\n if (prev && file.override) {\n acc[prevIndex] = {\n imports: [],\n exports: [],\n ...file,\n }\n return acc\n }\n\n if (prev) {\n acc[prevIndex] = {\n ...file,\n source: prev.source && file.source ? `${prev.source}\\n${file.source}` : '',\n imports: [...(prev.imports || []), ...(file.imports || [])],\n exports: [...(prev.exports || []), ...(file.exports || [])],\n env: { ...(prev.env || {}), ...(file.env || {}) },\n }\n }\n\n return acc\n },\n [] as Array<KubbFile.File<TMeta>>,\n )\n}\n\nexport async function getSource<TMeta extends KubbFile.FileMetaBase = KubbFile.FileMetaBase>(file: KubbFile.File<TMeta>): Promise<string> {\n // only use .js, .ts or .tsx files for ESM imports\n\n if (file.language ? !['typescript', 'javascript'].includes(file.language) : !FileManager.isJavascript(file.baseName)) {\n return file.source\n }\n\n const parser = await getParser(file.language)\n\n const exports = file.exports ? combineExports(file.exports) : []\n // imports should be defined and source should contain code or we have imports without them being used\n const imports = file.imports && file.source ? combineImports(file.imports, exports, file.source) : []\n\n const importNodes = imports\n .filter((item) => {\n const path = item.root ? getRelativePath(item.root, item.path) : item.path\n // trim extName\n return path !== trimExtName(file.path)\n })\n .map((item) => {\n return parser.factory.createImportDeclaration({\n name: item.name,\n path: item.root ? getRelativePath(item.root, item.path) : item.path,\n isTypeOnly: item.isTypeOnly,\n })\n })\n const exportNodes = exports.map((item) =>\n parser.factory.createExportDeclaration({\n name: item.name,\n path: item.path,\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n }),\n )\n\n const source = [parser.print([...importNodes, ...exportNodes]), getEnvSource(file.source, file.env)].join('\\n')\n\n // do some basic linting with the ts compiler\n return parser.print([], { source, noEmitHelpers: false })\n}\n\nexport function combineExports(exports: Array<KubbFile.Export>): Array<KubbFile.Export> {\n const combinedExports = orderBy(exports, [(v) => !v.isTypeOnly], ['asc']).reduce(\n (prev, curr) => {\n const name = curr.name\n const prevByPath = prev.findLast((imp) => imp.path === curr.path)\n const prevByPathAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (export type ...)\n return prev\n }\n\n const uniquePrev = prev.findLast(\n (imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly && imp.asAlias === curr.asAlias,\n )\n\n if (uniquePrev || (Array.isArray(name) && !name.length) || (prevByPath?.asAlias && !curr.asAlias)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name: Array.isArray(name) ? [...new Set(name)] : name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(curr.name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...curr.name])]\n\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Export>,\n )\n\n return orderBy(combinedExports, [(v) => !v.isTypeOnly, (v) => v.asAlias], ['desc', 'desc'])\n}\n\nexport function combineImports(imports: Array<KubbFile.Import>, exports: Array<KubbFile.Export>, source?: string): Array<KubbFile.Import> {\n const combinedImports = orderBy(imports, [(v) => !v.isTypeOnly], ['asc']).reduce(\n (prev, curr) => {\n let name = Array.isArray(curr.name) ? [...new Set(curr.name)] : curr.name\n\n const hasImportInSource = (importName: string) => {\n if (!source) {\n return true\n }\n\n const checker = (name?: string) => name && !!source.includes(name)\n\n return checker(importName) || exports.some(({ name }) => (Array.isArray(name) ? name.some(checker) : checker(name)))\n }\n\n if (curr.path === curr.root) {\n // root and path are the same file, remove the \"./\" import\n return prev\n }\n\n if (Array.isArray(name)) {\n name = name.filter((item) => (typeof item === 'string' ? hasImportInSource(item) : hasImportInSource(item.propertyName)))\n }\n\n const prevByPath = prev.findLast((imp) => imp.path === curr.path && imp.isTypeOnly === curr.isTypeOnly)\n const uniquePrev = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly === curr.isTypeOnly)\n const prevByPathNameAndIsTypeOnly = prev.findLast((imp) => imp.path === curr.path && isDeepEqual(imp.name, name) && imp.isTypeOnly)\n\n if (prevByPathNameAndIsTypeOnly) {\n // we already have an export that has the same path but uses `isTypeOnly` (import type ...)\n return prev\n }\n\n if (uniquePrev || (Array.isArray(name) && !name.length)) {\n return prev\n }\n\n if (!prevByPath) {\n return [\n ...prev,\n {\n ...curr,\n name,\n },\n ]\n }\n\n if (prevByPath && Array.isArray(prevByPath.name) && Array.isArray(name) && prevByPath.isTypeOnly === curr.isTypeOnly) {\n prevByPath.name = [...new Set([...prevByPath.name, ...name])]\n\n return prev\n }\n\n if (!Array.isArray(name) && name && !hasImportInSource(name)) {\n return prev\n }\n\n return [...prev, curr]\n },\n [] as Array<KubbFile.Import>,\n )\n\n return orderBy(combinedImports, [(v) => !v.isTypeOnly], ['desc'])\n}\n\nfunction getEnvSource(source: string, env: NodeJS.ProcessEnv | undefined): string {\n if (!env) {\n return source\n }\n\n const keys = Object.keys(env)\n\n if (!keys.length) {\n return source\n }\n\n return keys.reduce((prev, key: string) => {\n const environmentValue = env[key]\n const replaceBy = environmentValue ? `'${environmentValue.replaceAll('\"', '')?.replaceAll(\"'\", '')}'` : 'undefined'\n\n if (key.toUpperCase() !== key) {\n throw new TypeError(`Environment should be in upperCase for ${key}`)\n }\n\n if (typeof replaceBy === 'string') {\n prev = searchAndReplace({\n text: prev.replaceAll(`process.env.${key}`, replaceBy),\n replaceBy,\n prefix: 'process.env',\n key,\n })\n // removes `declare const ...`\n prev = searchAndReplace({\n text: prev.replaceAll(/(declare const).*\\n/gi, ''),\n replaceBy,\n key,\n })\n }\n\n return prev\n }, source)\n}\n","import { getExports } from '@kubb/parser-ts'\n\nimport path from 'node:path'\n\nimport { trimExtName } from './transformers/trim.ts'\nimport { TreeNode } from './utils/TreeNode.ts'\n\nimport type { DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from './FileManager.ts'\n\nexport type BarrelManagerOptions = {\n treeNode?: DirectoryTreeOptions\n isTypeOnly?: boolean\n /**\n * Add .ts or .js\n */\n extName?: KubbFile.Extname\n}\n\nexport class BarrelManager {\n #options: BarrelManagerOptions\n\n constructor(options: BarrelManagerOptions = {}) {\n this.#options = options\n\n return this\n }\n\n getNamedExport(root: string, item: KubbFile.Export): KubbFile.Export[] {\n const exportedNames = getExports(path.resolve(root, item.path))\n\n if (!exportedNames) {\n return [item]\n }\n\n return exportedNames.reduce(\n (prev, curr) => {\n if (!prev[0]?.name || !prev[1]?.name) {\n return prev\n }\n\n if (curr.isTypeOnly) {\n prev[1] = { ...prev[1], name: [...prev[1].name, curr.name] }\n } else {\n prev[0] = { ...prev[0], name: [...prev[0].name, curr.name] }\n }\n\n return prev\n },\n [\n {\n ...item,\n name: [],\n isTypeOnly: false,\n },\n {\n ...item,\n name: [],\n isTypeOnly: true,\n },\n ] as KubbFile.Export[],\n )\n }\n\n getNamedExports(root: string, exports: KubbFile.Export[]): KubbFile.Export[] {\n return exports?.flatMap((item) => {\n return this.getNamedExport(root, item)\n })\n }\n\n getIndexes(root: string): Array<KubbFile.File> | null {\n const { treeNode = {}, isTypeOnly, extName } = this.#options\n const tree = TreeNode.build(root, treeNode)\n\n if (!tree) {\n return null\n }\n\n const fileReducer = (files: Array<KubbFile.File>, treeNode: TreeNode) => {\n if (!treeNode.children) {\n return []\n }\n\n if (treeNode.children.length > 1) {\n const indexPath: KubbFile.Path = path.resolve(treeNode.data.path, 'index.ts')\n\n const exports: Array<KubbFile.Export> = treeNode.children\n .filter(Boolean)\n .map((file) => {\n const importPath: string = file.data.type === 'split' ? `./${file.data.name}/index` : `./${trimExtName(file.data.name)}`\n\n if (importPath.endsWith('index') && file.data.type === 'single') {\n return undefined\n }\n\n return {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n } as KubbFile.Export\n })\n .filter(Boolean)\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n exportable: true,\n })\n } else if (treeNode.children.length === 1) {\n const [treeNodeChild] = treeNode.children as [TreeNode]\n\n const indexPath = path.resolve(treeNode.data.path, 'index.ts')\n const importPath = treeNodeChild.data.type === 'split' ? `./${treeNodeChild.data.name}/index` : `./${trimExtName(treeNodeChild.data.name)}`\n\n const exports = [\n {\n path: extName ? `${importPath}${extName}` : importPath,\n isTypeOnly,\n },\n ]\n\n files.push({\n path: indexPath,\n baseName: 'index.ts',\n source: '',\n exports,\n exportable: true,\n })\n }\n\n treeNode.children.forEach((childItem) => {\n fileReducer(files, childItem)\n })\n\n return files\n }\n\n return fileReducer([], tree).reverse()\n }\n}\n","import dirTree from 'directory-tree'\n\nimport { FileManager } from '../FileManager.ts'\n\nimport type { DirectoryTree, DirectoryTreeOptions } from 'directory-tree'\nimport type { KubbFile } from '../FileManager.ts'\n\nexport type TreeNodeOptions = DirectoryTreeOptions\n\ntype BarrelData = { type: KubbFile.Mode; path: KubbFile.Path; name: string }\n\nexport class TreeNode<T = BarrelData> {\n public data: T\n\n public parent?: TreeNode<T>\n\n public children: Array<TreeNode<T>> = []\n\n constructor(data: T, parent?: TreeNode<T>) {\n this.data = data\n this.parent = parent\n return this\n }\n\n addChild(data: T): TreeNode<T> {\n const child = new TreeNode(data, this)\n if (!this.children) {\n this.children = []\n }\n this.children.push(child)\n return child\n }\n\n find(data?: T): TreeNode<T> | null {\n if (!data) {\n return null\n }\n\n if (data === this.data) {\n return this\n }\n\n if (this.children?.length) {\n for (let i = 0, { length } = this.children, target: TreeNode<T> | null = null; i < length; i++) {\n target = this.children[i]!.find(data)\n if (target) {\n return target\n }\n }\n }\n\n return null\n }\n\n get leaves(): TreeNode<T>[] {\n if (!this.children || this.children.length === 0) {\n // this is a leaf\n return [this]\n }\n\n // if not a leaf, return all children's leaves recursively\n const leaves: TreeNode<T>[] = []\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n leaves.push.apply(leaves, this.children[i]!.leaves)\n }\n }\n return leaves\n }\n\n get root(): TreeNode<T> {\n if (!this.parent) {\n return this\n }\n return this.parent.root\n }\n\n forEach(callback: (treeNode: TreeNode<T>) => void): this {\n if (typeof callback !== 'function') {\n throw new TypeError('forEach() callback must be a function')\n }\n\n // run this node through function\n callback(this)\n\n // do the same for all children\n if (this.children) {\n for (let i = 0, { length } = this.children; i < length; i++) {\n this.children[i]?.forEach(callback)\n }\n }\n\n return this\n }\n\n public static build(path: string, options: TreeNodeOptions = {}): TreeNode | null {\n try {\n const exclude = Array.isArray(options.exclude) ? options.exclude : [options.exclude].filter(Boolean)\n const filteredTree = dirTree(path, {\n extensions: options.extensions,\n exclude: [/node_modules/, ...exclude],\n })\n\n if (!filteredTree) {\n return null\n }\n\n const treeNode = new TreeNode({\n name: filteredTree.name,\n path: filteredTree.path,\n type: FileManager.getMode(filteredTree.path),\n })\n\n const recurse = (node: typeof treeNode, item: DirectoryTree) => {\n const subNode = node.addChild({\n name: item.name,\n path: item.path,\n type: FileManager.getMode(item.path),\n })\n\n if (item.children?.length) {\n item.children?.forEach((child) => {\n recurse(subNode, child)\n })\n }\n }\n\n filteredTree.children?.forEach((child) => recurse(treeNode, child))\n\n return treeNode\n } catch (e) {\n throw new Error('Something went wrong with creating index files with the TreehNode class', { cause: e })\n }\n }\n}\n","import PQueue from 'p-queue'\n\nimport { FileManager } from './FileManager.ts'\nimport { isPromise, isPromiseRejectedResult } from './PromiseManager.ts'\nimport { PromiseManager } from './PromiseManager.ts'\nimport { ValidationPluginError } from './errors.ts'\nimport { readSync } from './fs/read.ts'\nimport { LogLevel } from './logger.ts'\nimport { pluginCore } from './plugin.ts'\nimport { transformReservedWord } from './transformers/transformReservedWord.ts'\nimport { EventEmitter } from './utils/EventEmitter.ts'\nimport { setUniqueName } from './utils/uniqueName.ts'\n\nimport type { PossiblePromise } from '@kubb/types'\nimport type { KubbFile } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\nimport type { PluginCore } from './plugin.ts'\nimport type {\n Config,\n GetPluginFactoryOptions,\n Plugin,\n PluginFactoryOptions,\n PluginLifecycle,\n PluginLifecycleHooks,\n PluginParameter,\n PluginWithLifeCycle,\n ResolveNameParams,\n ResolvePathParams,\n UserPlugin,\n UserPluginWithLifeCycle,\n} from './types.ts'\n\ntype RequiredPluginLifecycle = Required<PluginLifecycle>\n\n/**\n * Get the type of the first argument in a function.\n * @example Arg0<(a: string, b: number) => void> -> string\n */\ntype Argument0<H extends keyof PluginLifecycle> = Parameters<RequiredPluginLifecycle[H]>[0]\n\ntype Strategy = 'hookFirst' | 'hookForPlugin' | 'hookParallel' | 'hookReduceArg0' | 'hookSeq'\n\ntype Executer<H extends PluginLifecycleHooks = PluginLifecycleHooks> = {\n strategy: Strategy\n hookName: H\n plugin: Plugin\n parameters?: unknown[] | undefined\n output?: unknown\n}\n\ntype ParseResult<H extends PluginLifecycleHooks> = RequiredPluginLifecycle[H]\n\ntype SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseResult<H>>> = {\n result: Result\n plugin: Plugin\n}\n\n// inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#\n\ntype Options = {\n logger: Logger\n\n /**\n * Task for the FileManager\n */\n task: (file: KubbFile.ResolvedFile) => Promise<KubbFile.ResolvedFile>\n}\n\ntype Events = {\n execute: [executer: Executer]\n executed: [executer: Executer]\n error: [error: Error]\n}\n\ntype GetFileProps<TOptions = object> = {\n name: string\n mode?: KubbFile.Mode\n extName: KubbFile.Extname\n pluginKey: Plugin['key']\n options?: TOptions\n}\n\nexport class PluginManager {\n readonly plugins: PluginWithLifeCycle[]\n readonly fileManager: FileManager\n readonly events: EventEmitter<Events> = new EventEmitter()\n\n readonly config: Config\n\n readonly executed: Array<Executer> = []\n readonly logger: Logger\n readonly #core: Plugin<PluginCore>\n\n readonly #usedPluginNames: Record<string, number> = {}\n readonly #promiseManager: PromiseManager\n\n readonly queue: PQueue\n\n constructor(config: Config, options: Options) {\n this.config = config\n this.logger = options.logger\n this.queue = new PQueue({ concurrency: 1 })\n this.fileManager = new FileManager({\n task: options.task,\n queue: this.queue,\n })\n this.#promiseManager = new PromiseManager({\n nullCheck: (state: SafeParseResult<'resolveName'> | null) => !!state?.result,\n })\n\n const plugins = config.plugins || []\n\n const core = pluginCore({\n config,\n logger: this.logger,\n pluginManager: this,\n fileManager: this.fileManager,\n resolvePath: this.resolvePath.bind(this),\n resolveName: this.resolveName.bind(this),\n getPlugins: this.#getSortedPlugins.bind(this),\n })\n\n // call core.api.call with empty context so we can transform `api()` to `api: {}`\n this.#core = this.#parse(core as unknown as UserPlugin, this as any, core.api.call(null as any)) as Plugin<PluginCore>\n\n this.plugins = [this.#core, ...plugins].map((plugin) => {\n return this.#parse(plugin as UserPlugin, this, this.#core.api)\n })\n\n return this\n }\n\n getFile<TOptions = object>({ name, mode, extName, pluginKey, options }: GetFileProps<TOptions>): KubbFile.File<{ pluginKey: Plugin['key'] }> {\n let source = ''\n const baseName = `${name}${extName}` as const\n const path = this.resolvePath({ baseName, mode, pluginKey, options })\n\n if (!path) {\n throw new Error(`Filepath should be defined for resolvedName \"${name}\" and pluginKey [${JSON.stringify(pluginKey)}]`)\n }\n\n try {\n source = readSync(path)\n } catch (_e) {\n //\n }\n\n return {\n path,\n baseName,\n meta: {\n pluginKey,\n },\n source,\n }\n }\n\n resolvePath = <TOptions = object>(params: ResolvePathParams<TOptions>): KubbFile.OptionalPath => {\n if (params.pluginKey) {\n const paths = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolvePath',\n parameters: [params.baseName, params.mode, params.options as object],\n })\n\n if (paths && paths?.length > 1) {\n this.logger.emit('debug', [\n `Cannot return a path where the 'pluginKey' ${\n params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'\n } is not unique enough\\n\\nPaths: ${JSON.stringify(paths, undefined, 2)}\\n\\nFalling back on the first item.\\n`,\n ])\n }\n\n return paths?.at(0)\n }\n return this.hookFirstSync({\n hookName: 'resolvePath',\n parameters: [params.baseName, params.mode, params.options as object],\n }).result\n }\n resolveName = (params: ResolveNameParams): string => {\n if (params.pluginKey) {\n const names = this.hookForPluginSync({\n pluginKey: params.pluginKey,\n hookName: 'resolveName',\n parameters: [params.name, params.type],\n })\n\n if (names && names?.length > 1) {\n this.logger.emit('debug', [\n `Cannot return a name where the 'pluginKey' ${\n params.pluginKey ? JSON.stringify(params.pluginKey) : '\"'\n } is not unique enough\\n\\nNames: ${JSON.stringify(names, undefined, 2)}\\n\\nFalling back on the first item.\\n`,\n ])\n }\n\n return transformReservedWord(names?.at(0) || params.name)\n }\n\n const name = this.hookFirstSync({\n hookName: 'resolveName',\n parameters: [params.name, params.type],\n }).result\n\n return transformReservedWord(name)\n }\n\n /**\n * Instead of calling `pluginManager.events.on` you can use `pluginManager.on`. This one also has better types.\n */\n on<TEventName extends keyof Events & string>(eventName: TEventName, handler: (...eventArg: Events[TEventName]) => void): void {\n this.events.on(eventName, handler as any)\n }\n\n /**\n * Run a specific hookName for plugin x.\n */\n hookForPlugin<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n }: {\n pluginKey: Plugin['key']\n hookName: H\n parameters: PluginParameter<H>\n }): Promise<Array<ReturnType<ParseResult<H>> | null>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n const promises = plugins\n .map((plugin) => {\n return this.#execute<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n })\n .filter(Boolean)\n\n return Promise.all(promises)\n }\n /**\n * Run a specific hookName for plugin x.\n */\n\n hookForPluginSync<H extends PluginLifecycleHooks>({\n pluginKey,\n hookName,\n parameters,\n }: {\n pluginKey: Plugin['key']\n hookName: H\n parameters: PluginParameter<H>\n }): Array<ReturnType<ParseResult<H>>> | null {\n const plugins = this.getPluginsByKey(hookName, pluginKey)\n\n return plugins\n .map((plugin) => {\n return this.#executeSync<H>({\n strategy: 'hookFirst',\n hookName,\n parameters,\n plugin,\n })\n })\n .filter(Boolean)\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n async hookFirst<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<Plugin> | null\n }): Promise<SafeParseResult<H>> {\n const promises = this.#getSortedPlugins()\n .filter((plugin) => {\n return skipped ? skipped.has(plugin) : true\n })\n .map((plugin) => {\n return async () => {\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 SafeParseResult<H>)\n }\n })\n\n return this.#promiseManager.run('first', promises)\n }\n\n /**\n * First non-null result stops and will return it's value.\n */\n hookFirstSync<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n skipped,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n skipped?: ReadonlySet<Plugin> | null\n }): SafeParseResult<H> {\n let parseResult: SafeParseResult<H> = null as unknown as SafeParseResult<H>\n\n for (const plugin of this.#getSortedPlugins()) {\n if (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 * Run all plugins in parallel(order will be based on `this.plugin` and if `pre` or `post` is set).\n */\n async hookParallel<H extends PluginLifecycleHooks, TOuput = void>({\n hookName,\n parameters,\n }: {\n hookName: H\n parameters?: Parameters<RequiredPluginLifecycle[H]> | undefined\n }): Promise<Awaited<TOuput>[]> {\n const promises = this.#getSortedPlugins().map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookParallel',\n hookName,\n parameters,\n plugin,\n }) as Promise<TOuput>\n })\n\n const results = await this.#promiseManager.run('parallel', promises)\n\n results.forEach((result, index) => {\n if (isPromiseRejectedResult<Error>(result)) {\n const plugin = this.#getSortedPlugins()[index]\n\n this.#catcher<H>(result.reason, plugin, hookName)\n }\n })\n\n return results.filter((result) => result.status === 'fulfilled').map((result) => (result as PromiseFulfilledResult<Awaited<TOuput>>).value)\n }\n\n /**\n * Chain all plugins, `reduce` can be passed through to handle every returned value. The return value of the first plugin will be used as the first parameter for the plugin after that.\n */\n hookReduceArg0<H extends PluginLifecycleHooks>({\n hookName,\n parameters,\n reduce,\n }: {\n hookName: H\n parameters: PluginParameter<H>\n reduce: (reduction: Argument0<H>, result: ReturnType<ParseResult<H>>, plugin: Plugin) => PossiblePromise<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()) {\n promise = promise\n .then((arg0) => {\n const value = this.#execute({\n strategy: 'hookReduceArg0',\n hookName,\n parameters: [arg0, ...rest] as PluginParameter<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\n return promise\n }\n\n /**\n * Chains plugins\n */\n async hookSeq<H extends PluginLifecycleHooks>({ hookName, parameters }: { hookName: H; parameters?: PluginParameter<H> }): Promise<void> {\n const promises = this.#getSortedPlugins().map((plugin) => {\n return () =>\n this.#execute({\n strategy: 'hookSeq',\n hookName,\n parameters,\n plugin,\n })\n })\n\n return this.#promiseManager.run('seq', promises)\n }\n\n #getSortedPlugins(hookName?: keyof PluginLifecycle): Plugin[] {\n const plugins = [...this.plugins].filter((plugin) => plugin.name !== 'core')\n\n if (hookName) {\n if (this.logger.logLevel === LogLevel.info) {\n const containsHookName = plugins.some((item) => item[hookName])\n if (!containsHookName) {\n this.logger.emit('warning', `No hook ${hookName} found`)\n }\n }\n\n return plugins.filter((item) => item[hookName])\n }\n // TODO add test case for sorting with pre/post\n\n return plugins\n .map((plugin) => {\n if (plugin.pre) {\n const isValid = plugin.pre.every((pluginName) => plugins.find((pluginToFind) => pluginToFind.name === pluginName))\n\n if (!isValid) {\n throw new ValidationPluginError(`This plugin has a pre set that is not valid(${JSON.stringify(plugin.pre, undefined, 2)})`)\n }\n }\n\n return plugin\n })\n .sort((a, b) => {\n if (b.pre?.includes(a.name)) {\n return 1\n }\n if (b.post?.includes(a.name)) {\n return -1\n }\n return 0\n })\n }\n\n getPluginsByKey(hookName: keyof PluginLifecycle, pluginKey: Plugin['key']): Plugin[] {\n const plugins = [...this.plugins]\n const [searchPluginName, searchIdentifier] = pluginKey\n\n const pluginByPluginName = plugins\n .filter((plugin) => plugin[hookName])\n .filter((item) => {\n const [name, identifier] = item.key\n\n const identifierCheck = identifier?.toString() === searchIdentifier?.toString()\n const nameCheck = name === searchPluginName\n\n if (searchIdentifier) {\n return identifierCheck && nameCheck\n }\n\n return nameCheck\n })\n\n if (!pluginByPluginName?.length) {\n // fallback on the core plugin when there is no match\n\n const corePlugin = plugins.find((plugin) => plugin.name === 'core' && plugin[hookName])\n\n if (corePlugin) {\n this.logger.emit('debug', [`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, falling back on the '@kubb/core' plugin`])\n } else {\n this.logger.emit('debug', [`No hook '${hookName}' for pluginKey '${JSON.stringify(pluginKey)}' found, no fallback found in the '@kubb/core' plugin`])\n }\n return corePlugin ? [corePlugin] : []\n }\n\n return pluginByPluginName\n }\n\n #addExecutedToCallStack(executer: Executer | undefined) {\n if (executer) {\n this.events.emit('executed', executer)\n this.executed.push(executer)\n }\n }\n\n /**\n * Run an async plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be either in `PluginHooks` or `OutputPluginValueHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The actual pluginObject to run.\n */\n // Implementation signature\n #execute<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: unknown[] | undefined\n plugin: PluginWithLifeCycle\n }): Promise<ReturnType<ParseResult<H>> | null> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('execute', { strategy, hookName, parameters, plugin })\n\n const task = Promise.resolve()\n .then(() => {\n if (typeof hook === 'function') {\n const possiblePromiseResult = (hook as Function).apply({ ...this.#core.api, plugin }, parameters) as Promise<ReturnType<ParseResult<H>>>\n\n if (isPromise(possiblePromiseResult)) {\n return Promise.resolve(possiblePromiseResult)\n }\n return possiblePromiseResult\n }\n\n return hook\n })\n .then((result) => {\n output = result\n\n this.#addExecutedToCallStack({\n parameters,\n output,\n strategy,\n hookName,\n plugin,\n })\n\n return result\n })\n .catch((e: Error) => {\n this.#catcher<H>(e, plugin, hookName)\n\n return null\n })\n\n return task\n }\n\n /**\n * Run a sync plugin hook and return the result.\n * @param hookName Name of the plugin hook. Must be in `PluginHooks`.\n * @param args Arguments passed to the plugin hook.\n * @param plugin The acutal plugin\n * @param replaceContext When passed, the plugin context can be overridden.\n */\n #executeSync<H extends PluginLifecycleHooks>({\n strategy,\n hookName,\n parameters,\n plugin,\n }: {\n strategy: Strategy\n hookName: H\n parameters: PluginParameter<H>\n plugin: PluginWithLifeCycle\n }): ReturnType<ParseResult<H>> | null {\n const hook = plugin[hookName]\n let output: unknown\n\n if (!hook) {\n return null\n }\n\n this.events.emit('execute', { strategy, hookName, parameters, plugin })\n\n try {\n if (typeof hook === 'function') {\n const fn = (hook as Function).apply({ ...this.#core.api, plugin }, parameters) as ReturnType<ParseResult<H>>\n\n output = fn\n return fn\n }\n\n output = hook\n\n this.#addExecutedToCallStack({\n parameters,\n output,\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\n }\n }\n\n #catcher<H extends PluginLifecycleHooks>(cause: Error, plugin?: Plugin, hookName?: H) {\n const text = `${cause.message} (plugin: ${plugin?.name || 'unknown'}, hook: ${hookName || 'unknown'})`\n\n this.logger.emit('error', text, cause)\n this.events.emit('error', cause)\n }\n\n #parse<TPlugin extends UserPluginWithLifeCycle>(\n plugin: TPlugin,\n pluginManager: PluginManager,\n context: PluginCore['api'] | undefined,\n ): Plugin<GetPluginFactoryOptions<TPlugin>> {\n const usedPluginNames = pluginManager.#usedPluginNames\n\n setUniqueName(plugin.name, usedPluginNames)\n\n const key = [plugin.name, usedPluginNames[plugin.name]].filter(Boolean) as [typeof plugin.name, string]\n\n // default transform\n if (!plugin.transform) {\n plugin.transform = function transform(code) {\n return code\n }\n }\n\n if (plugin.api && typeof plugin.api === 'function') {\n const api = (plugin.api as Function).call(context) as typeof plugin.api\n\n return {\n ...plugin,\n key,\n api,\n } as unknown as Plugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n return {\n ...plugin,\n key,\n } as unknown as Plugin<GetPluginFactoryOptions<TPlugin>>\n }\n\n static getDependedPlugins<\n T1 extends PluginFactoryOptions,\n T2 extends PluginFactoryOptions = never,\n T3 extends PluginFactoryOptions = never,\n TOutput = T3 extends never ? (T2 extends never ? [T1: Plugin<T1>] : [T1: Plugin<T1>, T2: Plugin<T2>]) : [T1: Plugin<T1>, T2: Plugin<T2>, T3: Plugin<T3>],\n >(plugins: Array<Plugin>, dependedPluginNames: string | string[]): TOutput {\n let pluginNames: string[] = []\n if (typeof dependedPluginNames === 'string') {\n pluginNames = [dependedPluginNames]\n } else {\n pluginNames = dependedPluginNames\n }\n\n return pluginNames.map((pluginName) => {\n const plugin = plugins.find((plugin) => plugin.name === pluginName)\n if (!plugin) {\n throw new ValidationPluginError(`This plugin depends on the ${pluginName} plugin.`)\n }\n return plugin\n }) as TOutput\n }\n\n static get hooks() {\n return ['buildStart', 'resolvePath', 'resolveName', 'load', 'transform', 'writeFile', 'buildEnd'] as const\n }\n}\n","type PromiseFunc<T = unknown, T2 = never> = (state?: T) => T2 extends never ? Promise<T> : Promise<T> | T2\n\nexport type ValueOfPromiseFuncArray<TInput extends Array<unknown>> = TInput extends Array<PromiseFunc<infer X, infer Y>> ? X | Y : never\n\nexport function noReturn(): void {}\n\ntype SeqOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Array<Awaited<ValueOfPromiseFuncArray<TInput>>>\n\n/**\n * Chains promises\n */\nexport function hookSeq<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TOutput = SeqOutput<TInput, TValue>>(promises: TInput): TOutput {\n return promises.filter(Boolean).reduce(\n (promise, func) => {\n if (typeof func !== 'function') {\n throw new Error('HookSeq needs a function that returns a promise `() => Promise<unknown>`')\n }\n\n return promise.then((state) => {\n const calledFunc = func(state as TValue)\n\n if (calledFunc) {\n return calledFunc.then(Array.prototype.concat.bind(state))\n }\n })\n },\n Promise.resolve([] as unknown),\n ) as TOutput\n}\n\ntype HookFirstOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown> = ValueOfPromiseFuncArray<TInput>\n\n/**\n * Chains promises, first non-null result stops and returns\n */\nexport function hookFirst<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookFirstOutput<TInput, TValue>>(\n promises: TInput,\n nullCheck = (state: any) => state !== null,\n): TOutput {\n let promise: Promise<unknown> = Promise.resolve(null) as Promise<unknown>\n\n for (const func of promises.filter(Boolean)) {\n promise = promise.then((state) => {\n if (nullCheck(state)) {\n return state\n }\n\n const calledFunc = func(state as TValue)\n\n return calledFunc\n })\n }\n\n return promise as TOutput\n}\n\ntype HookParallelOutput<TInput extends Array<PromiseFunc<TValue, null>>, TValue> = Promise<PromiseSettledResult<Awaited<ValueOfPromiseFuncArray<TInput>>>[]>\n\n/**\n * Run promises in parallel with allSettled\n */\nexport function hookParallel<TInput extends Array<PromiseFunc<TValue, null>>, TValue = unknown, TOutput = HookParallelOutput<TInput, TValue>>(\n promises: TInput,\n): TOutput {\n return Promise.allSettled(promises.filter(Boolean).map((promise) => promise())) as TOutput\n}\n\nexport type Strategy = 'seq' | 'first' | 'parallel'\n\nexport type StrategySwitch<TStrategy extends Strategy, TInput extends Array<PromiseFunc<TValue, null>>, TValue> = TStrategy extends 'first'\n ? HookFirstOutput<TInput, TValue>\n : TStrategy extends 'seq'\n ? SeqOutput<TInput, TValue>\n : TStrategy extends 'parallel'\n ? HookParallelOutput<TInput, TValue>\n : never\n\n// tests\n\ntype test = ValueOfPromiseFuncArray<Array<PromiseFunc<number, null>>>\n// ^?\n","import { hookFirst, hookParallel, hookSeq } from './utils/executeStrategies.ts'\n\nimport type { PossiblePromise } from '@kubb/types'\nimport type { Strategy, StrategySwitch } from './utils/executeStrategies.ts'\n\ntype PromiseFunc<T = unknown, T2 = never> = () => T2 extends never ? Promise<T> : Promise<T> | T2\n\ntype Options<TState = any> = {\n nullCheck?: (state: TState) => boolean\n}\n\nexport class PromiseManager<TState = any> {\n #options: Options<TState> = {}\n\n constructor(options: Options<TState> = {}) {\n this.#options = options\n\n return this\n }\n\n run<TInput extends Array<PromiseFunc<TValue, null>>, TValue, TStrategy extends Strategy, TOutput = StrategySwitch<TStrategy, TInput, TValue>>(\n strategy: TStrategy,\n promises: TInput,\n ): TOutput {\n if (strategy === 'seq') {\n return hookSeq<TInput, TValue, TOutput>(promises)\n }\n\n if (strategy === 'first') {\n return hookFirst<TInput, TValue, TOutput>(promises, this.#options.nullCheck)\n }\n\n if (strategy === 'parallel') {\n return hookParallel<TInput, TValue, TOutput>(promises)\n }\n\n throw new Error(`${strategy} not implemented`)\n }\n}\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","/**\n * Behaves as an Error to log a warning in the console(still stops the execution)\n */\nexport class Warning extends Error {\n constructor(message?: string, options?: { cause: Error }) {\n super(message, { cause: options?.cause })\n\n this.name = 'Warning'\n }\n}\n\nexport class ValidationPluginError extends Error {}\n","import path from 'node:path'\n\nimport { createPluginCache } from './utils/cache.ts'\n\nimport type { FileManager } from './FileManager.ts'\nimport type { PluginManager } from './PluginManager.ts'\nimport type { Plugin, PluginContext, PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'\n\ntype PluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options: T['options']) => UserPluginWithLifeCycle<T>\n\ntype OptionalPluginFactory<T extends PluginFactoryOptions = PluginFactoryOptions> = (options?: T['options']) => UserPluginWithLifeCycle<T>\n\nexport function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptions>(factory: PluginFactory<T>): OptionalPluginFactory<T> {\n return (options = {}) => {\n return factory(options)\n }\n}\n\ntype Options = {\n config: PluginContext['config']\n fileManager: FileManager\n pluginManager: PluginManager\n resolvePath: PluginContext['resolvePath']\n resolveName: PluginContext['resolveName']\n logger: PluginContext['logger']\n getPlugins: () => Array<Plugin>\n plugin?: PluginContext['plugin']\n}\n\n// not publicly exported\nexport type PluginCore = PluginFactoryOptions<'core', Options, Options, PluginContext, never>\n\nexport const pluginCore = createPlugin<PluginCore>((options) => {\n const { fileManager, pluginManager, resolvePath, resolveName, logger } = options\n\n return {\n name: 'core',\n options,\n key: ['core'],\n api() {\n return {\n get config() {\n return options.config\n },\n get plugins() {\n return options.getPlugins()\n },\n get plugin() {\n // see pluginManger.#execute where we override with `.call` the this with the correct plugin\n return options.plugin as NonNullable<Options['plugin']>\n },\n logger,\n fileManager,\n pluginManager,\n async addFile(...files) {\n const resolvedFiles = await fileManager.add(...files)\n\n if (!Array.isArray(resolvedFiles)) {\n return [resolvedFiles]\n }\n\n return resolvedFiles\n },\n resolvePath,\n resolveName,\n cache: createPluginCache(),\n }\n },\n resolvePath(baseName) {\n const root = path.resolve(this.config.root, this.config.output.path)\n\n return path.resolve(root, baseName)\n },\n resolveName(name) {\n return name\n },\n }\n})\n","import type { PluginCache } from '../types.ts'\n\nexport interface Cache<TStore extends object = object> {\n delete(id: keyof TStore): boolean\n get(id: keyof TStore): TStore[keyof TStore] | null\n has(id: keyof TStore): boolean\n set(id: keyof TStore, value: unknown): void\n}\n\nexport function createPluginCache<TStore extends PluginCache>(Store: TStore = Object.create(null) as TStore): Cache<TStore> {\n return {\n set(id, value): void {\n Store[id] = [0, value] as TStore[keyof TStore]\n },\n get(id): TStore[keyof TStore] | null {\n const item = Store[id]\n if (!item) {\n return null\n }\n item[0] = 0\n return item[1] as TStore[keyof TStore]\n },\n has(id): boolean {\n const item = Store[id]\n if (!item) {\n return false\n }\n item[0] = 0\n return true\n },\n delete(id: keyof TStore): boolean {\n return delete Store[id]\n },\n }\n}\n","import type { PossiblePromise } from '@kubb/types'\nimport type { CLIOptions, Config, InputPath, UserConfig } from './types.ts'\n\n/**\n * Type helper to make it easier to use kubb.config.js\n * accepts a direct {@link Config} object, or a function that returns it.\n * The function receives a {@link ConfigEnv} object that exposes two properties:\n */\nexport function defineConfig(\n options:\n | PossiblePromise<UserConfig | Array<UserConfig>>\n | ((\n /** The options derived from the CLI flags */\n cliOptions: CLIOptions,\n ) => PossiblePromise<UserConfig | Array<UserConfig>>),\n): typeof options {\n return options\n}\n\nexport function isInputPath(result: Config | undefined): result is Config<InputPath> {\n return !!result && 'path' in (result as any)\n}\n","import c from 'tinyrainbow'\n\nimport { FileManager } from './FileManager.ts'\nimport { PluginManager } from './PluginManager.ts'\nimport { isPromise } from './PromiseManager.ts'\nimport { isInputPath } from './config.ts'\nimport { clean } from './fs/clean.ts'\nimport { read } from './fs/read.ts'\nimport { LogLevel, createLogger, randomCliColour } from './logger.ts'\nimport { URLPath } from './utils/URLPath.ts'\n\nimport type { KubbFile } from './FileManager.ts'\nimport type { Logger } from './logger.ts'\nimport type { Plugin, PluginContext, PluginParameter, TransformResult } from './types.ts'\n\ntype BuildOptions = {\n config: PluginContext['config']\n /**\n * @default Logger without the spinner\n */\n logger?: Logger\n}\n\ntype BuildOutput = {\n files: FileManager['files']\n pluginManager: PluginManager\n /**\n * Only for safeBuild\n */\n error?: Error\n}\n\nasync function transformReducer(\n this: PluginContext,\n _previousCode: string,\n result: TransformResult | Promise<TransformResult>,\n _plugin: Plugin,\n): Promise<string | null> {\n return result\n}\n\nasync function setup(options: BuildOptions): Promise<PluginManager> {\n const { config, logger = createLogger({ logLevel: LogLevel.silent }) } = options\n let count = 0\n\n try {\n if (isInputPath(config) && !new URLPath(config.input.path).isURL) {\n await read(config.input.path)\n }\n } catch (e) {\n if (isInputPath(config)) {\n throw new Error(\n `Cannot read file/URL defined in \\`input.path\\` or set with \\`kubb generate PATH\\` in the CLI of your Kubb config ${c.dim(config.input.path)}`,\n {\n cause: e,\n },\n )\n }\n }\n\n if (config.output.clean) {\n await clean(config.output.path)\n }\n\n const task = async (file: KubbFile.ResolvedFile): Promise<KubbFile.ResolvedFile> => {\n const { path } = file\n\n let source: string | null = await FileManager.getSource(file)\n\n const { result: loadedResult } = await pluginManager.hookFirst({\n hookName: 'load',\n parameters: [path],\n })\n if (loadedResult && isPromise(loadedResult)) {\n source = await loadedResult\n }\n if (loadedResult && !isPromise(loadedResult)) {\n source = loadedResult\n }\n\n if (source) {\n source = await pluginManager.hookReduceArg0({\n hookName: 'transform',\n parameters: [source, path],\n reduce: transformReducer,\n })\n\n if (config.output.write || config.output.write === undefined) {\n if (file.meta?.pluginKey) {\n // run only for pluginKey defined in the meta of the file\n await pluginManager.hookForPlugin({\n pluginKey: file.meta?.pluginKey,\n hookName: 'writeFile',\n parameters: [source, path],\n })\n }\n\n await pluginManager.hookFirst({\n hookName: 'writeFile',\n parameters: [source, path],\n })\n }\n }\n\n return {\n ...file,\n source: source || '',\n }\n }\n\n const pluginManager = new PluginManager(config, { logger, task })\n\n pluginManager.on('execute', (executer) => {\n const { hookName, parameters, plugin } = executer\n\n if (hookName === 'writeFile') {\n const [code] = parameters as PluginParameter<'writeFile'>\n\n logger.emit('debug', [`PluginKey ${c.dim(JSON.stringify(plugin.key))} \\nwith source\\n\\n${code}`])\n }\n })\n\n pluginManager.queue.on('add', () => {\n if (logger.logLevel !== LogLevel.info) {\n return\n }\n\n if (count === 0) {\n logger.emit('start', '💾 Writing')\n }\n })\n\n pluginManager.queue.on('active', () => {\n if (logger.logLevel !== LogLevel.info) {\n return\n }\n\n if (logger.spinner && pluginManager.queue.size > 0) {\n const text = `Item: ${count} Size: ${pluginManager.queue.size} Pending: ${pluginManager.queue.pending}`\n\n logger.spinner.suffixText = c.dim(text)\n }\n ++count\n })\n\n pluginManager.queue.on('completed', () => {\n if (logger.logLevel !== LogLevel.info) {\n return\n }\n\n if (logger.spinner) {\n const text = `Item: ${count} Size: ${pluginManager.queue.size} Pending: ${pluginManager.queue.pending}`\n\n logger.spinner.suffixText = c.dim(text)\n }\n })\n\n pluginManager.on('executed', (executer) => {\n const { hookName, plugin, output, parameters } = executer\n\n const logs = [\n `${randomCliColour(plugin.name)} Executing ${hookName}`,\n parameters && `${c.bgWhite('Parameters')} ${randomCliColour(plugin.name)} ${hookName}`,\n JSON.stringify(parameters, undefined, 2),\n output && `${c.bgWhite('Output')} ${randomCliColour(plugin.name)} ${hookName}`,\n output,\n ].filter(Boolean)\n\n logger.emit('debug', logs as string[])\n })\n\n return pluginManager\n}\n\nexport async function build(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n\n const { fileManager, logger } = pluginManager\n\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [options.config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n if (logger.logLevel === LogLevel.info) {\n logger.emit('end', '💾 Writing completed')\n }\n\n const files = await Promise.all(\n fileManager.files.map(async (file) => ({\n ...file,\n source: await FileManager.getSource(file),\n })),\n )\n\n return {\n files,\n pluginManager,\n }\n}\n\nexport async function safeBuild(options: BuildOptions): Promise<BuildOutput> {\n const pluginManager = await setup(options)\n\n const { fileManager, logger } = pluginManager\n\n try {\n await pluginManager.hookParallel({\n hookName: 'buildStart',\n parameters: [options.config],\n })\n\n await pluginManager.hookParallel({ hookName: 'buildEnd' })\n\n if (logger.logLevel === LogLevel.info) {\n logger.emit('end', '💾 Writing completed')\n }\n } catch (e) {\n const files = await Promise.all(\n fileManager.files.map(async (file) => ({\n ...file,\n source: await FileManager.getSource(file),\n })),\n )\n\n return {\n files,\n pluginManager,\n error: e as Error,\n }\n }\n\n const files = await Promise.all(\n fileManager.files.map(async (file) => ({\n ...file,\n source: await FileManager.getSource(file),\n })),\n )\n\n return {\n files,\n pluginManager,\n }\n}\n","/**\n * Abstract class that contains the building blocks for plugins to create their own Generator\n * @link idea based on https://github.com/colinhacks/zod/blob/master/src/types.ts#L137\n */\nexport abstract class Generator<TOptions = unknown, TContext = unknown> {\n #options: TOptions = {} as TOptions\n #context: TContext = {} as TContext\n\n constructor(options?: TOptions, context?: TContext) {\n if (context) {\n this.#context = context\n }\n\n if (options) {\n this.#options = options\n }\n\n return this\n }\n\n get options(): TOptions {\n return this.#options\n }\n\n get context(): TContext {\n return this.#context\n }\n\n set options(options: TOptions) {\n this.#options = { ...this.#options, ...options }\n }\n\n abstract build(...params: unknown[]): unknown\n}\n","import mod from 'node:module'\nimport os from 'node:os'\nimport { pathToFileURL } from 'node:url'\n\nimport { findUp, findUpSync } from 'find-up'\nimport { coerce, satisfies } from 'semver'\n\nimport { read, readSync } from './fs/read'\n\ntype PackageJSON = {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n}\n\ntype DependencyName = string\n\ntype DependencyVersion = string\n\nexport class PackageManager {\n static #cache: Record<DependencyName, DependencyVersion> = {}\n\n #cwd?: string\n #SLASHES = new Set(['/', '\\\\'])\n constructor(workspace?: string) {\n if (workspace) {\n this.#cwd = workspace\n }\n\n return this\n }\n\n set workspace(workspace: string) {\n this.#cwd = workspace\n }\n\n get workspace(): string | undefined {\n return this.#cwd\n }\n\n normalizeDirectory(directory: string): string {\n if (!this.#SLASHES.has(directory[directory.length - 1]!)) {\n return `${directory}/`\n }\n\n return directory\n }\n\n getLocation(path: string): string {\n let location = path\n\n if (this.#cwd) {\n const require = mod.createRequire(this.normalizeDirectory(this.#cwd))\n location = require.resolve(path)\n }\n\n return location\n }\n\n async import(path: string): Promise<any | undefined> {\n try {\n let location = this.getLocation(path)\n\n if (os.platform() === 'win32') {\n location = pathToFileURL(location).href\n }\n\n const module = await import(location)\n\n return module?.default ?? module\n } catch (e) {\n console.log(e)\n return undefined\n }\n }\n\n async getPackageJSON(): Promise<PackageJSON | undefined> {\n const pkgPath = await findUp(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = await read(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n getPackageJSONSync(): PackageJSON | undefined {\n const pkgPath = findUpSync(['package.json'], {\n cwd: this.#cwd,\n })\n if (!pkgPath) {\n return undefined\n }\n\n const json = readSync(pkgPath)\n\n return JSON.parse(json) as PackageJSON\n }\n\n static setVersion(dependency: DependencyName, version: DependencyVersion): void {\n PackageManager.#cache[dependency] = version\n }\n\n #match(packageJSON: PackageJSON, dependency: DependencyName | RegExp): string | undefined {\n const dependencies = {\n ...(packageJSON['dependencies'] || {}),\n ...(packageJSON['devDependencies'] || {}),\n }\n\n if (typeof dependency === 'string' && dependencies[dependency]) {\n return dependencies[dependency]\n }\n\n const matchedDependency = Object.keys(dependencies).find((dep) => dep.match(dependency))\n\n return matchedDependency ? dependencies[matchedDependency] : undefined\n }\n\n async getVersion(dependency: DependencyName | RegExp): Promise<DependencyVersion | undefined> {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = await this.getPackageJSON()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n getVersionSync(dependency: DependencyName | RegExp): DependencyVersion | undefined {\n if (typeof dependency === 'string' && PackageManager.#cache[dependency]) {\n return PackageManager.#cache[dependency]\n }\n\n const packageJSON = this.getPackageJSONSync()\n\n if (!packageJSON) {\n return undefined\n }\n\n return this.#match(packageJSON, dependency)\n }\n\n async isValid(dependency: DependencyName | RegExp, version: DependencyVersion): Promise<boolean> {\n const packageVersion = await this.getVersion(dependency)\n\n if (!packageVersion) {\n return false\n }\n\n if (packageVersion === version) {\n return true\n }\n\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n isValidSync(dependency: DependencyName | RegExp, version: DependencyVersion): boolean {\n const packageVersion = this.getVersionSync(dependency)\n\n if (!packageVersion) {\n return false\n }\n const semVer = coerce(packageVersion)\n\n if (!semVer) {\n throw new Error(`${packageVersion} is not valid`)\n }\n\n return satisfies(semVer, version)\n }\n}\n","import type { ObjValueTuple, TupleToUnion } from '@kubb/types'\nimport type { _Register } from './index.ts'\n\nexport type Plugins = _Register\nexport type OptionsPlugins = { [K in keyof Plugins]: Plugins[K]['options'] }\n\nexport type OptionsOfPlugin<K extends keyof Plugins> = Plugins[K]['options']\n\nexport type PluginUnion = TupleToUnion<ObjValueTuple<OptionsPlugins>>\n\nexport type Plugin = keyof Plugins\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,YAAY;AACnB,SAAS,SAAS,eAAe;AAGjC,OAAO,YAAY;AACnB,SAAS,mBAAmB;;;ACL5B,SAAS,kBAAkB;AAE3B,OAAO,UAAU;;;ACFjB,OAAO,aAAa;AAWb,IAAM,WAAN,MAAM,UAAyB;AAAA,EAOpC,YAAY,MAAS,QAAsB;AAF3C,SAAO,WAA+B,CAAC;AAGrC,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,MAAsB;AAC7B,UAAM,QAAQ,IAAI,UAAS,MAAM,IAAI;AACrC,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,WAAW,CAAC;AAAA,IACnB;AACA,SAAK,SAAS,KAAK,KAAK;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,MAA8B;AACjC,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK,MAAM;AACtB,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,UAAU,QAAQ;AACzB,eAAS,IAAI,GAAG,EAAE,OAAO,IAAI,KAAK,UAAU,SAA6B,MAAM,IAAI,QAAQ,KAAK;AAC9F,iBAAS,KAAK,SAAS,CAAC,EAAG,KAAK,IAAI;AACpC,YAAI,QAAQ;AACV,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,SAAwB;AAC1B,QAAI,CAAC,KAAK,YAAY,KAAK,SAAS,WAAW,GAAG;AAEhD,aAAO,CAAC,IAAI;AAAA,IACd;AAGA,UAAM,SAAwB,CAAC;AAC/B,QAAI,KAAK,UAAU;AACjB,eAAS,IAAI,GAAG,EAAE,OAAO,IAAI,KAAK,UAAU,IAAI,QAAQ,KAAK;AAC3D,eAAO,KAAK,MAAM,QAAQ,KAAK,SAAS,CAAC,EAAG,MAAM;AAAA,MACpD;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,OAAoB;AACtB,QAAI,CAAC,KAAK,QAAQ;AAChB,aAAO;AAAA,IACT;AACA,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,QAAQ,UAAiD;AACvD,QAAI,OAAO,aAAa,YAAY;AAClC,YAAM,IAAI,UAAU,uCAAuC;AAAA,IAC7D;AAGA,aAAS,IAAI;AAGb,QAAI,KAAK,UAAU;AACjB,eAAS,IAAI,GAAG,EAAE,OAAO,IAAI,KAAK,UAAU,IAAI,QAAQ,KAAK;AAC3D,aAAK,SAAS,CAAC,GAAG,QAAQ,QAAQ;AAAA,MACpC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,OAAc,MAAMA,OAAc,UAA2B,CAAC,GAAoB;AAChF,QAAI;AACF,YAAM,UAAU,MAAM,QAAQ,QAAQ,OAAO,IAAI,QAAQ,UAAU,CAAC,QAAQ,OAAO,EAAE,OAAO,OAAO;AACnG,YAAM,eAAe,QAAQA,OAAM;AAAA,QACjC,YAAY,QAAQ;AAAA,QACpB,SAAS,CAAC,gBAAgB,GAAG,OAAO;AAAA,MACtC,CAAC;AAED,UAAI,CAAC,cAAc;AACjB,eAAO;AAAA,MACT;AAEA,YAAM,WAAW,IAAI,UAAS;AAAA,QAC5B,MAAM,aAAa;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,MAAM,YAAY,QAAQ,aAAa,IAAI;AAAA,MAC7C,CAAC;AAED,YAAM,UAAU,CAAC,MAAuB,SAAwB;AAC9D,cAAM,UAAU,KAAK,SAAS;AAAA,UAC5B,MAAM,KAAK;AAAA,UACX,MAAM,KAAK;AAAA,UACX,MAAM,YAAY,QAAQ,KAAK,IAAI;AAAA,QACrC,CAAC;AAED,YAAI,KAAK,UAAU,QAAQ;AACzB,eAAK,UAAU,QAAQ,CAAC,UAAU;AAChC,oBAAQ,SAAS,KAAK;AAAA,UACxB,CAAC;AAAA,QACH;AAAA,MACF;AAEA,mBAAa,UAAU,QAAQ,CAAC,UAAU,QAAQ,UAAU,KAAK,CAAC;AAElE,aAAO;AAAA,IACT,SAAS,GAAG;AACV,YAAM,IAAI,MAAM,2EAA2E,EAAE,OAAO,EAAE,CAAC;AAAA,IACzG;AAAA,EACF;AACF;;;ADtIA;AAmBO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,YAAY,UAAgC,CAAC,GAAG;AAFhD;AAGE,uBAAK,UAAW;AAEhB,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,MAAc,MAA0C;AACrE,UAAM,gBAAgB,WAAW,KAAK,QAAQ,MAAM,KAAK,IAAI,CAAC;AAE9D,QAAI,CAAC,eAAe;AAClB,aAAO,CAAC,IAAI;AAAA,IACd;AAEA,WAAO,cAAc;AAAA,MACnB,CAAC,MAAM,SAAS;AACd,YAAI,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM;AACpC,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,YAAY;AACnB,eAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE;AAAA,QAC7D,OAAO;AACL,eAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE;AAAA,QAC7D;AAEA,eAAO;AAAA,MACT;AAAA,MACA;AAAA,QACE;AAAA,UACE,GAAG;AAAA,UACH,MAAM,CAAC;AAAA,UACP,YAAY;AAAA,QACd;AAAA,QACA;AAAA,UACE,GAAG;AAAA,UACH,MAAM,CAAC;AAAA,UACP,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gBAAgB,MAAc,SAA+C;AAC3E,WAAO,SAAS,QAAQ,CAAC,SAAS;AAChC,aAAO,KAAK,eAAe,MAAM,IAAI;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,MAA2C;AACpD,UAAM,EAAE,WAAW,CAAC,GAAG,YAAY,QAAQ,IAAI,mBAAK;AACpD,UAAM,OAAO,SAAS,MAAM,MAAM,QAAQ;AAE1C,QAAI,CAAC,MAAM;AACT,aAAO;AAAA,IACT;AAEA,UAAM,cAAc,CAAC,OAA6BC,cAAuB;AACvE,UAAI,CAACA,UAAS,UAAU;AACtB,eAAO,CAAC;AAAA,MACV;AAEA,UAAIA,UAAS,SAAS,SAAS,GAAG;AAChC,cAAM,YAA2B,KAAK,QAAQA,UAAS,KAAK,MAAM,UAAU;AAE5E,cAAM,UAAkCA,UAAS,SAC9C,OAAO,OAAO,EACd,IAAI,CAAC,SAAS;AACb,gBAAM,aAAqB,KAAK,KAAK,SAAS,UAAU,KAAK,KAAK,KAAK,IAAI,WAAW,KAAK,YAAY,KAAK,KAAK,IAAI,CAAC;AAEtH,cAAI,WAAW,SAAS,OAAO,KAAK,KAAK,KAAK,SAAS,UAAU;AAC/D,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,YACL,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,KAAK;AAAA,YAC5C;AAAA,UACF;AAAA,QACF,CAAC,EACA,OAAO,OAAO;AAEjB,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ;AAAA,UACR;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AAAA,MACH,WAAWA,UAAS,SAAS,WAAW,GAAG;AACzC,cAAM,CAAC,aAAa,IAAIA,UAAS;AAEjC,cAAM,YAAY,KAAK,QAAQA,UAAS,KAAK,MAAM,UAAU;AAC7D,cAAM,aAAa,cAAc,KAAK,SAAS,UAAU,KAAK,cAAc,KAAK,IAAI,WAAW,KAAK,YAAY,cAAc,KAAK,IAAI,CAAC;AAEzI,cAAM,UAAU;AAAA,UACd;AAAA,YACE,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,KAAK;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAEA,cAAM,KAAK;AAAA,UACT,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ;AAAA,UACR;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AAAA,MACH;AAEA,MAAAA,UAAS,SAAS,QAAQ,CAAC,cAAc;AACvC,oBAAY,OAAO,SAAS;AAAA,MAC9B,CAAC;AAED,aAAO;AAAA,IACT;AAEA,WAAO,YAAY,CAAC,GAAG,IAAI,EAAE,QAAQ;AAAA,EACvC;AACF;AAxHE;;;ADEK,IAAU;AAAA,CAAV,CAAUC,cAAV;AAAA,GAAU;AAtBjB;AA0MO,IAAM,eAAN,MAAM,aAAY;AAAA,EAMvB,YAAY,EAAE,OAAO,OAAO,SAAS,MAAM,QAAQ,IAAI,OAAO,EAAE,IAAa,CAAC,GAAG;AAqCjF,uBAAM;AAgCN,uBAAM;AA1EN,+BAA0C,oBAAI,IAAI;AAElD;AACA;AAGE,uBAAK,OAAQ;AACb,uBAAK,QAAS;AAEd,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,QAA8B;AAChC,UAAM,QAA8B,CAAC;AACrC,uBAAK,QAAO,QAAQ,CAAC,SAAS;AAC5B,YAAM,KAAK,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,IAC5B,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAuB;AACzB,WAAO,mBAAK,QAAO,SAAS,KAAK,mBAAK,QAAO,YAAY;AAAA,EAC3D;AAAA,EAEA,MAAM,OAA8D,OAAwB;AAC1F,UAAM,WAAW,aAAa,KAAK,EAAE,IAAI,CAAC,SAAS;AACjD,UAAI,KAAK,UAAU;AACjB,eAAO,sBAAK,cAAL,WAAU;AAAA,MACnB;AAEA,aAAO,sBAAK,8BAAL,WAAkB;AAAA,IAC3B,CAAC;AAED,UAAM,gBAAgB,MAAM,QAAQ,IAAI,QAAQ;AAEhD,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO;AAAA,IACT;AAEA,WAAO,cAAc,CAAC;AAAA,EACxB;AAAA,EAoDA,MAAM,WAAW,EAAE,MAAM,QAAQ,MAAM,QAAQ,UAAU,CAAC,EAAE,GAAmC;AAC7F,UAAM,EAAE,aAAa,SAAS,IAAI;AAElC,QAAI,eAAe,OAAO;AACxB,aAAO;AAAA,IACT;AAEA,UAAM,kBAAkB,QAAQ,MAAM,OAAO,IAAI;AAEjD,QAAI,qBAAa,YAAY,eAAe,EAAE,SAAS,OAAO,GAAG;AAC/D,aAAO,KAAK,WAAW,mFAAmF;AAC1G;AAAA,IACF;AAEA,UAAM,aAAa,OAAO,KAAK,WAAW,IAAI,IAAI,YAAY,OAAO,IAAI,IAAI,KAAK,YAAY,OAAO,IAAI,CAAC;AAC1G,UAAM,OAAO,aAAY,QAAQ,OAAO,IAAI;AAC5C,UAAM,gBAAgB,IAAI,cAAc;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,GAAG;AAAA,IACL,CAAC;AACD,QAAI,QAAQ,cAAc,WAAW,eAAe;AAEpD,QAAI,CAAC,OAAO;AACV,aAAO;AAAA,IACT;AAEA,QAAI,eAAe,eAAe;AAChC,cAAQ,MAAM,IAAI,CAAC,SAAS;AAC1B,YAAI,KAAK,SAAS;AAChB,iBAAO;AAAA,YACL,GAAG;AAAA,YACH,SAAS,cAAc,gBAAgB,iBAAiB,KAAK,OAAO;AAAA,UACtE;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,UAAM,QAAQ;AAAA,MACZ,MAAM,IAAI,CAAC,SAAS;AAClB,eAAO,sBAAK,8BAAL,WAAkB;AAAA,UACvB,GAAG;AAAA,UACH,MAAM,OAAO,OAAO,KAAK;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,WAAW,SAAS,UAAU,GAAG,UAAU,SAAS,OAAO,WAAW,EAAE,KAAK,GAAG,UAAU,GAAG,OAAO,WAAW,EAAE;AACvH,UAAM,WAA0B;AAAA,MAC9B,MAAM,QAAQ,MAAM,UAAU;AAAA,MAC9B,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,OAAO,WACH;AAAA,UACE,MAAM,OAAO;AAAA,UACb,SAAS;AAAA,UACT,MAAM;AAAA,UACN,YAAY,QAAQ;AAAA,QACtB,IACA;AAAA,UACE,MAAM;AAAA,UACN,YAAY,QAAQ;AAAA,QACtB;AAAA,MACN;AAAA,MACA,YAAY;AAAA,IACd;AAEA,QAAI,eAAe,iBAAiB,CAAC,OAAO,YAAY,SAAS,UAAU,CAAC,GAAG;AAC7E,eAAS,UAAU,cAAc,eAAe,MAAM,SAAS,QAAQ,CAAC,CAAC;AAAA,IAC3E;AAEA,UAAM,sBAAK,8BAAL,WAAkB;AAAA,MACtB,GAAG;AAAA,MACH,MAAM,OAAO,OAAO,SAAS;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,eAAe,MAAgD;AAC7D,QAAI;AAEJ,uBAAK,QAAO,QAAQ,CAAC,UAAU;AAC7B,cAAQ,MAAM,KAAK,CAAC,SAAS,KAAK,OAAO,IAAI;AAAA,IAC/C,CAAC;AACD,WAAO;AAAA,EACT;AAAA,EAEA,IAAIC,OAAuD;AACzD,WAAO,mBAAK,QAAO,IAAIA,KAAI;AAAA,EAC7B;AAAA,EAEA,OAAOA,OAA2B;AAChC,UAAM,YAAY,KAAK,IAAIA,KAAI;AAC/B,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,uBAAK,QAAO,OAAOA,KAAI;AAAA,EACzB;AAAA,EAEA,MAAM,SAAS,QAA+D;AAC5E,WAAO,MAAM,GAAG,MAAM;AAAA,EACxB;AAAA,EAEA,MAAM,QAAQ,QAAkD;AAC9D,WAAO,KAAK,GAAG,MAAM;AAAA,EACvB;AAAA;AAAA,EAIA,aAAa,UAAuE,MAA6C;AAC/H,WAAO,UAAiB,IAAI;AAAA,EAC9B;AAAA,EAEA,OAAO,aAA0E,OAAwE;AACvJ,WAAO,aAAoB,KAAK;AAAA,EAClC;AAAA,EACA,OAAO,QAAQA,OAAgD;AAC7D,QAAI,CAACA,OAAM;AACT,aAAO;AAAA,IACT;AACA,WAAO,QAAQA,KAAI,IAAI,WAAW;AAAA,EACpC;AAAA,EAEA,WAAW,aAAsC;AAC/C,WAAO,CAAC,OAAO,OAAO,MAAM;AAAA,EAC9B;AAAA,EAEA,OAAO,aAAa,UAA2B;AAC7C,WAAO,aAAY,WAAW,KAAK,CAAC,cAAc,SAAS,SAAS,SAAS,CAAC;AAAA,EAChF;AACF;AA/NE;AAEA;AACA;AAuCM;AAAA,SAAI,eAAC,MAAqD;AAC9D,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,eAAsC;AAAA,IAC1C,IAAI,OAAO,WAAW;AAAA,IACtB,MAAM,YAAY,KAAK,QAAQ;AAAA,IAC/B,GAAG;AAAA,EACL;AAEA,MAAI,aAAa,SAAS,QAAQ;AAChC,UAAM,SAAS,aAAa,KAAK,QAAQ,aAAa,UAAU,EAAE;AAElE,iBAAa,UAAU,aAAa,QAAQ,OAAO,CAAC,eAAe;AACjE,YAAM,eAAe,KAAK,MAAM,KAAK,CAACC,UAASA,MAAK,KAAK,SAAS,QAAQ,QAAQ,WAAW,IAAI,CAAC,CAAC;AAEnG,UAAI,cAAc;AAChB,eAAO,aAAa;AAAA,MACtB;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,qBAAK,QAAO,IAAI,aAAa,MAAM,CAAC,EAAE,QAAQ,MAAM,WAAW,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC;AAE1F,SAAO,mBAAK,QAAO;AAAA,IACjB,YAAY;AA9QlB;AA+QQ,cAAO,wBAAK,WAAL,8BAAa;AAAA,IACtB;AAAA,IACA,EAAE,QAAQ,WAAW,OAAO;AAAA,EAC9B;AACF;AAEM;AAAA,iBAAY,eAAC,MAAqD;AACtE,QAAM,iBAAiB,mBAAK,QAAO,IAAI,KAAK,IAAI;AAChD,QAAM,gBAAgB,iBAAiB,eAAe,GAAG,eAAe,SAAS,CAAC,IAAI;AAEtF,MAAI,eAAe;AACjB,uBAAK,QAAO,OAAO,cAAc,IAAI;AAErC,WAAO,sBAAK,cAAL,WAAU;AAAA,MACf,GAAG;AAAA,MACH,QAAQ,cAAc,UAAU,KAAK,SAAS,GAAG,cAAc,MAAM;AAAA,EAAK,KAAK,MAAM,KAAK;AAAA,MAC1F,SAAS,CAAC,GAAI,cAAc,WAAW,CAAC,GAAI,GAAI,KAAK,WAAW,CAAC,CAAE;AAAA,MACnE,SAAS,CAAC,GAAI,cAAc,WAAW,CAAC,GAAI,GAAI,KAAK,WAAW,CAAC,CAAE;AAAA,MACnE,KAAK,EAAE,GAAI,cAAc,OAAO,CAAC,GAAI,GAAI,KAAK,OAAO,CAAC,EAAG;AAAA,IAC3D;AAAA,EACF;AACA,SAAO,sBAAK,cAAL,WAAU;AACnB;AA3FK,IAAM,cAAN;AAkOP,SAAS,aAA0E,OAAwE;AACzJ,SAAO,MAAM,OAAO,OAAO,EAAE;AAAA,IAC3B,CAAC,KAAK,SAA+B;AACnC,YAAM,YAAY,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI;AAEjE,UAAI,cAAc,IAAI;AACpB,eAAO,CAAC,GAAG,KAAK,IAAI;AAAA,MACtB;AAEA,YAAM,OAAO,IAAI,SAAS;AAE1B,UAAI,QAAQ,KAAK,UAAU;AACzB,YAAI,SAAS,IAAI;AAAA,UACf,SAAS,CAAC;AAAA,UACV,SAAS,CAAC;AAAA,UACV,GAAG;AAAA,QACL;AACA,eAAO;AAAA,MACT;AAEA,UAAI,MAAM;AACR,YAAI,SAAS,IAAI;AAAA,UACf,GAAG;AAAA,UACH,QAAQ,KAAK,UAAU,KAAK,SAAS,GAAG,KAAK,MAAM;AAAA,EAAK,KAAK,MAAM,KAAK;AAAA,UACxE,SAAS,CAAC,GAAI,KAAK,WAAW,CAAC,GAAI,GAAI,KAAK,WAAW,CAAC,CAAE;AAAA,UAC1D,SAAS,CAAC,GAAI,KAAK,WAAW,CAAC,GAAI,GAAI,KAAK,WAAW,CAAC,CAAE;AAAA,UAC1D,KAAK,EAAE,GAAI,KAAK,OAAO,CAAC,GAAI,GAAI,KAAK,OAAO,CAAC,EAAG;AAAA,QAClD;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC;AAAA,EACH;AACF;AAEA,eAAsB,UAAuE,MAA6C;AAGxI,MAAI,KAAK,WAAW,CAAC,CAAC,cAAc,YAAY,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC,YAAY,aAAa,KAAK,QAAQ,GAAG;AACpH,WAAO,KAAK;AAAA,EACd;AAEA,QAAM,SAAS,MAAM,UAAU,KAAK,QAAQ;AAE5C,QAAM,UAAU,KAAK,UAAU,eAAe,KAAK,OAAO,IAAI,CAAC;AAE/D,QAAM,UAAU,KAAK,WAAW,KAAK,SAAS,eAAe,KAAK,SAAS,SAAS,KAAK,MAAM,IAAI,CAAC;AAEpG,QAAM,cAAc,QACjB,OAAO,CAAC,SAAS;AAChB,UAAMD,QAAO,KAAK,OAAO,gBAAgB,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK;AAEtE,WAAOA,UAAS,YAAY,KAAK,IAAI;AAAA,EACvC,CAAC,EACA,IAAI,CAAC,SAAS;AACb,WAAO,OAAO,QAAQ,wBAAwB;AAAA,MAC5C,MAAM,KAAK;AAAA,MACX,MAAM,KAAK,OAAO,gBAAgB,KAAK,MAAM,KAAK,IAAI,IAAI,KAAK;AAAA,MAC/D,YAAY,KAAK;AAAA,IACnB,CAAC;AAAA,EACH,CAAC;AACH,QAAM,cAAc,QAAQ;AAAA,IAAI,CAAC,SAC/B,OAAO,QAAQ,wBAAwB;AAAA,MACrC,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,MACX,YAAY,KAAK;AAAA,MACjB,SAAS,KAAK;AAAA,IAChB,CAAC;AAAA,EACH;AAEA,QAAM,SAAS,CAAC,OAAO,MAAM,CAAC,GAAG,aAAa,GAAG,WAAW,CAAC,GAAG,aAAa,KAAK,QAAQ,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI;AAG9G,SAAO,OAAO,MAAM,CAAC,GAAG,EAAE,QAAQ,eAAe,MAAM,CAAC;AAC1D;AAEO,SAAS,eAAe,SAAyD;AACtF,QAAM,kBAAkB,QAAQ,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE;AAAA,IACxE,CAAC,MAAM,SAAS;AACd,YAAM,OAAO,KAAK;AAClB,YAAM,aAAa,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,KAAK,IAAI;AAChE,YAAM,0BAA0B,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,IAAI,KAAK,IAAI,UAAU;AAE9H,UAAI,yBAAyB;AAE3B,eAAO;AAAA,MACT;AAEA,YAAM,aAAa,KAAK;AAAA,QACtB,CAAC,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,IAAI,KAAK,IAAI,eAAe,KAAK,cAAc,IAAI,YAAY,KAAK;AAAA,MAC/H;AAEA,UAAI,cAAe,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,UAAY,YAAY,WAAW,CAAC,KAAK,SAAU;AACjG,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,YACE,GAAG;AAAA,YACH,MAAM,MAAM,QAAQ,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI;AAAA,UACnD;AAAA,QACF;AAAA,MACF;AAEA,UAAI,cAAc,MAAM,QAAQ,WAAW,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,KAAK,WAAW,eAAe,KAAK,YAAY;AACzH,mBAAW,OAAO,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,WAAW,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC;AAEjE,eAAO;AAAA,MACT;AAEA,aAAO,CAAC,GAAG,MAAM,IAAI;AAAA,IACvB;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,iBAAiB,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,QAAQ,MAAM,CAAC;AAC5F;AAEO,SAAS,eAAe,SAAiC,SAAiC,QAAyC;AACxI,QAAM,kBAAkB,QAAQ,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,KAAK,CAAC,EAAE;AAAA,IACxE,CAAC,MAAM,SAAS;AACd,UAAI,OAAO,MAAM,QAAQ,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK;AAErE,YAAM,oBAAoB,CAAC,eAAuB;AAChD,YAAI,CAAC,QAAQ;AACX,iBAAO;AAAA,QACT;AAEA,cAAM,UAAU,CAACE,UAAkBA,SAAQ,CAAC,CAAC,OAAO,SAASA,KAAI;AAEjE,eAAO,QAAQ,UAAU,KAAK,QAAQ,KAAK,CAAC,EAAE,MAAAA,MAAK,MAAO,MAAM,QAAQA,KAAI,IAAIA,MAAK,KAAK,OAAO,IAAI,QAAQA,KAAI,CAAE;AAAA,MACrH;AAEA,UAAI,KAAK,SAAS,KAAK,MAAM;AAE3B,eAAO;AAAA,MACT;AAEA,UAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,eAAO,KAAK,OAAO,CAAC,SAAU,OAAO,SAAS,WAAW,kBAAkB,IAAI,IAAI,kBAAkB,KAAK,YAAY,CAAE;AAAA,MAC1H;AAEA,YAAM,aAAa,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,KAAK,QAAQ,IAAI,eAAe,KAAK,UAAU;AACtG,YAAM,aAAa,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,IAAI,KAAK,IAAI,eAAe,KAAK,UAAU;AACrI,YAAM,8BAA8B,KAAK,SAAS,CAAC,QAAQ,IAAI,SAAS,KAAK,QAAQ,YAAY,IAAI,MAAM,IAAI,KAAK,IAAI,UAAU;AAElI,UAAI,6BAA6B;AAE/B,eAAO;AAAA,MACT;AAEA,UAAI,cAAe,MAAM,QAAQ,IAAI,KAAK,CAAC,KAAK,QAAS;AACvD,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,UACL,GAAG;AAAA,UACH;AAAA,YACE,GAAG;AAAA,YACH;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,UAAI,cAAc,MAAM,QAAQ,WAAW,IAAI,KAAK,MAAM,QAAQ,IAAI,KAAK,WAAW,eAAe,KAAK,YAAY;AACpH,mBAAW,OAAO,CAAC,GAAG,oBAAI,IAAI,CAAC,GAAG,WAAW,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5D,eAAO;AAAA,MACT;AAEA,UAAI,CAAC,MAAM,QAAQ,IAAI,KAAK,QAAQ,CAAC,kBAAkB,IAAI,GAAG;AAC5D,eAAO;AAAA,MACT;AAEA,aAAO,CAAC,GAAG,MAAM,IAAI;AAAA,IACvB;AAAA,IACA,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,iBAAiB,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,MAAM,CAAC;AAClE;AAEA,SAAS,aAAa,QAAgB,KAA4C;AAChF,MAAI,CAAC,KAAK;AACR,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,OAAO,KAAK,GAAG;AAE5B,MAAI,CAAC,KAAK,QAAQ;AAChB,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,OAAO,CAAC,MAAM,QAAgB;AACxC,UAAM,mBAAmB,IAAI,GAAG;AAChC,UAAM,YAAY,mBAAmB,IAAI,iBAAiB,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,CAAC,MAAM;AAExG,QAAI,IAAI,YAAY,MAAM,KAAK;AAC7B,YAAM,IAAI,UAAU,0CAA0C,GAAG,EAAE;AAAA,IACrE;AAEA,QAAI,OAAO,cAAc,UAAU;AACjC,aAAO,iBAAiB;AAAA,QACtB,MAAM,KAAK,WAAW,eAAe,GAAG,IAAI,SAAS;AAAA,QACrD;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAED,aAAO,iBAAiB;AAAA,QACtB,MAAM,KAAK,WAAW,yBAAyB,EAAE;AAAA,QACjD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT,GAAG,MAAM;AACX;;;AG1oBA,OAAOC,aAAY;;;ACWZ,SAAS,QAAsG,UAA2B;AAC/I,SAAO,SAAS,OAAO,OAAO,EAAE;AAAA,IAC9B,CAAC,SAAS,SAAS;AACjB,UAAI,OAAO,SAAS,YAAY;AAC9B,cAAM,IAAI,MAAM,0EAA0E;AAAA,MAC5F;AAEA,aAAO,QAAQ,KAAK,CAAC,UAAU;AAC7B,cAAM,aAAa,KAAK,KAAe;AAEvC,YAAI,YAAY;AACd,iBAAO,WAAW,KAAK,MAAM,UAAU,OAAO,KAAK,KAAK,CAAC;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IACA,QAAQ,QAAQ,CAAC,CAAY;AAAA,EAC/B;AACF;AAOO,SAAS,UACd,UACA,YAAY,CAAC,UAAe,UAAU,MAC7B;AACT,MAAI,UAA4B,QAAQ,QAAQ,IAAI;AAEpD,aAAW,QAAQ,SAAS,OAAO,OAAO,GAAG;AAC3C,cAAU,QAAQ,KAAK,CAAC,UAAU;AAChC,UAAI,UAAU,KAAK,GAAG;AACpB,eAAO;AAAA,MACT;AAEA,YAAM,aAAa,KAAK,KAAe;AAEvC,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAOO,SAAS,aACd,UACS;AACT,SAAO,QAAQ,WAAW,SAAS,OAAO,OAAO,EAAE,IAAI,CAAC,YAAY,QAAQ,CAAC,CAAC;AAChF;;;ACjEA,IAAAC;AAWO,IAAM,iBAAN,MAAmC;AAAA,EAGxC,YAAY,UAA2B,CAAC,GAAG;AAF3C,uBAAAA,WAA4B,CAAC;AAG3B,uBAAKA,WAAW;AAEhB,WAAO;AAAA,EACT;AAAA,EAEA,IACE,UACA,UACS;AACT,QAAI,aAAa,OAAO;AACtB,aAAO,QAAiC,QAAQ;AAAA,IAClD;AAEA,QAAI,aAAa,SAAS;AACxB,aAAO,UAAmC,UAAU,mBAAKA,WAAS,SAAS;AAAA,IAC7E;AAEA,QAAI,aAAa,YAAY;AAC3B,aAAO,aAAsC,QAAQ;AAAA,IACvD;AAEA,UAAM,IAAI,MAAM,GAAG,QAAQ,kBAAkB;AAAA,EAC/C;AACF;AA1BEA,YAAA;AA4BK,SAAS,UAAa,QAAkD;AAC7E,SAAO,CAAC,CAAC,UAAU,OAAQ,QAA6B,SAAS;AACnE;AAMO,SAAS,wBAA2B,QAAwG;AACjJ,SAAO,OAAO,WAAW;AAC3B;;;AC/CO,IAAM,UAAN,cAAsB,MAAM;AAAA,EACjC,YAAY,SAAkB,SAA4B;AACxD,UAAM,SAAS,EAAE,OAAO,SAAS,MAAM,CAAC;AAExC,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,wBAAN,cAAoC,MAAM;AAAC;;;ACXlD,OAAOC,WAAU;;;ACSV,SAAS,kBAA8C,QAAgB,uBAAO,OAAO,IAAI,GAA4B;AAC1H,SAAO;AAAA,IACL,IAAI,IAAI,OAAa;AACnB,YAAM,EAAE,IAAI,CAAC,GAAG,KAAK;AAAA,IACvB;AAAA,IACA,IAAI,IAAiC;AACnC,YAAM,OAAO,MAAM,EAAE;AACrB,UAAI,CAAC,MAAM;AACT,eAAO;AAAA,MACT;AACA,WAAK,CAAC,IAAI;AACV,aAAO,KAAK,CAAC;AAAA,IACf;AAAA,IACA,IAAI,IAAa;AACf,YAAM,OAAO,MAAM,EAAE;AACrB,UAAI,CAAC,MAAM;AACT,eAAO;AAAA,MACT;AACA,WAAK,CAAC,IAAI;AACV,aAAO;AAAA,IACT;AAAA,IACA,OAAO,IAA2B;AAChC,aAAO,OAAO,MAAM,EAAE;AAAA,IACxB;AAAA,EACF;AACF;;;ADtBO,SAAS,aAAoE,SAAqD;AACvI,SAAO,CAAC,UAAU,CAAC,MAAM;AACvB,WAAO,QAAQ,OAAO;AAAA,EACxB;AACF;AAgBO,IAAM,aAAa,aAAyB,CAAC,YAAY;AAC9D,QAAM,EAAE,aAAa,eAAe,aAAa,aAAa,OAAO,IAAI;AAEzE,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA,KAAK,CAAC,MAAM;AAAA,IACZ,MAAM;AACJ,aAAO;AAAA,QACL,IAAI,SAAS;AACX,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA,IAAI,UAAU;AACZ,iBAAO,QAAQ,WAAW;AAAA,QAC5B;AAAA,QACA,IAAI,SAAS;AAEX,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,WAAW,OAAO;AACtB,gBAAM,gBAAgB,MAAM,YAAY,IAAI,GAAG,KAAK;AAEpD,cAAI,CAAC,MAAM,QAAQ,aAAa,GAAG;AACjC,mBAAO,CAAC,aAAa;AAAA,UACvB;AAEA,iBAAO;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,kBAAkB;AAAA,MAC3B;AAAA,IACF;AAAA,IACA,YAAY,UAAU;AACpB,YAAM,OAAOC,MAAK,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,IAAI;AAEnE,aAAOA,MAAK,QAAQ,MAAM,QAAQ;AAAA,IACpC;AAAA,IACA,YAAY,MAAM;AAChB,aAAO;AAAA,IACT;AAAA,EACF;AACF,CAAC;;;AJ7ED;AAkFO,IAAM,gBAAN,MAAoB;AAAA,EAgBzB,YAAY,QAAgB,SAAkB;AAmU9C;AAyEA;AAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8DA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8CA;AAOA;AA1hBA,SAAS,SAA+B,IAAI,aAAa;AAIzD,SAAS,WAA4B,CAAC;AAEtC,uBAAS,OAAT;AAEA,uBAAS,kBAA2C,CAAC;AACrD,uBAAS,iBAAT;AA+DA,uBAAc,CAAoB,WAA+D;AAC/F,UAAI,OAAO,WAAW;AACpB,cAAM,QAAQ,KAAK,kBAAkB;AAAA,UACnC,WAAW,OAAO;AAAA,UAClB,UAAU;AAAA,UACV,YAAY,CAAC,OAAO,UAAU,OAAO,MAAM,OAAO,OAAiB;AAAA,QACrE,CAAC;AAED,YAAI,SAAS,OAAO,SAAS,GAAG;AAC9B,eAAK,OAAO,KAAK,SAAS;AAAA,YACxB,8CACE,OAAO,YAAY,KAAK,UAAU,OAAO,SAAS,IAAI,GACxD;AAAA;AAAA,SAAmC,KAAK,UAAU,OAAO,QAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,UACxE,CAAC;AAAA,QACH;AAEA,eAAO,OAAO,GAAG,CAAC;AAAA,MACpB;AACA,aAAO,KAAK,cAAc;AAAA,QACxB,UAAU;AAAA,QACV,YAAY,CAAC,OAAO,UAAU,OAAO,MAAM,OAAO,OAAiB;AAAA,MACrE,CAAC,EAAE;AAAA,IACL;AACA,uBAAc,CAAC,WAAsC;AACnD,UAAI,OAAO,WAAW;AACpB,cAAM,QAAQ,KAAK,kBAAkB;AAAA,UACnC,WAAW,OAAO;AAAA,UAClB,UAAU;AAAA,UACV,YAAY,CAAC,OAAO,MAAM,OAAO,IAAI;AAAA,QACvC,CAAC;AAED,YAAI,SAAS,OAAO,SAAS,GAAG;AAC9B,eAAK,OAAO,KAAK,SAAS;AAAA,YACxB,8CACE,OAAO,YAAY,KAAK,UAAU,OAAO,SAAS,IAAI,GACxD;AAAA;AAAA,SAAmC,KAAK,UAAU,OAAO,QAAW,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA,UACxE,CAAC;AAAA,QACH;AAEA,eAAO,sBAAsB,OAAO,GAAG,CAAC,KAAK,OAAO,IAAI;AAAA,MAC1D;AAEA,YAAM,OAAO,KAAK,cAAc;AAAA,QAC9B,UAAU;AAAA,QACV,YAAY,CAAC,OAAO,MAAM,OAAO,IAAI;AAAA,MACvC,CAAC,EAAE;AAEH,aAAO,sBAAsB,IAAI;AAAA,IACnC;AA1GE,SAAK,SAAS;AACd,SAAK,SAAS,QAAQ;AACtB,SAAK,QAAQ,IAAIC,QAAO,EAAE,aAAa,EAAE,CAAC;AAC1C,SAAK,cAAc,IAAI,YAAY;AAAA,MACjC,MAAM,QAAQ;AAAA,MACd,OAAO,KAAK;AAAA,IACd,CAAC;AACD,uBAAK,iBAAkB,IAAI,eAAe;AAAA,MACxC,WAAW,CAAC,UAAiD,CAAC,CAAC,OAAO;AAAA,IACxE,CAAC;AAED,UAAM,UAAU,OAAO,WAAW,CAAC;AAEnC,UAAM,OAAO,WAAW;AAAA,MACtB;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,eAAe;AAAA,MACf,aAAa,KAAK;AAAA,MAClB,aAAa,KAAK,YAAY,KAAK,IAAI;AAAA,MACvC,aAAa,KAAK,YAAY,KAAK,IAAI;AAAA,MACvC,YAAY,sBAAK,wCAAkB,KAAK,IAAI;AAAA,IAC9C,CAAC;AAGD,uBAAK,OAAQ,sBAAK,kBAAL,WAAY,MAA+B,MAAa,KAAK,IAAI,KAAK,IAAW;AAE9F,SAAK,UAAU,CAAC,mBAAK,QAAO,GAAG,OAAO,EAAE,IAAI,CAAC,WAAW;AACtD,aAAO,sBAAK,kBAAL,WAAY,QAAsB,MAAM,mBAAK,OAAM;AAAA,IAC5D,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,QAA2B,EAAE,MAAM,MAAM,SAAS,WAAW,QAAQ,GAAwE;AAC3I,QAAI,SAAS;AACb,UAAM,WAAW,GAAG,IAAI,GAAG,OAAO;AAClC,UAAMC,QAAO,KAAK,YAAY,EAAE,UAAU,MAAM,WAAW,QAAQ,CAAC;AAEpE,QAAI,CAACA,OAAM;AACT,YAAM,IAAI,MAAM,gDAAgD,IAAI,oBAAoB,KAAK,UAAU,SAAS,CAAC,GAAG;AAAA,IACtH;AAEA,QAAI;AACF,eAAS,SAASA,KAAI;AAAA,IACxB,SAAS,IAAI;AAAA,IAEb;AAEA,WAAO;AAAA,MACL,MAAAA;AAAA,MACA;AAAA,MACA,MAAM;AAAA,QACJ;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAuDA,GAA6C,WAAuB,SAA0D;AAC5H,SAAK,OAAO,GAAG,WAAW,OAAc;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA,EAKA,cAA8C;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI6D;AAC3D,UAAM,UAAU,KAAK,gBAAgB,UAAU,SAAS;AAExD,UAAM,WAAW,QACd,IAAI,CAAC,WAAW;AACf,aAAO,sBAAK,sBAAL,WAAiB;AAAA,QACtB,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC,EACA,OAAO,OAAO;AAEjB,WAAO,QAAQ,IAAI,QAAQ;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkD;AAAA,IAChD;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI6C;AAC3C,UAAM,UAAU,KAAK,gBAAgB,UAAU,SAAS;AAExD,WAAO,QACJ,IAAI,CAAC,WAAW;AACf,aAAO,sBAAK,8BAAL,WAAqB;AAAA,QAC1B,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC,EACA,OAAO,OAAO;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAA0C;AAAA,IAC9C;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIgC;AAC9B,UAAM,WAAW,sBAAK,wCAAL,WACd,OAAO,CAAC,WAAW;AAClB,aAAO,UAAU,QAAQ,IAAI,MAAM,IAAI;AAAA,IACzC,CAAC,EACA,IAAI,CAAC,WAAW;AACf,aAAO,YAAY;AACjB,cAAM,QAAQ,MAAM,sBAAK,sBAAL,WAAiB;AAAA,UACnC,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAEA,eAAO,QAAQ,QAAQ;AAAA,UACrB;AAAA,UACA,QAAQ;AAAA,QACV,CAAuB;AAAA,MACzB;AAAA,IACF,CAAC;AAEH,WAAO,mBAAK,iBAAgB,IAAI,SAAS,QAAQ;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,cAA8C;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIuB;AACrB,QAAI,cAAkC;AAEtC,eAAW,UAAU,sBAAK,wCAAL,YAA0B;AAC7C,UAAI,SAAS,IAAI,MAAM,GAAG;AACxB;AAAA,MACF;AAEA,oBAAc;AAAA,QACZ,QAAQ,sBAAK,8BAAL,WAAqB;AAAA,UAC3B,UAAU;AAAA,UACV;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAEA,UAAI,aAAa,UAAU,MAAM;AAC/B;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAA4D;AAAA,IAChE;AAAA,IACA;AAAA,EACF,GAG+B;AAC7B,UAAM,WAAW,sBAAK,wCAAL,WAAyB,IAAI,CAAC,WAAW;AACxD,aAAO,MACL,sBAAK,sBAAL,WAAc;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACJ,CAAC;AAED,UAAM,UAAU,MAAM,mBAAK,iBAAgB,IAAI,YAAY,QAAQ;AAEnE,YAAQ,QAAQ,CAAC,QAAQ,UAAU;AACjC,UAAI,wBAA+B,MAAM,GAAG;AAC1C,cAAM,SAAS,sBAAK,wCAAL,WAAyB,KAAK;AAE7C,8BAAK,sBAAL,WAAiB,OAAO,QAAQ,QAAQ;AAAA,MAC1C;AAAA,IACF,CAAC;AAED,WAAO,QAAQ,OAAO,CAAC,WAAW,OAAO,WAAW,WAAW,EAAE,IAAI,CAAC,WAAY,OAAmD,KAAK;AAAA,EAC5I;AAAA;AAAA;AAAA;AAAA,EAKA,eAA+C;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAI0B;AACxB,UAAM,CAAC,WAAW,GAAG,IAAI,IAAI;AAE7B,QAAI,UAAiC,QAAQ,QAAQ,SAAS;AAC9D,eAAW,UAAU,sBAAK,wCAAL,YAA0B;AAC7C,gBAAU,QACP,KAAK,CAAC,SAAS;AACd,cAAM,QAAQ,sBAAK,sBAAL,WAAc;AAAA,UAC1B,UAAU;AAAA,UACV;AAAA,UACA,YAAY,CAAC,MAAM,GAAG,IAAI;AAAA,UAC1B;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC,EACA,KAAK,CAAC,WAAW,OAAO,KAAK,mBAAK,OAAM,KAAK,WAAW,QAAsC,MAAM,CAAC;AAAA,IAC1G;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAwC,EAAE,UAAU,WAAW,GAAoE;AACvI,UAAM,WAAW,sBAAK,wCAAL,WAAyB,IAAI,CAAC,WAAW;AACxD,aAAO,MACL,sBAAK,sBAAL,WAAc;AAAA,QACZ,UAAU;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACJ,CAAC;AAED,WAAO,mBAAK,iBAAgB,IAAI,OAAO,QAAQ;AAAA,EACjD;AAAA,EAwCA,gBAAgB,UAAiC,WAAoC;AACnF,UAAM,UAAU,CAAC,GAAG,KAAK,OAAO;AAChC,UAAM,CAAC,kBAAkB,gBAAgB,IAAI;AAE7C,UAAM,qBAAqB,QACxB,OAAO,CAAC,WAAW,OAAO,QAAQ,CAAC,EACnC,OAAO,CAAC,SAAS;AAChB,YAAM,CAAC,MAAM,UAAU,IAAI,KAAK;AAEhC,YAAM,kBAAkB,YAAY,SAAS,MAAM,kBAAkB,SAAS;AAC9E,YAAM,YAAY,SAAS;AAE3B,UAAI,kBAAkB;AACpB,eAAO,mBAAmB;AAAA,MAC5B;AAEA,aAAO;AAAA,IACT,CAAC;AAEH,QAAI,CAAC,oBAAoB,QAAQ;AAG/B,YAAM,aAAa,QAAQ,KAAK,CAAC,WAAW,OAAO,SAAS,UAAU,OAAO,QAAQ,CAAC;AAEtF,UAAI,YAAY;AACd,aAAK,OAAO,KAAK,SAAS,CAAC,YAAY,QAAQ,oBAAoB,KAAK,UAAU,SAAS,CAAC,kDAAkD,CAAC;AAAA,MACjJ,OAAO;AACL,aAAK,OAAO,KAAK,SAAS,CAAC,YAAY,QAAQ,oBAAoB,KAAK,UAAU,SAAS,CAAC,uDAAuD,CAAC;AAAA,MACtJ;AACA,aAAO,aAAa,CAAC,UAAU,IAAI,CAAC;AAAA,IACtC;AAEA,WAAO;AAAA,EACT;AAAA,EAqKA,OAAO,mBAKL,SAAwB,qBAAiD;AACzE,QAAI,cAAwB,CAAC;AAC7B,QAAI,OAAO,wBAAwB,UAAU;AAC3C,oBAAc,CAAC,mBAAmB;AAAA,IACpC,OAAO;AACL,oBAAc;AAAA,IAChB;AAEA,WAAO,YAAY,IAAI,CAAC,eAAe;AACrC,YAAM,SAAS,QAAQ,KAAK,CAACC,YAAWA,QAAO,SAAS,UAAU;AAClE,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,sBAAsB,8BAA8B,UAAU,UAAU;AAAA,MACpF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,WAAW,QAAQ;AACjB,WAAO,CAAC,cAAc,eAAe,eAAe,QAAQ,aAAa,aAAa,UAAU;AAAA,EAClG;AACF;AA/kBW;AAEA;AACA;AAuUT;AAAA,sBAAiB,SAAC,UAA4C;AAC5D,QAAM,UAAU,CAAC,GAAG,KAAK,OAAO,EAAE,OAAO,CAAC,WAAW,OAAO,SAAS,MAAM;AAE3E,MAAI,UAAU;AACZ,QAAI,KAAK,OAAO,aAAa,SAAS,MAAM;AAC1C,YAAM,mBAAmB,QAAQ,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC;AAC9D,UAAI,CAAC,kBAAkB;AACrB,aAAK,OAAO,KAAK,WAAW,WAAW,QAAQ,QAAQ;AAAA,MACzD;AAAA,IACF;AAEA,WAAO,QAAQ,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC;AAAA,EAChD;AAGA,SAAO,QACJ,IAAI,CAAC,WAAW;AACf,QAAI,OAAO,KAAK;AACd,YAAM,UAAU,OAAO,IAAI,MAAM,CAAC,eAAe,QAAQ,KAAK,CAAC,iBAAiB,aAAa,SAAS,UAAU,CAAC;AAEjH,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,sBAAsB,+CAA+C,KAAK,UAAU,OAAO,KAAK,QAAW,CAAC,CAAC,GAAG;AAAA,MAC5H;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC,EACA,KAAK,CAAC,GAAG,MAAM;AACd,QAAI,EAAE,KAAK,SAAS,EAAE,IAAI,GAAG;AAC3B,aAAO;AAAA,IACT;AACA,QAAI,EAAE,MAAM,SAAS,EAAE,IAAI,GAAG;AAC5B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACL;AAqCA;AAAA,4BAAuB,SAAC,UAAgC;AACtD,MAAI,UAAU;AACZ,SAAK,OAAO,KAAK,YAAY,QAAQ;AACrC,SAAK,SAAS,KAAK,QAAQ;AAAA,EAC7B;AACF;AASA;AAAA,aAAwC,SAAC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsD;AACpD,QAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI;AAEJ,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,OAAK,OAAO,KAAK,WAAW,EAAE,UAAU,UAAU,YAAY,OAAO,CAAC;AAEtE,QAAM,OAAO,QAAQ,QAAQ,EAC1B,KAAK,MAAM;AACV,QAAI,OAAO,SAAS,YAAY;AAC9B,YAAM,wBAAyB,KAAkB,MAAM,EAAE,GAAG,mBAAK,OAAM,KAAK,OAAO,GAAG,UAAU;AAEhG,UAAI,UAAU,qBAAqB,GAAG;AACpC,eAAO,QAAQ,QAAQ,qBAAqB;AAAA,MAC9C;AACA,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT,CAAC,EACA,KAAK,CAAC,WAAW;AAChB,aAAS;AAET,0BAAK,oDAAL,WAA6B;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,CAAC,EACA,MAAM,CAAC,MAAa;AACnB,0BAAK,sBAAL,WAAiB,GAAG,QAAQ;AAE5B,WAAO;AAAA,EACT,CAAC;AAEH,SAAO;AACT;AASA;AAAA,iBAA4C,SAAC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAKsC;AACpC,QAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI;AAEJ,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,OAAK,OAAO,KAAK,WAAW,EAAE,UAAU,UAAU,YAAY,OAAO,CAAC;AAEtE,MAAI;AACF,QAAI,OAAO,SAAS,YAAY;AAC9B,YAAM,KAAM,KAAkB,MAAM,EAAE,GAAG,mBAAK,OAAM,KAAK,OAAO,GAAG,UAAU;AAE7E,eAAS;AACT,aAAO;AAAA,IACT;AAEA,aAAS;AAET,0BAAK,oDAAL,WAA6B;AAAA,MAC3B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,EACT,SAAS,GAAG;AACV,0BAAK,sBAAL,WAAiB,GAAY,QAAQ;AAErC,WAAO;AAAA,EACT;AACF;AAEA;AAAA,aAAwC,SAAC,OAAc,QAAiB,UAAc;AACpF,QAAM,OAAO,GAAG,MAAM,OAAO,aAAa,QAAQ,QAAQ,SAAS,WAAW,YAAY,SAAS;AAEnG,OAAK,OAAO,KAAK,SAAS,MAAM,KAAK;AACrC,OAAK,OAAO,KAAK,SAAS,KAAK;AACjC;AAEA;AAAA,WAA+C,SAC7C,QACA,eACA,SAC0C;AAC1C,QAAM,kBAAkB,4BAAc;AAEtC,gBAAc,OAAO,MAAM,eAAe;AAE1C,QAAM,MAAM,CAAC,OAAO,MAAM,gBAAgB,OAAO,IAAI,CAAC,EAAE,OAAO,OAAO;AAGtE,MAAI,CAAC,OAAO,WAAW;AACrB,WAAO,YAAY,SAAS,UAAU,MAAM;AAC1C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,OAAO,OAAO,OAAO,OAAO,QAAQ,YAAY;AAClD,UAAM,MAAO,OAAO,IAAiB,KAAK,OAAO;AAEjD,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,EACF;AACF;;;AMvoBK,SAAS,aACd,SAMgB;AAChB,SAAO;AACT;AAEO,SAAS,YAAY,QAAyD;AACnF,SAAO,CAAC,CAAC,UAAU,UAAW;AAChC;;;ACWA,eAAe,iBAEb,eACA,QACA,SACwB;AACxB,SAAO;AACT;AAEA,eAAe,MAAM,SAA+C;AAClE,QAAM,EAAE,QAAQ,SAAS,aAAa,EAAE,UAAU,SAAS,OAAO,CAAC,EAAE,IAAI;AACzE,MAAI,QAAQ;AAEZ,MAAI;AACF,QAAI,YAAY,MAAM,KAAK,CAAC,IAAI,QAAQ,OAAO,MAAM,IAAI,EAAE,OAAO;AAChE,YAAM,KAAK,OAAO,MAAM,IAAI;AAAA,IAC9B;AAAA,EACF,SAAS,GAAG;AACV,QAAI,YAAY,MAAM,GAAG;AACvB,YAAM,IAAI;AAAA,QACR,oHAAoH,EAAE,IAAI,OAAO,MAAM,IAAI,CAAC;AAAA,QAC5I;AAAA,UACE,OAAO;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,OAAO,OAAO,OAAO;AACvB,UAAM,MAAM,OAAO,OAAO,IAAI;AAAA,EAChC;AAEA,QAAM,OAAO,OAAO,SAAgE;AAClF,UAAM,EAAE,MAAAC,MAAK,IAAI;AAEjB,QAAI,SAAwB,MAAM,YAAY,UAAU,IAAI;AAE5D,UAAM,EAAE,QAAQ,aAAa,IAAI,MAAM,cAAc,UAAU;AAAA,MAC7D,UAAU;AAAA,MACV,YAAY,CAACA,KAAI;AAAA,IACnB,CAAC;AACD,QAAI,gBAAgB,UAAU,YAAY,GAAG;AAC3C,eAAS,MAAM;AAAA,IACjB;AACA,QAAI,gBAAgB,CAAC,UAAU,YAAY,GAAG;AAC5C,eAAS;AAAA,IACX;AAEA,QAAI,QAAQ;AACV,eAAS,MAAM,cAAc,eAAe;AAAA,QAC1C,UAAU;AAAA,QACV,YAAY,CAAC,QAAQA,KAAI;AAAA,QACzB,QAAQ;AAAA,MACV,CAAC;AAED,UAAI,OAAO,OAAO,SAAS,OAAO,OAAO,UAAU,QAAW;AAC5D,YAAI,KAAK,MAAM,WAAW;AAExB,gBAAM,cAAc,cAAc;AAAA,YAChC,WAAW,KAAK,MAAM;AAAA,YACtB,UAAU;AAAA,YACV,YAAY,CAAC,QAAQA,KAAI;AAAA,UAC3B,CAAC;AAAA,QACH;AAEA,cAAM,cAAc,UAAU;AAAA,UAC5B,UAAU;AAAA,UACV,YAAY,CAAC,QAAQA,KAAI;AAAA,QAC3B,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ,UAAU;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,gBAAgB,IAAI,cAAc,QAAQ,EAAE,QAAQ,KAAK,CAAC;AAEhE,gBAAc,GAAG,WAAW,CAAC,aAAa;AACxC,UAAM,EAAE,UAAU,YAAY,OAAO,IAAI;AAEzC,QAAI,aAAa,aAAa;AAC5B,YAAM,CAAC,IAAI,IAAI;AAEf,aAAO,KAAK,SAAS,CAAC,aAAa,EAAE,IAAI,KAAK,UAAU,OAAO,GAAG,CAAC,CAAC;AAAA;AAAA;AAAA,EAAqB,IAAI,EAAE,CAAC;AAAA,IAClG;AAAA,EACF,CAAC;AAED,gBAAc,MAAM,GAAG,OAAO,MAAM;AAClC,QAAI,OAAO,aAAa,SAAS,MAAM;AACrC;AAAA,IACF;AAEA,QAAI,UAAU,GAAG;AACf,aAAO,KAAK,SAAS,mBAAY;AAAA,IACnC;AAAA,EACF,CAAC;AAED,gBAAc,MAAM,GAAG,UAAU,MAAM;AACrC,QAAI,OAAO,aAAa,SAAS,MAAM;AACrC;AAAA,IACF;AAEA,QAAI,OAAO,WAAW,cAAc,MAAM,OAAO,GAAG;AAClD,YAAM,OAAO,SAAS,KAAK,UAAU,cAAc,MAAM,IAAI,cAAc,cAAc,MAAM,OAAO;AAEtG,aAAO,QAAQ,aAAa,EAAE,IAAI,IAAI;AAAA,IACxC;AACA,MAAE;AAAA,EACJ,CAAC;AAED,gBAAc,MAAM,GAAG,aAAa,MAAM;AACxC,QAAI,OAAO,aAAa,SAAS,MAAM;AACrC;AAAA,IACF;AAEA,QAAI,OAAO,SAAS;AAClB,YAAM,OAAO,SAAS,KAAK,UAAU,cAAc,MAAM,IAAI,cAAc,cAAc,MAAM,OAAO;AAEtG,aAAO,QAAQ,aAAa,EAAE,IAAI,IAAI;AAAA,IACxC;AAAA,EACF,CAAC;AAED,gBAAc,GAAG,YAAY,CAAC,aAAa;AACzC,UAAM,EAAE,UAAU,QAAQ,QAAQ,WAAW,IAAI;AAEjD,UAAM,OAAO;AAAA,MACX,GAAG,gBAAgB,OAAO,IAAI,CAAC,cAAc,QAAQ;AAAA,MACrD,cAAc,GAAG,EAAE,QAAQ,YAAY,CAAC,IAAI,gBAAgB,OAAO,IAAI,CAAC,IAAI,QAAQ;AAAA,MACpF,KAAK,UAAU,YAAY,QAAW,CAAC;AAAA,MACvC,UAAU,GAAG,EAAE,QAAQ,QAAQ,CAAC,IAAI,gBAAgB,OAAO,IAAI,CAAC,IAAI,QAAQ;AAAA,MAC5E;AAAA,IACF,EAAE,OAAO,OAAO;AAEhB,WAAO,KAAK,SAAS,IAAgB;AAAA,EACvC,CAAC;AAED,SAAO;AACT;AAEA,eAAsB,MAAM,SAA6C;AACvE,QAAM,gBAAgB,MAAM,MAAM,OAAO;AAEzC,QAAM,EAAE,aAAa,OAAO,IAAI;AAEhC,QAAM,cAAc,aAAa;AAAA,IAC/B,UAAU;AAAA,IACV,YAAY,CAAC,QAAQ,MAAM;AAAA,EAC7B,CAAC;AAED,QAAM,cAAc,aAAa,EAAE,UAAU,WAAW,CAAC;AAEzD,MAAI,OAAO,aAAa,SAAS,MAAM;AACrC,WAAO,KAAK,OAAO,6BAAsB;AAAA,EAC3C;AAEA,QAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1B,YAAY,MAAM,IAAI,OAAO,UAAU;AAAA,MACrC,GAAG;AAAA,MACH,QAAQ,MAAM,YAAY,UAAU,IAAI;AAAA,IAC1C,EAAE;AAAA,EACJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,UAAU,SAA6C;AAC3E,QAAM,gBAAgB,MAAM,MAAM,OAAO;AAEzC,QAAM,EAAE,aAAa,OAAO,IAAI;AAEhC,MAAI;AACF,UAAM,cAAc,aAAa;AAAA,MAC/B,UAAU;AAAA,MACV,YAAY,CAAC,QAAQ,MAAM;AAAA,IAC7B,CAAC;AAED,UAAM,cAAc,aAAa,EAAE,UAAU,WAAW,CAAC;AAEzD,QAAI,OAAO,aAAa,SAAS,MAAM;AACrC,aAAO,KAAK,OAAO,6BAAsB;AAAA,IAC3C;AAAA,EACF,SAAS,GAAG;AACV,UAAMC,SAAQ,MAAM,QAAQ;AAAA,MAC1B,YAAY,MAAM,IAAI,OAAO,UAAU;AAAA,QACrC,GAAG;AAAA,QACH,QAAQ,MAAM,YAAY,UAAU,IAAI;AAAA,MAC1C,EAAE;AAAA,IACJ;AAEA,WAAO;AAAA,MACL,OAAAA;AAAA,MACA;AAAA,MACA,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,QAAQ,MAAM,QAAQ;AAAA,IAC1B,YAAY,MAAM,IAAI,OAAO,UAAU;AAAA,MACrC,GAAG;AAAA,MACH,QAAQ,MAAM,YAAY,UAAU,IAAI;AAAA,IAC1C,EAAE;AAAA,EACJ;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;ACrPA,IAAAC,WAAA;AAIO,IAAe,YAAf,MAAiE;AAAA,EAItE,YAAY,SAAoB,SAAoB;AAHpD,uBAAAA,WAAqB,CAAC;AACtB,iCAAqB,CAAC;AAGpB,QAAI,SAAS;AACX,yBAAK,UAAW;AAAA,IAClB;AAEA,QAAI,SAAS;AACX,yBAAKA,WAAW;AAAA,IAClB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAoB;AACtB,WAAO,mBAAKA;AAAA,EACd;AAAA,EAEA,IAAI,UAAoB;AACtB,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ,SAAmB;AAC7B,uBAAKA,WAAW,EAAE,GAAG,mBAAKA,YAAU,GAAG,QAAQ;AAAA,EACjD;AAGF;AA5BEA,YAAA;AACA;;;ACNF,OAAO,SAAS;AAChB,OAAO,QAAQ;AACf,SAAS,qBAAqB;AAE9B,SAAS,QAAQ,kBAAkB;AACnC,SAAS,QAAQ,iBAAiB;AALlC,IAAAC,SAAA;AAkBO,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAK1B,YAAY,WAAoB;AAkFhC;AApFA;AACA,iCAAW,oBAAI,IAAI,CAAC,KAAK,IAAI,CAAC;AAE5B,QAAI,WAAW;AACb,yBAAK,MAAO;AAAA,IACd;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU,WAAmB;AAC/B,uBAAK,MAAO;AAAA,EACd;AAAA,EAEA,IAAI,YAAgC;AAClC,WAAO,mBAAK;AAAA,EACd;AAAA,EAEA,mBAAmB,WAA2B;AAC5C,QAAI,CAAC,mBAAK,UAAS,IAAI,UAAU,UAAU,SAAS,CAAC,CAAE,GAAG;AACxD,aAAO,GAAG,SAAS;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,YAAYC,OAAsB;AAChC,QAAI,WAAWA;AAEf,QAAI,mBAAK,OAAM;AACb,YAAMC,WAAU,IAAI,cAAc,KAAK,mBAAmB,mBAAK,KAAI,CAAC;AACpE,iBAAWA,SAAQ,QAAQD,KAAI;AAAA,IACjC;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAOA,OAAwC;AACnD,QAAI;AACF,UAAI,WAAW,KAAK,YAAYA,KAAI;AAEpC,UAAI,GAAG,SAAS,MAAM,SAAS;AAC7B,mBAAW,cAAc,QAAQ,EAAE;AAAA,MACrC;AAEA,YAAM,SAAS,MAAM,OAAO;AAE5B,aAAO,QAAQ,WAAW;AAAA,IAC5B,SAAS,GAAG;AACV,cAAQ,IAAI,CAAC;AACb,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,iBAAmD;AACvD,UAAM,UAAU,MAAM,OAAO,CAAC,cAAc,GAAG;AAAA,MAC7C,KAAK,mBAAK;AAAA,IACZ,CAAC;AACD,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,MAAM,KAAK,OAAO;AAE/B,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB;AAAA,EAEA,qBAA8C;AAC5C,UAAM,UAAU,WAAW,CAAC,cAAc,GAAG;AAAA,MAC3C,KAAK,mBAAK;AAAA,IACZ,CAAC;AACD,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AAEA,UAAM,OAAO,SAAS,OAAO;AAE7B,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB;AAAA,EAEA,OAAO,WAAW,YAA4B,SAAkC;AAC9E,kCAAeD,SAAO,UAAU,IAAI;AAAA,EACtC;AAAA,EAiBA,MAAM,WAAW,YAA6E;AAC5F,QAAI,OAAO,eAAe,YAAY,8BAAeA,SAAO,UAAU,GAAG;AACvE,aAAO,8BAAeA,SAAO,UAAU;AAAA,IACzC;AAEA,UAAM,cAAc,MAAM,KAAK,eAAe;AAE9C,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AAEA,WAAO,sBAAK,kBAAL,WAAY,aAAa;AAAA,EAClC;AAAA,EAEA,eAAe,YAAoE;AACjF,QAAI,OAAO,eAAe,YAAY,8BAAeA,SAAO,UAAU,GAAG;AACvE,aAAO,8BAAeA,SAAO,UAAU;AAAA,IACzC;AAEA,UAAM,cAAc,KAAK,mBAAmB;AAE5C,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT;AAEA,WAAO,sBAAK,kBAAL,WAAY,aAAa;AAAA,EAClC;AAAA,EAEA,MAAM,QAAQ,YAAqC,SAA8C;AAC/F,UAAM,iBAAiB,MAAM,KAAK,WAAW,UAAU;AAEvD,QAAI,CAAC,gBAAgB;AACnB,aAAO;AAAA,IACT;AAEA,QAAI,mBAAmB,SAAS;AAC9B,aAAO;AAAA,IACT;AAEA,UAAM,SAAS,OAAO,cAAc;AAEpC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,GAAG,cAAc,eAAe;AAAA,IAClD;AAEA,WAAO,UAAU,QAAQ,OAAO;AAAA,EAClC;AAAA,EACA,YAAY,YAAqC,SAAqC;AACpF,UAAM,iBAAiB,KAAK,eAAe,UAAU;AAErD,QAAI,CAAC,gBAAgB;AACnB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,OAAO,cAAc;AAEpC,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,GAAG,cAAc,eAAe;AAAA,IAClD;AAEA,WAAO,UAAU,QAAQ,OAAO;AAAA,EAClC;AACF;AAlKSA,UAAA;AAEP;AACA;AAmFA;AAAA,WAAM,SAAC,aAA0B,YAAyD;AACxF,QAAM,eAAe;AAAA,IACnB,GAAI,YAAY,cAAc,KAAK,CAAC;AAAA,IACpC,GAAI,YAAY,iBAAiB,KAAK,CAAC;AAAA,EACzC;AAEA,MAAI,OAAO,eAAe,YAAY,aAAa,UAAU,GAAG;AAC9D,WAAO,aAAa,UAAU;AAAA,EAChC;AAEA,QAAM,oBAAoB,OAAO,KAAK,YAAY,EAAE,KAAK,CAAC,QAAQ,IAAI,MAAM,UAAU,CAAC;AAEvF,SAAO,oBAAoB,aAAa,iBAAiB,IAAI;AAC/D;AAnGA,aADW,iBACJA,SAAoD,CAAC;AADvD,IAAM,iBAAN;;;AClBP;","names":["path","treeNode","KubbFile","path","file","name","PQueue","_options","path","path","PQueue","path","plugin","path","files","_options","_cache","path","require"]}