@dereekb/dbx-cli 13.11.3 → 13.11.5
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 +666 -16
- package/firebase-api-manifest/package.json +1 -1
- package/index.cjs.js +593 -50
- package/index.esm.js +587 -52
- package/manifest-extract/index.cjs.js +705 -0
- package/manifest-extract/index.esm.js +705 -1
- package/manifest-extract/package.json +1 -1
- package/manifest-extract/src/index.d.ts +1 -0
- package/manifest-extract/src/lib/extract-models.d.ts +33 -0
- package/manifest-extract/src/lib/types.d.ts +148 -0
- package/package.json +5 -4
- package/src/lib/api/expand-keys.d.ts +31 -0
- package/src/lib/api/index.d.ts +1 -0
- package/src/lib/auth/oidc.flow.d.ts +7 -0
- package/src/lib/manifest/build-manifest-commands.d.ts +12 -1
- package/src/lib/manifest/build-model-info-command.d.ts +37 -0
- package/src/lib/manifest/index.d.ts +2 -0
- package/src/lib/manifest/model-info-utils.d.ts +40 -0
- package/src/lib/manifest/types.d.ts +126 -0
- package/src/lib/runner/run.d.ts +29 -0
|
@@ -456,4 +456,709 @@ function readJsDocSummary(node) {
|
|
|
456
456
|
return description.length > 0 ? description : undefined;
|
|
457
457
|
}
|
|
458
458
|
|
|
459
|
+
function _define_property(obj, key, value) {
|
|
460
|
+
if (key in obj) {
|
|
461
|
+
Object.defineProperty(obj, key, {
|
|
462
|
+
value: value,
|
|
463
|
+
enumerable: true,
|
|
464
|
+
configurable: true,
|
|
465
|
+
writable: true
|
|
466
|
+
});
|
|
467
|
+
} else {
|
|
468
|
+
obj[key] = value;
|
|
469
|
+
}
|
|
470
|
+
return obj;
|
|
471
|
+
}
|
|
472
|
+
function _object_spread(target) {
|
|
473
|
+
for(var i = 1; i < arguments.length; i++){
|
|
474
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
475
|
+
var ownKeys = Object.keys(source);
|
|
476
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
477
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
478
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
479
|
+
}));
|
|
480
|
+
}
|
|
481
|
+
ownKeys.forEach(function(key) {
|
|
482
|
+
_define_property(target, key, source[key]);
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
return target;
|
|
486
|
+
}
|
|
487
|
+
var IDENTITY_FN = 'firestoreModelIdentity';
|
|
488
|
+
var CONVERTER_FN_NAMES = [
|
|
489
|
+
'snapshotConverterFunctions',
|
|
490
|
+
'firestoreSubObject',
|
|
491
|
+
'firestoreObjectArray'
|
|
492
|
+
];
|
|
493
|
+
var SUB_OBJECT_FN = 'firestoreSubObject';
|
|
494
|
+
var OBJECT_ARRAY_FN = 'firestoreObjectArray';
|
|
495
|
+
var SNAPSHOT_FN = 'snapshotConverterFunctions';
|
|
496
|
+
var FIELDS_LITERAL_KEY = 'fields';
|
|
497
|
+
var OBJECT_FIELD_KEY = 'objectField';
|
|
498
|
+
/**
|
|
499
|
+
* Walks a single source file and reports raw model-extraction artifacts.
|
|
500
|
+
* Best-effort: a malformed call shape leaves the corresponding entry out
|
|
501
|
+
* rather than throwing.
|
|
502
|
+
*
|
|
503
|
+
* @param input - in-memory `{ name, text }` source pair.
|
|
504
|
+
* @returns the per-file extraction. Aggregation across files happens in the
|
|
505
|
+
* firebase-api-manifest orchestrator so cross-file converter consts can be
|
|
506
|
+
* resolved against a global registry.
|
|
507
|
+
*/ function extractModelsFromSource(input) {
|
|
508
|
+
var project = new tsMorph.Project({
|
|
509
|
+
useInMemoryFileSystem: true,
|
|
510
|
+
skipAddingFilesFromTsConfig: true
|
|
511
|
+
});
|
|
512
|
+
var sourceFile = project.createSourceFile(input.name, input.text, {
|
|
513
|
+
overwrite: true
|
|
514
|
+
});
|
|
515
|
+
var identities = readIdentities(sourceFile);
|
|
516
|
+
var interfaces = readInterfaces(sourceFile);
|
|
517
|
+
var converters = readConverters(sourceFile);
|
|
518
|
+
var enums = readEnums(sourceFile);
|
|
519
|
+
var modelGroups = readModelGroups(sourceFile);
|
|
520
|
+
return {
|
|
521
|
+
identities: identities,
|
|
522
|
+
interfaces: interfaces,
|
|
523
|
+
converters: converters,
|
|
524
|
+
enums: enums,
|
|
525
|
+
modelGroups: modelGroups
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
function readIdentities(sourceFile) {
|
|
529
|
+
var out = [];
|
|
530
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
531
|
+
try {
|
|
532
|
+
for(var _iterator = sourceFile.getVariableStatements()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
533
|
+
var statement = _step.value;
|
|
534
|
+
if (!statement.isExported()) continue;
|
|
535
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
536
|
+
try {
|
|
537
|
+
for(var _iterator1 = statement.getDeclarations()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
538
|
+
var decl = _step1.value;
|
|
539
|
+
var initializer = decl.getInitializer();
|
|
540
|
+
if (!initializer || !tsMorph.Node.isCallExpression(initializer)) continue;
|
|
541
|
+
if (initializer.getExpression().getText() !== IDENTITY_FN) continue;
|
|
542
|
+
var parsed = parseIdentityArgs(initializer);
|
|
543
|
+
if (parsed) {
|
|
544
|
+
out.push(_object_spread({
|
|
545
|
+
identityConst: decl.getName()
|
|
546
|
+
}, parsed));
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
} catch (err) {
|
|
550
|
+
_didIteratorError1 = true;
|
|
551
|
+
_iteratorError1 = err;
|
|
552
|
+
} finally{
|
|
553
|
+
try {
|
|
554
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
555
|
+
_iterator1.return();
|
|
556
|
+
}
|
|
557
|
+
} finally{
|
|
558
|
+
if (_didIteratorError1) {
|
|
559
|
+
throw _iteratorError1;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
} catch (err) {
|
|
565
|
+
_didIteratorError = true;
|
|
566
|
+
_iteratorError = err;
|
|
567
|
+
} finally{
|
|
568
|
+
try {
|
|
569
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
570
|
+
_iterator.return();
|
|
571
|
+
}
|
|
572
|
+
} finally{
|
|
573
|
+
if (_didIteratorError) {
|
|
574
|
+
throw _iteratorError;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
return out;
|
|
579
|
+
}
|
|
580
|
+
function parseIdentityArgs(call) {
|
|
581
|
+
var args = call.getArguments();
|
|
582
|
+
var result;
|
|
583
|
+
if (args.length === 1) {
|
|
584
|
+
var modelType = stringLiteralValue(args[0]);
|
|
585
|
+
if (modelType !== undefined) {
|
|
586
|
+
result = {
|
|
587
|
+
modelType: modelType,
|
|
588
|
+
collectionPrefix: undefined,
|
|
589
|
+
parentIdentityConst: undefined
|
|
590
|
+
};
|
|
591
|
+
}
|
|
592
|
+
} else if (args.length === 2) {
|
|
593
|
+
var first = stringLiteralValue(args[0]);
|
|
594
|
+
if (first === undefined) {
|
|
595
|
+
var modelType1 = stringLiteralValue(args[1]);
|
|
596
|
+
if (modelType1 !== undefined) {
|
|
597
|
+
result = {
|
|
598
|
+
modelType: modelType1,
|
|
599
|
+
collectionPrefix: undefined,
|
|
600
|
+
parentIdentityConst: identifierName(args[0])
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
} else {
|
|
604
|
+
result = {
|
|
605
|
+
modelType: first,
|
|
606
|
+
collectionPrefix: stringLiteralValue(args[1]),
|
|
607
|
+
parentIdentityConst: undefined
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
} else if (args.length >= 3) {
|
|
611
|
+
var modelType2 = stringLiteralValue(args[1]);
|
|
612
|
+
if (modelType2 !== undefined) {
|
|
613
|
+
result = {
|
|
614
|
+
modelType: modelType2,
|
|
615
|
+
collectionPrefix: stringLiteralValue(args[2]),
|
|
616
|
+
parentIdentityConst: identifierName(args[0])
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
return result;
|
|
621
|
+
}
|
|
622
|
+
function readInterfaces(sourceFile) {
|
|
623
|
+
var out = [];
|
|
624
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
625
|
+
try {
|
|
626
|
+
for(var _iterator = sourceFile.getInterfaces()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
627
|
+
var decl = _step.value;
|
|
628
|
+
if (!decl.isExported()) continue;
|
|
629
|
+
out.push(buildInterface(decl));
|
|
630
|
+
}
|
|
631
|
+
} catch (err) {
|
|
632
|
+
_didIteratorError = true;
|
|
633
|
+
_iteratorError = err;
|
|
634
|
+
} finally{
|
|
635
|
+
try {
|
|
636
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
637
|
+
_iterator.return();
|
|
638
|
+
}
|
|
639
|
+
} finally{
|
|
640
|
+
if (_didIteratorError) {
|
|
641
|
+
throw _iteratorError;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
return out;
|
|
646
|
+
}
|
|
647
|
+
function buildInterface(decl) {
|
|
648
|
+
var jsDocs = decl.getJsDocs();
|
|
649
|
+
var hasDbxModelTag = jsDocsHaveTag(jsDocs, 'dbxModel');
|
|
650
|
+
var extendsNames = decl.getExtends().map(function(e) {
|
|
651
|
+
return e.getExpression().getText();
|
|
652
|
+
});
|
|
653
|
+
var props = [];
|
|
654
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
655
|
+
try {
|
|
656
|
+
for(var _iterator = decl.getProperties()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
657
|
+
var prop = _step.value;
|
|
658
|
+
var _ref;
|
|
659
|
+
var _prop_getTypeNode;
|
|
660
|
+
var propJsDocs = prop.getJsDocs();
|
|
661
|
+
var longName = readJsDocTagText(propJsDocs, 'dbxModelVariable');
|
|
662
|
+
var syncFlag = readJsDocTagText(propJsDocs, 'dbxModelVariableSyncFlag');
|
|
663
|
+
var tsType = ((_ref = (_prop_getTypeNode = prop.getTypeNode()) === null || _prop_getTypeNode === void 0 ? void 0 : _prop_getTypeNode.getText()) !== null && _ref !== void 0 ? _ref : '').replaceAll(/\s+/g, ' ').trim();
|
|
664
|
+
var optional = prop.hasQuestionToken() || tsType.startsWith('Maybe<');
|
|
665
|
+
props.push({
|
|
666
|
+
name: prop.getName(),
|
|
667
|
+
tsType: tsType,
|
|
668
|
+
optional: optional,
|
|
669
|
+
description: readJsDocDescription(propJsDocs),
|
|
670
|
+
longName: longName,
|
|
671
|
+
syncFlag: syncFlag
|
|
672
|
+
});
|
|
673
|
+
}
|
|
674
|
+
} catch (err) {
|
|
675
|
+
_didIteratorError = true;
|
|
676
|
+
_iteratorError = err;
|
|
677
|
+
} finally{
|
|
678
|
+
try {
|
|
679
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
680
|
+
_iterator.return();
|
|
681
|
+
}
|
|
682
|
+
} finally{
|
|
683
|
+
if (_didIteratorError) {
|
|
684
|
+
throw _iteratorError;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
return {
|
|
689
|
+
name: decl.getName(),
|
|
690
|
+
description: readJsDocDescription(jsDocs),
|
|
691
|
+
hasDbxModelTag: hasDbxModelTag,
|
|
692
|
+
extendsNames: extendsNames,
|
|
693
|
+
props: props
|
|
694
|
+
};
|
|
695
|
+
}
|
|
696
|
+
function readConverters(sourceFile) {
|
|
697
|
+
var out = [];
|
|
698
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
699
|
+
try {
|
|
700
|
+
for(var _iterator = sourceFile.getVariableStatements()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
701
|
+
var statement = _step.value;
|
|
702
|
+
if (!statement.isExported()) continue;
|
|
703
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
704
|
+
try {
|
|
705
|
+
for(var _iterator1 = statement.getDeclarations()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
706
|
+
var decl = _step1.value;
|
|
707
|
+
var initializer = decl.getInitializer();
|
|
708
|
+
if (!initializer || !tsMorph.Node.isCallExpression(initializer)) continue;
|
|
709
|
+
var factory = initializer.getExpression().getText();
|
|
710
|
+
if (!isConverterFactoryName(factory)) continue;
|
|
711
|
+
var interfaceName = readGenericInterfaceName(initializer);
|
|
712
|
+
var fields = readConverterFields(initializer);
|
|
713
|
+
if (!fields) continue;
|
|
714
|
+
out.push({
|
|
715
|
+
converterConst: decl.getName(),
|
|
716
|
+
factory: factory,
|
|
717
|
+
interfaceName: interfaceName,
|
|
718
|
+
fields: fields,
|
|
719
|
+
line: decl.getStartLineNumber()
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
} catch (err) {
|
|
723
|
+
_didIteratorError1 = true;
|
|
724
|
+
_iteratorError1 = err;
|
|
725
|
+
} finally{
|
|
726
|
+
try {
|
|
727
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
728
|
+
_iterator1.return();
|
|
729
|
+
}
|
|
730
|
+
} finally{
|
|
731
|
+
if (_didIteratorError1) {
|
|
732
|
+
throw _iteratorError1;
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
737
|
+
} catch (err) {
|
|
738
|
+
_didIteratorError = true;
|
|
739
|
+
_iteratorError = err;
|
|
740
|
+
} finally{
|
|
741
|
+
try {
|
|
742
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
743
|
+
_iterator.return();
|
|
744
|
+
}
|
|
745
|
+
} finally{
|
|
746
|
+
if (_didIteratorError) {
|
|
747
|
+
throw _iteratorError;
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
}
|
|
751
|
+
return out;
|
|
752
|
+
}
|
|
753
|
+
function isConverterFactoryName(name) {
|
|
754
|
+
return CONVERTER_FN_NAMES.includes(name);
|
|
755
|
+
}
|
|
756
|
+
function readGenericInterfaceName(call) {
|
|
757
|
+
var typeArgs = call.getTypeArguments();
|
|
758
|
+
var result;
|
|
759
|
+
if (typeArgs.length > 0) {
|
|
760
|
+
result = typeArgs[0].getText().replaceAll(/<[^>]*>/g, '').trim();
|
|
761
|
+
}
|
|
762
|
+
return result;
|
|
763
|
+
}
|
|
764
|
+
function readConverterFields(call) {
|
|
765
|
+
var fnName = call.getExpression().getText();
|
|
766
|
+
var args = call.getArguments();
|
|
767
|
+
if (args.length === 0) return undefined;
|
|
768
|
+
var config = args[0];
|
|
769
|
+
if (!tsMorph.Node.isObjectLiteralExpression(config)) return undefined;
|
|
770
|
+
var fieldsLiteral;
|
|
771
|
+
if (fnName === SNAPSHOT_FN) {
|
|
772
|
+
fieldsLiteral = readObjectProperty(config, FIELDS_LITERAL_KEY);
|
|
773
|
+
} else {
|
|
774
|
+
var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
|
|
775
|
+
if (objectField && tsMorph.Node.isObjectLiteralExpression(objectField)) {
|
|
776
|
+
fieldsLiteral = readObjectProperty(objectField, FIELDS_LITERAL_KEY);
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
if (!fieldsLiteral) return undefined;
|
|
780
|
+
return readFieldEntries(fieldsLiteral);
|
|
781
|
+
}
|
|
782
|
+
function readFieldEntries(fields) {
|
|
783
|
+
var out = [];
|
|
784
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
785
|
+
try {
|
|
786
|
+
for(var _iterator = fields.getProperties()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
787
|
+
var property = _step.value;
|
|
788
|
+
if (tsMorph.Node.isPropertyAssignment(property)) {
|
|
789
|
+
var initializer = property.getInitializer();
|
|
790
|
+
var converterText = initializer ? initializer.getText().replaceAll(/\s+/g, ' ').trim() : '';
|
|
791
|
+
var nested = initializer ? readNestedFromExpression(initializer) : undefined;
|
|
792
|
+
out.push({
|
|
793
|
+
key: property.getName(),
|
|
794
|
+
converter: converterText,
|
|
795
|
+
nestedConverterRef: nested === null || nested === void 0 ? void 0 : nested.ref,
|
|
796
|
+
nestedConverterInline: nested === null || nested === void 0 ? void 0 : nested.inline,
|
|
797
|
+
nestedIsArray: nested === null || nested === void 0 ? void 0 : nested.isArray
|
|
798
|
+
});
|
|
799
|
+
} else if (tsMorph.Node.isShorthandPropertyAssignment(property)) {
|
|
800
|
+
var name = property.getName();
|
|
801
|
+
out.push({
|
|
802
|
+
key: name,
|
|
803
|
+
converter: name
|
|
804
|
+
});
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
} catch (err) {
|
|
808
|
+
_didIteratorError = true;
|
|
809
|
+
_iteratorError = err;
|
|
810
|
+
} finally{
|
|
811
|
+
try {
|
|
812
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
813
|
+
_iterator.return();
|
|
814
|
+
}
|
|
815
|
+
} finally{
|
|
816
|
+
if (_didIteratorError) {
|
|
817
|
+
throw _iteratorError;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
return out;
|
|
822
|
+
}
|
|
823
|
+
function readNestedFromExpression(expr) {
|
|
824
|
+
if (!tsMorph.Node.isCallExpression(expr)) return undefined;
|
|
825
|
+
var fnName = expr.getExpression().getText();
|
|
826
|
+
if (fnName !== SUB_OBJECT_FN && fnName !== OBJECT_ARRAY_FN) return undefined;
|
|
827
|
+
var args = expr.getArguments();
|
|
828
|
+
if (args.length === 0) return undefined;
|
|
829
|
+
var config = args[0];
|
|
830
|
+
if (!tsMorph.Node.isObjectLiteralExpression(config)) return undefined;
|
|
831
|
+
var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
|
|
832
|
+
if (!objectField) return undefined;
|
|
833
|
+
var isArray = fnName === OBJECT_ARRAY_FN;
|
|
834
|
+
var result;
|
|
835
|
+
if (tsMorph.Node.isIdentifier(objectField)) {
|
|
836
|
+
result = {
|
|
837
|
+
ref: objectField.getText(),
|
|
838
|
+
isArray: isArray
|
|
839
|
+
};
|
|
840
|
+
} else if (tsMorph.Node.isObjectLiteralExpression(objectField)) {
|
|
841
|
+
var fieldsLiteral = readObjectProperty(objectField, FIELDS_LITERAL_KEY);
|
|
842
|
+
if (fieldsLiteral) {
|
|
843
|
+
var inlineFields = readFieldEntries(fieldsLiteral);
|
|
844
|
+
result = {
|
|
845
|
+
inline: {
|
|
846
|
+
converterConst: undefined,
|
|
847
|
+
factory: fnName,
|
|
848
|
+
interfaceName: readGenericInterfaceName(expr),
|
|
849
|
+
fields: inlineFields,
|
|
850
|
+
line: expr.getStartLineNumber()
|
|
851
|
+
},
|
|
852
|
+
isArray: isArray
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
return result;
|
|
857
|
+
}
|
|
858
|
+
function readPropertyValue(literal, key) {
|
|
859
|
+
var property = literal.getProperty(key);
|
|
860
|
+
var result;
|
|
861
|
+
if (property && tsMorph.Node.isPropertyAssignment(property)) {
|
|
862
|
+
result = property.getInitializer();
|
|
863
|
+
} else if (property && tsMorph.Node.isShorthandPropertyAssignment(property)) {
|
|
864
|
+
result = property.getNameNode();
|
|
865
|
+
}
|
|
866
|
+
return result;
|
|
867
|
+
}
|
|
868
|
+
function readObjectProperty(literal, key) {
|
|
869
|
+
var value = readPropertyValue(literal, key);
|
|
870
|
+
return value && tsMorph.Node.isObjectLiteralExpression(value) ? value : undefined;
|
|
871
|
+
}
|
|
872
|
+
function readEnums(sourceFile) {
|
|
873
|
+
var out = [];
|
|
874
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
875
|
+
try {
|
|
876
|
+
for(var _iterator = sourceFile.getEnums()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
877
|
+
var decl = _step.value;
|
|
878
|
+
if (!decl.isExported()) continue;
|
|
879
|
+
var values = [];
|
|
880
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
881
|
+
try {
|
|
882
|
+
for(var _iterator1 = decl.getMembers()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
883
|
+
var member = _step1.value;
|
|
884
|
+
var value = member.getValue();
|
|
885
|
+
var description = readJsDocDescription(member.getJsDocs());
|
|
886
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
887
|
+
values.push({
|
|
888
|
+
name: member.getName(),
|
|
889
|
+
value: value,
|
|
890
|
+
description: description
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
}
|
|
894
|
+
} catch (err) {
|
|
895
|
+
_didIteratorError1 = true;
|
|
896
|
+
_iteratorError1 = err;
|
|
897
|
+
} finally{
|
|
898
|
+
try {
|
|
899
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
900
|
+
_iterator1.return();
|
|
901
|
+
}
|
|
902
|
+
} finally{
|
|
903
|
+
if (_didIteratorError1) {
|
|
904
|
+
throw _iteratorError1;
|
|
905
|
+
}
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
out.push({
|
|
909
|
+
name: decl.getName(),
|
|
910
|
+
values: values,
|
|
911
|
+
description: readJsDocDescription(decl.getJsDocs())
|
|
912
|
+
});
|
|
913
|
+
}
|
|
914
|
+
} catch (err) {
|
|
915
|
+
_didIteratorError = true;
|
|
916
|
+
_iteratorError = err;
|
|
917
|
+
} finally{
|
|
918
|
+
try {
|
|
919
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
920
|
+
_iterator.return();
|
|
921
|
+
}
|
|
922
|
+
} finally{
|
|
923
|
+
if (_didIteratorError) {
|
|
924
|
+
throw _iteratorError;
|
|
925
|
+
}
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
return out;
|
|
929
|
+
}
|
|
930
|
+
function readModelGroups(sourceFile) {
|
|
931
|
+
var out = [];
|
|
932
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
933
|
+
try {
|
|
934
|
+
for(var _iterator = sourceFile.getInterfaces()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
935
|
+
var iface = _step.value;
|
|
936
|
+
if (!iface.isExported()) continue;
|
|
937
|
+
var groupTag = readJsDocTagText(iface.getJsDocs(), 'dbxModelGroup');
|
|
938
|
+
if (!groupTag) continue;
|
|
939
|
+
var containerName = iface.getName();
|
|
940
|
+
if (!containerName.endsWith('FirestoreCollections')) continue;
|
|
941
|
+
var modelNames = [];
|
|
942
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
943
|
+
try {
|
|
944
|
+
for(var _iterator1 = iface.getProperties()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
945
|
+
var prop = _step1.value;
|
|
946
|
+
var _ref;
|
|
947
|
+
var _prop_getTypeNode;
|
|
948
|
+
var tsType = (_ref = (_prop_getTypeNode = prop.getTypeNode()) === null || _prop_getTypeNode === void 0 ? void 0 : _prop_getTypeNode.getText()) !== null && _ref !== void 0 ? _ref : '';
|
|
949
|
+
var match = /([A-Z]\w*)FirestoreCollection(?:Factory)?(?:\b|<)/.exec(tsType);
|
|
950
|
+
if (match) modelNames.push(match[1]);
|
|
951
|
+
}
|
|
952
|
+
} catch (err) {
|
|
953
|
+
_didIteratorError1 = true;
|
|
954
|
+
_iteratorError1 = err;
|
|
955
|
+
} finally{
|
|
956
|
+
try {
|
|
957
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
958
|
+
_iterator1.return();
|
|
959
|
+
}
|
|
960
|
+
} finally{
|
|
961
|
+
if (_didIteratorError1) {
|
|
962
|
+
throw _iteratorError1;
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
out.push({
|
|
967
|
+
name: groupTag,
|
|
968
|
+
containerName: containerName,
|
|
969
|
+
description: readJsDocDescription(iface.getJsDocs()),
|
|
970
|
+
modelNames: modelNames
|
|
971
|
+
});
|
|
972
|
+
}
|
|
973
|
+
} catch (err) {
|
|
974
|
+
_didIteratorError = true;
|
|
975
|
+
_iteratorError = err;
|
|
976
|
+
} finally{
|
|
977
|
+
try {
|
|
978
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
979
|
+
_iterator.return();
|
|
980
|
+
}
|
|
981
|
+
} finally{
|
|
982
|
+
if (_didIteratorError) {
|
|
983
|
+
throw _iteratorError;
|
|
984
|
+
}
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
return out;
|
|
988
|
+
}
|
|
989
|
+
function jsDocsHaveTag(jsDocs, tagName) {
|
|
990
|
+
var found = false;
|
|
991
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
992
|
+
try {
|
|
993
|
+
for(var _iterator = jsDocs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
994
|
+
var jsDoc = _step.value;
|
|
995
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
996
|
+
try {
|
|
997
|
+
for(var _iterator1 = jsDoc.getTags()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
998
|
+
var tag = _step1.value;
|
|
999
|
+
if (tag.getTagName() === tagName) {
|
|
1000
|
+
found = true;
|
|
1001
|
+
break;
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
} catch (err) {
|
|
1005
|
+
_didIteratorError1 = true;
|
|
1006
|
+
_iteratorError1 = err;
|
|
1007
|
+
} finally{
|
|
1008
|
+
try {
|
|
1009
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
1010
|
+
_iterator1.return();
|
|
1011
|
+
}
|
|
1012
|
+
} finally{
|
|
1013
|
+
if (_didIteratorError1) {
|
|
1014
|
+
throw _iteratorError1;
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
if (found) break;
|
|
1019
|
+
}
|
|
1020
|
+
} catch (err) {
|
|
1021
|
+
_didIteratorError = true;
|
|
1022
|
+
_iteratorError = err;
|
|
1023
|
+
} finally{
|
|
1024
|
+
try {
|
|
1025
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1026
|
+
_iterator.return();
|
|
1027
|
+
}
|
|
1028
|
+
} finally{
|
|
1029
|
+
if (_didIteratorError) {
|
|
1030
|
+
throw _iteratorError;
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
return found;
|
|
1035
|
+
}
|
|
1036
|
+
function readJsDocTagText(jsDocs, tagName) {
|
|
1037
|
+
var result;
|
|
1038
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1039
|
+
try {
|
|
1040
|
+
for(var _iterator = jsDocs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1041
|
+
var jsDoc = _step.value;
|
|
1042
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
1043
|
+
try {
|
|
1044
|
+
for(var _iterator1 = jsDoc.getTags()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
1045
|
+
var tag = _step1.value;
|
|
1046
|
+
var _tag_getCommentText;
|
|
1047
|
+
if (tag.getTagName() !== tagName) continue;
|
|
1048
|
+
var text = (_tag_getCommentText = tag.getCommentText()) === null || _tag_getCommentText === void 0 ? void 0 : _tag_getCommentText.trim();
|
|
1049
|
+
if (text !== undefined && text.length > 0) {
|
|
1050
|
+
result = text;
|
|
1051
|
+
break;
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
} catch (err) {
|
|
1055
|
+
_didIteratorError1 = true;
|
|
1056
|
+
_iteratorError1 = err;
|
|
1057
|
+
} finally{
|
|
1058
|
+
try {
|
|
1059
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
1060
|
+
_iterator1.return();
|
|
1061
|
+
}
|
|
1062
|
+
} finally{
|
|
1063
|
+
if (_didIteratorError1) {
|
|
1064
|
+
throw _iteratorError1;
|
|
1065
|
+
}
|
|
1066
|
+
}
|
|
1067
|
+
}
|
|
1068
|
+
if (result !== undefined) break;
|
|
1069
|
+
}
|
|
1070
|
+
} catch (err) {
|
|
1071
|
+
_didIteratorError = true;
|
|
1072
|
+
_iteratorError = err;
|
|
1073
|
+
} finally{
|
|
1074
|
+
try {
|
|
1075
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1076
|
+
_iterator.return();
|
|
1077
|
+
}
|
|
1078
|
+
} finally{
|
|
1079
|
+
if (_didIteratorError) {
|
|
1080
|
+
throw _iteratorError;
|
|
1081
|
+
}
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
return result;
|
|
1085
|
+
}
|
|
1086
|
+
function readJsDocDescription(jsDocs) {
|
|
1087
|
+
var result;
|
|
1088
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1089
|
+
try {
|
|
1090
|
+
for(var _iterator = jsDocs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1091
|
+
var jsDoc = _step.value;
|
|
1092
|
+
var description = jsDoc.getDescription().trim();
|
|
1093
|
+
if (description.length === 0) continue;
|
|
1094
|
+
var paragraph = firstParagraph(description);
|
|
1095
|
+
if (paragraph.length > 0) {
|
|
1096
|
+
result = paragraph;
|
|
1097
|
+
break;
|
|
1098
|
+
}
|
|
1099
|
+
}
|
|
1100
|
+
} catch (err) {
|
|
1101
|
+
_didIteratorError = true;
|
|
1102
|
+
_iteratorError = err;
|
|
1103
|
+
} finally{
|
|
1104
|
+
try {
|
|
1105
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1106
|
+
_iterator.return();
|
|
1107
|
+
}
|
|
1108
|
+
} finally{
|
|
1109
|
+
if (_didIteratorError) {
|
|
1110
|
+
throw _iteratorError;
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
return result;
|
|
1115
|
+
}
|
|
1116
|
+
function firstParagraph(text) {
|
|
1117
|
+
var lines = text.split('\n').map(function(line) {
|
|
1118
|
+
return line.trim();
|
|
1119
|
+
});
|
|
1120
|
+
var collected = [];
|
|
1121
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1122
|
+
try {
|
|
1123
|
+
for(var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1124
|
+
var line = _step.value;
|
|
1125
|
+
if (line.startsWith('@')) break;
|
|
1126
|
+
if (line.length === 0) {
|
|
1127
|
+
if (collected.length > 0) break;
|
|
1128
|
+
continue;
|
|
1129
|
+
}
|
|
1130
|
+
collected.push(line);
|
|
1131
|
+
}
|
|
1132
|
+
} catch (err) {
|
|
1133
|
+
_didIteratorError = true;
|
|
1134
|
+
_iteratorError = err;
|
|
1135
|
+
} finally{
|
|
1136
|
+
try {
|
|
1137
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1138
|
+
_iterator.return();
|
|
1139
|
+
}
|
|
1140
|
+
} finally{
|
|
1141
|
+
if (_didIteratorError) {
|
|
1142
|
+
throw _iteratorError;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
}
|
|
1146
|
+
return collected.join(' ').trim();
|
|
1147
|
+
}
|
|
1148
|
+
function stringLiteralValue(node) {
|
|
1149
|
+
var result;
|
|
1150
|
+
if (tsMorph.Node.isStringLiteral(node) || tsMorph.Node.isNoSubstitutionTemplateLiteral(node)) {
|
|
1151
|
+
result = node.getLiteralText();
|
|
1152
|
+
}
|
|
1153
|
+
return result;
|
|
1154
|
+
}
|
|
1155
|
+
function identifierName(node) {
|
|
1156
|
+
var result;
|
|
1157
|
+
if (tsMorph.Node.isIdentifier(node)) {
|
|
1158
|
+
result = node.getText();
|
|
1159
|
+
}
|
|
1160
|
+
return result;
|
|
1161
|
+
}
|
|
1162
|
+
|
|
459
1163
|
exports.extractCrudEntries = extractCrudEntries;
|
|
1164
|
+
exports.extractModelsFromSource = extractModelsFromSource;
|