@kubb/fabric-core 0.0.0-canary-20251021083045 → 0.0.0-canary-20251021135548

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 (65) hide show
  1. package/dist/{types-lS0JaZqX.d.cts → KubbFile-BrN7Wwp6.d.cts} +3 -3
  2. package/dist/{types-BY5X8xoR.d.ts → KubbFile-BzVkcu9M.d.ts} +3 -3
  3. package/dist/createFileParser-BD8yn0LT.cjs +14 -0
  4. package/dist/createFileParser-BD8yn0LT.cjs.map +1 -0
  5. package/dist/createFileParser-Cix3AMLd.js +8 -0
  6. package/dist/createFileParser-Cix3AMLd.js.map +1 -0
  7. package/dist/default-DCpuPmrL.js +10 -0
  8. package/dist/default-DCpuPmrL.js.map +1 -0
  9. package/dist/default-DNBu_jsL.cjs +15 -0
  10. package/dist/default-DNBu_jsL.cjs.map +1 -0
  11. package/dist/defineApp-BX0gsgY3.d.cts +54 -0
  12. package/dist/defineApp-DygRR8LS.d.ts +54 -0
  13. package/dist/index.cjs +138 -87
  14. package/dist/index.cjs.map +1 -1
  15. package/dist/index.d.cts +44 -53
  16. package/dist/index.d.ts +44 -53
  17. package/dist/index.js +128 -76
  18. package/dist/index.js.map +1 -1
  19. package/dist/parsers/default.cjs +4 -0
  20. package/dist/parsers/default.d.cts +8 -0
  21. package/dist/parsers/default.d.ts +8 -0
  22. package/dist/parsers/default.js +4 -0
  23. package/dist/parsers/tsx.cjs +4 -2
  24. package/dist/parsers/tsx.d.cts +3 -3
  25. package/dist/parsers/tsx.d.ts +3 -3
  26. package/dist/parsers/tsx.js +3 -1
  27. package/dist/parsers/typescript.cjs +6 -5
  28. package/dist/parsers/typescript.d.cts +3 -3
  29. package/dist/parsers/typescript.d.ts +3 -3
  30. package/dist/parsers/typescript.js +2 -1
  31. package/dist/tsx-BSUaIML3.cjs +16 -0
  32. package/dist/tsx-BSUaIML3.cjs.map +1 -0
  33. package/dist/tsx-DBAk9dqS.js +11 -0
  34. package/dist/tsx-DBAk9dqS.js.map +1 -0
  35. package/dist/types-CkbelZaS.d.ts +15 -0
  36. package/dist/types-GueHciQ3.d.cts +15 -0
  37. package/dist/types.cjs +12 -0
  38. package/dist/types.cjs.map +1 -0
  39. package/dist/types.d.cts +3 -0
  40. package/dist/types.d.ts +3 -0
  41. package/dist/types.js +6 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/{parser-CWB_OBtr.js → typescript-C60gWBu8.js} +4 -34
  44. package/dist/typescript-C60gWBu8.js.map +1 -0
  45. package/dist/{parser-QF8j8-pj.cjs → typescript-Z90jN87k.cjs} +5 -47
  46. package/dist/typescript-Z90jN87k.cjs.map +1 -0
  47. package/package.json +15 -1
  48. package/src/FileManager.ts +11 -203
  49. package/src/FileProcessor.ts +86 -0
  50. package/src/KubbFile.ts +132 -0
  51. package/src/createFile.ts +167 -0
  52. package/src/defineApp.ts +8 -6
  53. package/src/index.ts +4 -2
  54. package/src/parsers/createFileParser.ts +5 -0
  55. package/src/parsers/default.ts +7 -0
  56. package/src/parsers/tsx.ts +1 -1
  57. package/src/parsers/types.ts +12 -0
  58. package/src/parsers/typescript.ts +1 -1
  59. package/src/types.ts +2 -132
  60. package/src/utils/EventEmitter.ts +23 -0
  61. package/dist/parser-Bck6QDwN.d.cts +0 -15
  62. package/dist/parser-CRl-iUw1.d.ts +0 -15
  63. package/dist/parser-CWB_OBtr.js.map +0 -1
  64. package/dist/parser-QF8j8-pj.cjs.map +0 -1
  65. package/src/parsers/parser.ts +0 -56
@@ -1,8 +1,8 @@
1
- import "../types-BY5X8xoR.js";
2
- import { t as ParserModule } from "../parser-CRl-iUw1.js";
1
+ import "../KubbFile-BzVkcu9M.js";
2
+ import { t as Parser } from "../types-CkbelZaS.js";
3
3
 
4
4
  //#region src/parsers/tsx.d.ts
5
- declare const tsxParser: ParserModule<object>;
5
+ declare const tsxParser: Parser<object>;
6
6
  //#endregion
7
7
  export { tsxParser };
8
8
  //# sourceMappingURL=tsx.d.ts.map
@@ -1,3 +1,5 @@
1
- import { n as tsxParser } from "../parser-CWB_OBtr.js";
1
+ import "../typescript-C60gWBu8.js";
2
+ import "../createFileParser-Cix3AMLd.js";
3
+ import { t as tsxParser } from "../tsx-DBAk9dqS.js";
2
4
 
3
5
  export { tsxParser };
@@ -1,6 +1,7 @@
1
- const require_parser = require('../parser-QF8j8-pj.cjs');
1
+ const require_typescript = require('../typescript-Z90jN87k.cjs');
2
+ require('../createFileParser-BD8yn0LT.cjs');
2
3
 
3
- exports.createExport = require_parser.createExport;
4
- exports.createImport = require_parser.createImport;
5
- exports.print = require_parser.print;
6
- exports.typeScriptParser = require_parser.typeScriptParser;
4
+ exports.createExport = require_typescript.createExport;
5
+ exports.createImport = require_typescript.createImport;
6
+ exports.print = require_typescript.print;
7
+ exports.typeScriptParser = require_typescript.typeScriptParser;
@@ -1,5 +1,5 @@
1
- import "../types-lS0JaZqX.cjs";
2
- import { t as ParserModule } from "../parser-Bck6QDwN.cjs";
1
+ import "../KubbFile-BrN7Wwp6.cjs";
2
+ import { t as Parser } from "../types-GueHciQ3.cjs";
3
3
  import ts from "typescript";
4
4
 
5
5
  //#region src/parsers/typescript.d.ts
@@ -45,7 +45,7 @@ declare function createExport({
45
45
  isTypeOnly?: boolean;
46
46
  name?: string | Array<ts.Identifier | string>;
47
47
  }): ts.ExportDeclaration;
48
- declare const typeScriptParser: ParserModule<object>;
48
+ declare const typeScriptParser: Parser<object>;
49
49
  //#endregion
50
50
  export { createExport, createImport, print, typeScriptParser };
51
51
  //# sourceMappingURL=typescript.d.cts.map
@@ -1,5 +1,5 @@
1
- import "../types-BY5X8xoR.js";
2
- import { t as ParserModule } from "../parser-CRl-iUw1.js";
1
+ import "../KubbFile-BzVkcu9M.js";
2
+ import { t as Parser } from "../types-CkbelZaS.js";
3
3
  import ts from "typescript";
4
4
 
5
5
  //#region src/parsers/typescript.d.ts
@@ -45,7 +45,7 @@ declare function createExport({
45
45
  isTypeOnly?: boolean;
46
46
  name?: string | Array<ts.Identifier | string>;
47
47
  }): ts.ExportDeclaration;
48
- declare const typeScriptParser: ParserModule<object>;
48
+ declare const typeScriptParser: Parser<object>;
49
49
  //#endregion
50
50
  export { createExport, createImport, print, typeScriptParser };
51
51
  //# sourceMappingURL=typescript.d.ts.map
@@ -1,3 +1,4 @@
1
- import { a as print, i as createImport, o as typeScriptParser, r as createExport } from "../parser-CWB_OBtr.js";
1
+ import { i as typeScriptParser, n as createImport, r as print, t as createExport } from "../typescript-C60gWBu8.js";
2
+ import "../createFileParser-Cix3AMLd.js";
2
3
 
3
4
  export { createExport, createImport, print, typeScriptParser };
@@ -0,0 +1,16 @@
1
+ const require_typescript = require('./typescript-Z90jN87k.cjs');
2
+ const require_createFileParser = require('./createFileParser-BD8yn0LT.cjs');
3
+
4
+ //#region src/parsers/tsx.ts
5
+ const tsxParser = require_createFileParser.createFileParser({ async print(file, options = { extname: ".tsx" }) {
6
+ return require_typescript.typeScriptParser.print(file, options);
7
+ } });
8
+
9
+ //#endregion
10
+ Object.defineProperty(exports, 'tsxParser', {
11
+ enumerable: true,
12
+ get: function () {
13
+ return tsxParser;
14
+ }
15
+ });
16
+ //# sourceMappingURL=tsx-BSUaIML3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsx-BSUaIML3.cjs","names":["createFileParser","typeScriptParser"],"sources":["../src/parsers/tsx.ts"],"sourcesContent":["import { typeScriptParser } from './typescript.ts'\nimport { createFileParser } from './createFileParser.ts'\n\nexport const tsxParser = createFileParser({\n async print(file, options = { extname: '.tsx' }) {\n return typeScriptParser.print(file, options)\n },\n})\n"],"mappings":";;;;AAGA,MAAa,YAAYA,0CAAiB,EACxC,MAAM,MAAM,MAAM,UAAU,EAAE,SAAS,QAAQ,EAAE;AAC/C,QAAOC,oCAAiB,MAAM,MAAM,QAAQ;GAE/C,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { i as typeScriptParser } from "./typescript-C60gWBu8.js";
2
+ import { t as createFileParser } from "./createFileParser-Cix3AMLd.js";
3
+
4
+ //#region src/parsers/tsx.ts
5
+ const tsxParser = createFileParser({ async print(file, options = { extname: ".tsx" }) {
6
+ return typeScriptParser.print(file, options);
7
+ } });
8
+
9
+ //#endregion
10
+ export { tsxParser as t };
11
+ //# sourceMappingURL=tsx-DBAk9dqS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tsx-DBAk9dqS.js","names":[],"sources":["../src/parsers/tsx.ts"],"sourcesContent":["import { typeScriptParser } from './typescript.ts'\nimport { createFileParser } from './createFileParser.ts'\n\nexport const tsxParser = createFileParser({\n async print(file, options = { extname: '.tsx' }) {\n return typeScriptParser.print(file, options)\n },\n})\n"],"mappings":";;;;AAGA,MAAa,YAAY,iBAAiB,EACxC,MAAM,MAAM,MAAM,UAAU,EAAE,SAAS,QAAQ,EAAE;AAC/C,QAAO,iBAAiB,MAAM,MAAM,QAAQ;GAE/C,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { a as ResolvedFile, t as Extname } from "./KubbFile-BzVkcu9M.js";
2
+
3
+ //#region src/parsers/types.d.ts
4
+ type PrintOptions = {
5
+ extname?: Extname;
6
+ };
7
+ type Parser<TMeta extends object = object> = {
8
+ /**
9
+ * Convert a file to string
10
+ */
11
+ print: (file: ResolvedFile<TMeta>, options: PrintOptions) => Promise<string>;
12
+ };
13
+ //#endregion
14
+ export { Parser as t };
15
+ //# sourceMappingURL=types-CkbelZaS.d.ts.map
@@ -0,0 +1,15 @@
1
+ import { a as ResolvedFile, t as Extname } from "./KubbFile-BrN7Wwp6.cjs";
2
+
3
+ //#region src/parsers/types.d.ts
4
+ type PrintOptions = {
5
+ extname?: Extname;
6
+ };
7
+ type Parser<TMeta extends object = object> = {
8
+ /**
9
+ * Convert a file to string
10
+ */
11
+ print: (file: ResolvedFile<TMeta>, options: PrintOptions) => Promise<string>;
12
+ };
13
+ //#endregion
14
+ export { Parser as t };
15
+ //# sourceMappingURL=types-GueHciQ3.d.cts.map
package/dist/types.cjs ADDED
@@ -0,0 +1,12 @@
1
+
2
+ //#region src/KubbFile.ts
3
+ var KubbFile_exports = {};
4
+
5
+ //#endregion
6
+ Object.defineProperty(exports, 'KubbFile', {
7
+ enumerable: true,
8
+ get: function () {
9
+ return KubbFile_exports;
10
+ }
11
+ });
12
+ //# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.cjs","names":[],"sources":["../src/KubbFile.ts"],"sourcesContent":["type BasePath<T extends string = string> = `${T}/`\n\nexport 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 * @example '@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 isNameSpace?: boolean\n /**\n * When root is set it will get the path with relative getRelativePath(root, path).\n */\n root?: string\n}\n\nexport type Source = {\n name?: string\n value?: string\n isTypeOnly?: boolean\n /**\n * Has const or type 'export'\n * @default false\n */\n isExportable?: boolean\n /**\n * When set, barrel generation will add this\n * @default false\n */\n isIndexable?: boolean\n}\n\nexport 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 * @example '@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\nexport type Extname = '.ts' | '.js' | '.tsx' | '.json' | `.${string}`\n\nexport 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 */\nexport type BaseName = `${string}.${string}`\n\n/**\n * Path will be full qualified path to a specified file\n */\nexport type Path = string\n\nexport type AdvancedPath<T extends BaseName = BaseName> = `${BasePath}${T}`\n\nexport type OptionalPath = Path | undefined | null\n\nexport type File<TMeta extends object = object> = {\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: BaseName\n /**\n * Path will be full qualified path to a specified file\n */\n path: AdvancedPath<BaseName> | Path\n sources: Array<Source>\n imports?: Array<Import>\n exports?: Array<Export>\n /**\n * Use extra meta, this is getting used to generate the barrel/index files.\n */\n meta?: TMeta\n banner?: string\n footer?: string\n}\n\nexport type ResolvedImport = Import\n\nexport type ResolvedExport = Export\n\nexport type ResolvedFile<TMeta extends object = object> = File<TMeta> & {\n /**\n * @default hash\n */\n id: string\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n name: string\n extname: Extname\n imports: Array<ResolvedImport>\n exports: Array<ResolvedExport>\n}\n"],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import { r as KubbFile_d_exports } from "./KubbFile-BrN7Wwp6.cjs";
2
+ import { n as AppContext, r as DefineApp, t as App } from "./defineApp-BX0gsgY3.cjs";
3
+ export { type App, type AppContext, type DefineApp, KubbFile_d_exports as KubbFile };
@@ -0,0 +1,3 @@
1
+ import { r as KubbFile_d_exports } from "./KubbFile-BzVkcu9M.js";
2
+ import { n as AppContext, r as DefineApp, t as App } from "./defineApp-DygRR8LS.js";
3
+ export { type App, type AppContext, type DefineApp, KubbFile_d_exports as KubbFile };
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ //#region src/KubbFile.ts
2
+ var KubbFile_exports = {};
3
+
4
+ //#endregion
5
+ export { KubbFile_exports as KubbFile };
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","names":[],"sources":["../src/KubbFile.ts"],"sourcesContent":["type BasePath<T extends string = string> = `${T}/`\n\nexport 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 * @example '@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 isNameSpace?: boolean\n /**\n * When root is set it will get the path with relative getRelativePath(root, path).\n */\n root?: string\n}\n\nexport type Source = {\n name?: string\n value?: string\n isTypeOnly?: boolean\n /**\n * Has const or type 'export'\n * @default false\n */\n isExportable?: boolean\n /**\n * When set, barrel generation will add this\n * @default false\n */\n isIndexable?: boolean\n}\n\nexport 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 * @example '@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\nexport type Extname = '.ts' | '.js' | '.tsx' | '.json' | `.${string}`\n\nexport 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 */\nexport type BaseName = `${string}.${string}`\n\n/**\n * Path will be full qualified path to a specified file\n */\nexport type Path = string\n\nexport type AdvancedPath<T extends BaseName = BaseName> = `${BasePath}${T}`\n\nexport type OptionalPath = Path | undefined | null\n\nexport type File<TMeta extends object = object> = {\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: BaseName\n /**\n * Path will be full qualified path to a specified file\n */\n path: AdvancedPath<BaseName> | Path\n sources: Array<Source>\n imports?: Array<Import>\n exports?: Array<Export>\n /**\n * Use extra meta, this is getting used to generate the barrel/index files.\n */\n meta?: TMeta\n banner?: string\n footer?: string\n}\n\nexport type ResolvedImport = Import\n\nexport type ResolvedExport = Export\n\nexport type ResolvedFile<TMeta extends object = object> = File<TMeta> & {\n /**\n * @default hash\n */\n id: string\n /**\n * Contains the first part of the baseName, generated based on baseName\n * @link https://nodejs.org/api/path.html#pathformatpathobject\n */\n name: string\n extname: Extname\n imports: Array<ResolvedImport>\n exports: Array<ResolvedExport>\n}\n"],"mappings":""}
@@ -1,7 +1,8 @@
1
- import ts from "typescript";
1
+ import { t as createFileParser } from "./createFileParser-Cix3AMLd.js";
2
2
  import path, { normalize, relative, resolve } from "node:path";
3
3
  import fs from "fs-extra";
4
4
  import { switcher } from "js-runtime";
5
+ import ts from "typescript";
5
6
 
6
7
  //#region src/fs.ts
7
8
  async function write(path$1, data, options = {}) {
@@ -145,36 +146,5 @@ const typeScriptParser = createFileParser({ async print(file, options = { extnam
145
146
  } });
146
147
 
147
148
  //#endregion
148
- //#region src/parsers/tsx.ts
149
- const tsxParser = createFileParser({ async print(file, options = { extname: ".tsx" }) {
150
- return typeScriptParser.print(file, options);
151
- } });
152
-
153
- //#endregion
154
- //#region src/parsers/parser.ts
155
- function createFileParser(parser) {
156
- return parser;
157
- }
158
- const defaultParser = createFileParser({ async print(file) {
159
- return file.sources.map((item) => item.value).join("\n\n");
160
- } });
161
- const parsers = {
162
- ".ts": typeScriptParser,
163
- ".js": typeScriptParser,
164
- ".jsx": tsxParser,
165
- ".tsx": tsxParser,
166
- ".json": defaultParser
167
- };
168
- async function parseFile(file, { extname } = {}) {
169
- async function getFileParser(extname$1) {
170
- if (!extname$1) return defaultParser;
171
- const parser = parsers[extname$1];
172
- if (!parser) console.warn(`[parser] No parser found for ${extname$1}, default parser will be used`);
173
- return parser || defaultParser;
174
- }
175
- return (await getFileParser(file.extname)).print(file, { extname });
176
- }
177
-
178
- //#endregion
179
- export { print as a, write as c, createImport as i, tsxParser as n, typeScriptParser as o, createExport as r, trimExtName as s, parseFile as t };
180
- //# sourceMappingURL=parser-CWB_OBtr.js.map
149
+ export { trimExtName as a, typeScriptParser as i, createImport as n, write as o, print as r, createExport as t };
150
+ //# sourceMappingURL=typescript-C60gWBu8.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-C60gWBu8.js","names":["path","data","output: string","path","importPropertyName: ts.Identifier | undefined","importName: ts.NamedImportBindings | undefined"],"sources":["../src/fs.ts","../src/parsers/typescript.ts"],"sourcesContent":["import { normalize, relative, resolve } from 'node:path'\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\ntype Options = { sanity?: boolean }\n\nexport async function write(path: string, data: string, options: Options = {}): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n return 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 )(path, data.trim(), options)\n}\n\nexport async function read(path: string): Promise<string> {\n return switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n )(path)\n}\n\nexport function readSync(path: string): string {\n return switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n )(path)\n}\n\nexport async function exists(path: string): Promise<boolean> {\n return switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n )(path)\n}\n\nexport function existsSync(path: string): boolean {\n return switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n )(path)\n}\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n\nexport async function unlink(path: string): Promise<void> {\n return fs.unlink(path)\n}\n\nfunction slash(path: string, platform: 'windows' | 'mac' | 'linux' = 'linux') {\n const isWindowsPath = /^\\\\\\\\\\?\\\\/.test(path)\n const normalizedPath = normalize(path)\n\n if (['linux', 'mac'].includes(platform) && !isWindowsPath) {\n // linux and mac\n return normalizedPath.replaceAll(/\\\\/g, '/').replace('../', '')\n }\n\n // windows\n return normalizedPath.replaceAll(/\\\\/g, '/').replace('../', '')\n}\n\nexport function trimExtName(text: string): string {\n return text.replace(/\\.[^/.]+$/, '')\n}\n\nexport function getRelativePath(rootDir?: string | null, filePath?: string | null, platform: 'windows' | 'mac' | 'linux' = 'linux'): string {\n if (!rootDir || !filePath) {\n throw new Error(`Root and file should be filled in when retrieving the relativePath, ${rootDir || ''} ${filePath || ''}`)\n }\n\n const relativePath = relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const slashedPath = slash(relativePath, platform)\n\n if (slashedPath.startsWith('../')) {\n return slashedPath\n }\n\n return `./${slashedPath}`\n}\n","import ts from 'typescript'\nimport { getRelativePath, trimExtName } from '../fs.ts'\nimport path from 'node:path'\nimport { createFileParser } from './createFileParser.ts'\n\nconst { factory } = ts\n\ntype PrintOptions = {\n source?: string\n baseName?: string\n scriptKind?: ts.ScriptKind\n}\n\n/**\n * Escaped new lines in code with block comments so they can be restored by {@link restoreNewLines}\n */\nconst escapeNewLines = (code: string) => code.replace(/\\n\\n/g, '\\n/* :newline: */')\n\n/**\n * Reverses {@link escapeNewLines} and restores new lines\n */\nconst restoreNewLines = (code: string) => code.replace(/\\/\\* :newline: \\*\\//g, '\\n')\n\n/**\n * Convert AST TypeScript/TSX nodes to a string based on the TypeScript printer.\n * Ensures consistent output across environments.\n * Also works as a formatter when `source` is provided without `elements`.\n */\nexport function print(elements: Array<ts.Node> = [], { source = '', baseName = 'print.tsx', scriptKind = ts.ScriptKind.TSX }: PrintOptions = {}): string {\n const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, true, scriptKind)\n\n const printer = ts.createPrinter({\n omitTrailingSemicolon: true,\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n noEmitHelpers: true,\n })\n\n let output: string\n\n if (elements.length > 0) {\n // Print only provided nodes\n const nodes = elements.filter(Boolean).sort((a, b) => (a.pos ?? 0) - (b.pos ?? 0))\n output = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile)\n } else {\n // Format the whole file\n output = printer.printFile(sourceFile)\n }\n\n return restoreNewLines(output).replace(/\\r\\n/g, '\\n')\n}\n\nexport function createImport({\n name,\n path,\n root,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n root?: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n const resolvePath = root ? getRelativePath(root, path) : path\n\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(resolvePath),\n undefined,\n )\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n name.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(resolvePath),\n undefined,\n )\n}\n\nexport function createExport({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n name.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport const typeScriptParser = createFileParser({\n async print(file, options = { extname: '.ts' }) {\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n\n const importNodes = file.imports\n .map((item) => {\n const importPath = item.root ? getRelativePath(item.root, item.path) : item.path\n const hasExtname = !!path.extname(importPath)\n\n return createImport({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(importPath)}${options.extname}` : item.root ? trimExtName(importPath) : importPath,\n isTypeOnly: item.isTypeOnly,\n })\n })\n .filter(Boolean)\n\n const exportNodes = file.exports\n .map((item) => {\n const exportPath = item.path\n\n const hasExtname = !!path.extname(exportPath)\n\n return createExport({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(item.path)}${options.extname}` : trimExtName(item.path),\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n })\n .filter(Boolean)\n\n return [file.banner, print([...importNodes, ...exportNodes]), source, file.footer].join('\\n')\n },\n})\n"],"mappings":"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"}
@@ -21,14 +21,15 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
21
21
  }) : target, mod));
22
22
 
23
23
  //#endregion
24
- let typescript = require("typescript");
25
- typescript = __toESM(typescript);
24
+ const require_createFileParser = require('./createFileParser-BD8yn0LT.cjs');
26
25
  let node_path = require("node:path");
27
26
  node_path = __toESM(node_path);
28
27
  let fs_extra = require("fs-extra");
29
28
  fs_extra = __toESM(fs_extra);
30
29
  let js_runtime = require("js-runtime");
31
30
  js_runtime = __toESM(js_runtime);
31
+ let typescript = require("typescript");
32
+ typescript = __toESM(typescript);
32
33
 
33
34
  //#region src/fs.ts
34
35
  async function write(path$1, data, options = {}) {
@@ -142,7 +143,7 @@ function createExport({ path: path$1, asAlias, isTypeOnly = false, name }) {
142
143
  return factory.createExportSpecifier(false, void 0, typeof propertyName === "string" ? factory.createIdentifier(propertyName) : propertyName);
143
144
  })), factory.createStringLiteral(path$1), void 0);
144
145
  }
145
- const typeScriptParser = createFileParser({ async print(file, options = { extname: ".ts" }) {
146
+ const typeScriptParser = require_createFileParser.createFileParser({ async print(file, options = { extname: ".ts" }) {
146
147
  const source = file.sources.map((item) => item.value).join("\n\n");
147
148
  const importNodes = file.imports.map((item) => {
148
149
  const importPath = item.root ? getRelativePath(item.root, item.path) : item.path;
@@ -171,37 +172,6 @@ const typeScriptParser = createFileParser({ async print(file, options = { extnam
171
172
  ].join("\n");
172
173
  } });
173
174
 
174
- //#endregion
175
- //#region src/parsers/tsx.ts
176
- const tsxParser = createFileParser({ async print(file, options = { extname: ".tsx" }) {
177
- return typeScriptParser.print(file, options);
178
- } });
179
-
180
- //#endregion
181
- //#region src/parsers/parser.ts
182
- function createFileParser(parser) {
183
- return parser;
184
- }
185
- const defaultParser = createFileParser({ async print(file) {
186
- return file.sources.map((item) => item.value).join("\n\n");
187
- } });
188
- const parsers = {
189
- ".ts": typeScriptParser,
190
- ".js": typeScriptParser,
191
- ".jsx": tsxParser,
192
- ".tsx": tsxParser,
193
- ".json": defaultParser
194
- };
195
- async function parseFile(file, { extname } = {}) {
196
- async function getFileParser(extname$1) {
197
- if (!extname$1) return defaultParser;
198
- const parser = parsers[extname$1];
199
- if (!parser) console.warn(`[parser] No parser found for ${extname$1}, default parser will be used`);
200
- return parser || defaultParser;
201
- }
202
- return (await getFileParser(file.extname)).print(file, { extname });
203
- }
204
-
205
175
  //#endregion
206
176
  Object.defineProperty(exports, '__toESM', {
207
177
  enumerable: true,
@@ -221,12 +191,6 @@ Object.defineProperty(exports, 'createImport', {
221
191
  return createImport;
222
192
  }
223
193
  });
224
- Object.defineProperty(exports, 'parseFile', {
225
- enumerable: true,
226
- get: function () {
227
- return parseFile;
228
- }
229
- });
230
194
  Object.defineProperty(exports, 'print', {
231
195
  enumerable: true,
232
196
  get: function () {
@@ -239,12 +203,6 @@ Object.defineProperty(exports, 'trimExtName', {
239
203
  return trimExtName;
240
204
  }
241
205
  });
242
- Object.defineProperty(exports, 'tsxParser', {
243
- enumerable: true,
244
- get: function () {
245
- return tsxParser;
246
- }
247
- });
248
206
  Object.defineProperty(exports, 'typeScriptParser', {
249
207
  enumerable: true,
250
208
  get: function () {
@@ -257,4 +215,4 @@ Object.defineProperty(exports, 'write', {
257
215
  return write;
258
216
  }
259
217
  });
260
- //# sourceMappingURL=parser-QF8j8-pj.cjs.map
218
+ //# sourceMappingURL=typescript-Z90jN87k.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript-Z90jN87k.cjs","names":["fs","path","data","ts","output: string","path","importPropertyName: ts.Identifier | undefined","importName: ts.NamedImportBindings | undefined","createFileParser"],"sources":["../src/fs.ts","../src/parsers/typescript.ts"],"sourcesContent":["import { normalize, relative, resolve } from 'node:path'\nimport fs from 'fs-extra'\nimport { switcher } from 'js-runtime'\n\ntype Options = { sanity?: boolean }\n\nexport async function write(path: string, data: string, options: Options = {}): Promise<string | undefined> {\n if (data.trim() === '') {\n return undefined\n }\n return 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 )(path, data.trim(), options)\n}\n\nexport async function read(path: string): Promise<string> {\n return switcher(\n {\n node: async (path: string) => {\n return fs.readFile(path, { encoding: 'utf8' })\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.text()\n },\n },\n 'node',\n )(path)\n}\n\nexport function readSync(path: string): string {\n return switcher(\n {\n node: (path: string) => {\n return fs.readFileSync(path, { encoding: 'utf8' })\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n )(path)\n}\n\nexport async function exists(path: string): Promise<boolean> {\n return switcher(\n {\n node: async (path: string) => {\n return fs.pathExists(path)\n },\n bun: async (path: string) => {\n const file = Bun.file(path)\n\n return file.exists()\n },\n },\n 'node',\n )(path)\n}\n\nexport function existsSync(path: string): boolean {\n return switcher(\n {\n node: (path: string) => {\n return fs.pathExistsSync(path)\n },\n bun: () => {\n throw new Error('Bun cannot read sync')\n },\n },\n 'node',\n )(path)\n}\n\nexport async function clean(path: string): Promise<void> {\n return fs.remove(path)\n}\n\nexport async function unlink(path: string): Promise<void> {\n return fs.unlink(path)\n}\n\nfunction slash(path: string, platform: 'windows' | 'mac' | 'linux' = 'linux') {\n const isWindowsPath = /^\\\\\\\\\\?\\\\/.test(path)\n const normalizedPath = normalize(path)\n\n if (['linux', 'mac'].includes(platform) && !isWindowsPath) {\n // linux and mac\n return normalizedPath.replaceAll(/\\\\/g, '/').replace('../', '')\n }\n\n // windows\n return normalizedPath.replaceAll(/\\\\/g, '/').replace('../', '')\n}\n\nexport function trimExtName(text: string): string {\n return text.replace(/\\.[^/.]+$/, '')\n}\n\nexport function getRelativePath(rootDir?: string | null, filePath?: string | null, platform: 'windows' | 'mac' | 'linux' = 'linux'): string {\n if (!rootDir || !filePath) {\n throw new Error(`Root and file should be filled in when retrieving the relativePath, ${rootDir || ''} ${filePath || ''}`)\n }\n\n const relativePath = relative(rootDir, filePath)\n\n // On Windows, paths are separated with a \"\\\"\n // However, web browsers use \"/\" no matter the platform\n const slashedPath = slash(relativePath, platform)\n\n if (slashedPath.startsWith('../')) {\n return slashedPath\n }\n\n return `./${slashedPath}`\n}\n","import ts from 'typescript'\nimport { getRelativePath, trimExtName } from '../fs.ts'\nimport path from 'node:path'\nimport { createFileParser } from './createFileParser.ts'\n\nconst { factory } = ts\n\ntype PrintOptions = {\n source?: string\n baseName?: string\n scriptKind?: ts.ScriptKind\n}\n\n/**\n * Escaped new lines in code with block comments so they can be restored by {@link restoreNewLines}\n */\nconst escapeNewLines = (code: string) => code.replace(/\\n\\n/g, '\\n/* :newline: */')\n\n/**\n * Reverses {@link escapeNewLines} and restores new lines\n */\nconst restoreNewLines = (code: string) => code.replace(/\\/\\* :newline: \\*\\//g, '\\n')\n\n/**\n * Convert AST TypeScript/TSX nodes to a string based on the TypeScript printer.\n * Ensures consistent output across environments.\n * Also works as a formatter when `source` is provided without `elements`.\n */\nexport function print(elements: Array<ts.Node> = [], { source = '', baseName = 'print.tsx', scriptKind = ts.ScriptKind.TSX }: PrintOptions = {}): string {\n const sourceFile = ts.createSourceFile(baseName, escapeNewLines(source), ts.ScriptTarget.ES2022, true, scriptKind)\n\n const printer = ts.createPrinter({\n omitTrailingSemicolon: true,\n newLine: ts.NewLineKind.LineFeed,\n removeComments: false,\n noEmitHelpers: true,\n })\n\n let output: string\n\n if (elements.length > 0) {\n // Print only provided nodes\n const nodes = elements.filter(Boolean).sort((a, b) => (a.pos ?? 0) - (b.pos ?? 0))\n output = printer.printList(ts.ListFormat.MultiLine, factory.createNodeArray(nodes), sourceFile)\n } else {\n // Format the whole file\n output = printer.printFile(sourceFile)\n }\n\n return restoreNewLines(output).replace(/\\r\\n/g, '\\n')\n}\n\nexport function createImport({\n name,\n path,\n root,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n root?: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n const resolvePath = root ? getRelativePath(root, path) : path\n\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined\n\n if (isNameSpace) {\n importPropertyName = undefined\n importName = factory.createNamespaceImport(factory.createIdentifier(name))\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(isTypeOnly, importPropertyName, importName),\n factory.createStringLiteral(resolvePath),\n undefined,\n )\n }\n\n return factory.createImportDeclaration(\n undefined,\n factory.createImportClause(\n isTypeOnly,\n undefined,\n factory.createNamedImports(\n name.map((item) => {\n if (typeof item === 'object') {\n const obj = item as { propertyName: string; name?: string }\n if (obj.name) {\n return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(obj.propertyName))\n }\n\n return factory.createImportSpecifier(false, undefined, factory.createIdentifier(item))\n }),\n ),\n ),\n factory.createStringLiteral(resolvePath),\n undefined,\n )\n}\n\nexport function createExport({\n path,\n asAlias,\n isTypeOnly = false,\n name,\n}: {\n path: string\n asAlias?: boolean\n isTypeOnly?: boolean\n name?: string | Array<ts.Identifier | string>\n}) {\n if (name && !Array.isArray(name) && !asAlias) {\n console.warn(`When using name as string, asAlias should be true ${name}`)\n }\n\n if (!Array.isArray(name)) {\n const parsedName = name?.match(/^\\d/) ? `_${name?.slice(1)}` : name\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : undefined,\n factory.createStringLiteral(path),\n undefined,\n )\n }\n\n return factory.createExportDeclaration(\n undefined,\n isTypeOnly,\n factory.createNamedExports(\n name.map((propertyName) => {\n return factory.createExportSpecifier(false, undefined, typeof propertyName === 'string' ? factory.createIdentifier(propertyName) : propertyName)\n }),\n ),\n factory.createStringLiteral(path),\n undefined,\n )\n}\n\nexport const typeScriptParser = createFileParser({\n async print(file, options = { extname: '.ts' }) {\n const source = file.sources.map((item) => item.value).join('\\n\\n')\n\n const importNodes = file.imports\n .map((item) => {\n const importPath = item.root ? getRelativePath(item.root, item.path) : item.path\n const hasExtname = !!path.extname(importPath)\n\n return createImport({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(importPath)}${options.extname}` : item.root ? trimExtName(importPath) : importPath,\n isTypeOnly: item.isTypeOnly,\n })\n })\n .filter(Boolean)\n\n const exportNodes = file.exports\n .map((item) => {\n const exportPath = item.path\n\n const hasExtname = !!path.extname(exportPath)\n\n return createExport({\n name: item.name,\n path: options.extname && hasExtname ? `${trimExtName(item.path)}${options.extname}` : trimExtName(item.path),\n isTypeOnly: item.isTypeOnly,\n asAlias: item.asAlias,\n })\n })\n .filter(Boolean)\n\n return [file.banner, print([...importNodes, ...exportNodes]), source, file.footer].join('\\n')\n },\n})\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/fabric-core",
3
- "version": "0.0.0-canary-20251021083045",
3
+ "version": "0.0.0-canary-20251021135548",
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",
@@ -26,6 +26,10 @@
26
26
  "import": "./dist/index.js",
27
27
  "require": "./dist/index.cjs"
28
28
  },
29
+ "./parsers/default": {
30
+ "import": "./dist/parsers/default.js",
31
+ "require": "./dist/parsers/default.cjs"
32
+ },
29
33
  "./parsers/tsx": {
30
34
  "import": "./dist/parsers/tsx.js",
31
35
  "require": "./dist/parsers/tsx.cjs"
@@ -34,6 +38,10 @@
34
38
  "import": "./dist/parsers/typescript.js",
35
39
  "require": "./dist/parsers/typescript.cjs"
36
40
  },
41
+ "./types": {
42
+ "import": "./dist/types.js",
43
+ "require": "./dist/types.cjs"
44
+ },
37
45
  "./package.json": "./package.json"
38
46
  },
39
47
  "main": "./dist/index.cjs",
@@ -46,6 +54,12 @@
46
54
  ],
47
55
  "parsers/tsx": [
48
56
  "./dist/parsers/tsx.d.ts"
57
+ ],
58
+ "parsers/default": [
59
+ "./dist/parsers/default.d.ts"
60
+ ],
61
+ "types": [
62
+ "./dist/types.d.ts"
49
63
  ]
50
64
  }
51
65
  },