@kubb/parser-ts 0.0.0-canary-20240507120838
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +43 -0
- package/dist/chunk-O7GB3MTG.js +453 -0
- package/dist/chunk-O7GB3MTG.js.map +1 -0
- package/dist/chunk-SCIDO3JK.cjs +453 -0
- package/dist/chunk-SCIDO3JK.cjs.map +1 -0
- package/dist/factory-DE8g6o05.d.cts +165 -0
- package/dist/factory-DE8g6o05.d.ts +165 -0
- package/dist/factory.cjs +59 -0
- package/dist/factory.cjs.map +1 -0
- package/dist/factory.d.cts +2 -0
- package/dist/factory.d.ts +2 -0
- package/dist/factory.js +59 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.cjs +77 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +26 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/package.json +80 -0
- package/src/api.ts +49 -0
- package/src/factory.ts +553 -0
- package/src/index.ts +5 -0
- package/src/parse.ts +15 -0
- package/src/print.ts +54 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Stijn Van Hulle
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
<!-- <img src="assets/logo.png" alt="logo" width="200" height="auto" /> -->
|
|
4
|
+
<h1>@kubb/parser-ts</h1>
|
|
5
|
+
|
|
6
|
+
<p>
|
|
7
|
+
TypeScript parser
|
|
8
|
+
</p>
|
|
9
|
+
<img src="https://raw.githubusercontent.com/kubb-labs/kubb/main/assets/banner.png" alt="logo" height="auto" />
|
|
10
|
+
|
|
11
|
+
[![npm version][npm-version-src]][npm-version-href]
|
|
12
|
+
[![npm downloads][npm-downloads-src]][npm-downloads-href]
|
|
13
|
+
[![Coverage][coverage-src]][coverage-href]
|
|
14
|
+
[![License][license-src]][license-href]
|
|
15
|
+
|
|
16
|
+
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
|
|
17
|
+
<!-- ALL-CONTRIBUTORS-BADGE:END -->
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
<h4>
|
|
21
|
+
<a href="https://codesandbox.io/s/github/kubb-labs/kubb/tree/alpha/examples/typescript" target="_blank">View Demo</a>
|
|
22
|
+
<span> · </span>
|
|
23
|
+
<a href="https://kubb.dev/" target="_blank">Documentation</a>
|
|
24
|
+
<span> · </span>
|
|
25
|
+
<a href="https://github.com/kubb-labs/kubb/issues/" target="_blank">Report Bug</a>
|
|
26
|
+
<span> · </span>
|
|
27
|
+
<a href="https://github.com/kubb-labs/kubb/issues/" target="_blank">Request Feature</a>
|
|
28
|
+
</h4>
|
|
29
|
+
</div>
|
|
30
|
+
<!-- Badges -->
|
|
31
|
+
|
|
32
|
+
[npm-version-src]: https://img.shields.io/npm/v/@kubb/parser-ts?flat&colorA=18181B&colorB=f58517
|
|
33
|
+
[npm-version-href]: https://npmjs.com/package/@kubb/parser-ts
|
|
34
|
+
[npm-downloads-src]: https://img.shields.io/npm/dm/@kubb/parser-ts?flat&colorA=18181B&colorB=f58517
|
|
35
|
+
[npm-downloads-href]: https://npmjs.com/package/@kubb/parser-ts
|
|
36
|
+
[license-src]: https://img.shields.io/github/license/kubb-labs/kubb.svg?flat&colorA=18181B&colorB=f58517
|
|
37
|
+
[license-href]: https://github.com/kubb-labs/kubb/blob/main/LICENSE
|
|
38
|
+
[build-src]: https://img.shields.io/github/actions/workflow/status/kubb-labs/kubb/ci.yaml?style=flat&colorA=18181B&colorB=f58517
|
|
39
|
+
[build-href]: https://www.npmjs.com/package/@kubb/parser-ts
|
|
40
|
+
[minified-src]: https://img.shields.io/bundlephobia/min/@kubb/parser-ts?style=flat&colorA=18181B&colorB=f58517
|
|
41
|
+
[minified-href]: https://www.npmjs.com/package/@kubb/parser-ts
|
|
42
|
+
[coverage-src]: https://img.shields.io/codecov/c/github/kubb-labs/kubb?style=flat&colorA=18181B&colorB=f58517
|
|
43
|
+
[coverage-href]: https://www.npmjs.com/package/@kubb/parser-ts
|
|
@@ -0,0 +1,453 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
// src/factory.ts
|
|
8
|
+
var factory_exports = {};
|
|
9
|
+
__export(factory_exports, {
|
|
10
|
+
appendJSDocToNode: () => appendJSDocToNode,
|
|
11
|
+
createArrayDeclaration: () => createArrayDeclaration,
|
|
12
|
+
createArrayTypeNode: () => createArrayTypeNode,
|
|
13
|
+
createEnumDeclaration: () => createEnumDeclaration,
|
|
14
|
+
createExportDeclaration: () => createExportDeclaration,
|
|
15
|
+
createIdentifier: () => createIdentifier,
|
|
16
|
+
createImportDeclaration: () => createImportDeclaration,
|
|
17
|
+
createIndexSignature: () => createIndexSignature,
|
|
18
|
+
createIntersectionDeclaration: () => createIntersectionDeclaration,
|
|
19
|
+
createJSDoc: () => createJSDoc,
|
|
20
|
+
createLiteralTypeNode: () => createLiteralTypeNode,
|
|
21
|
+
createNamespaceDeclaration: () => createNamespaceDeclaration,
|
|
22
|
+
createNull: () => createNull,
|
|
23
|
+
createNumericLiteral: () => createNumericLiteral,
|
|
24
|
+
createOmitDeclaration: () => createOmitDeclaration,
|
|
25
|
+
createParameterSignature: () => createParameterSignature,
|
|
26
|
+
createPropertySignature: () => createPropertySignature,
|
|
27
|
+
createQuestionToken: () => createQuestionToken,
|
|
28
|
+
createStringLiteral: () => createStringLiteral,
|
|
29
|
+
createTupleDeclaration: () => createTupleDeclaration,
|
|
30
|
+
createTupleTypeNode: () => createTupleTypeNode,
|
|
31
|
+
createTypeAliasDeclaration: () => createTypeAliasDeclaration,
|
|
32
|
+
createTypeLiteralNode: () => createTypeLiteralNode,
|
|
33
|
+
createTypeReferenceNode: () => createTypeReferenceNode,
|
|
34
|
+
createUnionDeclaration: () => createUnionDeclaration,
|
|
35
|
+
keywordTypeNodes: () => keywordTypeNodes,
|
|
36
|
+
modifiers: () => modifiers
|
|
37
|
+
});
|
|
38
|
+
import { isNumber } from "remeda";
|
|
39
|
+
import ts from "typescript";
|
|
40
|
+
var { factory } = ts;
|
|
41
|
+
var modifiers = {
|
|
42
|
+
async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),
|
|
43
|
+
export: factory.createModifier(ts.SyntaxKind.ExportKeyword),
|
|
44
|
+
const: factory.createModifier(ts.SyntaxKind.ConstKeyword),
|
|
45
|
+
static: factory.createModifier(ts.SyntaxKind.StaticKeyword)
|
|
46
|
+
};
|
|
47
|
+
function isValidIdentifier(str) {
|
|
48
|
+
if (!str.length || str.trim() !== str) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest);
|
|
52
|
+
return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind) === void 0;
|
|
53
|
+
}
|
|
54
|
+
function propertyName(name) {
|
|
55
|
+
if (typeof name === "string") {
|
|
56
|
+
return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name);
|
|
57
|
+
}
|
|
58
|
+
return name;
|
|
59
|
+
}
|
|
60
|
+
var questionToken = factory.createToken(ts.SyntaxKind.QuestionToken);
|
|
61
|
+
function createQuestionToken(token) {
|
|
62
|
+
if (!token) {
|
|
63
|
+
return void 0;
|
|
64
|
+
}
|
|
65
|
+
if (token === true) {
|
|
66
|
+
return questionToken;
|
|
67
|
+
}
|
|
68
|
+
return token;
|
|
69
|
+
}
|
|
70
|
+
function createIntersectionDeclaration({
|
|
71
|
+
nodes,
|
|
72
|
+
withParentheses
|
|
73
|
+
}) {
|
|
74
|
+
if (!nodes.length) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (nodes.length === 1) {
|
|
78
|
+
return nodes[0] || null;
|
|
79
|
+
}
|
|
80
|
+
const node = factory.createIntersectionTypeNode(nodes);
|
|
81
|
+
if (withParentheses) {
|
|
82
|
+
return factory.createParenthesizedType(node);
|
|
83
|
+
}
|
|
84
|
+
return node;
|
|
85
|
+
}
|
|
86
|
+
function createTupleDeclaration({
|
|
87
|
+
nodes,
|
|
88
|
+
withParentheses
|
|
89
|
+
}) {
|
|
90
|
+
if (!nodes.length) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
if (nodes.length === 1) {
|
|
94
|
+
return nodes[0] || null;
|
|
95
|
+
}
|
|
96
|
+
const node = factory.createTupleTypeNode(nodes);
|
|
97
|
+
if (withParentheses) {
|
|
98
|
+
return factory.createParenthesizedType(node);
|
|
99
|
+
}
|
|
100
|
+
return node;
|
|
101
|
+
}
|
|
102
|
+
function createArrayDeclaration({
|
|
103
|
+
nodes
|
|
104
|
+
}) {
|
|
105
|
+
if (!nodes.length) {
|
|
106
|
+
return factory.createTupleTypeNode([]);
|
|
107
|
+
}
|
|
108
|
+
if (nodes.length === 1) {
|
|
109
|
+
return factory.createArrayTypeNode(nodes.at(0));
|
|
110
|
+
}
|
|
111
|
+
return factory.createExpressionWithTypeArguments(factory.createIdentifier("Array"), [factory.createUnionTypeNode(nodes)]);
|
|
112
|
+
}
|
|
113
|
+
function createUnionDeclaration({
|
|
114
|
+
nodes,
|
|
115
|
+
withParentheses
|
|
116
|
+
}) {
|
|
117
|
+
if (!nodes.length) {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
if (nodes.length === 1) {
|
|
121
|
+
return nodes[0] || null;
|
|
122
|
+
}
|
|
123
|
+
const node = factory.createUnionTypeNode(nodes);
|
|
124
|
+
if (withParentheses) {
|
|
125
|
+
return factory.createParenthesizedType(node);
|
|
126
|
+
}
|
|
127
|
+
return node;
|
|
128
|
+
}
|
|
129
|
+
function createPropertySignature({
|
|
130
|
+
readOnly,
|
|
131
|
+
modifiers: modifiers2 = [],
|
|
132
|
+
name,
|
|
133
|
+
questionToken: questionToken2,
|
|
134
|
+
type
|
|
135
|
+
}) {
|
|
136
|
+
return factory.createPropertySignature(
|
|
137
|
+
[...modifiers2, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : void 0].filter(Boolean),
|
|
138
|
+
propertyName(name),
|
|
139
|
+
createQuestionToken(questionToken2),
|
|
140
|
+
type
|
|
141
|
+
);
|
|
142
|
+
}
|
|
143
|
+
function createParameterSignature(name, {
|
|
144
|
+
modifiers: modifiers2,
|
|
145
|
+
dotDotDotToken,
|
|
146
|
+
questionToken: questionToken2,
|
|
147
|
+
type,
|
|
148
|
+
initializer
|
|
149
|
+
}) {
|
|
150
|
+
return factory.createParameterDeclaration(modifiers2, dotDotDotToken, name, createQuestionToken(questionToken2), type, initializer);
|
|
151
|
+
}
|
|
152
|
+
function createJSDoc({ comments }) {
|
|
153
|
+
if (!comments.length) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return factory.createJSDocComment(
|
|
157
|
+
factory.createNodeArray(
|
|
158
|
+
comments.map((comment, i) => {
|
|
159
|
+
if (i === comments.length - 1) {
|
|
160
|
+
return factory.createJSDocText(comment);
|
|
161
|
+
}
|
|
162
|
+
return factory.createJSDocText(`${comment}
|
|
163
|
+
`);
|
|
164
|
+
})
|
|
165
|
+
)
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
function appendJSDocToNode({
|
|
169
|
+
node,
|
|
170
|
+
comments
|
|
171
|
+
}) {
|
|
172
|
+
const filteredComments = comments.filter(Boolean);
|
|
173
|
+
if (!filteredComments.length) {
|
|
174
|
+
return node;
|
|
175
|
+
}
|
|
176
|
+
const text = filteredComments.reduce((acc = "", comment = "") => {
|
|
177
|
+
return `${acc}
|
|
178
|
+
* ${comment}`;
|
|
179
|
+
}, "*");
|
|
180
|
+
return ts.addSyntheticLeadingComment({ ...node }, ts.SyntaxKind.MultiLineCommentTrivia, `${text || "*"}
|
|
181
|
+
`, true);
|
|
182
|
+
}
|
|
183
|
+
function createIndexSignature(type, {
|
|
184
|
+
modifiers: modifiers2,
|
|
185
|
+
indexName = "key",
|
|
186
|
+
indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword)
|
|
187
|
+
} = {}) {
|
|
188
|
+
return factory.createIndexSignature(modifiers2, [createParameterSignature(indexName, { type: indexType })], type);
|
|
189
|
+
}
|
|
190
|
+
function createTypeAliasDeclaration({
|
|
191
|
+
modifiers: modifiers2,
|
|
192
|
+
name,
|
|
193
|
+
typeParameters,
|
|
194
|
+
type
|
|
195
|
+
}) {
|
|
196
|
+
return factory.createTypeAliasDeclaration(modifiers2, name, typeParameters, type);
|
|
197
|
+
}
|
|
198
|
+
function createNamespaceDeclaration({
|
|
199
|
+
statements,
|
|
200
|
+
name
|
|
201
|
+
}) {
|
|
202
|
+
return factory.createModuleDeclaration(
|
|
203
|
+
[factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
204
|
+
factory.createIdentifier(name),
|
|
205
|
+
factory.createModuleBlock(statements),
|
|
206
|
+
ts.NodeFlags.Namespace
|
|
207
|
+
);
|
|
208
|
+
}
|
|
209
|
+
function createImportDeclaration({
|
|
210
|
+
name,
|
|
211
|
+
path,
|
|
212
|
+
isTypeOnly = false,
|
|
213
|
+
isNameSpace = false
|
|
214
|
+
}) {
|
|
215
|
+
if (!Array.isArray(name)) {
|
|
216
|
+
let importPropertyName = factory.createIdentifier(name);
|
|
217
|
+
let importName = void 0;
|
|
218
|
+
if (isNameSpace) {
|
|
219
|
+
importPropertyName = void 0;
|
|
220
|
+
importName = factory.createNamespaceImport(factory.createIdentifier(name));
|
|
221
|
+
}
|
|
222
|
+
return factory.createImportDeclaration(
|
|
223
|
+
void 0,
|
|
224
|
+
factory.createImportClause(isTypeOnly, importPropertyName, importName),
|
|
225
|
+
factory.createStringLiteral(path),
|
|
226
|
+
void 0
|
|
227
|
+
);
|
|
228
|
+
}
|
|
229
|
+
return factory.createImportDeclaration(
|
|
230
|
+
void 0,
|
|
231
|
+
factory.createImportClause(
|
|
232
|
+
isTypeOnly,
|
|
233
|
+
void 0,
|
|
234
|
+
factory.createNamedImports(
|
|
235
|
+
name.map((item) => {
|
|
236
|
+
if (typeof item === "object") {
|
|
237
|
+
const obj = item;
|
|
238
|
+
if (obj.name) {
|
|
239
|
+
return factory.createImportSpecifier(false, factory.createIdentifier(obj.propertyName), factory.createIdentifier(obj.name));
|
|
240
|
+
}
|
|
241
|
+
return factory.createImportSpecifier(false, void 0, factory.createIdentifier(obj.propertyName));
|
|
242
|
+
}
|
|
243
|
+
return factory.createImportSpecifier(false, void 0, factory.createIdentifier(item));
|
|
244
|
+
})
|
|
245
|
+
)
|
|
246
|
+
),
|
|
247
|
+
factory.createStringLiteral(path),
|
|
248
|
+
void 0
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
function createExportDeclaration({
|
|
252
|
+
path,
|
|
253
|
+
asAlias,
|
|
254
|
+
isTypeOnly = false,
|
|
255
|
+
name
|
|
256
|
+
}) {
|
|
257
|
+
if (name && !Array.isArray(name) && !asAlias) {
|
|
258
|
+
throw new Error("When using `name` as string, `asAlias` should be true");
|
|
259
|
+
}
|
|
260
|
+
if (!Array.isArray(name)) {
|
|
261
|
+
const parsedName = name?.match(/^\d/) ? `_${name?.slice(1)}` : name;
|
|
262
|
+
return factory.createExportDeclaration(
|
|
263
|
+
void 0,
|
|
264
|
+
isTypeOnly,
|
|
265
|
+
asAlias && parsedName ? factory.createNamespaceExport(factory.createIdentifier(parsedName)) : void 0,
|
|
266
|
+
factory.createStringLiteral(path),
|
|
267
|
+
void 0
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
return factory.createExportDeclaration(
|
|
271
|
+
void 0,
|
|
272
|
+
isTypeOnly,
|
|
273
|
+
factory.createNamedExports(
|
|
274
|
+
name.map((propertyName2) => {
|
|
275
|
+
return factory.createExportSpecifier(false, void 0, typeof propertyName2 === "string" ? factory.createIdentifier(propertyName2) : propertyName2);
|
|
276
|
+
})
|
|
277
|
+
),
|
|
278
|
+
factory.createStringLiteral(path),
|
|
279
|
+
void 0
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
function createEnumDeclaration({
|
|
283
|
+
type = "enum",
|
|
284
|
+
name,
|
|
285
|
+
typeName,
|
|
286
|
+
enums
|
|
287
|
+
}) {
|
|
288
|
+
if (type === "literal") {
|
|
289
|
+
return [
|
|
290
|
+
factory.createTypeAliasDeclaration(
|
|
291
|
+
[factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
292
|
+
factory.createIdentifier(typeName),
|
|
293
|
+
void 0,
|
|
294
|
+
factory.createUnionTypeNode(
|
|
295
|
+
enums.map(([_key, value]) => {
|
|
296
|
+
if (isNumber(value)) {
|
|
297
|
+
return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()));
|
|
298
|
+
}
|
|
299
|
+
if (typeof value === "boolean") {
|
|
300
|
+
return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse());
|
|
301
|
+
}
|
|
302
|
+
if (value) {
|
|
303
|
+
return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()));
|
|
304
|
+
}
|
|
305
|
+
return void 0;
|
|
306
|
+
}).filter(Boolean)
|
|
307
|
+
)
|
|
308
|
+
)
|
|
309
|
+
];
|
|
310
|
+
}
|
|
311
|
+
if (type === "enum" || type === "constEnum") {
|
|
312
|
+
return [
|
|
313
|
+
factory.createEnumDeclaration(
|
|
314
|
+
[factory.createToken(ts.SyntaxKind.ExportKeyword), type === "constEnum" ? factory.createToken(ts.SyntaxKind.ConstKeyword) : void 0].filter(Boolean),
|
|
315
|
+
factory.createIdentifier(typeName),
|
|
316
|
+
enums.map(([key, value]) => {
|
|
317
|
+
let initializer = factory.createStringLiteral(value?.toString());
|
|
318
|
+
if (isNumber(Number.parseInt(value.toString()))) {
|
|
319
|
+
initializer = factory.createNumericLiteral(value);
|
|
320
|
+
}
|
|
321
|
+
if (typeof value === "boolean") {
|
|
322
|
+
initializer = value ? factory.createTrue() : factory.createFalse();
|
|
323
|
+
}
|
|
324
|
+
if (isNumber(Number.parseInt(key.toString()))) {
|
|
325
|
+
return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer);
|
|
326
|
+
}
|
|
327
|
+
if (key) {
|
|
328
|
+
return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer);
|
|
329
|
+
}
|
|
330
|
+
return void 0;
|
|
331
|
+
}).filter(Boolean)
|
|
332
|
+
)
|
|
333
|
+
];
|
|
334
|
+
}
|
|
335
|
+
const identifierName = type === "asPascalConst" ? typeName : name;
|
|
336
|
+
return [
|
|
337
|
+
factory.createVariableStatement(
|
|
338
|
+
[factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
339
|
+
factory.createVariableDeclarationList(
|
|
340
|
+
[
|
|
341
|
+
factory.createVariableDeclaration(
|
|
342
|
+
factory.createIdentifier(identifierName),
|
|
343
|
+
void 0,
|
|
344
|
+
void 0,
|
|
345
|
+
factory.createAsExpression(
|
|
346
|
+
factory.createObjectLiteralExpression(
|
|
347
|
+
enums.map(([key, value]) => {
|
|
348
|
+
let initializer = factory.createStringLiteral(`${value?.toString()}`);
|
|
349
|
+
if (isNumber(value)) {
|
|
350
|
+
if (value < 0) {
|
|
351
|
+
initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)));
|
|
352
|
+
} else {
|
|
353
|
+
initializer = factory.createNumericLiteral(value);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (typeof value === "boolean") {
|
|
357
|
+
initializer = value ? factory.createTrue() : factory.createFalse();
|
|
358
|
+
}
|
|
359
|
+
if (key) {
|
|
360
|
+
return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer);
|
|
361
|
+
}
|
|
362
|
+
return void 0;
|
|
363
|
+
}).filter(Boolean),
|
|
364
|
+
true
|
|
365
|
+
),
|
|
366
|
+
factory.createTypeReferenceNode(factory.createIdentifier("const"), void 0)
|
|
367
|
+
)
|
|
368
|
+
)
|
|
369
|
+
],
|
|
370
|
+
ts.NodeFlags.Const
|
|
371
|
+
)
|
|
372
|
+
),
|
|
373
|
+
factory.createTypeAliasDeclaration(
|
|
374
|
+
[factory.createToken(ts.SyntaxKind.ExportKeyword)],
|
|
375
|
+
factory.createIdentifier(typeName),
|
|
376
|
+
void 0,
|
|
377
|
+
factory.createIndexedAccessTypeNode(
|
|
378
|
+
factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), void 0)),
|
|
379
|
+
factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), void 0))
|
|
380
|
+
)
|
|
381
|
+
)
|
|
382
|
+
];
|
|
383
|
+
}
|
|
384
|
+
function createOmitDeclaration({
|
|
385
|
+
keys,
|
|
386
|
+
type,
|
|
387
|
+
nonNullable
|
|
388
|
+
}) {
|
|
389
|
+
const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier("NonNullable"), [type]) : type;
|
|
390
|
+
if (Array.isArray(keys)) {
|
|
391
|
+
return factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [
|
|
392
|
+
node,
|
|
393
|
+
factory.createUnionTypeNode(
|
|
394
|
+
keys.map((key) => {
|
|
395
|
+
return factory.createLiteralTypeNode(factory.createStringLiteral(key));
|
|
396
|
+
})
|
|
397
|
+
)
|
|
398
|
+
]);
|
|
399
|
+
}
|
|
400
|
+
return factory.createTypeReferenceNode(factory.createIdentifier("Omit"), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))]);
|
|
401
|
+
}
|
|
402
|
+
var keywordTypeNodes = {
|
|
403
|
+
any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),
|
|
404
|
+
unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),
|
|
405
|
+
number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),
|
|
406
|
+
integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),
|
|
407
|
+
object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),
|
|
408
|
+
string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),
|
|
409
|
+
boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),
|
|
410
|
+
undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),
|
|
411
|
+
null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword))
|
|
412
|
+
};
|
|
413
|
+
var createTypeLiteralNode = factory.createTypeLiteralNode;
|
|
414
|
+
var createTypeReferenceNode = factory.createTypeReferenceNode;
|
|
415
|
+
var createNumericLiteral = factory.createNumericLiteral;
|
|
416
|
+
var createStringLiteral = factory.createStringLiteral;
|
|
417
|
+
var createArrayTypeNode = factory.createArrayTypeNode;
|
|
418
|
+
var createLiteralTypeNode = factory.createLiteralTypeNode;
|
|
419
|
+
var createNull = factory.createNull;
|
|
420
|
+
var createIdentifier = factory.createIdentifier;
|
|
421
|
+
var createTupleTypeNode = factory.createTupleTypeNode;
|
|
422
|
+
|
|
423
|
+
export {
|
|
424
|
+
modifiers,
|
|
425
|
+
createQuestionToken,
|
|
426
|
+
createIntersectionDeclaration,
|
|
427
|
+
createTupleDeclaration,
|
|
428
|
+
createArrayDeclaration,
|
|
429
|
+
createUnionDeclaration,
|
|
430
|
+
createPropertySignature,
|
|
431
|
+
createParameterSignature,
|
|
432
|
+
createJSDoc,
|
|
433
|
+
appendJSDocToNode,
|
|
434
|
+
createIndexSignature,
|
|
435
|
+
createTypeAliasDeclaration,
|
|
436
|
+
createNamespaceDeclaration,
|
|
437
|
+
createImportDeclaration,
|
|
438
|
+
createExportDeclaration,
|
|
439
|
+
createEnumDeclaration,
|
|
440
|
+
createOmitDeclaration,
|
|
441
|
+
keywordTypeNodes,
|
|
442
|
+
createTypeLiteralNode,
|
|
443
|
+
createTypeReferenceNode,
|
|
444
|
+
createNumericLiteral,
|
|
445
|
+
createStringLiteral,
|
|
446
|
+
createArrayTypeNode,
|
|
447
|
+
createLiteralTypeNode,
|
|
448
|
+
createNull,
|
|
449
|
+
createIdentifier,
|
|
450
|
+
createTupleTypeNode,
|
|
451
|
+
factory_exports
|
|
452
|
+
};
|
|
453
|
+
//# sourceMappingURL=chunk-O7GB3MTG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/factory.ts"],"sourcesContent":["import { isNumber } from 'remeda'\nimport ts from 'typescript'\n\nconst { factory } = ts\n\n// https://ts-ast-viewer.com/\n\nexport const modifiers = {\n async: factory.createModifier(ts.SyntaxKind.AsyncKeyword),\n export: factory.createModifier(ts.SyntaxKind.ExportKeyword),\n const: factory.createModifier(ts.SyntaxKind.ConstKeyword),\n static: factory.createModifier(ts.SyntaxKind.StaticKeyword),\n} as const\n\nfunction isValidIdentifier(str: string): boolean {\n if (!str.length || str.trim() !== str) {\n return false\n }\n const node = ts.parseIsolatedEntityName(str, ts.ScriptTarget.Latest)\n\n return !!node && node.kind === ts.SyntaxKind.Identifier && ts.identifierToKeywordKind(node.kind as unknown as ts.Identifier) === undefined\n}\n\nfunction propertyName(name: string | ts.PropertyName): ts.PropertyName {\n if (typeof name === 'string') {\n return isValidIdentifier(name) ? factory.createIdentifier(name) : factory.createStringLiteral(name)\n }\n return name\n}\n\nconst questionToken = factory.createToken(ts.SyntaxKind.QuestionToken)\n\nexport function createQuestionToken(token?: boolean | ts.QuestionToken) {\n if (!token) {\n return undefined\n }\n if (token === true) {\n return questionToken\n }\n return token\n}\n\nexport function createIntersectionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createIntersectionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string & number`\n */\nexport function createTupleDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createTupleTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createArrayDeclaration({\n nodes,\n}: {\n nodes: Array<ts.TypeNode>\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return factory.createTupleTypeNode([])\n }\n\n if (nodes.length === 1) {\n return factory.createArrayTypeNode(nodes.at(0)!)\n }\n\n return factory.createExpressionWithTypeArguments(factory.createIdentifier('Array'), [factory.createUnionTypeNode(nodes)])\n}\n\n/**\n * Minimum nodes length of 2\n * @example `string | number`\n */\nexport function createUnionDeclaration({\n nodes,\n withParentheses,\n}: {\n nodes: Array<ts.TypeNode>\n withParentheses?: boolean\n}): ts.TypeNode | null {\n if (!nodes.length) {\n return null\n }\n\n if (nodes.length === 1) {\n return nodes[0] || null\n }\n\n const node = factory.createUnionTypeNode(nodes)\n\n if (withParentheses) {\n return factory.createParenthesizedType(node)\n }\n\n return node\n}\n\nexport function createPropertySignature({\n readOnly,\n modifiers = [],\n name,\n questionToken,\n type,\n}: {\n readOnly?: boolean\n modifiers?: Array<ts.Modifier>\n name: ts.PropertyName | string\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n}) {\n return factory.createPropertySignature(\n [...modifiers, readOnly ? factory.createToken(ts.SyntaxKind.ReadonlyKeyword) : undefined].filter(Boolean),\n propertyName(name),\n createQuestionToken(questionToken),\n type,\n )\n}\n\nexport function createParameterSignature(\n name: string | ts.BindingName,\n {\n modifiers,\n dotDotDotToken,\n questionToken,\n type,\n initializer,\n }: {\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n dotDotDotToken?: ts.DotDotDotToken\n questionToken?: ts.QuestionToken | boolean\n type?: ts.TypeNode\n initializer?: ts.Expression\n },\n): ts.ParameterDeclaration {\n return factory.createParameterDeclaration(modifiers, dotDotDotToken, name, createQuestionToken(questionToken), type, initializer)\n}\n\nexport function createJSDoc({ comments }: { comments: string[] }) {\n if (!comments.length) {\n return null\n }\n return factory.createJSDocComment(\n factory.createNodeArray(\n comments.map((comment, i) => {\n if (i === comments.length - 1) {\n return factory.createJSDocText(comment)\n }\n\n return factory.createJSDocText(`${comment}\\n`)\n }),\n ),\n )\n}\n\n/**\n * @link https://github.com/microsoft/TypeScript/issues/44151\n */\nexport function appendJSDocToNode<TNode extends ts.Node>({\n node,\n comments,\n}: {\n node: TNode\n comments: Array<string | undefined>\n}) {\n const filteredComments = comments.filter(Boolean)\n\n if (!filteredComments.length) {\n return node\n }\n\n const text = filteredComments.reduce((acc = '', comment = '') => {\n return `${acc}\\n * ${comment}`\n }, '*')\n\n // node: {...node}, with that ts.addSyntheticLeadingComment is appending\n return ts.addSyntheticLeadingComment({ ...node }, ts.SyntaxKind.MultiLineCommentTrivia, `${text || '*'}\\n`, true)\n}\n\nexport function createIndexSignature(\n type: ts.TypeNode,\n {\n modifiers,\n indexName = 'key',\n indexType = factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n }: {\n indexName?: string\n indexType?: ts.TypeNode\n decorators?: Array<ts.Decorator>\n modifiers?: Array<ts.Modifier>\n } = {},\n) {\n return factory.createIndexSignature(modifiers, [createParameterSignature(indexName, { type: indexType })], type)\n}\n\nexport function createTypeAliasDeclaration({\n modifiers,\n name,\n typeParameters,\n type,\n}: {\n modifiers?: Array<ts.Modifier>\n name: string | ts.Identifier\n typeParameters?: Array<ts.TypeParameterDeclaration>\n type: ts.TypeNode\n}) {\n return factory.createTypeAliasDeclaration(modifiers, name, typeParameters, type)\n}\n\nexport function createNamespaceDeclaration({\n statements,\n name,\n}: {\n name: string\n statements: ts.Statement[]\n}) {\n return factory.createModuleDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(name),\n factory.createModuleBlock(statements),\n ts.NodeFlags.Namespace,\n )\n}\n\n/**\n * In { propertyName: string; name?: string } is `name` being used to make the type more unique when multiple same names are used.\n * @example `import { Pet as Cat } from './Pet'`\n */\nexport function createImportDeclaration({\n name,\n path,\n isTypeOnly = false,\n isNameSpace = false,\n}: {\n name: string | Array<string | { propertyName: string; name?: string }>\n path: string\n isTypeOnly?: boolean\n isNameSpace?: boolean\n}) {\n if (!Array.isArray(name)) {\n let importPropertyName: ts.Identifier | undefined = factory.createIdentifier(name)\n let importName: ts.NamedImportBindings | undefined = 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(path),\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(path),\n undefined,\n )\n}\n\nexport function createExportDeclaration({\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 throw new Error('When using `name` as string, `asAlias` should be true')\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 function createEnumDeclaration({\n type = 'enum',\n name,\n typeName,\n enums,\n}: {\n /**\n * @default `'enum'`\n */\n type?: 'enum' | 'asConst' | 'asPascalConst' | 'constEnum' | 'literal'\n /**\n * Enum name in camelCase.\n */\n name: string\n /**\n * Enum name in PascalCase.\n */\n typeName: string\n enums: [key: string | number, value: string | number | boolean][]\n}) {\n if (type === 'literal') {\n return [\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createUnionTypeNode(\n enums\n .map(([_key, value]) => {\n if (isNumber(value)) {\n return factory.createLiteralTypeNode(factory.createNumericLiteral(value?.toString()))\n }\n\n if (typeof value === 'boolean') {\n return factory.createLiteralTypeNode(value ? factory.createTrue() : factory.createFalse())\n }\n if (value) {\n return factory.createLiteralTypeNode(factory.createStringLiteral(value.toString()))\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ),\n ]\n }\n\n if (type === 'enum' || type === 'constEnum') {\n return [\n factory.createEnumDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword), type === 'constEnum' ? factory.createToken(ts.SyntaxKind.ConstKeyword) : undefined].filter(Boolean),\n factory.createIdentifier(typeName),\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(value?.toString())\n\n if (isNumber(Number.parseInt(value.toString()))) {\n initializer = factory.createNumericLiteral(value as number)\n }\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (isNumber(Number.parseInt(key.toString()))) {\n return factory.createEnumMember(factory.createStringLiteral(`${typeName}_${key}`), initializer)\n }\n\n if (key) {\n return factory.createEnumMember(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n ),\n ]\n }\n\n // used when using `as const` instead of an TypeScript enum.\n const identifierName = type === 'asPascalConst' ? typeName : name\n\n return [\n factory.createVariableStatement(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createVariableDeclarationList(\n [\n factory.createVariableDeclaration(\n factory.createIdentifier(identifierName),\n undefined,\n undefined,\n factory.createAsExpression(\n factory.createObjectLiteralExpression(\n enums\n .map(([key, value]) => {\n let initializer: ts.Expression = factory.createStringLiteral(`${value?.toString()}`)\n\n if (isNumber(value)) {\n // Error: Negative numbers should be created in combination with createPrefixUnaryExpression factory.\n // The method createNumericLiteral only accepts positive numbers\n // or those combined with createPrefixUnaryExpression.\n // Therefore, we need to ensure that the number is not negative.\n if (value < 0) {\n initializer = factory.createPrefixUnaryExpression(ts.SyntaxKind.MinusToken, factory.createNumericLiteral(Math.abs(value)))\n } else {\n initializer = factory.createNumericLiteral(value)\n }\n }\n\n if (typeof value === 'boolean') {\n initializer = value ? factory.createTrue() : factory.createFalse()\n }\n\n if (key) {\n return factory.createPropertyAssignment(factory.createStringLiteral(`${key}`), initializer)\n }\n\n return undefined\n })\n .filter(Boolean),\n true,\n ),\n factory.createTypeReferenceNode(factory.createIdentifier('const'), undefined),\n ),\n ),\n ],\n ts.NodeFlags.Const,\n ),\n ),\n factory.createTypeAliasDeclaration(\n [factory.createToken(ts.SyntaxKind.ExportKeyword)],\n factory.createIdentifier(typeName),\n undefined,\n factory.createIndexedAccessTypeNode(\n factory.createParenthesizedType(factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n factory.createTypeOperatorNode(ts.SyntaxKind.KeyOfKeyword, factory.createTypeQueryNode(factory.createIdentifier(identifierName), undefined)),\n ),\n ),\n ]\n}\n\nexport function createOmitDeclaration({\n keys,\n type,\n nonNullable,\n}: {\n keys: Array<string> | string\n type: ts.TypeNode\n nonNullable?: boolean\n}) {\n const node = nonNullable ? factory.createTypeReferenceNode(factory.createIdentifier('NonNullable'), [type]) : type\n\n if (Array.isArray(keys)) {\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [\n node,\n factory.createUnionTypeNode(\n keys.map((key) => {\n return factory.createLiteralTypeNode(factory.createStringLiteral(key))\n }),\n ),\n ])\n }\n\n return factory.createTypeReferenceNode(factory.createIdentifier('Omit'), [node, factory.createLiteralTypeNode(factory.createStringLiteral(keys))])\n}\n\nexport const keywordTypeNodes = {\n any: factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword),\n unknown: factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword),\n number: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n integer: factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword),\n object: factory.createKeywordTypeNode(ts.SyntaxKind.ObjectKeyword),\n string: factory.createKeywordTypeNode(ts.SyntaxKind.StringKeyword),\n boolean: factory.createKeywordTypeNode(ts.SyntaxKind.BooleanKeyword),\n undefined: factory.createKeywordTypeNode(ts.SyntaxKind.UndefinedKeyword),\n null: factory.createLiteralTypeNode(factory.createToken(ts.SyntaxKind.NullKeyword)),\n} as const\n\nexport const createTypeLiteralNode = factory.createTypeLiteralNode\n\nexport const createTypeReferenceNode = factory.createTypeReferenceNode\nexport const createNumericLiteral = factory.createNumericLiteral\nexport const createStringLiteral = factory.createStringLiteral\n\nexport const createArrayTypeNode = factory.createArrayTypeNode\n\nexport const createLiteralTypeNode = factory.createLiteralTypeNode\nexport const createNull = factory.createNull\nexport const createIdentifier = factory.createIdentifier\n\nexport const createTupleTypeNode = factory.createTupleTypeNode\n"],"mappings":"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","names":["modifiers","questionToken","propertyName"]}
|