@dereekb/dbx-cli 13.11.4 → 13.11.6

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,768 @@ 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
+ /**
488
+ * TS utility/structural wrappers that don't change the field surface for
489
+ * inheritance walks — `Partial<T>`, `Required<T>`, `Readonly<T>`,
490
+ * `NonNullable<T>` preserve every property, and `Pick<T, K>` / `Omit<T, K>`
491
+ * leave the original `T` reachable for long-name resolution. `MaybeMap<T>` is
492
+ * the workspace's own pass-through that decorates each prop with `Maybe<…>`
493
+ * without renaming. `extends` walks need to see through these to find the
494
+ * concrete ancestor interface — `getExpression()` alone returns just the
495
+ * leftmost identifier (`Partial`, `Pick`, …) and silently drops the inner
496
+ * model, leaving every inherited `@dbxModelVariable` tag unreachable.
497
+ */ var PASSTHROUGH_TYPE_WRAPPERS = new Set([
498
+ 'Partial',
499
+ 'Required',
500
+ 'Readonly',
501
+ 'NonNullable',
502
+ 'MaybeMap',
503
+ 'Pick',
504
+ 'Omit'
505
+ ]);
506
+ var IDENTITY_FN = 'firestoreModelIdentity';
507
+ var CONVERTER_FN_NAMES = [
508
+ 'snapshotConverterFunctions',
509
+ 'firestoreSubObject',
510
+ 'firestoreObjectArray'
511
+ ];
512
+ var SUB_OBJECT_FN = 'firestoreSubObject';
513
+ var OBJECT_ARRAY_FN = 'firestoreObjectArray';
514
+ var SNAPSHOT_FN = 'snapshotConverterFunctions';
515
+ var FIELDS_LITERAL_KEY = 'fields';
516
+ var OBJECT_FIELD_KEY = 'objectField';
517
+ /**
518
+ * Walks a single source file and reports raw model-extraction artifacts.
519
+ * Best-effort: a malformed call shape leaves the corresponding entry out
520
+ * rather than throwing.
521
+ *
522
+ * @param input - in-memory `{ name, text }` source pair.
523
+ * @returns the per-file extraction. Aggregation across files happens in the
524
+ * firebase-api-manifest orchestrator so cross-file converter consts can be
525
+ * resolved against a global registry.
526
+ */ function extractModelsFromSource(input) {
527
+ var project = new tsMorph.Project({
528
+ useInMemoryFileSystem: true,
529
+ skipAddingFilesFromTsConfig: true
530
+ });
531
+ var sourceFile = project.createSourceFile(input.name, input.text, {
532
+ overwrite: true
533
+ });
534
+ var identities = readIdentities(sourceFile);
535
+ var interfaces = readInterfaces(sourceFile);
536
+ var converters = readConverters(sourceFile);
537
+ var enums = readEnums(sourceFile);
538
+ var modelGroups = readModelGroups(sourceFile);
539
+ return {
540
+ identities: identities,
541
+ interfaces: interfaces,
542
+ converters: converters,
543
+ enums: enums,
544
+ modelGroups: modelGroups
545
+ };
546
+ }
547
+ function readIdentities(sourceFile) {
548
+ var out = [];
549
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
550
+ try {
551
+ for(var _iterator = sourceFile.getVariableStatements()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
552
+ var statement = _step.value;
553
+ if (!statement.isExported()) continue;
554
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
555
+ try {
556
+ for(var _iterator1 = statement.getDeclarations()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
557
+ var decl = _step1.value;
558
+ var initializer = decl.getInitializer();
559
+ if (!initializer || !tsMorph.Node.isCallExpression(initializer)) continue;
560
+ if (initializer.getExpression().getText() !== IDENTITY_FN) continue;
561
+ var parsed = parseIdentityArgs(initializer);
562
+ if (parsed) {
563
+ out.push(_object_spread({
564
+ identityConst: decl.getName()
565
+ }, parsed));
566
+ }
567
+ }
568
+ } catch (err) {
569
+ _didIteratorError1 = true;
570
+ _iteratorError1 = err;
571
+ } finally{
572
+ try {
573
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
574
+ _iterator1.return();
575
+ }
576
+ } finally{
577
+ if (_didIteratorError1) {
578
+ throw _iteratorError1;
579
+ }
580
+ }
581
+ }
582
+ }
583
+ } catch (err) {
584
+ _didIteratorError = true;
585
+ _iteratorError = err;
586
+ } finally{
587
+ try {
588
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
589
+ _iterator.return();
590
+ }
591
+ } finally{
592
+ if (_didIteratorError) {
593
+ throw _iteratorError;
594
+ }
595
+ }
596
+ }
597
+ return out;
598
+ }
599
+ function parseIdentityArgs(call) {
600
+ var args = call.getArguments();
601
+ var result;
602
+ if (args.length === 1) {
603
+ var modelType = stringLiteralValue(args[0]);
604
+ if (modelType !== undefined) {
605
+ result = {
606
+ modelType: modelType,
607
+ collectionPrefix: undefined,
608
+ parentIdentityConst: undefined
609
+ };
610
+ }
611
+ } else if (args.length === 2) {
612
+ var first = stringLiteralValue(args[0]);
613
+ if (first === undefined) {
614
+ var modelType1 = stringLiteralValue(args[1]);
615
+ if (modelType1 !== undefined) {
616
+ result = {
617
+ modelType: modelType1,
618
+ collectionPrefix: undefined,
619
+ parentIdentityConst: identifierName(args[0])
620
+ };
621
+ }
622
+ } else {
623
+ result = {
624
+ modelType: first,
625
+ collectionPrefix: stringLiteralValue(args[1]),
626
+ parentIdentityConst: undefined
627
+ };
628
+ }
629
+ } else if (args.length >= 3) {
630
+ var modelType2 = stringLiteralValue(args[1]);
631
+ if (modelType2 !== undefined) {
632
+ result = {
633
+ modelType: modelType2,
634
+ collectionPrefix: stringLiteralValue(args[2]),
635
+ parentIdentityConst: identifierName(args[0])
636
+ };
637
+ }
638
+ }
639
+ return result;
640
+ }
641
+ function readInterfaces(sourceFile) {
642
+ var out = [];
643
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
644
+ try {
645
+ for(var _iterator = sourceFile.getInterfaces()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
646
+ var decl = _step.value;
647
+ if (!decl.isExported()) continue;
648
+ out.push(buildInterface(decl));
649
+ }
650
+ } catch (err) {
651
+ _didIteratorError = true;
652
+ _iteratorError = err;
653
+ } finally{
654
+ try {
655
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
656
+ _iterator.return();
657
+ }
658
+ } finally{
659
+ if (_didIteratorError) {
660
+ throw _iteratorError;
661
+ }
662
+ }
663
+ }
664
+ return out;
665
+ }
666
+ function buildInterface(decl) {
667
+ var jsDocs = decl.getJsDocs();
668
+ var hasDbxModelTag = jsDocsHaveTag(jsDocs, 'dbxModel');
669
+ var extendsNames = decl.getExtends().map(resolveExtendsName);
670
+ var props = [];
671
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
672
+ try {
673
+ for(var _iterator = decl.getProperties()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
674
+ var prop = _step.value;
675
+ var _ref;
676
+ var _prop_getTypeNode;
677
+ var propJsDocs = prop.getJsDocs();
678
+ var longName = readJsDocTagText(propJsDocs, 'dbxModelVariable');
679
+ var syncFlag = readJsDocTagText(propJsDocs, 'dbxModelVariableSyncFlag');
680
+ 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();
681
+ var optional = prop.hasQuestionToken() || tsType.startsWith('Maybe<');
682
+ props.push({
683
+ name: prop.getName(),
684
+ tsType: tsType,
685
+ optional: optional,
686
+ description: readJsDocDescription(propJsDocs),
687
+ longName: longName,
688
+ syncFlag: syncFlag
689
+ });
690
+ }
691
+ } catch (err) {
692
+ _didIteratorError = true;
693
+ _iteratorError = err;
694
+ } finally{
695
+ try {
696
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
697
+ _iterator.return();
698
+ }
699
+ } finally{
700
+ if (_didIteratorError) {
701
+ throw _iteratorError;
702
+ }
703
+ }
704
+ }
705
+ return {
706
+ name: decl.getName(),
707
+ description: readJsDocDescription(jsDocs),
708
+ hasDbxModelTag: hasDbxModelTag,
709
+ extendsNames: extendsNames,
710
+ props: props
711
+ };
712
+ }
713
+ /**
714
+ * Resolves an `extends` clause to the concrete ancestor interface name,
715
+ * peeling any leading {@link PASSTHROUGH_TYPE_WRAPPERS}. Returns the leftmost
716
+ * identifier of the unwrapped expression so the inheritance walker can chain
717
+ * through utility-wrapped declarations like
718
+ * `extends Partial<MaybeMap<Omit<Base, '…'>>>`.
719
+ *
720
+ * @param expr - the `ExpressionWithTypeArguments` produced by `getExtends()`
721
+ * @returns the resolved interface name, or the original leftmost identifier when no inner reference is reachable
722
+ */ function resolveExtendsName(expr) {
723
+ var head = expr.getExpression().getText();
724
+ var result = head;
725
+ if (PASSTHROUGH_TYPE_WRAPPERS.has(head)) {
726
+ var typeArgs = expr.getTypeArguments();
727
+ if (typeArgs.length > 0) {
728
+ var peeled = peelTypeNode(typeArgs[0]);
729
+ if (peeled !== undefined) {
730
+ result = peeled;
731
+ }
732
+ }
733
+ }
734
+ return result;
735
+ }
736
+ function peelTypeNode(node) {
737
+ var current = node;
738
+ while(tsMorph.Node.isParenthesizedTypeNode(current)){
739
+ current = current.getTypeNode();
740
+ }
741
+ var result;
742
+ if (tsMorph.Node.isTypeReference(current)) {
743
+ var name = current.getTypeName().getText();
744
+ if (PASSTHROUGH_TYPE_WRAPPERS.has(name)) {
745
+ var inner = current.getTypeArguments();
746
+ if (inner.length > 0) {
747
+ result = peelTypeNode(inner[0]);
748
+ }
749
+ } else {
750
+ result = name;
751
+ }
752
+ }
753
+ return result;
754
+ }
755
+ function readConverters(sourceFile) {
756
+ var out = [];
757
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
758
+ try {
759
+ for(var _iterator = sourceFile.getVariableStatements()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
760
+ var statement = _step.value;
761
+ if (!statement.isExported()) continue;
762
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
763
+ try {
764
+ for(var _iterator1 = statement.getDeclarations()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
765
+ var decl = _step1.value;
766
+ var initializer = decl.getInitializer();
767
+ if (!initializer || !tsMorph.Node.isCallExpression(initializer)) continue;
768
+ var factory = initializer.getExpression().getText();
769
+ if (!isConverterFactoryName(factory)) continue;
770
+ var interfaceName = readGenericInterfaceName(initializer);
771
+ var fields = readConverterFields(initializer);
772
+ if (!fields) continue;
773
+ out.push({
774
+ converterConst: decl.getName(),
775
+ factory: factory,
776
+ interfaceName: interfaceName,
777
+ fields: fields,
778
+ line: decl.getStartLineNumber()
779
+ });
780
+ }
781
+ } catch (err) {
782
+ _didIteratorError1 = true;
783
+ _iteratorError1 = err;
784
+ } finally{
785
+ try {
786
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
787
+ _iterator1.return();
788
+ }
789
+ } finally{
790
+ if (_didIteratorError1) {
791
+ throw _iteratorError1;
792
+ }
793
+ }
794
+ }
795
+ }
796
+ } catch (err) {
797
+ _didIteratorError = true;
798
+ _iteratorError = err;
799
+ } finally{
800
+ try {
801
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
802
+ _iterator.return();
803
+ }
804
+ } finally{
805
+ if (_didIteratorError) {
806
+ throw _iteratorError;
807
+ }
808
+ }
809
+ }
810
+ return out;
811
+ }
812
+ function isConverterFactoryName(name) {
813
+ return CONVERTER_FN_NAMES.includes(name);
814
+ }
815
+ function readGenericInterfaceName(call) {
816
+ var typeArgs = call.getTypeArguments();
817
+ var result;
818
+ if (typeArgs.length > 0) {
819
+ result = typeArgs[0].getText().replaceAll(/<[^>]*>/g, '').trim();
820
+ }
821
+ return result;
822
+ }
823
+ function readConverterFields(call) {
824
+ var fnName = call.getExpression().getText();
825
+ var args = call.getArguments();
826
+ if (args.length === 0) return undefined;
827
+ var config = args[0];
828
+ if (!tsMorph.Node.isObjectLiteralExpression(config)) return undefined;
829
+ var fieldsLiteral;
830
+ if (fnName === SNAPSHOT_FN) {
831
+ fieldsLiteral = readObjectProperty(config, FIELDS_LITERAL_KEY);
832
+ } else {
833
+ var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
834
+ if (objectField && tsMorph.Node.isObjectLiteralExpression(objectField)) {
835
+ fieldsLiteral = readObjectProperty(objectField, FIELDS_LITERAL_KEY);
836
+ }
837
+ }
838
+ if (!fieldsLiteral) return undefined;
839
+ return readFieldEntries(fieldsLiteral);
840
+ }
841
+ function readFieldEntries(fields) {
842
+ var out = [];
843
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
844
+ try {
845
+ for(var _iterator = fields.getProperties()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
846
+ var property = _step.value;
847
+ if (tsMorph.Node.isPropertyAssignment(property)) {
848
+ var initializer = property.getInitializer();
849
+ var converterText = initializer ? initializer.getText().replaceAll(/\s+/g, ' ').trim() : '';
850
+ var nested = initializer ? readNestedFromExpression(initializer) : undefined;
851
+ out.push({
852
+ key: property.getName(),
853
+ converter: converterText,
854
+ nestedConverterRef: nested === null || nested === void 0 ? void 0 : nested.ref,
855
+ nestedConverterInline: nested === null || nested === void 0 ? void 0 : nested.inline,
856
+ nestedIsArray: nested === null || nested === void 0 ? void 0 : nested.isArray
857
+ });
858
+ } else if (tsMorph.Node.isShorthandPropertyAssignment(property)) {
859
+ var name = property.getName();
860
+ out.push({
861
+ key: name,
862
+ converter: name
863
+ });
864
+ }
865
+ }
866
+ } catch (err) {
867
+ _didIteratorError = true;
868
+ _iteratorError = err;
869
+ } finally{
870
+ try {
871
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
872
+ _iterator.return();
873
+ }
874
+ } finally{
875
+ if (_didIteratorError) {
876
+ throw _iteratorError;
877
+ }
878
+ }
879
+ }
880
+ return out;
881
+ }
882
+ function readNestedFromExpression(expr) {
883
+ if (!tsMorph.Node.isCallExpression(expr)) return undefined;
884
+ var fnName = expr.getExpression().getText();
885
+ if (fnName !== SUB_OBJECT_FN && fnName !== OBJECT_ARRAY_FN) return undefined;
886
+ var args = expr.getArguments();
887
+ if (args.length === 0) return undefined;
888
+ var config = args[0];
889
+ if (!tsMorph.Node.isObjectLiteralExpression(config)) return undefined;
890
+ var objectField = readPropertyValue(config, OBJECT_FIELD_KEY);
891
+ if (!objectField) return undefined;
892
+ var isArray = fnName === OBJECT_ARRAY_FN;
893
+ var result;
894
+ if (tsMorph.Node.isIdentifier(objectField)) {
895
+ result = {
896
+ ref: objectField.getText(),
897
+ isArray: isArray
898
+ };
899
+ } else if (tsMorph.Node.isObjectLiteralExpression(objectField)) {
900
+ var fieldsLiteral = readObjectProperty(objectField, FIELDS_LITERAL_KEY);
901
+ if (fieldsLiteral) {
902
+ var inlineFields = readFieldEntries(fieldsLiteral);
903
+ result = {
904
+ inline: {
905
+ converterConst: undefined,
906
+ factory: fnName,
907
+ interfaceName: readGenericInterfaceName(expr),
908
+ fields: inlineFields,
909
+ line: expr.getStartLineNumber()
910
+ },
911
+ isArray: isArray
912
+ };
913
+ }
914
+ }
915
+ return result;
916
+ }
917
+ function readPropertyValue(literal, key) {
918
+ var property = literal.getProperty(key);
919
+ var result;
920
+ if (property && tsMorph.Node.isPropertyAssignment(property)) {
921
+ result = property.getInitializer();
922
+ } else if (property && tsMorph.Node.isShorthandPropertyAssignment(property)) {
923
+ result = property.getNameNode();
924
+ }
925
+ return result;
926
+ }
927
+ function readObjectProperty(literal, key) {
928
+ var value = readPropertyValue(literal, key);
929
+ return value && tsMorph.Node.isObjectLiteralExpression(value) ? value : undefined;
930
+ }
931
+ function readEnums(sourceFile) {
932
+ var out = [];
933
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
934
+ try {
935
+ for(var _iterator = sourceFile.getEnums()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
936
+ var decl = _step.value;
937
+ if (!decl.isExported()) continue;
938
+ var values = [];
939
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
940
+ try {
941
+ for(var _iterator1 = decl.getMembers()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
942
+ var member = _step1.value;
943
+ var value = member.getValue();
944
+ var description = readJsDocDescription(member.getJsDocs());
945
+ if (typeof value === 'string' || typeof value === 'number') {
946
+ values.push({
947
+ name: member.getName(),
948
+ value: value,
949
+ description: description
950
+ });
951
+ }
952
+ }
953
+ } catch (err) {
954
+ _didIteratorError1 = true;
955
+ _iteratorError1 = err;
956
+ } finally{
957
+ try {
958
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
959
+ _iterator1.return();
960
+ }
961
+ } finally{
962
+ if (_didIteratorError1) {
963
+ throw _iteratorError1;
964
+ }
965
+ }
966
+ }
967
+ out.push({
968
+ name: decl.getName(),
969
+ values: values,
970
+ description: readJsDocDescription(decl.getJsDocs())
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 readModelGroups(sourceFile) {
990
+ var out = [];
991
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
992
+ try {
993
+ for(var _iterator = sourceFile.getInterfaces()[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
994
+ var iface = _step.value;
995
+ if (!iface.isExported()) continue;
996
+ var groupTag = readJsDocTagText(iface.getJsDocs(), 'dbxModelGroup');
997
+ if (!groupTag) continue;
998
+ var containerName = iface.getName();
999
+ if (!containerName.endsWith('FirestoreCollections')) continue;
1000
+ var modelNames = [];
1001
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1002
+ try {
1003
+ for(var _iterator1 = iface.getProperties()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1004
+ var prop = _step1.value;
1005
+ var _ref;
1006
+ var _prop_getTypeNode;
1007
+ var tsType = (_ref = (_prop_getTypeNode = prop.getTypeNode()) === null || _prop_getTypeNode === void 0 ? void 0 : _prop_getTypeNode.getText()) !== null && _ref !== void 0 ? _ref : '';
1008
+ var match = /([A-Z]\w*)FirestoreCollection(?:Factory)?(?:\b|<)/.exec(tsType);
1009
+ if (match) modelNames.push(match[1]);
1010
+ }
1011
+ } catch (err) {
1012
+ _didIteratorError1 = true;
1013
+ _iteratorError1 = err;
1014
+ } finally{
1015
+ try {
1016
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1017
+ _iterator1.return();
1018
+ }
1019
+ } finally{
1020
+ if (_didIteratorError1) {
1021
+ throw _iteratorError1;
1022
+ }
1023
+ }
1024
+ }
1025
+ out.push({
1026
+ name: groupTag,
1027
+ containerName: containerName,
1028
+ description: readJsDocDescription(iface.getJsDocs()),
1029
+ modelNames: modelNames
1030
+ });
1031
+ }
1032
+ } catch (err) {
1033
+ _didIteratorError = true;
1034
+ _iteratorError = err;
1035
+ } finally{
1036
+ try {
1037
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1038
+ _iterator.return();
1039
+ }
1040
+ } finally{
1041
+ if (_didIteratorError) {
1042
+ throw _iteratorError;
1043
+ }
1044
+ }
1045
+ }
1046
+ return out;
1047
+ }
1048
+ function jsDocsHaveTag(jsDocs, tagName) {
1049
+ var found = false;
1050
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1051
+ try {
1052
+ for(var _iterator = jsDocs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1053
+ var jsDoc = _step.value;
1054
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1055
+ try {
1056
+ for(var _iterator1 = jsDoc.getTags()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1057
+ var tag = _step1.value;
1058
+ if (tag.getTagName() === tagName) {
1059
+ found = true;
1060
+ break;
1061
+ }
1062
+ }
1063
+ } catch (err) {
1064
+ _didIteratorError1 = true;
1065
+ _iteratorError1 = err;
1066
+ } finally{
1067
+ try {
1068
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1069
+ _iterator1.return();
1070
+ }
1071
+ } finally{
1072
+ if (_didIteratorError1) {
1073
+ throw _iteratorError1;
1074
+ }
1075
+ }
1076
+ }
1077
+ if (found) break;
1078
+ }
1079
+ } catch (err) {
1080
+ _didIteratorError = true;
1081
+ _iteratorError = err;
1082
+ } finally{
1083
+ try {
1084
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1085
+ _iterator.return();
1086
+ }
1087
+ } finally{
1088
+ if (_didIteratorError) {
1089
+ throw _iteratorError;
1090
+ }
1091
+ }
1092
+ }
1093
+ return found;
1094
+ }
1095
+ function readJsDocTagText(jsDocs, tagName) {
1096
+ var result;
1097
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1098
+ try {
1099
+ for(var _iterator = jsDocs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1100
+ var jsDoc = _step.value;
1101
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
1102
+ try {
1103
+ for(var _iterator1 = jsDoc.getTags()[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
1104
+ var tag = _step1.value;
1105
+ var _tag_getCommentText;
1106
+ if (tag.getTagName() !== tagName) continue;
1107
+ var text = (_tag_getCommentText = tag.getCommentText()) === null || _tag_getCommentText === void 0 ? void 0 : _tag_getCommentText.trim();
1108
+ if (text !== undefined && text.length > 0) {
1109
+ result = text;
1110
+ break;
1111
+ }
1112
+ }
1113
+ } catch (err) {
1114
+ _didIteratorError1 = true;
1115
+ _iteratorError1 = err;
1116
+ } finally{
1117
+ try {
1118
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
1119
+ _iterator1.return();
1120
+ }
1121
+ } finally{
1122
+ if (_didIteratorError1) {
1123
+ throw _iteratorError1;
1124
+ }
1125
+ }
1126
+ }
1127
+ if (result !== undefined) break;
1128
+ }
1129
+ } catch (err) {
1130
+ _didIteratorError = true;
1131
+ _iteratorError = err;
1132
+ } finally{
1133
+ try {
1134
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1135
+ _iterator.return();
1136
+ }
1137
+ } finally{
1138
+ if (_didIteratorError) {
1139
+ throw _iteratorError;
1140
+ }
1141
+ }
1142
+ }
1143
+ return result;
1144
+ }
1145
+ function readJsDocDescription(jsDocs) {
1146
+ var result;
1147
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1148
+ try {
1149
+ for(var _iterator = jsDocs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1150
+ var jsDoc = _step.value;
1151
+ var description = jsDoc.getDescription().trim();
1152
+ if (description.length === 0) continue;
1153
+ var paragraph = firstParagraph(description);
1154
+ if (paragraph.length > 0) {
1155
+ result = paragraph;
1156
+ break;
1157
+ }
1158
+ }
1159
+ } catch (err) {
1160
+ _didIteratorError = true;
1161
+ _iteratorError = err;
1162
+ } finally{
1163
+ try {
1164
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1165
+ _iterator.return();
1166
+ }
1167
+ } finally{
1168
+ if (_didIteratorError) {
1169
+ throw _iteratorError;
1170
+ }
1171
+ }
1172
+ }
1173
+ return result;
1174
+ }
1175
+ function firstParagraph(text) {
1176
+ var lines = text.split('\n').map(function(line) {
1177
+ return line.trim();
1178
+ });
1179
+ var collected = [];
1180
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1181
+ try {
1182
+ for(var _iterator = lines[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1183
+ var line = _step.value;
1184
+ if (line.startsWith('@')) break;
1185
+ if (line.length === 0) {
1186
+ if (collected.length > 0) break;
1187
+ continue;
1188
+ }
1189
+ collected.push(line);
1190
+ }
1191
+ } catch (err) {
1192
+ _didIteratorError = true;
1193
+ _iteratorError = err;
1194
+ } finally{
1195
+ try {
1196
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1197
+ _iterator.return();
1198
+ }
1199
+ } finally{
1200
+ if (_didIteratorError) {
1201
+ throw _iteratorError;
1202
+ }
1203
+ }
1204
+ }
1205
+ return collected.join(' ').trim();
1206
+ }
1207
+ function stringLiteralValue(node) {
1208
+ var result;
1209
+ if (tsMorph.Node.isStringLiteral(node) || tsMorph.Node.isNoSubstitutionTemplateLiteral(node)) {
1210
+ result = node.getLiteralText();
1211
+ }
1212
+ return result;
1213
+ }
1214
+ function identifierName(node) {
1215
+ var result;
1216
+ if (tsMorph.Node.isIdentifier(node)) {
1217
+ result = node.getText();
1218
+ }
1219
+ return result;
1220
+ }
1221
+
459
1222
  exports.extractCrudEntries = extractCrudEntries;
1223
+ exports.extractModelsFromSource = extractModelsFromSource;