@dereekb/dbx-cli 13.11.4 → 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.
@@ -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;