@dereekb/dbx-cli 13.11.1 → 13.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/firebase-api-manifest/main.js +142 -25
- package/firebase-api-manifest/package.json +1 -1
- package/index.cjs.js +186 -26
- package/index.esm.js +185 -27
- package/manifest-extract/LICENSE +21 -0
- package/manifest-extract/index.cjs.default.js +1 -0
- package/manifest-extract/index.cjs.js +459 -0
- package/manifest-extract/index.cjs.mjs +2 -0
- package/manifest-extract/index.d.ts +1 -0
- package/manifest-extract/index.esm.js +457 -0
- package/manifest-extract/package.json +20 -0
- package/manifest-extract/src/index.d.ts +2 -0
- package/manifest-extract/src/lib/extract-crud.d.ts +36 -0
- package/manifest-extract/src/lib/types.d.ts +86 -0
- package/package.json +10 -4
- package/src/lib/config/env.d.ts +1 -1
- package/src/lib/manifest/build-manifest-commands.d.ts +38 -0
- package/src/lib/manifest/types.d.ts +20 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var tsMorph = require('ts-morph');
|
|
4
|
+
|
|
5
|
+
// 'query' is accepted today even though `<Group>ModelCrudFunctionsConfig` in @dereekb/firebase does not yet permit `query:` keys (deferred follow-up). Once query support lands upstream, every query entry flows through here with no change.
|
|
6
|
+
var SUPPORTED_VERBS = new Set([
|
|
7
|
+
'create',
|
|
8
|
+
'read',
|
|
9
|
+
'update',
|
|
10
|
+
'delete',
|
|
11
|
+
'query'
|
|
12
|
+
]);
|
|
13
|
+
/**
|
|
14
|
+
* Walks a `<model>.api.ts` source and returns one {@link CrudEntry} per
|
|
15
|
+
* callable leaf (CRUD or standalone). Best-effort: malformed configs return
|
|
16
|
+
* fewer entries rather than throwing.
|
|
17
|
+
*
|
|
18
|
+
* @param source - in-memory source name + text pair to extract
|
|
19
|
+
* @returns the CRUD extraction with group name, model keys, entries, and
|
|
20
|
+
* `*Functions` class name (when present).
|
|
21
|
+
*/ // eslint-disable-next-line sonarjs/cognitive-complexity
|
|
22
|
+
function extractCrudEntries(source) {
|
|
23
|
+
var project = new tsMorph.Project({
|
|
24
|
+
useInMemoryFileSystem: true,
|
|
25
|
+
skipAddingFilesFromTsConfig: true
|
|
26
|
+
});
|
|
27
|
+
var sourceFile = project.createSourceFile(source.name, source.text, {
|
|
28
|
+
overwrite: true
|
|
29
|
+
});
|
|
30
|
+
var entries = [];
|
|
31
|
+
var modelKeys = [];
|
|
32
|
+
var crudConfigType = findTypeAliasByEnding(sourceFile, 'ModelCrudFunctionsConfig');
|
|
33
|
+
var groupName = inferGroupName(sourceFile);
|
|
34
|
+
var functionsClassName = findFunctionsClassName(sourceFile);
|
|
35
|
+
var typeDocsCache = new Map();
|
|
36
|
+
var resolveTypeDocs = function resolveTypeDocs(typeName) {
|
|
37
|
+
if (!typeName) {
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
if (typeDocsCache.has(typeName)) {
|
|
41
|
+
return typeDocsCache.get(typeName);
|
|
42
|
+
}
|
|
43
|
+
var docs = readTypeDocs(sourceFile, typeName);
|
|
44
|
+
if (docs) {
|
|
45
|
+
typeDocsCache.set(typeName, docs);
|
|
46
|
+
}
|
|
47
|
+
return docs;
|
|
48
|
+
};
|
|
49
|
+
if (crudConfigType) {
|
|
50
|
+
var literal = crudConfigType.getTypeNode();
|
|
51
|
+
if (literal && tsMorph.Node.isTypeLiteral(literal)) {
|
|
52
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
53
|
+
try {
|
|
54
|
+
for(var _iterator = literal.getMembers()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
55
|
+
var member = _step.value;
|
|
56
|
+
if (!tsMorph.Node.isPropertySignature(member)) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
var modelName = member.getName();
|
|
60
|
+
modelKeys.push(modelName);
|
|
61
|
+
var valueNode = member.getTypeNode();
|
|
62
|
+
if (!valueNode) {
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
if (isNullLiteralType(valueNode)) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (tsMorph.Node.isTypeLiteral(valueNode)) {
|
|
69
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
70
|
+
try {
|
|
71
|
+
for(var _iterator1 = valueNode.getMembers()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
72
|
+
var verbMember = _step1.value;
|
|
73
|
+
if (!tsMorph.Node.isPropertySignature(verbMember)) {
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
var verbName = verbMember.getName();
|
|
77
|
+
if (!SUPPORTED_VERBS.has(verbName)) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
var verb = verbName;
|
|
81
|
+
var verbValueNode = verbMember.getTypeNode();
|
|
82
|
+
if (!verbValueNode) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
collectVerbEntries({
|
|
86
|
+
modelName: modelName,
|
|
87
|
+
verb: verb,
|
|
88
|
+
valueNode: verbValueNode,
|
|
89
|
+
entries: entries,
|
|
90
|
+
fallbackDescription: readJsDocSummary(verbMember),
|
|
91
|
+
resolveTypeDocs: resolveTypeDocs
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
} catch (err) {
|
|
95
|
+
_didIteratorError1 = true;
|
|
96
|
+
_iteratorError1 = err;
|
|
97
|
+
} finally{
|
|
98
|
+
try {
|
|
99
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
100
|
+
_iterator1.return();
|
|
101
|
+
}
|
|
102
|
+
} finally{
|
|
103
|
+
if (_didIteratorError1) {
|
|
104
|
+
throw _iteratorError1;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
} catch (err) {
|
|
111
|
+
_didIteratorError = true;
|
|
112
|
+
_iteratorError = err;
|
|
113
|
+
} finally{
|
|
114
|
+
try {
|
|
115
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
116
|
+
_iterator.return();
|
|
117
|
+
}
|
|
118
|
+
} finally{
|
|
119
|
+
if (_didIteratorError) {
|
|
120
|
+
throw _iteratorError;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
var functionTypeMap = findTypeAliasByEnding(sourceFile, 'FunctionTypeMap');
|
|
127
|
+
if (functionTypeMap) {
|
|
128
|
+
var literal1 = functionTypeMap.getTypeNode();
|
|
129
|
+
if (literal1 && tsMorph.Node.isTypeLiteral(literal1)) {
|
|
130
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
131
|
+
try {
|
|
132
|
+
for(var _iterator2 = literal1.getMembers()[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
|
|
133
|
+
var member1 = _step2.value;
|
|
134
|
+
if (!tsMorph.Node.isPropertySignature(member1)) {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
var key = member1.getName();
|
|
138
|
+
var valueNode1 = member1.getTypeNode();
|
|
139
|
+
var tuple = valueNode1 ? readTupleParamsResult(valueNode1) : undefined;
|
|
140
|
+
var paramsDocs = resolveTypeDocs(tuple === null || tuple === void 0 ? void 0 : tuple.params);
|
|
141
|
+
var resultDocs = resolveTypeDocs(tuple === null || tuple === void 0 ? void 0 : tuple.result);
|
|
142
|
+
entries.push({
|
|
143
|
+
model: key,
|
|
144
|
+
verb: 'standalone',
|
|
145
|
+
specifier: undefined,
|
|
146
|
+
paramsTypeName: tuple === null || tuple === void 0 ? void 0 : tuple.params,
|
|
147
|
+
resultTypeName: tuple === null || tuple === void 0 ? void 0 : tuple.result,
|
|
148
|
+
line: member1.getStartLineNumber(),
|
|
149
|
+
description: readJsDocSummary(member1),
|
|
150
|
+
paramsTypeDescription: paramsDocs === null || paramsDocs === void 0 ? void 0 : paramsDocs.typeDescription,
|
|
151
|
+
paramsFields: paramsDocs === null || paramsDocs === void 0 ? void 0 : paramsDocs.fields,
|
|
152
|
+
resultTypeDescription: resultDocs === null || resultDocs === void 0 ? void 0 : resultDocs.typeDescription,
|
|
153
|
+
resultFields: resultDocs === null || resultDocs === void 0 ? void 0 : resultDocs.fields
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
} catch (err) {
|
|
157
|
+
_didIteratorError2 = true;
|
|
158
|
+
_iteratorError2 = err;
|
|
159
|
+
} finally{
|
|
160
|
+
try {
|
|
161
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
162
|
+
_iterator2.return();
|
|
163
|
+
}
|
|
164
|
+
} finally{
|
|
165
|
+
if (_didIteratorError2) {
|
|
166
|
+
throw _iteratorError2;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
groupName: groupName,
|
|
174
|
+
modelKeys: modelKeys,
|
|
175
|
+
entries: entries,
|
|
176
|
+
functionsClassName: functionsClassName
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function findTypeAliasByEnding(sourceFile, ending) {
|
|
180
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
181
|
+
try {
|
|
182
|
+
for(var _iterator = sourceFile.getTypeAliases()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
183
|
+
var alias = _step.value;
|
|
184
|
+
if (alias.getName().endsWith(ending) && alias.getTypeNode()) {
|
|
185
|
+
return alias;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
} catch (err) {
|
|
189
|
+
_didIteratorError = true;
|
|
190
|
+
_iteratorError = err;
|
|
191
|
+
} finally{
|
|
192
|
+
try {
|
|
193
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
194
|
+
_iterator.return();
|
|
195
|
+
}
|
|
196
|
+
} finally{
|
|
197
|
+
if (_didIteratorError) {
|
|
198
|
+
throw _iteratorError;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return undefined;
|
|
203
|
+
}
|
|
204
|
+
function findFunctionsClassName(sourceFile) {
|
|
205
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
206
|
+
try {
|
|
207
|
+
for(var _iterator = sourceFile.getClasses()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
208
|
+
var cls = _step.value;
|
|
209
|
+
if (!cls.isAbstract()) {
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
var name = cls.getName();
|
|
213
|
+
if (name === null || name === void 0 ? void 0 : name.endsWith('Functions')) {
|
|
214
|
+
return name;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
} catch (err) {
|
|
218
|
+
_didIteratorError = true;
|
|
219
|
+
_iteratorError = err;
|
|
220
|
+
} finally{
|
|
221
|
+
try {
|
|
222
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
223
|
+
_iterator.return();
|
|
224
|
+
}
|
|
225
|
+
} finally{
|
|
226
|
+
if (_didIteratorError) {
|
|
227
|
+
throw _iteratorError;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
function inferGroupName(sourceFile) {
|
|
234
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
235
|
+
try {
|
|
236
|
+
for(var _iterator = sourceFile.getTypeAliases()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
237
|
+
var alias = _step.value;
|
|
238
|
+
var name = alias.getName();
|
|
239
|
+
if (name.endsWith('ModelCrudFunctionsConfig')) {
|
|
240
|
+
var stem = name.slice(0, -'ModelCrudFunctionsConfig'.length);
|
|
241
|
+
if (stem.length > 0) {
|
|
242
|
+
return stem;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
} catch (err) {
|
|
247
|
+
_didIteratorError = true;
|
|
248
|
+
_iteratorError = err;
|
|
249
|
+
} finally{
|
|
250
|
+
try {
|
|
251
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
252
|
+
_iterator.return();
|
|
253
|
+
}
|
|
254
|
+
} finally{
|
|
255
|
+
if (_didIteratorError) {
|
|
256
|
+
throw _iteratorError;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
261
|
+
try {
|
|
262
|
+
for(var _iterator1 = sourceFile.getTypeAliases()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
263
|
+
var alias1 = _step1.value;
|
|
264
|
+
var name1 = alias1.getName();
|
|
265
|
+
if (name1.endsWith('FunctionTypeMap')) {
|
|
266
|
+
var stem1 = name1.slice(0, -'FunctionTypeMap'.length);
|
|
267
|
+
if (stem1.length > 0) {
|
|
268
|
+
return stem1;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
} catch (err) {
|
|
273
|
+
_didIteratorError1 = true;
|
|
274
|
+
_iteratorError1 = err;
|
|
275
|
+
} finally{
|
|
276
|
+
try {
|
|
277
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
278
|
+
_iterator1.return();
|
|
279
|
+
}
|
|
280
|
+
} finally{
|
|
281
|
+
if (_didIteratorError1) {
|
|
282
|
+
throw _iteratorError1;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
return undefined;
|
|
287
|
+
}
|
|
288
|
+
function isNullLiteralType(node) {
|
|
289
|
+
if (tsMorph.Node.isLiteralTypeNode(node)) {
|
|
290
|
+
var literal = node.getLiteral();
|
|
291
|
+
if (tsMorph.Node.isNullLiteral(literal)) {
|
|
292
|
+
return true;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
296
|
+
}
|
|
297
|
+
function collectVerbEntries(input) {
|
|
298
|
+
var _readTupleParamsResult;
|
|
299
|
+
var modelName = input.modelName, verb = input.verb, valueNode = input.valueNode, entries = input.entries, fallbackDescription = input.fallbackDescription, resolveTypeDocs = input.resolveTypeDocs;
|
|
300
|
+
if (tsMorph.Node.isTypeLiteral(valueNode)) {
|
|
301
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
302
|
+
try {
|
|
303
|
+
for(var _iterator = valueNode.getMembers()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
304
|
+
var specMember = _step.value;
|
|
305
|
+
var _readTupleParamsResult1;
|
|
306
|
+
if (!tsMorph.Node.isPropertySignature(specMember)) {
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
var specifier = specMember.getName();
|
|
310
|
+
var leafNode = specMember.getTypeNode();
|
|
311
|
+
var leaf = leafNode ? (_readTupleParamsResult1 = readTupleParamsResult(leafNode)) !== null && _readTupleParamsResult1 !== void 0 ? _readTupleParamsResult1 : readBareParams(leafNode) : undefined;
|
|
312
|
+
var paramsDocs = resolveTypeDocs(leaf === null || leaf === void 0 ? void 0 : leaf.params);
|
|
313
|
+
var resultDocs = resolveTypeDocs(leaf === null || leaf === void 0 ? void 0 : leaf.result);
|
|
314
|
+
entries.push({
|
|
315
|
+
model: modelName,
|
|
316
|
+
verb: verb,
|
|
317
|
+
specifier: specifier,
|
|
318
|
+
paramsTypeName: leaf === null || leaf === void 0 ? void 0 : leaf.params,
|
|
319
|
+
resultTypeName: leaf === null || leaf === void 0 ? void 0 : leaf.result,
|
|
320
|
+
line: specMember.getStartLineNumber(),
|
|
321
|
+
description: readJsDocSummary(specMember),
|
|
322
|
+
paramsTypeDescription: paramsDocs === null || paramsDocs === void 0 ? void 0 : paramsDocs.typeDescription,
|
|
323
|
+
paramsFields: paramsDocs === null || paramsDocs === void 0 ? void 0 : paramsDocs.fields,
|
|
324
|
+
resultTypeDescription: resultDocs === null || resultDocs === void 0 ? void 0 : resultDocs.typeDescription,
|
|
325
|
+
resultFields: resultDocs === null || resultDocs === void 0 ? void 0 : resultDocs.fields
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
} catch (err) {
|
|
329
|
+
_didIteratorError = true;
|
|
330
|
+
_iteratorError = err;
|
|
331
|
+
} finally{
|
|
332
|
+
try {
|
|
333
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
334
|
+
_iterator.return();
|
|
335
|
+
}
|
|
336
|
+
} finally{
|
|
337
|
+
if (_didIteratorError) {
|
|
338
|
+
throw _iteratorError;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
var leaf1 = (_readTupleParamsResult = readTupleParamsResult(valueNode)) !== null && _readTupleParamsResult !== void 0 ? _readTupleParamsResult : readBareParams(valueNode);
|
|
345
|
+
var paramsDocs1 = resolveTypeDocs(leaf1 === null || leaf1 === void 0 ? void 0 : leaf1.params);
|
|
346
|
+
var resultDocs1 = resolveTypeDocs(leaf1 === null || leaf1 === void 0 ? void 0 : leaf1.result);
|
|
347
|
+
entries.push({
|
|
348
|
+
model: modelName,
|
|
349
|
+
verb: verb,
|
|
350
|
+
specifier: undefined,
|
|
351
|
+
paramsTypeName: leaf1 === null || leaf1 === void 0 ? void 0 : leaf1.params,
|
|
352
|
+
resultTypeName: leaf1 === null || leaf1 === void 0 ? void 0 : leaf1.result,
|
|
353
|
+
line: valueNode.getStartLineNumber(),
|
|
354
|
+
description: fallbackDescription,
|
|
355
|
+
paramsTypeDescription: paramsDocs1 === null || paramsDocs1 === void 0 ? void 0 : paramsDocs1.typeDescription,
|
|
356
|
+
paramsFields: paramsDocs1 === null || paramsDocs1 === void 0 ? void 0 : paramsDocs1.fields,
|
|
357
|
+
resultTypeDescription: resultDocs1 === null || resultDocs1 === void 0 ? void 0 : resultDocs1.typeDescription,
|
|
358
|
+
resultFields: resultDocs1 === null || resultDocs1 === void 0 ? void 0 : resultDocs1.fields
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function readTupleParamsResult(node) {
|
|
362
|
+
if (!tsMorph.Node.isTupleTypeNode(node)) {
|
|
363
|
+
return undefined;
|
|
364
|
+
}
|
|
365
|
+
var elements = node.getElements();
|
|
366
|
+
if (elements.length === 0) {
|
|
367
|
+
return undefined;
|
|
368
|
+
}
|
|
369
|
+
var params = elements[0] ? typeNodeName(elements[0]) : undefined;
|
|
370
|
+
var result = elements[1] ? typeNodeName(elements[1]) : undefined;
|
|
371
|
+
return {
|
|
372
|
+
params: params,
|
|
373
|
+
result: result
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
function readBareParams(node) {
|
|
377
|
+
var params = typeNodeName(node);
|
|
378
|
+
if (!params) {
|
|
379
|
+
return undefined;
|
|
380
|
+
}
|
|
381
|
+
return {
|
|
382
|
+
params: params,
|
|
383
|
+
result: undefined
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
function typeNodeName(node) {
|
|
387
|
+
if (tsMorph.Node.isTypeReference(node)) {
|
|
388
|
+
return node.getTypeName().getText();
|
|
389
|
+
}
|
|
390
|
+
// Fall back to the raw text for primitive / inline types like `boolean`.
|
|
391
|
+
var text = node.getText().trim();
|
|
392
|
+
return text.length > 0 ? text : undefined;
|
|
393
|
+
}
|
|
394
|
+
function readTypeDocs(sourceFile, typeName) {
|
|
395
|
+
var interfaceDecl = sourceFile.getInterface(typeName);
|
|
396
|
+
if (interfaceDecl) {
|
|
397
|
+
var typeDescription = readJsDocSummary(interfaceDecl);
|
|
398
|
+
var fields = [];
|
|
399
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
400
|
+
try {
|
|
401
|
+
for(var _iterator = interfaceDecl.getProperties()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
402
|
+
var property = _step.value;
|
|
403
|
+
var _ref;
|
|
404
|
+
var fieldName = property.getName();
|
|
405
|
+
var description = readJsDocSummary(property);
|
|
406
|
+
var typeNode = property.getTypeNode();
|
|
407
|
+
var typeText = (_ref = typeNode === null || typeNode === void 0 ? void 0 : typeNode.getText().trim()) !== null && _ref !== void 0 ? _ref : '';
|
|
408
|
+
var field = description ? {
|
|
409
|
+
name: fieldName,
|
|
410
|
+
typeText: typeText,
|
|
411
|
+
description: description
|
|
412
|
+
} : {
|
|
413
|
+
name: fieldName,
|
|
414
|
+
typeText: typeText
|
|
415
|
+
};
|
|
416
|
+
fields.push(field);
|
|
417
|
+
}
|
|
418
|
+
} catch (err) {
|
|
419
|
+
_didIteratorError = true;
|
|
420
|
+
_iteratorError = err;
|
|
421
|
+
} finally{
|
|
422
|
+
try {
|
|
423
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
424
|
+
_iterator.return();
|
|
425
|
+
}
|
|
426
|
+
} finally{
|
|
427
|
+
if (_didIteratorError) {
|
|
428
|
+
throw _iteratorError;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (!typeDescription && fields.length === 0) {
|
|
433
|
+
return undefined;
|
|
434
|
+
}
|
|
435
|
+
return {
|
|
436
|
+
typeDescription: typeDescription,
|
|
437
|
+
fields: fields.length > 0 ? fields : undefined
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
var typeAlias = sourceFile.getTypeAlias(typeName);
|
|
441
|
+
if (typeAlias) {
|
|
442
|
+
var typeDescription1 = readJsDocSummary(typeAlias);
|
|
443
|
+
return typeDescription1 ? {
|
|
444
|
+
typeDescription: typeDescription1
|
|
445
|
+
} : undefined;
|
|
446
|
+
}
|
|
447
|
+
return undefined;
|
|
448
|
+
}
|
|
449
|
+
function readJsDocSummary(node) {
|
|
450
|
+
var docs = node.getJsDocs();
|
|
451
|
+
if (docs.length === 0) {
|
|
452
|
+
return undefined;
|
|
453
|
+
}
|
|
454
|
+
var last = docs[docs.length - 1];
|
|
455
|
+
var description = last.getDescription().trim();
|
|
456
|
+
return description.length > 0 ? description : undefined;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
exports.extractCrudEntries = extractCrudEntries;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./src/index";
|