@dereekb/dbx-cli 13.11.14 → 13.11.16
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 +345 -255
- package/firebase-api-manifest/package.json +1 -1
- package/generate-firestore-indexes/main.js +2202 -0
- package/generate-firestore-indexes/package.json +9 -0
- package/index.cjs.js +1102 -933
- package/index.esm.js +1100 -931
- package/lint-cache/main.js +655 -0
- package/lint-cache/package.json +12 -0
- package/manifest-extract/index.cjs.js +152 -125
- package/manifest-extract/index.esm.js +152 -125
- package/manifest-extract/package.json +1 -1
- package/manifest-extract/src/lib/extract-crud.d.ts +2 -2
- package/manifest-extract/src/lib/extract-models.d.ts +2 -2
- package/package.json +16 -7
- package/src/lib/action/iterate.d.ts +3 -4
- package/src/lib/api/call.passthrough.command.d.ts +1 -1
- package/src/lib/api/expand-keys.d.ts +9 -7
- package/src/lib/api/get-args.helper.d.ts +6 -0
- package/src/lib/api/get-many.command.d.ts +1 -1
- package/src/lib/api/get.command.d.ts +1 -1
- package/src/lib/auth/oidc.flow.d.ts +3 -0
- package/src/lib/manifest/build-manifest-commands.d.ts +4 -2
- package/src/lib/manifest/build-model-decode-command.d.ts +5 -2
- package/src/lib/manifest/model-info-utils.d.ts +13 -9
- package/src/lib/middleware/auth.middleware.d.ts +3 -2
- package/src/lib/scan-helpers/scan-extract-utils.d.ts +85 -0
- package/src/lib/scan-helpers/scan-io.d.ts +130 -0
- package/test/package.json +9 -9
|
@@ -14,8 +14,8 @@ var SUPPORTED_VERBS = new Set([
|
|
|
14
14
|
* callable leaf (CRUD or standalone). Best-effort: malformed configs return
|
|
15
15
|
* fewer entries rather than throwing.
|
|
16
16
|
*
|
|
17
|
-
* @param source -
|
|
18
|
-
* @returns
|
|
17
|
+
* @param source - In-memory source name + text pair to extract.
|
|
18
|
+
* @returns The CRUD extraction with group name, model keys, entries, and
|
|
19
19
|
* `*Functions` class name (when present).
|
|
20
20
|
*/ // eslint-disable-next-line sonarjs/cognitive-complexity
|
|
21
21
|
function extractCrudEntries(source) {
|
|
@@ -33,17 +33,18 @@ function extractCrudEntries(source) {
|
|
|
33
33
|
var functionsClassName = findFunctionsClassName(sourceFile);
|
|
34
34
|
var typeDocsCache = new Map();
|
|
35
35
|
var resolveTypeDocs = function resolveTypeDocs(typeName) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
var result;
|
|
37
|
+
if (typeName) {
|
|
38
|
+
if (typeDocsCache.has(typeName)) {
|
|
39
|
+
result = typeDocsCache.get(typeName);
|
|
40
|
+
} else {
|
|
41
|
+
result = readTypeDocs(sourceFile, typeName);
|
|
42
|
+
if (result) {
|
|
43
|
+
typeDocsCache.set(typeName, result);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
45
46
|
}
|
|
46
|
-
return
|
|
47
|
+
return result;
|
|
47
48
|
};
|
|
48
49
|
if (crudConfigType) {
|
|
49
50
|
var literal = crudConfigType.getTypeNode();
|
|
@@ -176,12 +177,14 @@ function extractCrudEntries(source) {
|
|
|
176
177
|
};
|
|
177
178
|
}
|
|
178
179
|
function findTypeAliasByEnding(sourceFile, ending) {
|
|
180
|
+
var result;
|
|
179
181
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
180
182
|
try {
|
|
181
183
|
for(var _iterator = sourceFile.getTypeAliases()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
182
184
|
var alias = _step.value;
|
|
183
185
|
if (alias.getName().endsWith(ending) && alias.getTypeNode()) {
|
|
184
|
-
|
|
186
|
+
result = alias;
|
|
187
|
+
break;
|
|
185
188
|
}
|
|
186
189
|
}
|
|
187
190
|
} catch (err) {
|
|
@@ -198,9 +201,10 @@ function findTypeAliasByEnding(sourceFile, ending) {
|
|
|
198
201
|
}
|
|
199
202
|
}
|
|
200
203
|
}
|
|
201
|
-
return
|
|
204
|
+
return result;
|
|
202
205
|
}
|
|
203
206
|
function findFunctionsClassName(sourceFile) {
|
|
207
|
+
var result;
|
|
204
208
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
205
209
|
try {
|
|
206
210
|
for(var _iterator = sourceFile.getClasses()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -210,7 +214,8 @@ function findFunctionsClassName(sourceFile) {
|
|
|
210
214
|
}
|
|
211
215
|
var name = cls.getName();
|
|
212
216
|
if (name === null || name === void 0 ? void 0 : name.endsWith('Functions')) {
|
|
213
|
-
|
|
217
|
+
result = name;
|
|
218
|
+
break;
|
|
214
219
|
}
|
|
215
220
|
}
|
|
216
221
|
} catch (err) {
|
|
@@ -227,9 +232,10 @@ function findFunctionsClassName(sourceFile) {
|
|
|
227
232
|
}
|
|
228
233
|
}
|
|
229
234
|
}
|
|
230
|
-
return
|
|
235
|
+
return result;
|
|
231
236
|
}
|
|
232
237
|
function inferGroupName(sourceFile) {
|
|
238
|
+
var result;
|
|
233
239
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
234
240
|
try {
|
|
235
241
|
for(var _iterator = sourceFile.getTypeAliases()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
@@ -238,7 +244,8 @@ function inferGroupName(sourceFile) {
|
|
|
238
244
|
if (name.endsWith('ModelCrudFunctionsConfig')) {
|
|
239
245
|
var stem = name.slice(0, -'ModelCrudFunctionsConfig'.length);
|
|
240
246
|
if (stem.length > 0) {
|
|
241
|
-
|
|
247
|
+
result = stem;
|
|
248
|
+
break;
|
|
242
249
|
}
|
|
243
250
|
}
|
|
244
251
|
}
|
|
@@ -256,42 +263,46 @@ function inferGroupName(sourceFile) {
|
|
|
256
263
|
}
|
|
257
264
|
}
|
|
258
265
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
for(var _iterator1 = sourceFile.getTypeAliases()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
262
|
-
var alias1 = _step1.value;
|
|
263
|
-
var name1 = alias1.getName();
|
|
264
|
-
if (name1.endsWith('FunctionTypeMap')) {
|
|
265
|
-
var stem1 = name1.slice(0, -'FunctionTypeMap'.length);
|
|
266
|
-
if (stem1.length > 0) {
|
|
267
|
-
return stem1;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
} catch (err) {
|
|
272
|
-
_didIteratorError1 = true;
|
|
273
|
-
_iteratorError1 = err;
|
|
274
|
-
} finally{
|
|
266
|
+
if (result === undefined) {
|
|
267
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
275
268
|
try {
|
|
276
|
-
|
|
277
|
-
|
|
269
|
+
for(var _iterator1 = sourceFile.getTypeAliases()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
270
|
+
var alias1 = _step1.value;
|
|
271
|
+
var name1 = alias1.getName();
|
|
272
|
+
if (name1.endsWith('FunctionTypeMap')) {
|
|
273
|
+
var stem1 = name1.slice(0, -'FunctionTypeMap'.length);
|
|
274
|
+
if (stem1.length > 0) {
|
|
275
|
+
result = stem1;
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
278
279
|
}
|
|
280
|
+
} catch (err) {
|
|
281
|
+
_didIteratorError1 = true;
|
|
282
|
+
_iteratorError1 = err;
|
|
279
283
|
} finally{
|
|
280
|
-
|
|
281
|
-
|
|
284
|
+
try {
|
|
285
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
286
|
+
_iterator1.return();
|
|
287
|
+
}
|
|
288
|
+
} finally{
|
|
289
|
+
if (_didIteratorError1) {
|
|
290
|
+
throw _iteratorError1;
|
|
291
|
+
}
|
|
282
292
|
}
|
|
283
293
|
}
|
|
284
294
|
}
|
|
285
|
-
return
|
|
295
|
+
return result;
|
|
286
296
|
}
|
|
287
297
|
function isNullLiteralType(node) {
|
|
298
|
+
var result = false;
|
|
288
299
|
if (tsMorph.Node.isLiteralTypeNode(node)) {
|
|
289
300
|
var literal = node.getLiteral();
|
|
290
301
|
if (tsMorph.Node.isNullLiteral(literal)) {
|
|
291
|
-
|
|
302
|
+
result = true;
|
|
292
303
|
}
|
|
293
304
|
}
|
|
294
|
-
return
|
|
305
|
+
return result;
|
|
295
306
|
}
|
|
296
307
|
function collectVerbEntries(input) {
|
|
297
308
|
var _readTupleParamsResult;
|
|
@@ -358,39 +369,40 @@ function collectVerbEntries(input) {
|
|
|
358
369
|
});
|
|
359
370
|
}
|
|
360
371
|
function readTupleParamsResult(node) {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
372
|
+
var pair;
|
|
373
|
+
if (tsMorph.Node.isTupleTypeNode(node)) {
|
|
374
|
+
var elements = node.getElements();
|
|
375
|
+
if (elements.length > 0) {
|
|
376
|
+
var params = elements[0] ? typeNodeName(elements[0]) : undefined;
|
|
377
|
+
var result = elements[1] ? typeNodeName(elements[1]) : undefined;
|
|
378
|
+
pair = {
|
|
379
|
+
params: params,
|
|
380
|
+
result: result
|
|
381
|
+
};
|
|
382
|
+
}
|
|
367
383
|
}
|
|
368
|
-
|
|
369
|
-
var result = elements[1] ? typeNodeName(elements[1]) : undefined;
|
|
370
|
-
return {
|
|
371
|
-
params: params,
|
|
372
|
-
result: result
|
|
373
|
-
};
|
|
384
|
+
return pair;
|
|
374
385
|
}
|
|
375
386
|
function readBareParams(node) {
|
|
376
387
|
var params = typeNodeName(node);
|
|
377
|
-
|
|
378
|
-
return undefined;
|
|
379
|
-
}
|
|
380
|
-
return {
|
|
388
|
+
return params ? {
|
|
381
389
|
params: params,
|
|
382
390
|
result: undefined
|
|
383
|
-
};
|
|
391
|
+
} : undefined;
|
|
384
392
|
}
|
|
385
393
|
function typeNodeName(node) {
|
|
394
|
+
var result;
|
|
386
395
|
if (tsMorph.Node.isTypeReference(node)) {
|
|
387
|
-
|
|
396
|
+
result = node.getTypeName().getText();
|
|
397
|
+
} else {
|
|
398
|
+
// Fall back to the raw text for primitive / inline types like `boolean`.
|
|
399
|
+
var text = node.getText().trim();
|
|
400
|
+
result = text.length > 0 ? text : undefined;
|
|
388
401
|
}
|
|
389
|
-
|
|
390
|
-
var text = node.getText().trim();
|
|
391
|
-
return text.length > 0 ? text : undefined;
|
|
402
|
+
return result;
|
|
392
403
|
}
|
|
393
404
|
function readTypeDocs(sourceFile, typeName) {
|
|
405
|
+
var result;
|
|
394
406
|
var interfaceDecl = sourceFile.getInterface(typeName);
|
|
395
407
|
if (interfaceDecl) {
|
|
396
408
|
var typeDescription = readJsDocSummary(interfaceDecl);
|
|
@@ -428,31 +440,36 @@ function readTypeDocs(sourceFile, typeName) {
|
|
|
428
440
|
}
|
|
429
441
|
}
|
|
430
442
|
}
|
|
431
|
-
if (
|
|
432
|
-
|
|
443
|
+
if (typeDescription || fields.length > 0) {
|
|
444
|
+
result = {
|
|
445
|
+
typeDescription: typeDescription,
|
|
446
|
+
fields: fields.length > 0 ? fields : undefined
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
} else {
|
|
450
|
+
var typeAlias = sourceFile.getTypeAlias(typeName);
|
|
451
|
+
if (typeAlias) {
|
|
452
|
+
var typeDescription1 = readJsDocSummary(typeAlias);
|
|
453
|
+
if (typeDescription1) {
|
|
454
|
+
result = {
|
|
455
|
+
typeDescription: typeDescription1
|
|
456
|
+
};
|
|
457
|
+
}
|
|
433
458
|
}
|
|
434
|
-
return {
|
|
435
|
-
typeDescription: typeDescription,
|
|
436
|
-
fields: fields.length > 0 ? fields : undefined
|
|
437
|
-
};
|
|
438
459
|
}
|
|
439
|
-
|
|
440
|
-
if (typeAlias) {
|
|
441
|
-
var typeDescription1 = readJsDocSummary(typeAlias);
|
|
442
|
-
return typeDescription1 ? {
|
|
443
|
-
typeDescription: typeDescription1
|
|
444
|
-
} : undefined;
|
|
445
|
-
}
|
|
446
|
-
return undefined;
|
|
460
|
+
return result;
|
|
447
461
|
}
|
|
448
462
|
function readJsDocSummary(node) {
|
|
463
|
+
var result;
|
|
449
464
|
var docs = node.getJsDocs();
|
|
450
|
-
if (docs.length
|
|
451
|
-
|
|
465
|
+
if (docs.length > 0) {
|
|
466
|
+
var last = docs[docs.length - 1];
|
|
467
|
+
var description = last.getDescription().trim();
|
|
468
|
+
if (description.length > 0) {
|
|
469
|
+
result = description;
|
|
470
|
+
}
|
|
452
471
|
}
|
|
453
|
-
|
|
454
|
-
var description = last.getDescription().trim();
|
|
455
|
-
return description.length > 0 ? description : undefined;
|
|
472
|
+
return result;
|
|
456
473
|
}
|
|
457
474
|
|
|
458
475
|
function _define_property(obj, key, value) {
|
|
@@ -518,8 +535,8 @@ var OBJECT_FIELD_KEY = 'objectField';
|
|
|
518
535
|
* Best-effort: a malformed call shape leaves the corresponding entry out
|
|
519
536
|
* rather than throwing.
|
|
520
537
|
*
|
|
521
|
-
* @param input -
|
|
522
|
-
* @returns
|
|
538
|
+
* @param input - In-memory `{ name, text }` source pair.
|
|
539
|
+
* @returns The per-file extraction. Aggregation across files happens in the
|
|
523
540
|
* firebase-api-manifest orchestrator so cross-file converter consts can be
|
|
524
541
|
* resolved against a global registry.
|
|
525
542
|
*/ function extractModelsFromSource(input) {
|
|
@@ -716,8 +733,8 @@ function buildInterface(decl) {
|
|
|
716
733
|
* through utility-wrapped declarations like
|
|
717
734
|
* `extends Partial<MaybeMap<Omit<Base, '…'>>>`.
|
|
718
735
|
*
|
|
719
|
-
* @param expr -
|
|
720
|
-
* @returns
|
|
736
|
+
* @param expr - The `ExpressionWithTypeArguments` produced by `getExtends()`
|
|
737
|
+
* @returns The resolved interface name, or the original leftmost identifier when no inner reference is reachable.
|
|
721
738
|
*/ function resolveExtendsName(expr) {
|
|
722
739
|
var head = expr.getExpression().getText();
|
|
723
740
|
var result = head;
|
|
@@ -822,20 +839,25 @@ function readGenericInterfaceName(call) {
|
|
|
822
839
|
function readConverterFields(call) {
|
|
823
840
|
var fnName = call.getExpression().getText();
|
|
824
841
|
var args = call.getArguments();
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
842
|
+
var result;
|
|
843
|
+
if (args.length > 0) {
|
|
844
|
+
var config = args[0];
|
|
845
|
+
if (tsMorph.Node.isObjectLiteralExpression(config)) {
|
|
846
|
+
var fieldsLiteral;
|
|
847
|
+
if (fnName === SNAPSHOT_FN) {
|
|
848
|
+
fieldsLiteral = readObjectProperty(config, FIELDS_LITERAL_KEY);
|
|
849
|
+
} else {
|
|
850
|
+
var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
|
|
851
|
+
if (objectField && tsMorph.Node.isObjectLiteralExpression(objectField)) {
|
|
852
|
+
fieldsLiteral = readObjectProperty(objectField, FIELDS_LITERAL_KEY);
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
if (fieldsLiteral) {
|
|
856
|
+
result = readFieldEntries(fieldsLiteral);
|
|
857
|
+
}
|
|
835
858
|
}
|
|
836
859
|
}
|
|
837
|
-
|
|
838
|
-
return readFieldEntries(fieldsLiteral);
|
|
860
|
+
return result;
|
|
839
861
|
}
|
|
840
862
|
function readFieldEntries(fields) {
|
|
841
863
|
var out = [];
|
|
@@ -879,36 +901,41 @@ function readFieldEntries(fields) {
|
|
|
879
901
|
return out;
|
|
880
902
|
}
|
|
881
903
|
function readNestedFromExpression(expr) {
|
|
882
|
-
if (!tsMorph.Node.isCallExpression(expr)) return undefined;
|
|
883
|
-
var fnName = expr.getExpression().getText();
|
|
884
|
-
if (fnName !== SUB_OBJECT_FN && fnName !== OBJECT_ARRAY_FN) return undefined;
|
|
885
|
-
var args = expr.getArguments();
|
|
886
|
-
if (args.length === 0) return undefined;
|
|
887
|
-
var config = args[0];
|
|
888
|
-
if (!tsMorph.Node.isObjectLiteralExpression(config)) return undefined;
|
|
889
|
-
var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
|
|
890
|
-
if (!objectField) return undefined;
|
|
891
|
-
var isArray = fnName === OBJECT_ARRAY_FN;
|
|
892
904
|
var result;
|
|
893
|
-
if (tsMorph.Node.
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
905
|
+
if (tsMorph.Node.isCallExpression(expr)) {
|
|
906
|
+
var fnName = expr.getExpression().getText();
|
|
907
|
+
if (fnName === SUB_OBJECT_FN || fnName === OBJECT_ARRAY_FN) {
|
|
908
|
+
var args = expr.getArguments();
|
|
909
|
+
if (args.length > 0) {
|
|
910
|
+
var config = args[0];
|
|
911
|
+
if (tsMorph.Node.isObjectLiteralExpression(config)) {
|
|
912
|
+
var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
|
|
913
|
+
if (objectField) {
|
|
914
|
+
var isArray = fnName === OBJECT_ARRAY_FN;
|
|
915
|
+
if (tsMorph.Node.isIdentifier(objectField)) {
|
|
916
|
+
result = {
|
|
917
|
+
ref: objectField.getText(),
|
|
918
|
+
isArray: isArray
|
|
919
|
+
};
|
|
920
|
+
} else if (tsMorph.Node.isObjectLiteralExpression(objectField)) {
|
|
921
|
+
var fieldsLiteral = readObjectProperty(objectField, FIELDS_LITERAL_KEY);
|
|
922
|
+
if (fieldsLiteral) {
|
|
923
|
+
var inlineFields = readFieldEntries(fieldsLiteral);
|
|
924
|
+
result = {
|
|
925
|
+
inline: {
|
|
926
|
+
converterConst: undefined,
|
|
927
|
+
factory: fnName,
|
|
928
|
+
interfaceName: readGenericInterfaceName(expr),
|
|
929
|
+
fields: inlineFields,
|
|
930
|
+
line: expr.getStartLineNumber()
|
|
931
|
+
},
|
|
932
|
+
isArray: isArray
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
}
|
|
912
939
|
}
|
|
913
940
|
}
|
|
914
941
|
return result;
|