@kubb/core 3.0.0-alpha.0 → 3.0.0-alpha.10

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 (99) hide show
  1. package/dist/FileManager-BbUCeEyv.d.cts +469 -0
  2. package/dist/FileManager-CpuFz6eH.d.ts +469 -0
  3. package/dist/chunk-2EU7DMPM.js +97 -0
  4. package/dist/chunk-2EU7DMPM.js.map +1 -0
  5. package/dist/chunk-5E2I6KH4.cjs +1071 -0
  6. package/dist/chunk-5E2I6KH4.cjs.map +1 -0
  7. package/dist/{chunk-XRC6KXC3.cjs → chunk-A6PCLWEY.cjs} +5 -5
  8. package/dist/{chunk-XRC6KXC3.cjs.map → chunk-A6PCLWEY.cjs.map} +1 -1
  9. package/dist/chunk-DID47EQD.cjs +102 -0
  10. package/dist/chunk-DID47EQD.cjs.map +1 -0
  11. package/dist/chunk-HBQM723K.js +1063 -0
  12. package/dist/chunk-HBQM723K.js.map +1 -0
  13. package/dist/chunk-L6YLVCKM.js +929 -0
  14. package/dist/chunk-L6YLVCKM.js.map +1 -0
  15. package/dist/{chunk-XRUOSVKX.cjs → chunk-M7NLNCSM.cjs} +71 -38
  16. package/dist/chunk-M7NLNCSM.cjs.map +1 -0
  17. package/dist/{chunk-3OXCZ5DJ.js → chunk-MU3CBCQT.js} +59 -35
  18. package/dist/chunk-MU3CBCQT.js.map +1 -0
  19. package/dist/chunk-NB4JMN75.cjs +1548 -0
  20. package/dist/chunk-NB4JMN75.cjs.map +1 -0
  21. package/dist/chunk-SEH6NUCX.cjs +42 -0
  22. package/dist/chunk-SEH6NUCX.cjs.map +1 -0
  23. package/dist/index.cjs +496 -552
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.d.cts +9 -477
  26. package/dist/index.d.ts +9 -477
  27. package/dist/index.js +438 -492
  28. package/dist/index.js.map +1 -1
  29. package/dist/{logger-DChjnJMn.d.cts → logger-DvbHXjIO.d.cts} +29 -19
  30. package/dist/{logger-DChjnJMn.d.ts → logger-DvbHXjIO.d.ts} +29 -19
  31. package/dist/logger.cjs +4 -5
  32. package/dist/logger.cjs.map +1 -1
  33. package/dist/logger.d.cts +1 -2
  34. package/dist/logger.d.ts +1 -2
  35. package/dist/logger.js +2 -4
  36. package/dist/mocks.cjs +25 -19
  37. package/dist/mocks.cjs.map +1 -1
  38. package/dist/mocks.d.cts +6 -9
  39. package/dist/mocks.d.ts +6 -9
  40. package/dist/mocks.js +21 -16
  41. package/dist/mocks.js.map +1 -1
  42. package/dist/prompt-DVQN7JTN.cjs +760 -0
  43. package/dist/prompt-DVQN7JTN.cjs.map +1 -0
  44. package/dist/prompt-WQQUN22Z.js +754 -0
  45. package/dist/prompt-WQQUN22Z.js.map +1 -0
  46. package/dist/transformers.cjs +198 -42
  47. package/dist/transformers.cjs.map +1 -1
  48. package/dist/transformers.d.cts +1 -3
  49. package/dist/transformers.d.ts +1 -3
  50. package/dist/transformers.js +155 -14
  51. package/dist/transformers.js.map +1 -1
  52. package/dist/utils.cjs +12 -4
  53. package/dist/utils.cjs.map +1 -1
  54. package/dist/utils.d.cts +31 -3
  55. package/dist/utils.d.ts +31 -3
  56. package/dist/utils.js +11 -4
  57. package/package.json +11 -14
  58. package/src/BarrelManager.ts +93 -107
  59. package/src/{Generator.ts → BaseGenerator.ts} +1 -1
  60. package/src/FileManager.ts +198 -297
  61. package/src/PackageManager.ts +1 -1
  62. package/src/PluginManager.ts +152 -101
  63. package/src/__snapshots__/barrel.json +91 -0
  64. package/src/__snapshots__/grouped.json +114 -0
  65. package/src/__snapshots__/ordered.json +62 -0
  66. package/src/build.ts +86 -171
  67. package/src/errors.ts +0 -11
  68. package/src/index.ts +1 -5
  69. package/src/logger.ts +76 -34
  70. package/src/plugin.ts +3 -3
  71. package/src/transformers/index.ts +2 -3
  72. package/src/transformers/trim.ts +0 -4
  73. package/src/types.ts +35 -40
  74. package/src/utils/TreeNode.ts +132 -50
  75. package/src/utils/executeStrategies.ts +1 -1
  76. package/src/utils/index.ts +2 -1
  77. package/src/utils/parser.ts +157 -0
  78. package/dist/chunk-3OXCZ5DJ.js.map +0 -1
  79. package/dist/chunk-5JZNFPUP.js +0 -309
  80. package/dist/chunk-5JZNFPUP.js.map +0 -1
  81. package/dist/chunk-DKW7IBJV.cjs +0 -299
  82. package/dist/chunk-DKW7IBJV.cjs.map +0 -1
  83. package/dist/chunk-HMLY7DHA.js +0 -16
  84. package/dist/chunk-HMLY7DHA.js.map +0 -1
  85. package/dist/chunk-JKZG2IJR.js +0 -283
  86. package/dist/chunk-JKZG2IJR.js.map +0 -1
  87. package/dist/chunk-LKXUCYWU.cjs +0 -66
  88. package/dist/chunk-LKXUCYWU.cjs.map +0 -1
  89. package/dist/chunk-OPOT6TCT.cjs +0 -320
  90. package/dist/chunk-OPOT6TCT.cjs.map +0 -1
  91. package/dist/chunk-SA2GZKXS.js +0 -596
  92. package/dist/chunk-SA2GZKXS.js.map +0 -1
  93. package/dist/chunk-XRUOSVKX.cjs.map +0 -1
  94. package/dist/chunk-Y3LLJA4H.cjs +0 -1227
  95. package/dist/chunk-Y3LLJA4H.cjs.map +0 -1
  96. package/globals.d.ts +0 -49
  97. package/schema.json +0 -86
  98. package/src/kubb.ts +0 -11
  99. package/src/utils/getParser.ts +0 -17
@@ -1,29 +1,171 @@
1
1
  import {
2
+ transformReservedWord
3
+ } from "./chunk-2EU7DMPM.js";
4
+ import {
5
+ camelCase,
6
+ orderBy,
7
+ pascalCase,
8
+ pathCase
9
+ } from "./chunk-4X5FFJPJ.js";
10
+
11
+ // src/transformers/index.ts
12
+ import { merge } from "remeda";
13
+
14
+ // src/transformers/combineCodes.ts
15
+ function combineCodes(codes) {
16
+ return codes.join("\n");
17
+ }
18
+
19
+ // src/transformers/createJSDocBlockText.ts
20
+ function createJSDocBlockText({ comments }) {
21
+ const filteredComments = comments.filter(Boolean);
22
+ if (!filteredComments.length) {
23
+ return "";
24
+ }
25
+ return `/**
26
+ * ${filteredComments.join("\n * ")}
27
+ */`;
28
+ }
29
+
30
+ // src/transformers/escape.ts
31
+ function escape(text) {
32
+ return text ? text.replaceAll("`", "\\`") : "";
33
+ }
34
+ function jsStringEscape(input) {
35
+ return `${input}`.replace(/["'\\\n\r\u2028\u2029]/g, (character) => {
36
+ switch (character) {
37
+ case '"':
38
+ case "'":
39
+ case "\\":
40
+ return `\\${character}`;
41
+ case "\n":
42
+ return "\\n";
43
+ case "\r":
44
+ return "\\r";
45
+ case "\u2028":
46
+ return "\\u2028";
47
+ case "\u2029":
48
+ return "\\u2029";
49
+ default:
50
+ return "";
51
+ }
52
+ });
53
+ }
54
+
55
+ // src/transformers/indent.ts
56
+ function createIndent(size) {
57
+ return Array.from({ length: size + 1 }).join(" ");
58
+ }
59
+
60
+ // src/transformers/nameSorter.ts
61
+ function nameSorter(a, b) {
62
+ if (a.name < b.name) {
63
+ return -1;
64
+ }
65
+ if (a.name > b.name) {
66
+ return 1;
67
+ }
68
+ return 0;
69
+ }
70
+
71
+ // src/transformers/searchAndReplace.ts
72
+ function searchAndReplace(options) {
73
+ const { text, replaceBy, prefix = "", key } = options;
74
+ const searchValues = options.searchValues?.(prefix, key) || [
75
+ `${prefix}["${key}"]`,
76
+ `${prefix}['${key}']`,
77
+ `${prefix}[\`${key}\`]`,
78
+ `${prefix}"${key}"`,
79
+ `${prefix}'${key}'`,
80
+ `${prefix}\`${key}\``,
81
+ new RegExp(`${prefix}${key}`, "g")
82
+ ];
83
+ return searchValues.reduce((prev, searchValue) => {
84
+ return prev.toString().replaceAll(searchValue, replaceBy);
85
+ }, text);
86
+ }
87
+
88
+ // src/transformers/trim.ts
89
+ function trim(text) {
90
+ return text.replaceAll(/\n/g, "").trim();
91
+ }
92
+ function trimQuotes(text) {
93
+ if (text.match(/^"(.*)"$/)) {
94
+ return text.replace(/^"(.*)"$/, "$1");
95
+ }
96
+ if (text.match(/^'(.*)'$/)) {
97
+ return text.replace(/^'(.*)'$/, "$1");
98
+ }
99
+ if (text.match(/^`(.*)`$/)) {
100
+ return text.replace(/^`(.*)`$/, "$1");
101
+ }
102
+ return text;
103
+ }
104
+
105
+ // src/transformers/stringify.ts
106
+ function stringify(value) {
107
+ if (value === void 0 || value === null) {
108
+ return '""';
109
+ }
110
+ return JSON.stringify(trimQuotes(value.toString()));
111
+ }
112
+ function stringifyObject(value) {
113
+ const items = Object.entries(value).map(([key, value2]) => {
114
+ if (typeof value2 === "object") {
115
+ return `${key}: {
116
+ ${stringifyObject(value2)}
117
+ }`;
118
+ }
119
+ return `${key}: ${value2}`;
120
+ }).filter(Boolean);
121
+ return items.join(",\n");
122
+ }
123
+
124
+ // src/transformers/toRegExp.ts
125
+ function stringToRegex(text) {
126
+ const isStartWithSlash = text.startsWith("/");
127
+ const isEndWithSlash = text.endsWith("/");
128
+ return new RegExp(text.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : void 0));
129
+ }
130
+ function toRegExp(text) {
131
+ if (typeof text === "string") {
132
+ const source = trimQuotes(text);
133
+ return stringToRegex(source);
134
+ }
135
+ return stringToRegex(text.toString());
136
+ }
137
+ function toRegExpString(text, func = "RegExp") {
138
+ const isStartWithSlash = text.startsWith("/");
139
+ const isEndWithSlash = text.endsWith("/");
140
+ const regexp = `new ${func}('${jsStringEscape(text.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : void 0))}')`;
141
+ return regexp;
142
+ }
143
+
144
+ // src/transformers/index.ts
145
+ import { merge as merge2 } from "remeda";
146
+ var transformers_default = {
2
147
  combineCodes,
3
- createIndent,
4
- createJSDocBlockText,
5
148
  escape,
6
149
  jsStringEscape,
7
- merge,
150
+ createIndent,
151
+ transformReservedWord,
8
152
  nameSorter,
9
153
  searchAndReplace,
10
154
  stringify,
11
155
  stringifyObject,
12
156
  toRegExp,
13
157
  toRegExpString,
14
- transformReservedWord,
15
- transformers_default,
16
158
  trim,
17
- trimExtName,
18
- trimQuotes
19
- } from "./chunk-JKZG2IJR.js";
20
- import {
21
- camelCase,
159
+ trimQuotes,
160
+ JSDoc: {
161
+ createJSDocBlockText
162
+ },
22
163
  orderBy,
164
+ merge,
165
+ camelCase,
23
166
  pascalCase,
24
167
  pathCase
25
- } from "./chunk-4X5FFJPJ.js";
26
- import "./chunk-HMLY7DHA.js";
168
+ };
27
169
  export {
28
170
  camelCase,
29
171
  combineCodes,
@@ -32,7 +174,7 @@ export {
32
174
  transformers_default as default,
33
175
  escape,
34
176
  jsStringEscape,
35
- merge,
177
+ merge2 as merge,
36
178
  nameSorter,
37
179
  orderBy,
38
180
  pascalCase,
@@ -44,7 +186,6 @@ export {
44
186
  toRegExpString,
45
187
  transformReservedWord,
46
188
  trim,
47
- trimExtName,
48
189
  trimQuotes
49
190
  };
50
191
  //# sourceMappingURL=transformers.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
1
+ {"version":3,"sources":["../src/transformers/index.ts","../src/transformers/combineCodes.ts","../src/transformers/createJSDocBlockText.ts","../src/transformers/escape.ts","../src/transformers/indent.ts","../src/transformers/nameSorter.ts","../src/transformers/searchAndReplace.ts","../src/transformers/trim.ts","../src/transformers/stringify.ts","../src/transformers/toRegExp.ts"],"sourcesContent":["import { orderBy } from 'natural-orderby'\nimport { merge } from 'remeda'\n\nimport { camelCase, pascalCase, pathCase } from './casing.ts'\nimport { combineCodes } from './combineCodes.ts'\nimport { createJSDocBlockText } from './createJSDocBlockText.ts'\nimport { escape, jsStringEscape } from './escape.ts'\nimport { createIndent } from './indent.ts'\nimport { nameSorter } from './nameSorter.ts'\nimport { searchAndReplace } from './searchAndReplace.ts'\nimport { stringify, stringifyObject } from './stringify.ts'\nimport { toRegExp, toRegExpString } from './toRegExp.ts'\nimport { transformReservedWord } from './transformReservedWord.ts'\nimport { trim, trimQuotes } from './trim.ts'\n\nexport { camelCase, pascalCase, pathCase } from './casing.ts'\nexport { combineCodes } from './combineCodes.ts'\nexport { createJSDocBlockText } from './createJSDocBlockText.ts'\nexport { escape, jsStringEscape } from './escape.ts'\nexport { createIndent } from './indent.ts'\nexport { nameSorter } from './nameSorter.ts'\nexport { searchAndReplace } from './searchAndReplace.ts'\nexport { stringify, stringifyObject } from './stringify.ts'\nexport { toRegExp, toRegExpString } from './toRegExp.ts'\nexport { transformReservedWord } from './transformReservedWord.ts'\nexport { trim, trimQuotes } from './trim.ts'\nexport { merge } from 'remeda'\nexport { orderBy } from 'natural-orderby'\n\nexport default {\n combineCodes,\n escape,\n jsStringEscape,\n createIndent,\n transformReservedWord,\n nameSorter,\n searchAndReplace,\n stringify,\n stringifyObject,\n toRegExp,\n toRegExpString,\n trim,\n trimQuotes,\n JSDoc: {\n createJSDocBlockText,\n },\n orderBy,\n merge,\n camelCase,\n pascalCase,\n pathCase,\n} as const\n","export function combineCodes(codes: string[]): string {\n return codes.join('\\n')\n}\n","export function createJSDocBlockText({ comments }: { comments: Array<string> }): string {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return ''\n }\n\n return `/**\\n * ${filteredComments.join('\\n * ')}\\n */`\n}\n","export function escape(text?: string): string {\n return text ? text.replaceAll('`', '\\\\`') : ''\n}\n\n/**\n * Escape all characters not included in SingleStringCharacters and DoubleStringCharacters on\n * @link http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4\n * @link https://github.com/joliss/js-string-escape/blob/master/index.js\n */\n\nexport function jsStringEscape(input: any): string {\n return `${input}`.replace(/[\"'\\\\\\n\\r\\u2028\\u2029]/g, (character) => {\n switch (character) {\n case '\"':\n case \"'\":\n case '\\\\':\n return `\\\\${character}`\n // Four possible LineTerminator characters need to be escaped:\n case '\\n':\n return '\\\\n'\n case '\\r':\n return '\\\\r'\n case '\\u2028':\n return '\\\\u2028'\n case '\\u2029':\n return '\\\\u2029'\n default:\n return ''\n }\n })\n}\n\nexport function escapeStringRegexp(string: string) {\n if (typeof string !== 'string') {\n throw new TypeError('Expected a string')\n }\n\n // Escape characters with special meaning either inside or outside character sets.\n // Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n return string.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&').replace(/-/g, '\\\\x2d')\n}\n","export function createIndent(size: number): string {\n return Array.from({ length: size + 1 }).join(' ')\n}\n","export function nameSorter<T extends { name: string }>(a: T, b: T): 0 | 1 | -1 {\n if (a.name < b.name) {\n return -1\n }\n if (a.name > b.name) {\n return 1\n }\n return 0\n}\n","type Options = {\n text: string\n replaceBy: string\n prefix?: string\n key: string\n searchValues?: (prefix: string, key: string) => Array<RegExp | string>\n}\n\nexport function searchAndReplace(options: Options): string {\n const { text, replaceBy, prefix = '', key } = options\n\n const searchValues = options.searchValues?.(prefix, key) || [\n `${prefix}[\"${key}\"]`,\n `${prefix}['${key}']`,\n `${prefix}[\\`${key}\\`]`,\n `${prefix}\"${key}\"`,\n `${prefix}'${key}'`,\n `${prefix}\\`${key}\\``,\n new RegExp(`${prefix}${key}`, 'g'),\n ]\n\n return searchValues.reduce((prev, searchValue) => {\n return prev.toString().replaceAll(searchValue, replaceBy)\n }, text) as string\n}\n","export function trim(text: string): string {\n return text.replaceAll(/\\n/g, '').trim()\n}\n\nexport function trimQuotes(text: string): string {\n if (text.match(/^\"(.*)\"$/)) {\n return text.replace(/^\"(.*)\"$/, '$1')\n }\n if (text.match(/^'(.*)'$/)) {\n return text.replace(/^'(.*)'$/, '$1')\n }\n\n if (text.match(/^`(.*)`$/)) {\n return text.replace(/^`(.*)`$/, '$1')\n }\n\n return text\n}\n","import { trimQuotes } from './trim'\n\nexport function stringify(value: string | number | undefined): string {\n if (value === undefined || value === null) {\n return '\"\"'\n }\n\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\nexport function stringifyObject(value: object): string {\n const items = Object.entries(value)\n .map(([key, value]) => {\n if (typeof value === 'object') {\n return `${key}: {\n ${stringifyObject(value)}\n }`\n }\n\n return `${key}: ${value}`\n })\n .filter(Boolean)\n\n return items.join(',\\n')\n}\n","import { jsStringEscape } from './escape'\nimport { trimQuotes } from './trim'\n\nfunction stringToRegex(text: string) {\n const isStartWithSlash = text.startsWith('/')\n const isEndWithSlash = text.endsWith('/')\n\n return new RegExp(text.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : undefined))\n}\n\n/**\n * @experimental\n */\nexport function toRegExp(text: string | RegExp): RegExp {\n if (typeof text === 'string') {\n const source = trimQuotes(text)\n\n return stringToRegex(source)\n }\n\n return stringToRegex(text.toString())\n}\n\nexport function toRegExpString(text: string, func = 'RegExp'): string {\n const isStartWithSlash = text.startsWith('/')\n const isEndWithSlash = text.endsWith('/')\n\n const regexp = `new ${func}('${jsStringEscape(text.slice(isStartWithSlash ? 1 : 0, isEndWithSlash ? -1 : undefined))}')`\n\n return regexp\n}\n"],"mappings":"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","names":["value","merge"]}
package/dist/utils.cjs CHANGED
@@ -9,13 +9,13 @@
9
9
 
10
10
 
11
11
 
12
- var _chunkOPOT6TCTcjs = require('./chunk-OPOT6TCT.cjs');
13
- require('./chunk-XRC6KXC3.cjs');
14
- require('./chunk-LKXUCYWU.cjs');
15
12
 
16
13
 
17
14
 
18
15
 
16
+ var _chunkNB4JMN75cjs = require('./chunk-NB4JMN75.cjs');
17
+ require('./chunk-A6PCLWEY.cjs');
18
+ require('./chunk-SEH6NUCX.cjs');
19
19
 
20
20
 
21
21
 
@@ -23,5 +23,13 @@ require('./chunk-LKXUCYWU.cjs');
23
23
 
24
24
 
25
25
 
26
- exports.FunctionParams = _chunkOPOT6TCTcjs.FunctionParams; exports.URLPath = _chunkOPOT6TCTcjs.URLPath; exports.getParser = _chunkOPOT6TCTcjs.getParser; exports.getUniqueName = _chunkOPOT6TCTcjs.getUniqueName; exports.isPromise = _chunkOPOT6TCTcjs.isPromise; exports.isPromiseFulfilledResult = _chunkOPOT6TCTcjs.isPromiseFulfilledResult; exports.isPromiseRejectedResult = _chunkOPOT6TCTcjs.isPromiseRejectedResult; exports.renderTemplate = _chunkOPOT6TCTcjs.renderTemplate; exports.setUniqueName = _chunkOPOT6TCTcjs.setUniqueName; exports.timeout = _chunkOPOT6TCTcjs.timeout;
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+ exports.FunctionParams = _chunkNB4JMN75cjs.FunctionParams; exports.URLPath = _chunkNB4JMN75cjs.URLPath; exports.createFile = _chunkNB4JMN75cjs.createFile; exports.createFileExport = _chunkNB4JMN75cjs.createFileExport; exports.createFileImport = _chunkNB4JMN75cjs.createFileImport; exports.createFileParser = _chunkNB4JMN75cjs.createFileParser; exports.getFileParser = _chunkNB4JMN75cjs.getFileParser; exports.getUniqueName = _chunkNB4JMN75cjs.getUniqueName; exports.isPromise = _chunkNB4JMN75cjs.isPromise; exports.isPromiseFulfilledResult = _chunkNB4JMN75cjs.isPromiseFulfilledResult; exports.isPromiseRejectedResult = _chunkNB4JMN75cjs.isPromiseRejectedResult; exports.renderTemplate = _chunkNB4JMN75cjs.renderTemplate; exports.setUniqueName = _chunkNB4JMN75cjs.setUniqueName; exports.timeout = _chunkNB4JMN75cjs.timeout;
27
35
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/core/dist/utils.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,+jBAAC","file":"/home/runner/work/kubb/kubb/packages/core/dist/utils.cjs"}
1
+ {"version":3,"sources":["/home/runner/work/kubb/kubb/packages/core/dist/utils.cjs"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,wDAA6B;AAC7B,gCAA6B;AAC7B,gCAA6B;AAC7B;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACF,uzBAAC","file":"/home/runner/work/kubb/kubb/packages/core/dist/utils.cjs"}
package/dist/utils.d.cts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { PossiblePromise } from '@kubb/types';
2
- import * as _kubb_parser_ts from '@kubb/parser-ts';
2
+ import * as KubbFile from '@kubb/fs/types';
3
+ import { L as Logger } from './logger-DvbHXjIO.cjs';
4
+ import 'consola';
3
5
 
4
6
  type FunctionParamsASTWithoutType = {
5
7
  name?: string;
@@ -101,6 +103,32 @@ declare class URLPath {
101
103
  toURLPath(): string;
102
104
  }
103
105
 
104
- declare function getParser(language: string | undefined): Promise<typeof _kubb_parser_ts>;
106
+ /**
107
+ * Helper to create a file with name and id set
108
+ */
109
+ declare function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta>;
110
+ /**
111
+ * Helper to create a fileImport with extName set
112
+ */
113
+ declare function createFileImport(imp: KubbFile.Import): KubbFile.ResolvedImport;
114
+ /**
115
+ * Helper to create a fileExport with extName set
116
+ */
117
+ declare function createFileExport(exp: KubbFile.Export): KubbFile.ResolvedExport;
118
+ type ParserModule<TMeta extends object = object> = {
119
+ /**
120
+ * By default @kubb/react is used
121
+ */
122
+ render: (item: any) => any;
123
+ /**
124
+ * Convert a file to string
125
+ */
126
+ print: (file: KubbFile.ResolvedFile<TMeta>, options: PrintOptions) => Promise<string>;
127
+ };
128
+ declare function createFileParser<TMeta extends object = object>(parser: ParserModule<TMeta>): ParserModule<TMeta>;
129
+ type PrintOptions = {
130
+ logger?: Logger;
131
+ };
132
+ declare function getFileParser<TMeta extends object = object>(extName: KubbFile.Extname | undefined): Promise<ParserModule<TMeta>>;
105
133
 
106
- export { FunctionParams, type FunctionParamsAST, type URLObject, URLPath, getParser, getUniqueName, isPromise, isPromiseFulfilledResult, isPromiseRejectedResult, renderTemplate, setUniqueName, timeout };
134
+ export { FunctionParams, type FunctionParamsAST, type ParserModule, type URLObject, URLPath, createFile, createFileExport, createFileImport, createFileParser, getFileParser, getUniqueName, isPromise, isPromiseFulfilledResult, isPromiseRejectedResult, renderTemplate, setUniqueName, timeout };
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { PossiblePromise } from '@kubb/types';
2
- import * as _kubb_parser_ts from '@kubb/parser-ts';
2
+ import * as KubbFile from '@kubb/fs/types';
3
+ import { L as Logger } from './logger-DvbHXjIO.js';
4
+ import 'consola';
3
5
 
4
6
  type FunctionParamsASTWithoutType = {
5
7
  name?: string;
@@ -101,6 +103,32 @@ declare class URLPath {
101
103
  toURLPath(): string;
102
104
  }
103
105
 
104
- declare function getParser(language: string | undefined): Promise<typeof _kubb_parser_ts>;
106
+ /**
107
+ * Helper to create a file with name and id set
108
+ */
109
+ declare function createFile<TMeta extends object = object>(file: KubbFile.File<TMeta>): KubbFile.ResolvedFile<TMeta>;
110
+ /**
111
+ * Helper to create a fileImport with extName set
112
+ */
113
+ declare function createFileImport(imp: KubbFile.Import): KubbFile.ResolvedImport;
114
+ /**
115
+ * Helper to create a fileExport with extName set
116
+ */
117
+ declare function createFileExport(exp: KubbFile.Export): KubbFile.ResolvedExport;
118
+ type ParserModule<TMeta extends object = object> = {
119
+ /**
120
+ * By default @kubb/react is used
121
+ */
122
+ render: (item: any) => any;
123
+ /**
124
+ * Convert a file to string
125
+ */
126
+ print: (file: KubbFile.ResolvedFile<TMeta>, options: PrintOptions) => Promise<string>;
127
+ };
128
+ declare function createFileParser<TMeta extends object = object>(parser: ParserModule<TMeta>): ParserModule<TMeta>;
129
+ type PrintOptions = {
130
+ logger?: Logger;
131
+ };
132
+ declare function getFileParser<TMeta extends object = object>(extName: KubbFile.Extname | undefined): Promise<ParserModule<TMeta>>;
105
133
 
106
- export { FunctionParams, type FunctionParamsAST, type URLObject, URLPath, getParser, getUniqueName, isPromise, isPromiseFulfilledResult, isPromiseRejectedResult, renderTemplate, setUniqueName, timeout };
134
+ export { FunctionParams, type FunctionParamsAST, type ParserModule, type URLObject, URLPath, createFile, createFileExport, createFileImport, createFileParser, getFileParser, getUniqueName, isPromise, isPromiseFulfilledResult, isPromiseRejectedResult, renderTemplate, setUniqueName, timeout };
package/dist/utils.js CHANGED
@@ -1,7 +1,11 @@
1
1
  import {
2
2
  FunctionParams,
3
3
  URLPath,
4
- getParser,
4
+ createFile,
5
+ createFileExport,
6
+ createFileImport,
7
+ createFileParser,
8
+ getFileParser,
5
9
  getUniqueName,
6
10
  isPromise,
7
11
  isPromiseFulfilledResult,
@@ -9,13 +13,16 @@ import {
9
13
  renderTemplate,
10
14
  setUniqueName,
11
15
  timeout
12
- } from "./chunk-5JZNFPUP.js";
16
+ } from "./chunk-L6YLVCKM.js";
13
17
  import "./chunk-4X5FFJPJ.js";
14
- import "./chunk-HMLY7DHA.js";
15
18
  export {
16
19
  FunctionParams,
17
20
  URLPath,
18
- getParser,
21
+ createFile,
22
+ createFileExport,
23
+ createFileImport,
24
+ createFileParser,
25
+ getFileParser,
19
26
  getUniqueName,
20
27
  isPromise,
21
28
  isPromiseFulfilledResult,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubb/core",
3
- "version": "3.0.0-alpha.0",
3
+ "version": "3.0.0-alpha.10",
4
4
  "description": "Generator core",
5
5
  "keywords": [
6
6
  "typescript",
@@ -44,9 +44,6 @@
44
44
  "default": "./dist/mocks.cjs"
45
45
  },
46
46
  "./package.json": "./package.json",
47
- "./globals": {
48
- "types": "./globals.d.ts"
49
- },
50
47
  "./*": "./*"
51
48
  },
52
49
  "main": "dist/index.cjs",
@@ -79,31 +76,31 @@
79
76
  ],
80
77
  "dependencies": {
81
78
  "change-case": "^5.4.4",
82
- "directory-tree": "^3.5.2",
83
79
  "find-up": "^7.0.0",
84
80
  "natural-orderby": "^3.0.2",
81
+ "object-hash": "^3.0.0",
85
82
  "p-queue": "^8.0.1",
86
- "remeda": "^2.10.1",
83
+ "remeda": "^2.11.0",
87
84
  "seedrandom": "^3.0.5",
88
85
  "semver": "^7.6.3",
89
86
  "unraw": "^3.0.0",
90
- "@kubb/fs": "3.0.0-alpha.0",
91
- "@kubb/parser-ts": "3.0.0-alpha.0",
92
- "@kubb/types": "3.0.0-alpha.0"
87
+ "@kubb/fs": "3.0.0-alpha.10",
88
+ "@kubb/parser-ts": "3.0.0-alpha.10",
89
+ "@kubb/types": "3.0.0-alpha.10"
93
90
  },
94
91
  "devDependencies": {
95
- "@types/react": "^18.3.3",
92
+ "@types/object-hash": "^3.0.6",
93
+ "@types/react": "^18.3.5",
96
94
  "@types/seedrandom": "^3.0.8",
97
95
  "@types/semver": "^7.5.8",
98
96
  "consola": "^3.2.3",
99
- "ora": "^8.0.1",
100
97
  "prettier": "^3.3.3",
101
98
  "tinyrainbow": "^1.2.0",
102
99
  "tsup": "^8.2.4",
103
100
  "typescript": "^5.5.4",
104
- "@kubb/config-biome": "3.0.0-alpha.0",
105
- "@kubb/config-ts": "3.0.0-alpha.0",
106
- "@kubb/config-tsup": "3.0.0-alpha.0"
101
+ "@kubb/config-biome": "3.0.0-alpha.10",
102
+ "@kubb/config-ts": "3.0.0-alpha.10",
103
+ "@kubb/config-tsup": "3.0.0-alpha.10"
107
104
  },
108
105
  "engines": {
109
106
  "node": ">=20"
@@ -1,20 +1,14 @@
1
- import { getExports } from '@kubb/parser-ts'
1
+ import { join } from 'node:path'
2
2
 
3
- import path from 'node:path'
4
-
5
- import { trimExtName } from './transformers/trim.ts'
6
3
  import { TreeNode } from './utils/TreeNode.ts'
7
4
 
5
+ import { getRelativePath } from '@kubb/fs'
8
6
  import type * as KubbFile from '@kubb/fs/types'
9
- import type { DirectoryTreeOptions } from 'directory-tree'
7
+ import type { Logger } from './logger.ts'
8
+ import type { FileMetaBase } from './FileManager.ts'
10
9
 
11
10
  export type BarrelManagerOptions = {
12
- treeNode?: DirectoryTreeOptions
13
- isTypeOnly?: boolean
14
- /**
15
- * Add .ts or .js
16
- */
17
- extName?: KubbFile.Extname
11
+ logger?: Logger
18
12
  }
19
13
 
20
14
  export class BarrelManager {
@@ -26,116 +20,108 @@ export class BarrelManager {
26
20
  return this
27
21
  }
28
22
 
29
- getNamedExport(root: string, item: KubbFile.Export): KubbFile.Export[] {
30
- const exportedNames = getExports(path.resolve(root, item.path))
31
-
32
- if (!exportedNames) {
33
- return [item]
34
- }
35
-
36
- return exportedNames.reduce(
37
- (prev, curr) => {
38
- if (!prev[0]?.name || !prev[1]?.name) {
39
- return prev
40
- }
41
-
42
- if (curr.isTypeOnly) {
43
- prev[1] = { ...prev[1], name: [...prev[1].name, curr.name] }
44
- } else {
45
- prev[0] = { ...prev[0], name: [...prev[0].name, curr.name] }
46
- }
47
-
48
- return prev
49
- },
50
- [
51
- {
52
- ...item,
53
- name: [],
54
- isTypeOnly: false,
55
- },
56
- {
57
- ...item,
58
- name: [],
59
- isTypeOnly: true,
60
- },
61
- ] as KubbFile.Export[],
62
- )
63
- }
23
+ getFiles({ files: generatedFiles, root, meta }: { files: KubbFile.File[]; root?: string; meta?: FileMetaBase | undefined }): Array<KubbFile.File> {
24
+ const { logger } = this.#options
64
25
 
65
- getNamedExports(root: string, exports: KubbFile.Export[]): KubbFile.Export[] {
66
- return exports?.flatMap((item) => {
67
- return this.getNamedExport(root, item)
68
- })
69
- }
26
+ const cachedFiles = new Map<KubbFile.Path, KubbFile.File>()
70
27
 
71
- getIndexes(root: string): Array<KubbFile.File> | null {
72
- const { treeNode = {}, isTypeOnly, extName } = this.#options
73
- const tree = TreeNode.build(root, treeNode)
28
+ logger?.emit('debug', { date: new Date(), logs: [`Start barrel generation for pluginKey ${meta?.pluginKey?.join('.')} and root '${root}'`] })
74
29
 
75
- if (!tree) {
76
- return null
77
- }
30
+ TreeNode.build(generatedFiles, root)?.forEach((treeNode) => {
31
+ if (!treeNode || !treeNode.children || !treeNode.parent?.data.path) {
32
+ return undefined
33
+ }
78
34
 
79
- const fileReducer = (files: Array<KubbFile.File>, treeNode: TreeNode) => {
80
- if (!treeNode.children) {
81
- return []
35
+ const barrelFile: KubbFile.File = {
36
+ path: join(treeNode.parent?.data.path, 'index.ts') as KubbFile.Path,
37
+ baseName: 'index.ts',
38
+ exports: [],
39
+ sources: [],
82
40
  }
41
+ const previousBarrelFile = cachedFiles.get(barrelFile.path)
42
+ const leaves = treeNode.leaves
83
43
 
84
- if (treeNode.children.length > 1) {
85
- const indexPath: KubbFile.Path = path.resolve(treeNode.data.path, 'index.ts')
44
+ leaves.forEach((item) => {
45
+ if (!item.data.name) {
46
+ return undefined
47
+ }
86
48
 
87
- const exports: Array<KubbFile.Export> = treeNode.children
88
- .filter(Boolean)
89
- .map((file) => {
90
- const importPath: string = file.data.type === 'split' ? `./${file.data.name}/index` : `./${trimExtName(file.data.name)}`
49
+ const sources = item.data.file?.sources || []
91
50
 
92
- if (importPath.endsWith('index') && file.data.type === 'single') {
93
- return undefined
94
- }
51
+ if (!sources.some((source) => source.isIndexable)) {
52
+ logger?.emit(
53
+ 'warning',
54
+ `No isIndexable source found(source should have a name and isIndexable):\nFile: ${JSON.stringify(item.data.file, undefined, 2)}`,
55
+ )
56
+ }
95
57
 
96
- return {
97
- path: extName ? `${importPath}${extName}` : importPath,
98
- isTypeOnly,
99
- } as KubbFile.Export
58
+ sources.forEach((source) => {
59
+ if (!item.data.file?.path || !source.isIndexable || !source.name) {
60
+ return undefined
61
+ }
62
+ const alreadyContainInPreviousBarrelFile = previousBarrelFile?.sources.some((item) => item.name === source.name)
63
+
64
+ if (alreadyContainInPreviousBarrelFile) {
65
+ return undefined
66
+ }
67
+
68
+ if (!barrelFile.exports) {
69
+ barrelFile.exports = []
70
+ }
71
+
72
+ // true when we have a subdirectory that also contains barrel files
73
+ const isSubExport = !!treeNode.parent?.data.path?.split?.('/')?.length
74
+
75
+ if (isSubExport) {
76
+ barrelFile.exports.push({
77
+ name: [source.name],
78
+ path: getRelativePath(treeNode.parent?.data.path, item.data.path),
79
+ isTypeOnly: source.isTypeOnly,
80
+ })
81
+ } else {
82
+ barrelFile.exports.push({
83
+ name: [source.name],
84
+ path: `./${item.data.file.baseName}`,
85
+ isTypeOnly: source.isTypeOnly,
86
+ })
87
+ }
88
+
89
+ barrelFile.sources.push({
90
+ name: source.name,
91
+ isTypeOnly: source.isTypeOnly,
92
+ //TODO use parser to generate import
93
+ value: '',
94
+ isExportable: false,
95
+ isIndexable: false,
100
96
  })
101
- .filter(Boolean)
102
-
103
- files.push({
104
- path: indexPath,
105
- baseName: 'index.ts',
106
- source: '',
107
- exports,
108
- exportable: true,
109
97
  })
110
- } else if (treeNode.children.length === 1) {
111
- const [treeNodeChild] = treeNode.children as [TreeNode]
112
-
113
- const indexPath = path.resolve(treeNode.data.path, 'index.ts')
114
- const importPath = treeNodeChild.data.type === 'split' ? `./${treeNodeChild.data.name}/index` : `./${trimExtName(treeNodeChild.data.name)}`
115
-
116
- const exports = [
117
- {
118
- path: extName ? `${importPath}${extName}` : importPath,
119
- isTypeOnly,
120
- },
121
- ]
122
-
123
- files.push({
124
- path: indexPath,
125
- baseName: 'index.ts',
126
- source: '',
127
- exports,
128
- exportable: true,
129
- })
130
- }
98
+ })
99
+
100
+ logger?.emit('debug', {
101
+ date: new Date(),
102
+ logs: [
103
+ `Generating barrelFile '${getRelativePath(root, barrelFile.path)}' for '${getRelativePath(root, treeNode.data?.path)}' with ${barrelFile.sources.length} indexable exports: '${barrelFile.sources?.map((source) => source.name).join(', ')}'`,
104
+ ],
105
+ })
131
106
 
132
- treeNode.children.forEach((childItem) => {
133
- fileReducer(files, childItem)
107
+ logger?.emit('debug', {
108
+ date: new Date(),
109
+ logs: [
110
+ `Generated barrelFile '${getRelativePath(root, barrelFile.path)}' for '${getRelativePath(root, treeNode.data?.path)}' with exports: '${cachedFiles
111
+ .get(barrelFile.path)
112
+ ?.sources?.map((source) => source.name)
113
+ .join(', ')}'`,
114
+ ],
134
115
  })
135
116
 
136
- return files
137
- }
117
+ if (previousBarrelFile) {
118
+ previousBarrelFile.sources.push(...barrelFile.sources)
119
+ previousBarrelFile.exports?.push(...(barrelFile.exports || []))
120
+ } else {
121
+ cachedFiles.set(barrelFile.path, barrelFile)
122
+ }
123
+ })
138
124
 
139
- return fileReducer([], tree).reverse()
125
+ return [...cachedFiles.values()]
140
126
  }
141
127
  }