@kubb/core 4.3.1 → 4.4.0

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 (128) hide show
  1. package/dist/{URLPath-BYceu_vY.js → URLPath-Bpc_OJmh.js} +2 -3
  2. package/dist/{URLPath-BYceu_vY.js.map → URLPath-Bpc_OJmh.js.map} +1 -1
  3. package/dist/{URLPath-8WVzHBnA.cjs → URLPath-Bu6Wkco7.cjs} +6 -7
  4. package/dist/{URLPath-8WVzHBnA.cjs.map → URLPath-Bu6Wkco7.cjs.map} +1 -1
  5. package/dist/{chunk-CZg_9w7l.cjs → chunk-CUT6urMc.cjs} +0 -23
  6. package/dist/{fs-RSVoUw3S.cjs → fs-CM7ohZSu.cjs} +2 -2
  7. package/dist/{fs-RSVoUw3S.cjs.map → fs-CM7ohZSu.cjs.map} +1 -1
  8. package/dist/fs.cjs +2 -2
  9. package/dist/fs.d.ts +1 -1
  10. package/dist/hooks.cjs +6 -6
  11. package/dist/hooks.cjs.map +1 -1
  12. package/dist/hooks.d.cts +1 -1
  13. package/dist/hooks.d.ts +4 -4
  14. package/dist/hooks.js +1 -1
  15. package/dist/hooks.js.map +1 -1
  16. package/dist/{index-BTe91LHd.d.ts → index-DdO15F70.d.ts} +2 -3
  17. package/dist/index.cjs +46 -53
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.cts +15 -11
  20. package/dist/index.d.ts +18 -14
  21. package/dist/index.js +40 -48
  22. package/dist/index.js.map +1 -1
  23. package/dist/{logger-BXL0YCrv.cjs → logger-C7JFdYpj.cjs} +4 -4
  24. package/dist/{logger-BXL0YCrv.cjs.map → logger-C7JFdYpj.cjs.map} +1 -1
  25. package/dist/{logger-BA-za85-.d.ts → logger-D_jvWsUF.d.ts} +1 -1
  26. package/dist/{logger-CDxSrFkR.js → logger-khF_Lft4.js} +2 -2
  27. package/dist/{logger-CDxSrFkR.js.map → logger-khF_Lft4.js.map} +1 -1
  28. package/dist/logger.cjs +2 -2
  29. package/dist/logger.d.ts +1 -1
  30. package/dist/logger.js +1 -1
  31. package/dist/{prompt-DBVnG4Me.js → prompt-CIpZjUDy.js} +1 -1
  32. package/dist/{prompt-DBVnG4Me.js.map → prompt-CIpZjUDy.js.map} +1 -1
  33. package/dist/{prompt-DgONOpPH.cjs → prompt-CgJLZzbf.cjs} +2 -2
  34. package/dist/{prompt-DgONOpPH.cjs.map → prompt-CgJLZzbf.cjs.map} +1 -1
  35. package/dist/transformers-BN5jfIAt.js +339 -0
  36. package/dist/transformers-BN5jfIAt.js.map +1 -0
  37. package/dist/transformers-BpnIvSiH.cjs +443 -0
  38. package/dist/transformers-BpnIvSiH.cjs.map +1 -0
  39. package/dist/transformers.cjs +7 -6
  40. package/dist/transformers.js +1 -3
  41. package/dist/{types-DPeNK0FO.d.ts → types-CCUiy4jG.d.ts} +43 -45
  42. package/dist/{types-BzI9JlV8.d.ts → types-ClXc6HFo.d.ts} +1 -1
  43. package/dist/{types-DNxlynJr.d.cts → types-EV6-sImo.d.cts} +40 -42
  44. package/dist/utils.cjs +7 -7
  45. package/dist/utils.cjs.map +1 -1
  46. package/dist/utils.d.ts +1 -1
  47. package/dist/utils.js +4 -6
  48. package/dist/utils.js.map +1 -1
  49. package/dist/{write-BJfM7G1_.cjs → write-BsFt8M9e.cjs} +2 -2
  50. package/dist/{write-BJfM7G1_.cjs.map → write-BsFt8M9e.cjs.map} +1 -1
  51. package/package.json +8 -14
  52. package/src/PluginManager.ts +3 -7
  53. package/src/build.ts +37 -41
  54. package/src/hooks/useMode.ts +1 -1
  55. package/src/hooks/usePlugin.ts +1 -1
  56. package/src/hooks/usePluginManager.ts +1 -1
  57. package/src/plugin.ts +10 -5
  58. package/src/types.ts +2 -1
  59. package/dist/acorn-BAVXZMtK.cjs +0 -5082
  60. package/dist/acorn-BAVXZMtK.cjs.map +0 -1
  61. package/dist/acorn-D-VhIOLw.js +0 -5080
  62. package/dist/acorn-D-VhIOLw.js.map +0 -1
  63. package/dist/angular-Bp0XO9db.cjs +0 -3631
  64. package/dist/angular-Bp0XO9db.cjs.map +0 -1
  65. package/dist/angular-Czhp4eq5.js +0 -3629
  66. package/dist/angular-Czhp4eq5.js.map +0 -1
  67. package/dist/babel-DCR_B4Qn.js +0 -10033
  68. package/dist/babel-DCR_B4Qn.js.map +0 -1
  69. package/dist/babel-NI0v59ga.cjs +0 -10035
  70. package/dist/babel-NI0v59ga.cjs.map +0 -1
  71. package/dist/casing-BSeq_teY.js +0 -100
  72. package/dist/casing-BSeq_teY.js.map +0 -1
  73. package/dist/casing-CP-9GGdK.cjs +0 -112
  74. package/dist/casing-CP-9GGdK.cjs.map +0 -1
  75. package/dist/chunk-1SJ2vVWa.js +0 -35
  76. package/dist/estree-C3BZPlpU.cjs +0 -6930
  77. package/dist/estree-C3BZPlpU.cjs.map +0 -1
  78. package/dist/estree-DU2NummP.js +0 -6926
  79. package/dist/estree-DU2NummP.js.map +0 -1
  80. package/dist/flow-CWUBUkoi.cjs +0 -52252
  81. package/dist/flow-CWUBUkoi.cjs.map +0 -1
  82. package/dist/flow-JiEbweKj.js +0 -52250
  83. package/dist/flow-JiEbweKj.js.map +0 -1
  84. package/dist/glimmer-CX9OqG1j.cjs +0 -7275
  85. package/dist/glimmer-CX9OqG1j.cjs.map +0 -1
  86. package/dist/glimmer-t9nWn9aE.js +0 -7271
  87. package/dist/glimmer-t9nWn9aE.js.map +0 -1
  88. package/dist/graphql-DjErlIi5.js +0 -1897
  89. package/dist/graphql-DjErlIi5.js.map +0 -1
  90. package/dist/graphql-GOxQAKxM.cjs +0 -1902
  91. package/dist/graphql-GOxQAKxM.cjs.map +0 -1
  92. package/dist/html-CWrdYAhQ.cjs +0 -6560
  93. package/dist/html-CWrdYAhQ.cjs.map +0 -1
  94. package/dist/html-_apcbx34.js +0 -6555
  95. package/dist/html-_apcbx34.js.map +0 -1
  96. package/dist/markdown-ckUc3Q6q.js +0 -6750
  97. package/dist/markdown-ckUc3Q6q.js.map +0 -1
  98. package/dist/markdown-pzqiRmft.cjs +0 -6755
  99. package/dist/markdown-pzqiRmft.cjs.map +0 -1
  100. package/dist/meriyah-BjnGqpUs.js +0 -8928
  101. package/dist/meriyah-BjnGqpUs.js.map +0 -1
  102. package/dist/meriyah-D_x7itbT.cjs +0 -8930
  103. package/dist/meriyah-D_x7itbT.cjs.map +0 -1
  104. package/dist/mocks.cjs +0 -16830
  105. package/dist/mocks.cjs.map +0 -1
  106. package/dist/mocks.d.cts +0 -13
  107. package/dist/mocks.d.ts +0 -13
  108. package/dist/mocks.js +0 -16818
  109. package/dist/mocks.js.map +0 -1
  110. package/dist/postcss-B_c2wbFu.cjs +0 -6689
  111. package/dist/postcss-B_c2wbFu.cjs.map +0 -1
  112. package/dist/postcss-v7BP6SZ-.js +0 -6684
  113. package/dist/postcss-v7BP6SZ-.js.map +0 -1
  114. package/dist/transformers-BH0KLJJP.cjs +0 -804
  115. package/dist/transformers-BH0KLJJP.cjs.map +0 -1
  116. package/dist/transformers-DzHGqYO2.js +0 -702
  117. package/dist/transformers-DzHGqYO2.js.map +0 -1
  118. package/dist/typescript-6kMN6Wqz.cjs +0 -23014
  119. package/dist/typescript-6kMN6Wqz.cjs.map +0 -1
  120. package/dist/typescript-B_IBfKSe.js +0 -23002
  121. package/dist/typescript-B_IBfKSe.js.map +0 -1
  122. package/dist/typescript-C5hce4HG.cjs +0 -4
  123. package/dist/typescript-Cas1XcNz.js +0 -3
  124. package/dist/yaml-BfWM_B73.js +0 -5209
  125. package/dist/yaml-BfWM_B73.js.map +0 -1
  126. package/dist/yaml-DZs6MhV1.cjs +0 -5215
  127. package/dist/yaml-DZs6MhV1.cjs.map +0 -1
  128. package/src/mocks/index.ts +0 -82
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["#buffer","#items","#orderItems","#addParams","type: string[]","name: string[]","item"],"sources":["../src/utils/Cache.ts","../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { 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) => {\n this.#items.push(it)\n })\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","names":["#buffer","#items","#orderItems","#addParams","type: string[]","name: string[]","item"],"sources":["../src/utils/Cache.ts","../src/utils/FunctionParams.ts","../src/utils/promise.ts","../src/utils/renderTemplate.ts","../src/utils/timeout.ts"],"sourcesContent":["export class Cache<T> {\n #buffer = new Map<string, T>()\n\n async get(key: string): Promise<T | null> {\n return this.#buffer.get(key) ?? null\n }\n\n async set(key: string, value: T): Promise<void> {\n this.#buffer.set(key, value)\n }\n\n async delete(key: string): Promise<void> {\n this.#buffer.delete(key)\n }\n\n async clear(): Promise<void> {\n this.#buffer.clear()\n }\n\n async keys(): Promise<string[]> {\n return [...this.#buffer.keys()]\n }\n\n async values(): Promise<T[]> {\n return [...this.#buffer.values()]\n }\n\n async flush(): Promise<void> {\n // No-op for base cache\n }\n}\n","import { 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) => {\n this.#items.push(it)\n })\n return this\n }\n this.#items.push(item)\n\n return this\n }\n static #orderItems(items: Array<FunctionParamsAST | FunctionParamsAST[]>) {\n return orderBy(\n items.filter(Boolean),\n [\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return !v.default\n },\n (v) => {\n if (Array.isArray(v)) {\n return undefined\n }\n return v.required ?? true\n },\n ],\n ['desc', 'desc'],\n )\n }\n\n static #addParams(acc: string[], item: FunctionParamsAST) {\n const { enabled = true, name, type, required = true, ...rest } = item\n\n if (!enabled) {\n return acc\n }\n\n if (!name) {\n // when name is not se we will use TypeScript generics\n acc.push(`${type}${rest.default ? ` = ${rest.default}` : ''}`)\n\n return acc\n }\n // TODO check whey we still need the camelcase here\n const parameterName = name.startsWith('{') ? name : camelCase(name)\n\n if (type) {\n if (required) {\n acc.push(`${parameterName}: ${type}${rest.default ? ` = ${rest.default}` : ''}`)\n } else {\n acc.push(`${parameterName}?: ${type}`)\n }\n } else {\n acc.push(`${parameterName}`)\n }\n\n return acc\n }\n\n static toObject(items: FunctionParamsAST[]): FunctionParamsAST {\n let type: string[] = []\n let name: string[] = []\n\n const enabled = items.every((item) => item.enabled) ? items.at(0)?.enabled : true\n const required = items.every((item) => item.required) ?? true\n\n items.forEach((item) => {\n name = FunctionParams.#addParams(name, { ...item, type: undefined })\n if (items.some((item) => item.type)) {\n type = FunctionParams.#addParams(type, item)\n }\n })\n\n return {\n name: `{ ${name.join(', ')} }`,\n type: type.length ? `{ ${type.join('; ')} }` : undefined,\n enabled,\n required,\n }\n }\n\n static toString(items: (FunctionParamsAST | FunctionParamsAST[])[]): string {\n const sortedData = FunctionParams.#orderItems(items)\n\n return sortedData\n .reduce((acc, item) => {\n if (Array.isArray(item)) {\n if (item.length <= 0) {\n return acc\n }\n const subItems = FunctionParams.#orderItems(item) as FunctionParamsAST[]\n const objectItem = FunctionParams.toObject(subItems)\n\n return FunctionParams.#addParams(acc, objectItem)\n }\n\n return FunctionParams.#addParams(acc, item)\n }, [] as string[])\n .join(', ')\n }\n\n toObject(): FunctionParamsAST {\n const items = FunctionParams.#orderItems(this.#items).flat()\n\n return FunctionParams.toObject(items)\n }\n\n toString(): string {\n const items = FunctionParams.#orderItems(this.#items)\n\n return FunctionParams.toString(items)\n }\n}\n","import type { PossiblePromise } from './types.ts'\n\nexport function isPromise<T>(result: PossiblePromise<T>): result is Promise<T> {\n return !!result && typeof (result as Promise<unknown>)?.then === 'function'\n}\n\nexport function isPromiseFulfilledResult<T = unknown>(result: PromiseSettledResult<unknown>): result is PromiseFulfilledResult<T> {\n return result.status === 'fulfilled'\n}\n\nexport function isPromiseRejectedResult<T>(result: PromiseSettledResult<unknown>): result is Omit<PromiseRejectedResult, 'reason'> & { reason: T } {\n return result.status === 'rejected'\n}\n","export function renderTemplate<TData extends Record<string, unknown> = Record<string, unknown>>(template: string, data: TData | undefined = undefined): string {\n if (!data || !Object.keys(data).length) {\n return template.replace(/{{(.*?)}}/g, '')\n }\n\n const matches = template.match(/{{(.*?)}}/g)\n\n return (\n matches?.reduce((prev, curr) => {\n const index = curr.split(/{{|}}/).filter(Boolean)[0]?.trim()\n if (index === undefined) {\n return prev\n }\n const value = data[index]\n\n if (value === undefined) {\n return prev\n }\n\n return prev\n .replace(curr, () => {\n if (typeof value === 'boolean') {\n return `${value.toString()}` || 'false'\n }\n\n return (value as string) || ''\n })\n .trim()\n }, template) || ''\n )\n}\n","export async function timeout(ms: number): Promise<unknown> {\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(true)\n }, ms)\n })\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- const require_chunk = require('./chunk-CZg_9w7l.cjs');
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
2
  let node_path = require("node:path");
3
3
  node_path = require_chunk.__toESM(node_path);
4
4
  let fs_extra = require("fs-extra");
@@ -46,4 +46,4 @@ Object.defineProperty(exports, 'write', {
46
46
  return write;
47
47
  }
48
48
  });
49
- //# sourceMappingURL=write-BJfM7G1_.cjs.map
49
+ //# sourceMappingURL=write-BsFt8M9e.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-BJfM7G1_.cjs","names":["fs"],"sources":["../src/fs/write.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\ntype Options = { sanity?: boolean }\n\nconst writer = switcher(\n {\n node: async (path: string, data: string, { sanity }: Options) => {\n try {\n const oldContent = await fs.readFile(resolve(path), {\n encoding: 'utf-8',\n })\n if (oldContent?.toString() === data?.toString()) {\n return\n }\n } catch (_err) {\n /* empty */\n }\n\n await fs.outputFile(resolve(path), data, { encoding: 'utf-8' })\n\n if (sanity) {\n const savedData = await fs.readFile(resolve(path), {\n encoding: 'utf-8',\n })\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${data.length}]:\\n${data}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n }\n\n return data\n },\n bun: async (path: string, data: string, { sanity }: Options) => {\n try {\n await Bun.write(resolve(path), data)\n\n if (sanity) {\n const file = Bun.file(resolve(path))\n const savedData = await file.text()\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${path.length}]:\\n${path}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n }\n\n return data\n } catch (e) {\n console.error(e)\n }\n },\n },\n 'node',\n)\n\nexport async function write(path: string, data: string, options: Options = {}): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n return writer(path, data.trim(), options)\n}\n"],"mappings":";;;;;;;;;AAOA,MAAM,kCACJ;CACE,MAAM,OAAO,MAAc,MAAc,EAAE,aAAsB;AAC/D,MAAI;AAIF,QAHmB,MAAMA,iBAAG,gCAAiB,KAAK,EAAE,EAClD,UAAU,SACX,CAAC,GACc,UAAU,KAAK,MAAM,UAAU,CAC7C;WAEK,MAAM;AAIf,QAAMA,iBAAG,kCAAmB,KAAK,EAAE,MAAM,EAAE,UAAU,SAAS,CAAC;AAE/D,MAAI,QAAQ;GACV,MAAM,YAAY,MAAMA,iBAAG,gCAAiB,KAAK,EAAE,EACjD,UAAU,SACX,CAAC;AAEF,OAAI,WAAW,UAAU,KAAK,MAAM,UAAU,CAC5C,OAAM,IAAI,MAAM,2BAA2B,KAAK,WAAW,KAAK,OAAO,MAAM,KAAK,YAAY,UAAU,OAAO,MAAM,UAAU,IAAI;AAGrI,UAAO;;AAGT,SAAO;;CAET,KAAK,OAAO,MAAc,MAAc,EAAE,aAAsB;AAC9D,MAAI;AACF,SAAM,IAAI,6BAAc,KAAK,EAAE,KAAK;AAEpC,OAAI,QAAQ;IAEV,MAAM,YAAY,MADL,IAAI,4BAAa,KAAK,CAAC,CACP,MAAM;AAEnC,QAAI,WAAW,UAAU,KAAK,MAAM,UAAU,CAC5C,OAAM,IAAI,MAAM,2BAA2B,KAAK,WAAW,KAAK,OAAO,MAAM,KAAK,YAAY,UAAU,OAAO,MAAM,UAAU,IAAI;AAGrI,WAAO;;AAGT,UAAO;WACA,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAGrB,EACD,OACD;AAED,eAAsB,MAAM,MAAc,MAAc,UAAmB,EAAE,EAA+B;AAC1G,KAAI,KAAK,MAAM,KAAK,GAClB;AAEF,QAAO,OAAO,MAAM,KAAK,MAAM,EAAE,QAAQ"}
1
+ {"version":3,"file":"write-BsFt8M9e.cjs","names":["fs"],"sources":["../src/fs/write.ts"],"sourcesContent":["import { resolve } from 'node:path'\n\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\ntype Options = { sanity?: boolean }\n\nconst writer = switcher(\n {\n node: async (path: string, data: string, { sanity }: Options) => {\n try {\n const oldContent = await fs.readFile(resolve(path), {\n encoding: 'utf-8',\n })\n if (oldContent?.toString() === data?.toString()) {\n return\n }\n } catch (_err) {\n /* empty */\n }\n\n await fs.outputFile(resolve(path), data, { encoding: 'utf-8' })\n\n if (sanity) {\n const savedData = await fs.readFile(resolve(path), {\n encoding: 'utf-8',\n })\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${data.length}]:\\n${data}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n }\n\n return data\n },\n bun: async (path: string, data: string, { sanity }: Options) => {\n try {\n await Bun.write(resolve(path), data)\n\n if (sanity) {\n const file = Bun.file(resolve(path))\n const savedData = await file.text()\n\n if (savedData?.toString() !== data?.toString()) {\n throw new Error(`Sanity check failed for ${path}\\n\\nData[${path.length}]:\\n${path}\\n\\nSaved[${savedData.length}]:\\n${savedData}\\n`)\n }\n\n return savedData\n }\n\n return data\n } catch (e) {\n console.error(e)\n }\n },\n },\n 'node',\n)\n\nexport async function write(path: string, data: string, options: Options = {}): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n return writer(path, data.trim(), options)\n}\n"],"mappings":";;;;;;;;;AAOA,MAAM,kCACJ;CACE,MAAM,OAAO,MAAc,MAAc,EAAE,aAAsB;AAC/D,MAAI;AAIF,QAHmB,MAAMA,iBAAG,gCAAiB,KAAK,EAAE,EAClD,UAAU,SACX,CAAC,GACc,UAAU,KAAK,MAAM,UAAU,CAC7C;WAEK,MAAM;AAIf,QAAMA,iBAAG,kCAAmB,KAAK,EAAE,MAAM,EAAE,UAAU,SAAS,CAAC;AAE/D,MAAI,QAAQ;GACV,MAAM,YAAY,MAAMA,iBAAG,gCAAiB,KAAK,EAAE,EACjD,UAAU,SACX,CAAC;AAEF,OAAI,WAAW,UAAU,KAAK,MAAM,UAAU,CAC5C,OAAM,IAAI,MAAM,2BAA2B,KAAK,WAAW,KAAK,OAAO,MAAM,KAAK,YAAY,UAAU,OAAO,MAAM,UAAU,IAAI;AAGrI,UAAO;;AAGT,SAAO;;CAET,KAAK,OAAO,MAAc,MAAc,EAAE,aAAsB;AAC9D,MAAI;AACF,SAAM,IAAI,6BAAc,KAAK,EAAE,KAAK;AAEpC,OAAI,QAAQ;IAEV,MAAM,YAAY,MADL,IAAI,4BAAa,KAAK,CAAC,CACP,MAAM;AAEnC,QAAI,WAAW,UAAU,KAAK,MAAM,UAAU,CAC5C,OAAM,IAAI,MAAM,2BAA2B,KAAK,WAAW,KAAK,OAAO,MAAM,KAAK,YAAY,UAAU,OAAO,MAAM,UAAU,IAAI;AAGrI,WAAO;;AAGT,UAAO;WACA,GAAG;AACV,WAAQ,MAAM,EAAE;;;CAGrB,EACD,OACD;AAED,eAAsB,MAAM,MAAc,MAAc,UAAmB,EAAE,EAA+B;AAC1G,KAAI,KAAK,MAAM,KAAK,GAClB;AAEF,QAAO,OAAO,MAAM,KAAK,MAAM,EAAE,QAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/core",
3
- "version": "4.3.1",
3
+ "version": "4.4.0",
4
4
  "description": "Core functionality for Kubb's plugin-based code generation system, providing the foundation for transforming OpenAPI specifications.",
5
5
  "keywords": [
6
6
  "typescript",
@@ -38,10 +38,6 @@
38
38
  "import": "./dist/logger.js",
39
39
  "require": "./dist/logger.cjs"
40
40
  },
41
- "./mocks": {
42
- "import": "./dist/mocks.js",
43
- "require": "./dist/mocks.cjs"
44
- },
45
41
  "./transformers": {
46
42
  "import": "./dist/transformers.js",
47
43
  "require": "./dist/transformers.cjs"
@@ -66,9 +62,6 @@
66
62
  "logger": [
67
63
  "./dist/logger.d.ts"
68
64
  ],
69
- "mocks": [
70
- "./dist/mocks.d.ts"
71
- ],
72
65
  "hooks": [
73
66
  "./dist/hooks.d.ts"
74
67
  ],
@@ -87,8 +80,7 @@
87
80
  "!/**/__tests__/**"
88
81
  ],
89
82
  "dependencies": {
90
- "@kubb/fabric-core": "0.1.8",
91
- "@kubb/parser-ts": "^4.1.4",
83
+ "@kubb/react-fabric": "0.2.8",
92
84
  "camelcase": "^8.0.0",
93
85
  "find-up": "^7.0.0",
94
86
  "fs-extra": "^11.3.2",
@@ -99,8 +91,7 @@
99
91
  "picocolors": "^1.1.1",
100
92
  "remeda": "^2.32.0",
101
93
  "seedrandom": "^3.0.5",
102
- "semver": "^7.7.3",
103
- "@kubb/react": "4.3.1"
94
+ "semver": "^7.7.3"
104
95
  },
105
96
  "devDependencies": {
106
97
  "@types/fs-extra": "^11.0.4",
@@ -108,12 +99,15 @@
108
99
  "@types/seedrandom": "^3.0.8",
109
100
  "@types/semver": "^7.7.1",
110
101
  "consola": "^3.4.2",
111
- "tsdown": "^0.15.9",
102
+ "tsdown": "^0.15.11",
112
103
  "typescript": "^5.9.3",
113
104
  "zod": "^4.1.12"
114
105
  },
106
+ "optionalDependencies": {
107
+ "@kubb/fabric-core": "0.2.8"
108
+ },
115
109
  "peerDependencies": {
116
- "@kubb/react": "^4.3.0"
110
+ "@kubb/react-fabric": "0.2.8"
117
111
  },
118
112
  "engines": {
119
113
  "node": ">=20"
@@ -1,4 +1,4 @@
1
- import { FileManager } from '@kubb/fabric-core'
1
+ import type { Fabric } from '@kubb/react-fabric'
2
2
  import { ValidationPluginError } from './errors.ts'
3
3
  import type { KubbFile } from './fs/index.ts'
4
4
  import type { Logger } from './logger.ts'
@@ -47,6 +47,7 @@ type SafeParseResult<H extends PluginLifecycleHooks, Result = ReturnType<ParseRe
47
47
  // inspired by: https://github.com/rollup/rollup/blob/master/src/utils/PluginDriver.ts#
48
48
 
49
49
  type Options = {
50
+ fabric: Fabric
50
51
  logger: Logger
51
52
  /**
52
53
  * @default Number.POSITIVE_INFINITY
@@ -70,10 +71,6 @@ type GetFileProps<TOptions = object> = {
70
71
 
71
72
  export class PluginManager {
72
73
  readonly plugins = new Set<Plugin<GetPluginFactoryOptions<any>>>()
73
- /**
74
- * @deprecated do not use from pluginManager
75
- */
76
- readonly fileManager: FileManager
77
74
  readonly events: EventEmitter<Events> = new EventEmitter()
78
75
 
79
76
  readonly config: Config
@@ -90,16 +87,15 @@ export class PluginManager {
90
87
  this.config = config
91
88
  this.options = options
92
89
  this.logger = options.logger
93
- this.fileManager = new FileManager()
94
90
  this.#promiseManager = new PromiseManager({
95
91
  nullCheck: (state: SafeParseResult<'resolveName'> | null) => !!state?.result,
96
92
  })
97
93
 
98
94
  const core = pluginCore({
95
+ fabric: options.fabric,
99
96
  config,
100
97
  logger: this.logger,
101
98
  pluginManager: this,
102
- fileManager: this.fileManager,
103
99
  resolvePath: this.resolvePath.bind(this),
104
100
  resolveName: this.resolveName.bind(this),
105
101
  getPlugins: this.#getSortedPlugins.bind(this),
package/src/build.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import { join, relative, resolve } from 'node:path'
2
- import { typescriptParser } from '@kubb/react'
2
+ import type { Fabric } from '@kubb/react-fabric'
3
+ import { createFabric } from '@kubb/react-fabric'
4
+ import { typescriptParser } from '@kubb/react-fabric/parsers'
5
+ import { fsPlugin } from '@kubb/react-fabric/plugins'
3
6
  import pc from 'picocolors'
4
7
  import { isDeepEqual } from 'remeda'
5
8
  import { isInputPath } from './config.ts'
@@ -16,10 +19,10 @@ type BuildOptions = {
16
19
  * @default Logger without the spinner
17
20
  */
18
21
  logger?: Logger
19
- pluginManager?: PluginManager
20
22
  }
21
23
 
22
24
  type BuildOutput = {
25
+ fabric: Fabric
23
26
  files: Array<KubbFile.ResolvedFile>
24
27
  pluginManager: PluginManager
25
28
  /**
@@ -28,11 +31,12 @@ type BuildOutput = {
28
31
  error?: Error
29
32
  }
30
33
 
31
- export async function setup(options: BuildOptions): Promise<PluginManager> {
32
- if (options.pluginManager) {
33
- return options.pluginManager
34
- }
34
+ type SetupResult = {
35
+ fabric: Fabric
36
+ pluginManager: PluginManager
37
+ }
35
38
 
39
+ export async function setup(options: BuildOptions): Promise<SetupResult> {
36
40
  const { config: userConfig, logger = createLogger() } = options
37
41
 
38
42
  if (Array.isArray(userConfig.input)) {
@@ -74,38 +78,39 @@ export async function setup(options: BuildOptions): Promise<PluginManager> {
74
78
  await clean(join(definedConfig.root, '.kubb'))
75
79
  }
76
80
 
77
- return new PluginManager(definedConfig, { logger, concurrency: 5 })
81
+ const fabric = createFabric()
82
+ fabric.use(fsPlugin, { dryRun: !definedConfig.output.write })
83
+ fabric.use(typescriptParser)
84
+
85
+ const pluginManager = new PluginManager(definedConfig, { fabric, logger, concurrency: 5 })
86
+
87
+ return {
88
+ fabric,
89
+ pluginManager,
90
+ }
78
91
  }
79
92
 
80
- export async function build(options: BuildOptions): Promise<BuildOutput> {
81
- const { files, pluginManager, error } = await safeBuild(options)
93
+ export async function build(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {
94
+ const { fabric, files, pluginManager, error } = await safeBuild(options, overrides)
82
95
 
83
- if (error) throw error
96
+ if (error) {
97
+ throw error
98
+ }
84
99
 
85
100
  return {
101
+ fabric,
86
102
  files,
87
103
  pluginManager,
88
104
  error,
89
105
  }
90
106
  }
91
107
 
92
- export async function safeBuild(options: BuildOptions): Promise<BuildOutput> {
93
- const pluginManager = await setup(options)
108
+ export async function safeBuild(options: BuildOptions, overrides?: SetupResult): Promise<BuildOutput> {
109
+ const { fabric, pluginManager } = overrides ? overrides : await setup(options)
94
110
 
95
111
  const config = pluginManager.config
96
112
 
97
113
  try {
98
- pluginManager.events.on('executing', ({ plugin, message }) => {
99
- pluginManager.logger.emit('debug', { date: new Date(), logs: [`Executing pluginKey ${plugin.key?.join('.')} | ${message}`] })
100
- })
101
-
102
- pluginManager.events.on('executed', ({ plugin, message, output }) => {
103
- pluginManager.logger.emit('debug', {
104
- date: new Date(),
105
- logs: [`Executed pluginKey ${plugin.key?.join('.')} | ${message} | ${JSON.stringify(output, undefined, 2)}`],
106
- })
107
- })
108
-
109
114
  await pluginManager.hookParallel({
110
115
  hookName: 'buildStart',
111
116
  parameters: [config],
@@ -113,14 +118,10 @@ export async function safeBuild(options: BuildOptions): Promise<BuildOutput> {
113
118
  })
114
119
 
115
120
  if (config.output.barrelType) {
116
- // create root barrel file
117
121
  const root = resolve(config.root)
118
122
  const rootPath = resolve(root, config.output.path, 'index.ts')
119
123
 
120
- //TODO find clean method without loading all files
121
- const files = await pluginManager.fileManager.files
122
-
123
- const barrelFiles = files.filter((file) => {
124
+ const barrelFiles = fabric.files.filter((file) => {
124
125
  return file.sources.some((source) => source.isIndexable)
125
126
  })
126
127
 
@@ -161,14 +162,14 @@ export async function safeBuild(options: BuildOptions): Promise<BuildOutput> {
161
162
  meta: {},
162
163
  }
163
164
 
164
- await pluginManager.fileManager.add(rootFile)
165
+ await fabric.addFile(rootFile)
165
166
  }
166
167
 
167
- pluginManager.fileManager.processor.events.on('process:start', ({ files }) => {
168
+ fabric.context.events.on('process:start', ({ files }) => {
168
169
  pluginManager.logger.emit('progress_start', { id: 'files', size: files.length, message: 'Writing files ...' })
169
170
  })
170
171
 
171
- pluginManager.fileManager.processor.events.on('process:progress', async ({ file, source }) => {
172
+ fabric.context.events.on('process:progress', async ({ file, source }) => {
172
173
  const message = file ? `Writing ${relative(config.root, file.path)}` : ''
173
174
  pluginManager.logger.emit('progressed', { id: 'files', message })
174
175
 
@@ -177,28 +178,23 @@ export async function safeBuild(options: BuildOptions): Promise<BuildOutput> {
177
178
  }
178
179
  })
179
180
 
180
- pluginManager.fileManager.processor.events.on('process:end', () => {
181
+ fabric.context.events.on('process:end', () => {
181
182
  pluginManager.logger.emit('progress_stop', { id: 'files' })
182
183
  })
184
+ const files = [...fabric.files]
183
185
 
184
- const parsers = new Set<any>([typescriptParser])
185
-
186
- const files = await pluginManager.fileManager.write({
187
- extension: config.output.extension,
188
- dryRun: !config.output.write,
189
- parsers,
190
- })
186
+ await fabric.write({ extension: config.output.extension })
191
187
 
192
188
  await pluginManager.hookParallel({ hookName: 'buildEnd', message: `Build stopped for ${config.name}` })
193
189
 
194
- await pluginManager.fileManager.clear()
195
-
196
190
  return {
191
+ fabric,
197
192
  files,
198
193
  pluginManager,
199
194
  }
200
195
  } catch (e) {
201
196
  return {
197
+ fabric,
202
198
  files: [],
203
199
  pluginManager,
204
200
  error: e as Error,
@@ -1,4 +1,4 @@
1
- import { useApp } from '@kubb/react'
1
+ import { useApp } from '@kubb/react-fabric'
2
2
  import type { KubbFile } from '../fs/index.ts'
3
3
 
4
4
  export function useMode(): KubbFile.Mode {
@@ -1,4 +1,4 @@
1
- import { useApp } from '@kubb/react'
1
+ import { useApp } from '@kubb/react-fabric'
2
2
  import type { Plugin, PluginFactoryOptions } from '../types.ts'
3
3
 
4
4
  export function usePlugin<TOptions extends PluginFactoryOptions = PluginFactoryOptions>(): Plugin<TOptions> {
@@ -1,4 +1,4 @@
1
- import { useApp } from '@kubb/react'
1
+ import { useApp } from '@kubb/react-fabric'
2
2
  import type { PluginManager } from '../PluginManager.ts'
3
3
 
4
4
  export function usePluginManager(): PluginManager {
package/src/plugin.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import path from 'node:path'
2
2
 
3
- import type { FileManager } from '@kubb/fabric-core'
3
+ import type { Fabric } from '@kubb/react-fabric'
4
4
  import type { PluginManager } from './PluginManager.ts'
5
5
  import type { Plugin, PluginContext, PluginFactoryOptions, UserPluginWithLifeCycle } from './types.ts'
6
6
 
@@ -15,8 +15,8 @@ export function createPlugin<T extends PluginFactoryOptions = PluginFactoryOptio
15
15
  }
16
16
 
17
17
  type Options = {
18
+ fabric: Fabric
18
19
  config: PluginContext['config']
19
- fileManager: FileManager
20
20
  pluginManager: PluginManager
21
21
  resolvePath: PluginContext['resolvePath']
22
22
  resolveName: PluginContext['resolveName']
@@ -29,7 +29,7 @@ type Options = {
29
29
  export type PluginCore = PluginFactoryOptions<'core', Options, Options, PluginContext, never>
30
30
 
31
31
  export const pluginCore = createPlugin<PluginCore>((options) => {
32
- const { fileManager, pluginManager, resolvePath, resolveName, logger } = options
32
+ const { fabric, pluginManager, resolvePath, resolveName, logger } = options
33
33
 
34
34
  return {
35
35
  name: 'core',
@@ -37,6 +37,9 @@ export const pluginCore = createPlugin<PluginCore>((options) => {
37
37
  key: ['core'],
38
38
  context() {
39
39
  return {
40
+ get fabric() {
41
+ return fabric
42
+ },
40
43
  get config() {
41
44
  return options.config
42
45
  },
@@ -48,10 +51,12 @@ export const pluginCore = createPlugin<PluginCore>((options) => {
48
51
  return options.plugin as NonNullable<Options['plugin']>
49
52
  },
50
53
  logger,
51
- fileManager,
54
+ get fileManager() {
55
+ return fabric.context.fileManager
56
+ },
52
57
  pluginManager,
53
58
  async addFile(...files) {
54
- const resolvedFiles = await fileManager.add(...files)
59
+ const resolvedFiles = await fabric.context.fileManager.add(...files)
55
60
 
56
61
  if (!Array.isArray(resolvedFiles)) {
57
62
  return [resolvedFiles]
package/src/types.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { FileManager } from '@kubb/fabric-core'
1
+ import type { Fabric, FileManager } from '@kubb/react-fabric'
2
2
  import type { KubbFile } from './fs/index.ts'
3
3
  import type { Logger } from './logger.ts'
4
4
  import type { PluginManager } from './PluginManager.ts'
@@ -299,6 +299,7 @@ export type ResolveNameParams = {
299
299
  }
300
300
 
301
301
  export type PluginContext<TOptions extends PluginFactoryOptions = PluginFactoryOptions> = {
302
+ fabric: Fabric
302
303
  config: Config
303
304
  /**
304
305
  * @deprecated