eslint-plugin-jsdoc 39.3.3 → 39.3.4

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/README.md CHANGED
@@ -6759,7 +6759,7 @@ You may provide a custom default message by using the following format:
6759
6759
  ```js
6760
6760
  {
6761
6761
  'jsdoc/match-description': ['error', {
6762
- message: 'The default dscription should begin with a capital letter.'
6762
+ message: 'The default description should begin with a capital letter.'
6763
6763
  }]
6764
6764
  }
6765
6765
  ```
@@ -11,6 +11,8 @@ var _getDefaultTagStructureForMode = _interopRequireDefault(require("./getDefaul
11
11
 
12
12
  var _tagNames = require("./tagNames");
13
13
 
14
+ var _hasReturnValue = require("./utils/hasReturnValue");
15
+
14
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
17
 
16
18
  /* eslint-disable jsdoc/no-undefined-types */
@@ -117,6 +119,8 @@ const getPropertiesFromPropertySignature = propSignature => {
117
119
 
118
120
 
119
121
  const getFunctionParameterNames = (functionNode, checkDefaultObjects) => {
122
+ var _functionNode$value;
123
+
120
124
  // eslint-disable-next-line complexity
121
125
  const getParamName = (param, isProperty) => {
122
126
  var _param$left, _param$left3;
@@ -254,7 +258,11 @@ const getFunctionParameterNames = (functionNode, checkDefaultObjects) => {
254
258
  throw new Error(`Unsupported function signature format: \`${param.type}\`.`);
255
259
  };
256
260
 
257
- return (functionNode.params || functionNode.value.params).map(param => {
261
+ if (!functionNode) {
262
+ return [];
263
+ }
264
+
265
+ return (functionNode.params || ((_functionNode$value = functionNode.value) === null || _functionNode$value === void 0 ? void 0 : _functionNode$value.params) || []).map(param => {
258
266
  return getParamName(param);
259
267
  });
260
268
  };
@@ -629,358 +637,6 @@ const tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {
629
637
  const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);
630
638
  const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) && (hasTypePosition || hasNameOrNamepathPosition);
631
639
  return mustHaveEither && !hasEither && !mustHaveTypePosition;
632
- };
633
- /**
634
- * Checks if a node is a promise but has no resolve value or an empty value.
635
- * An `undefined` resolve does not count.
636
- *
637
- * @param {object} node
638
- * @returns {boolean}
639
- */
640
-
641
-
642
- const isNewPromiseExpression = node => {
643
- return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise';
644
- };
645
-
646
- const isVoidPromise = node => {
647
- var _node$typeParameters, _node$typeParameters$, _node$typeParameters$2;
648
-
649
- return (node === null || node === void 0 ? void 0 : (_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 ? void 0 : (_node$typeParameters$ = _node$typeParameters.params) === null || _node$typeParameters$ === void 0 ? void 0 : (_node$typeParameters$2 = _node$typeParameters$[0]) === null || _node$typeParameters$2 === void 0 ? void 0 : _node$typeParameters$2.type) === 'TSVoidKeyword';
650
- };
651
- /**
652
- * @callback PromiseFilter
653
- * @param {object} node
654
- * @returns {boolean}
655
- */
656
-
657
- /**
658
- * Checks if a node has a return statement. Void return does not count.
659
- *
660
- * @param {object} node
661
- * @param {PromiseFilter} promFilter
662
- * @returns {boolean|Node}
663
- */
664
- // eslint-disable-next-line complexity
665
-
666
-
667
- const hasReturnValue = (node, promFilter) => {
668
- var _node$returnType, _node$returnType$type;
669
-
670
- if (!node) {
671
- return false;
672
- }
673
-
674
- switch (node.type) {
675
- case 'TSFunctionType':
676
- case 'TSMethodSignature':
677
- return !['TSVoidKeyword', 'TSUndefinedKeyword'].includes(node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type);
678
-
679
- case 'MethodDefinition':
680
- return hasReturnValue(node.value, promFilter);
681
-
682
- case 'FunctionExpression':
683
- case 'FunctionDeclaration':
684
- case 'ArrowFunctionExpression':
685
- {
686
- return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, promFilter);
687
- }
688
-
689
- case 'BlockStatement':
690
- {
691
- return node.body.some(bodyNode => {
692
- return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);
693
- });
694
- }
695
-
696
- case 'LabeledStatement':
697
- case 'WhileStatement':
698
- case 'DoWhileStatement':
699
- case 'ForStatement':
700
- case 'ForInStatement':
701
- case 'ForOfStatement':
702
- case 'WithStatement':
703
- {
704
- return hasReturnValue(node.body, promFilter);
705
- }
706
-
707
- case 'IfStatement':
708
- {
709
- return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);
710
- }
711
-
712
- case 'TryStatement':
713
- {
714
- return hasReturnValue(node.block, promFilter) || hasReturnValue(node.handler && node.handler.body, promFilter) || hasReturnValue(node.finalizer, promFilter);
715
- }
716
-
717
- case 'SwitchStatement':
718
- {
719
- return node.cases.some(someCase => {
720
- return someCase.consequent.some(nde => {
721
- return hasReturnValue(nde, promFilter);
722
- });
723
- });
724
- }
725
-
726
- case 'ReturnStatement':
727
- {
728
- // void return does not count.
729
- if (node.argument === null) {
730
- return false;
731
- }
732
-
733
- if (promFilter && isNewPromiseExpression(node.argument)) {
734
- // Let caller decide how to filter, but this is, at the least,
735
- // a return of sorts and truthy
736
- return promFilter(node.argument);
737
- }
738
-
739
- return true;
740
- }
741
-
742
- default:
743
- {
744
- return false;
745
- }
746
- }
747
- };
748
- /**
749
- * Avoids further checking child nodes if a nested function shadows the
750
- * resolver, but otherwise, if name is used (by call or passed in as an
751
- * argument to another function), will be considered as non-empty.
752
- *
753
- * This could check for redeclaration of the resolver, but as such is
754
- * unlikely, we avoid the performance cost of checking everywhere for
755
- * (re)declarations or assignments.
756
- *
757
- * @param {AST} node
758
- * @param {string} resolverName
759
- * @returns {boolean}
760
- */
761
- // eslint-disable-next-line complexity
762
-
763
-
764
- const hasNonEmptyResolverCall = (node, resolverName) => {
765
- if (!node) {
766
- return false;
767
- } // Arrow function without block
768
-
769
-
770
- switch (node.type) {
771
- // istanbul ignore next -- In Babel?
772
- case 'OptionalCallExpression':
773
- case 'CallExpression':
774
- return node.callee.name === resolverName && ( // Implicit or explicit undefined
775
- node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => {
776
- // Being passed in to another function (which might invoke it)
777
- return nde.type === 'Identifier' && nde.name === resolverName || // Handle nested items
778
- hasNonEmptyResolverCall(nde, resolverName);
779
- });
780
-
781
- case 'ChainExpression':
782
- case 'Decorator':
783
- case 'ExpressionStatement':
784
- return hasNonEmptyResolverCall(node.expression, resolverName);
785
-
786
- case 'ClassBody':
787
- case 'BlockStatement':
788
- return node.body.some(bodyNode => {
789
- return hasNonEmptyResolverCall(bodyNode, resolverName);
790
- });
791
-
792
- case 'FunctionExpression':
793
- case 'FunctionDeclaration':
794
- case 'ArrowFunctionExpression':
795
- {
796
- var _node$params$;
797
-
798
- // Shadowing
799
- if (((_node$params$ = node.params[0]) === null || _node$params$ === void 0 ? void 0 : _node$params$.name) === resolverName) {
800
- return false;
801
- }
802
-
803
- return hasNonEmptyResolverCall(node.body, resolverName);
804
- }
805
-
806
- case 'LabeledStatement':
807
- case 'WhileStatement':
808
- case 'DoWhileStatement':
809
- case 'ForStatement':
810
- case 'ForInStatement':
811
- case 'ForOfStatement':
812
- case 'WithStatement':
813
- {
814
- return hasNonEmptyResolverCall(node.body, resolverName);
815
- }
816
-
817
- case 'ConditionalExpression':
818
- case 'IfStatement':
819
- {
820
- return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName);
821
- }
822
-
823
- case 'TryStatement':
824
- {
825
- return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName);
826
- }
827
-
828
- case 'SwitchStatement':
829
- {
830
- return node.cases.some(someCase => {
831
- return someCase.consequent.some(nde => {
832
- return hasNonEmptyResolverCall(nde, resolverName);
833
- });
834
- });
835
- }
836
-
837
- case 'ArrayPattern':
838
- case 'ArrayExpression':
839
- return node.elements.some(element => {
840
- return hasNonEmptyResolverCall(element, resolverName);
841
- });
842
-
843
- case 'AssignmentPattern':
844
- return hasNonEmptyResolverCall(node.right, resolverName);
845
-
846
- case 'AssignmentExpression':
847
- case 'BinaryExpression':
848
- case 'LogicalExpression':
849
- {
850
- return hasNonEmptyResolverCall(node.left, resolverName) || hasNonEmptyResolverCall(node.right, resolverName);
851
- }
852
- // Comma
853
-
854
- case 'SequenceExpression':
855
- case 'TemplateLiteral':
856
- return node.expressions.some(subExpression => {
857
- return hasNonEmptyResolverCall(subExpression, resolverName);
858
- });
859
-
860
- case 'ObjectPattern':
861
- case 'ObjectExpression':
862
- return node.properties.some(property => {
863
- return hasNonEmptyResolverCall(property, resolverName);
864
- });
865
- // istanbul ignore next -- In Babel?
866
-
867
- case 'ClassMethod':
868
- case 'MethodDefinition':
869
- return node.decorators && node.decorators.some(decorator => {
870
- return hasNonEmptyResolverCall(decorator, resolverName);
871
- }) || node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
872
- // istanbul ignore next -- In Babel?
873
-
874
- case 'ObjectProperty':
875
- /* eslint-disable no-fallthrough */
876
- // istanbul ignore next -- In Babel?
877
-
878
- case 'PropertyDefinition': // istanbul ignore next -- In Babel?
879
-
880
- case 'ClassProperty':
881
- /* eslint-enable no-fallthrough */
882
-
883
- case 'Property':
884
- return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
885
- // istanbul ignore next -- In Babel?
886
-
887
- case 'ObjectMethod':
888
- // istanbul ignore next -- In Babel?
889
- return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || node.arguments.some(nde => {
890
- return hasNonEmptyResolverCall(nde, resolverName);
891
- });
892
-
893
- case 'ClassExpression':
894
- case 'ClassDeclaration':
895
- return hasNonEmptyResolverCall(node.body, resolverName);
896
-
897
- case 'AwaitExpression':
898
- case 'SpreadElement':
899
- case 'UnaryExpression':
900
- case 'YieldExpression':
901
- return hasNonEmptyResolverCall(node.argument, resolverName);
902
-
903
- case 'VariableDeclaration':
904
- {
905
- return node.declarations.some(nde => {
906
- return hasNonEmptyResolverCall(nde, resolverName);
907
- });
908
- }
909
-
910
- case 'VariableDeclarator':
911
- {
912
- return hasNonEmptyResolverCall(node.id, resolverName) || hasNonEmptyResolverCall(node.init, resolverName);
913
- }
914
-
915
- case 'TaggedTemplateExpression':
916
- return hasNonEmptyResolverCall(node.quasi, resolverName);
917
- // ?.
918
- // istanbul ignore next -- In Babel?
919
-
920
- case 'OptionalMemberExpression':
921
- case 'MemberExpression':
922
- return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName);
923
- // istanbul ignore next -- In Babel?
924
-
925
- case 'Import':
926
- case 'ImportExpression':
927
- return hasNonEmptyResolverCall(node.source, resolverName);
928
-
929
- case 'ReturnStatement':
930
- {
931
- if (node.argument === null) {
932
- return false;
933
- }
934
-
935
- return hasNonEmptyResolverCall(node.argument, resolverName);
936
- }
937
-
938
- /*
939
- // Shouldn't need to parse literals/literal components, etc.
940
- case 'Identifier':
941
- case 'TemplateElement':
942
- case 'Super':
943
- // Exports not relevant in this context
944
- */
945
-
946
- default:
947
- return false;
948
- }
949
- };
950
- /**
951
- * Checks if a Promise executor has no resolve value or an empty value.
952
- * An `undefined` resolve does not count.
953
- *
954
- * @param {object} node
955
- * @param {boolean} anyPromiseAsReturn
956
- * @returns {boolean}
957
- */
958
-
959
-
960
- const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {
961
- return hasReturnValue(node, prom => {
962
- if (anyPromiseAsReturn) {
963
- return true;
964
- }
965
-
966
- if (isVoidPromise(prom)) {
967
- return false;
968
- }
969
-
970
- const [{
971
- params,
972
- body
973
- } = {}] = prom.arguments;
974
-
975
- if (!(params !== null && params !== void 0 && params.length)) {
976
- return false;
977
- }
978
-
979
- const [{
980
- name: resolverName
981
- }] = params;
982
- return hasNonEmptyResolverCall(body, resolverName);
983
- });
984
640
  }; // eslint-disable-next-line complexity
985
641
 
986
642
 
@@ -1497,10 +1153,10 @@ var _default = {
1497
1153
  hasATag,
1498
1154
  hasDefinedTypeTag,
1499
1155
  hasParams,
1500
- hasReturnValue,
1156
+ hasReturnValue: _hasReturnValue.hasReturnValue,
1501
1157
  hasTag,
1502
1158
  hasThrowValue,
1503
- hasValueOrExecutorHasNonEmptyResolveValue,
1159
+ hasValueOrExecutorHasNonEmptyResolveValue: _hasReturnValue.hasValueOrExecutorHasNonEmptyResolveValue,
1504
1160
  hasYieldValue,
1505
1161
  isConstructor,
1506
1162
  isGetter,
@@ -1 +1 @@
1
- {"version":3,"file":"jsdocUtils.js","names":["tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","WarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeTag","tagType","trim","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","isNewPromiseExpression","node","callee","isVoidPromise","typeParameters","hasReturnValue","promFilter","returnType","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","hasNonEmptyResolverCall","resolverName","arguments","test","element","expressions","subExpression","property","decorators","decorator","computed","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom","hasNonFunctionYield","checkYieldReturnValue","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","args","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","children","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","default","checkGetters","checkSetters","dropPathSegmentQuotes","str","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n\nimport WarnSettings from './WarnSettings';\nimport getDefaultTagStructureForMode from './getDefaultTagStructureForMode';\nimport {\n jsdocTags,\n closureTags,\n typeScriptTags,\n} from './tagNames';\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"} ParserMode\n */\n\nlet tagStructure;\n\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if (cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {object} propSignature\n * @returns {undefined|Array|string}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n }),\n ];\n }\n\n return propSignature.key.name;\n};\n\n/**\n * @param {object} functionNode\n * @param {boolean} checkDefaultObjects\n * @returns {Array}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ? param.left.typeAnnotation : param.typeAnnotation;\n\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ? param.left.name : param.name, flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n // eslint-disable-next-line default-case\n switch (param.value.type) {\n case 'ArrayPattern':\n return [\n param.key.name, param.value.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n case 'ObjectPattern':\n return [\n param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'AssignmentPattern': {\n // eslint-disable-next-line default-case\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n param.key.name, param.value.right.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n param.key.name, param.value.left.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n param.key.name, param.value.left.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n return param.key.raw ||\n // istanbul ignore next -- `raw` may not be present in all parsers\n param.key.value;\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n return (functionNode.params || functionNode.value.params).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {Node} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return functionNode.params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n *\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {Array<object>}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {string} mode\n * @param context\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {object} tagPreference\n * @returns {string|object}\n */\nconst getPreferredTagName = (\n context,\n mode,\n name,\n tagPreference = {},\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (name in tagPreferenceFixed) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {Array} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * @param {object} jsdoc\n * @param {Array} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a defined type.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a defined type is declared; otherwise false.\n */\nconst hasDefinedTypeTag = (tag) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, a type is present\n return true;\n};\n\n/**\n * @param map\n * @param tag\n * @returns {Map}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return map.get(tag);\n};\n\n/**\n * @param structuredTags\n * @param tagMap\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('nameContents', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param mode\n * @param structuredTags\n * @returns {Map}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameContents') === 'namepath-defining';\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('typeAllowed');\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('nameContents');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return namepathTypes.has(tagStruct.get('nameContents'));\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return tagMightHaveTypePosition(tag, tagMap) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeOrNameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\n// eslint-disable-next-line complexity\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(node.handler && node.handler.body, checkYieldReturnValue) ||\n hasNonFunctionYield(node.finalizer, checkYieldReturnValue);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (node.parent.type === 'VariableDeclarator') {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return node.generator && (\n node.expression || hasNonFunctionYield(node.body, checkYieldReturnValue)\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim().replace(/^\\[(?<name>.*?)=.*\\]$/u, '$<name>');\n });\n};\n\n/**\n * @typedef {true|string[]} DefaultContexts\n */\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {DefaultContexts} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n * @param {Function} handler\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n let property;\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = prop.context;\n value = checkJsdoc.bind(\n null, {\n ...selInfo,\n comment: prop.comment,\n }, handler.bind(null, prop.comment),\n );\n } else {\n property = prop.context;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = properties[property];\n properties[property] = old ? function (...args) {\n old(...args);\n value(...args);\n } : value;\n }\n\n return properties;\n};\n\nconst filterTags = (tags, filter) => {\n return tags.filter((tag) => {\n return filter(tag);\n });\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n};\n\nconst isGetter = (node) => {\n return node && node.parent?.kind === 'get';\n};\n\nconst isSetter = (node) => {\n return node && node.parent?.kind === 'set';\n};\n\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key: {\n name: sourceName,\n },\n } = node;\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const children = type === 'MethodDefinition' ? 'body' : 'properties';\n\n return node.parent[children].some(({\n kind,\n key: {\n name,\n },\n }) => {\n return kind === oppositeKind && name === sourceName;\n });\n};\n\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(node.parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(node.parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n *\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replace(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => void}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} requiredFlags\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasDefinedTypeTag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isSetter,\n isValidTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"mappings":";;;;;;;AAEA;;AACA;;AACA;;;;AAJA;;AAUA;AACA;AACA;AAEA,IAAIA,YAAJ;;AAEA,MAAMC,eAAe,GAAIC,IAAD,IAAU;EAChCF,YAAY,GAAG,IAAAG,sCAAA,EAA8BD,IAA9B,CAAf;AACD,CAFD,C,CAIA;AACA;;;AACA,MAAME,YAAY,GAAG,CAACC,MAAD,EAASC,IAAI,GAAG,EAAhB,KAAuB;EAC1C,IAAIC,cAAc,GAAG,KAArB;EACA,IAAIC,eAAe,GAAG,KAAtB;EACA,MAAMC,KAAK,GAAG,EAAd;EAEA,MAAMC,KAAK,GAAGL,MAAM,CAACM,MAAP,CAAc,CAACC,GAAD,EAAMC,GAAN,KAAc;IACxC,IAAIC,KAAK,CAACC,OAAN,CAAcF,GAAd,CAAJ,EAAwB;MACtB,IAAIG,GAAJ;;MACA,IAAIF,KAAK,CAACC,OAAN,CAAcF,GAAG,CAAC,CAAD,CAAjB,CAAJ,EAA2B;QACzBG,GAAG,GAAGH,GAAG,CAAC,CAAD,CAAT;MACD,CAFD,MAEO;QACL,IAAIA,GAAG,CAAC,CAAD,CAAH,CAAON,cAAX,EAA2B;UACzBA,cAAc,GAAG,IAAjB;QACD;;QAED,IAAIM,GAAG,CAAC,CAAD,CAAH,CAAOL,eAAX,EAA4B;UAC1BA,eAAe,GAAG,IAAlB;QACD;;QAEDQ,GAAG,GAAGH,GAAG,CAAC,CAAD,CAAH,CAAOH,KAAb;MACD;;MAED,MAAMO,SAAS,GAAGb,YAAY,CAACY,GAAD,EAAMV,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAG,CAAC,CAAD,CAAI,EAArB,GAAyBA,GAAG,CAAC,CAAD,CAAtC,CAA9B;;MACA,IAAII,SAAS,CAACV,cAAd,EAA8B;QAC5BA,cAAc,GAAG,IAAjB;MACD;;MAED,IAAIU,SAAS,CAACT,eAAd,EAA+B;QAC7BA,eAAe,GAAG,IAAlB;MACD;;MAED,MAAMU,KAAK,GAAG,CACZZ,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAG,CAAC,CAAD,CAAI,EAArB,GAAyBA,GAAG,CAAC,CAAD,CADpB,EAEZ,GAAGI,SAAS,CAACP,KAFD,EAGZS,MAHY,CAGLC,OAHK,CAAd;MAIAX,KAAK,CAACY,IAAN,CAAW,KAAX,EAAkB,GAAGJ,SAAS,CAACR,KAA/B;MAEA,OAAOG,GAAG,CAACU,MAAJ,CAAWJ,KAAX,CAAP;IACD;;IAED,IAAI,OAAOL,GAAP,KAAe,QAAnB,EAA6B;MAC3B,IAAIA,GAAG,CAACU,cAAR,EAAwB;QACtBf,eAAe,GAAG,IAAlB;QACAC,KAAK,CAACY,IAAN,CAAW,IAAX;MACD,CAHD,MAGO;QACLZ,KAAK,CAACY,IAAN,CAAW,KAAX;MACD;;MAED,IAAIR,GAAG,CAACW,WAAR,EAAqB;QACnBjB,cAAc,GAAG,IAAjB;MACD;;MAEDK,GAAG,CAACS,IAAJ,CAASf,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAG,CAACY,IAAK,EAAvB,GAA2BZ,GAAG,CAACY,IAA5C;IACD,CAbD,MAaO,IAAI,OAAOZ,GAAP,KAAe,WAAnB,EAAgC;MACrCJ,KAAK,CAACY,IAAN,CAAW,KAAX;MACAT,GAAG,CAACS,IAAJ,CAASf,IAAI,GAAI,GAAEA,IAAK,IAAGO,GAAI,EAAlB,GAAsBA,GAAnC;IACD;;IAED,OAAOD,GAAP;EACD,CAtDa,EAsDX,EAtDW,CAAd;EAwDA,OAAO;IACLJ,eADK;IAELD,cAFK;IAGLG,KAHK;IAILD;EAJK,CAAP;AAMD,CAnED;AAqEA;AACA;AACA;AACA;;;AACA,MAAMiB,kCAAkC,GAAIC,aAAD,IAAmB;EAC5D,IACEA,aAAa,CAACC,IAAd,KAAuB,kBAAvB,IACAD,aAAa,CAACC,IAAd,KAAuB,iCADvB,IAEAD,aAAa,CAACC,IAAd,KAAuB,4BAHzB,EAIE;IACA,OAAOC,SAAP;EACD;;EAED,IAAIF,aAAa,CAACG,cAAd,IAAgCH,aAAa,CAACG,cAAd,CAA6BA,cAA7B,CAA4CF,IAA5C,KAAqD,eAAzF,EAA0G;IACxG,OAAO,CACLD,aAAa,CAACI,GAAd,CAAkBN,IADb,EACmBE,aAAa,CAACG,cAAd,CAA6BA,cAA7B,CAA4CE,OAA5C,CAAoDC,GAApD,CAAyDC,MAAD,IAAY;MAC1F,OAAOR,kCAAkC,CAACQ,MAAD,CAAzC;IACD,CAFuB,CADnB,CAAP;EAKD;;EAED,OAAOP,aAAa,CAACI,GAAd,CAAkBN,IAAzB;AACD,CAlBD;AAoBA;AACA;AACA;AACA;AACA;;;AACA,MAAMU,yBAAyB,GAAG,CAChCC,YADgC,EAClBC,mBADkB,KAE7B;EACH;EACA,MAAMC,YAAY,GAAG,CAACC,KAAD,EAAQC,UAAR,KAAuB;IAAA;;IAC1C,MAAMC,qBAAqB,GAAG,UAAUF,KAAV,IAAmB,oBAAoBA,KAAK,CAACG,IAA3E;;IAEA,IAAI,oBAAoBH,KAApB,IAA6BE,qBAAjC,EAAwD;MACtD,MAAMX,cAAc,GAAGW,qBAAqB,GAAGF,KAAK,CAACG,IAAN,CAAWZ,cAAd,GAA+BS,KAAK,CAACT,cAAjF;;MAEA,IAAIA,cAAc,CAACA,cAAf,CAA8BF,IAA9B,KAAuC,eAA3C,EAA4D;QAC1D,MAAMe,aAAa,GAAGb,cAAc,CAACA,cAAf,CAA8BE,OAA9B,CAAsCC,GAAtC,CAA2CC,MAAD,IAAY;UAC1E,OAAOR,kCAAkC,CAACQ,MAAD,CAAzC;QACD,CAFqB,CAAtB;QAGA,MAAMjB,SAAS,GAAG,EAChB,GAAGb,YAAY,CAACuC,aAAD,CADC;UAEhBC,mBAAmB,EAAEL,KAAK,CAACd;QAFX,CAAlB;QAIA,MAAMoB,WAAW,GAAG,UAAUN,KAAV,IAAmB,UAAUA,KAAK,CAACG,IAAvD;;QAEA,IAAI,UAAUH,KAAV,IAAmBM,WAAvB,EAAoC;UAClC,OAAO,CACLA,WAAW,GAAGN,KAAK,CAACG,IAAN,CAAWjB,IAAd,GAAqBc,KAAK,CAACd,IADjC,EACuCR,SADvC,CAAP;QAGD;;QAED,OAAO,CACLY,SADK,EACMZ,SADN,CAAP;MAGD;IACF;;IAED,IAAI,UAAUsB,KAAd,EAAqB;MACnB,OAAOA,KAAK,CAACd,IAAb;IACD;;IAED,IAAI,UAAUc,KAAV,IAAmB,UAAUA,KAAK,CAACG,IAAvC,EAA6C;MAC3C,OAAOH,KAAK,CAACG,IAAN,CAAWjB,IAAlB;IACD;;IAED,IAAIc,KAAK,CAACX,IAAN,KAAe,eAAf,IAAkC,gBAAAW,KAAK,CAACG,IAAN,4DAAYd,IAAZ,MAAqB,eAA3D,EAA4E;MAAA;;MAC1E,MAAMkB,UAAU,GAAGP,KAAK,CAACO,UAAN,qBAAoBP,KAAK,CAACG,IAA1B,iDAAoB,aAAYI,UAAhC,CAAnB;MACA,MAAMC,KAAK,GAAGD,UAAU,CAACb,GAAX,CAAgBe,IAAD,IAAU;QACrC,OAAOV,YAAY,CAACU,IAAD,EAAO,IAAP,CAAnB;MACD,CAFa,CAAd;MAIA,OAAO,CACLnB,SADK,EACMzB,YAAY,CAAC2C,KAAD,CADlB,CAAP;IAGD;;IAED,IAAIR,KAAK,CAACX,IAAN,KAAe,UAAnB,EAA+B;MAC7B;MACA,QAAQW,KAAK,CAACU,KAAN,CAAYrB,IAApB;QACA,KAAK,cAAL;UACE,OAAO,CACLW,KAAK,CAACR,GAAN,CAAUN,IADL,EACWc,KAAK,CAACU,KAAN,CAAYC,QAAZ,CAAqBjB,GAArB,CAAyB,CAACe,IAAD,EAAOG,GAAP,KAAe;YACtD,OAAO;cACL1B,IAAI,EAAE0B,GADD;cAEL3B,WAAW,EAAEwB,IAAI,CAACpB,IAAL,KAAc;YAFtB,CAAP;UAID,CALe,CADX,CAAP;;QAQF,KAAK,eAAL;UACE,OAAO,CACLW,KAAK,CAACR,GAAN,CAAUN,IADL,EACWc,KAAK,CAACU,KAAN,CAAYH,UAAZ,CAAuBb,GAAvB,CAA4Be,IAAD,IAAU;YACnD,OAAOV,YAAY,CAACU,IAAD,EAAOR,UAAP,CAAnB;UACD,CAFe,CADX,CAAP;;QAKF,KAAK,mBAAL;UAA0B;YACxB;YACA,QAAQD,KAAK,CAACU,KAAN,CAAYP,IAAZ,CAAiBd,IAAzB;cACA,KAAK,YAAL;gBACE;gBACA,IAAIS,mBAAmB,IAAIE,KAAK,CAACU,KAAN,CAAYG,KAAZ,CAAkBxB,IAAlB,KAA2B,kBAAtD,EAA0E;kBACxE,OAAO,CACLW,KAAK,CAACR,GAAN,CAAUN,IADL,EACWc,KAAK,CAACU,KAAN,CAAYG,KAAZ,CAAkBN,UAAlB,CAA6Bb,GAA7B,CAAkCe,IAAD,IAAU;oBACzD,OAAOV,YAAY,CAACU,IAAD,EAAOR,UAAP,CAAnB;kBACD,CAFe,CADX,CAAP;gBAKD;;gBAED;;cACF,KAAK,eAAL;gBACE,OAAO,CACLD,KAAK,CAACR,GAAN,CAAUN,IADL,EACWc,KAAK,CAACU,KAAN,CAAYP,IAAZ,CAAiBI,UAAjB,CAA4Bb,GAA5B,CAAiCe,IAAD,IAAU;kBACxD,OAAOV,YAAY,CAACU,IAAD,EAAOR,UAAP,CAAnB;gBACD,CAFe,CADX,CAAP;;cAKF,KAAK,cAAL;gBACE,OAAO,CACLD,KAAK,CAACR,GAAN,CAAUN,IADL,EACWc,KAAK,CAACU,KAAN,CAAYP,IAAZ,CAAiBQ,QAAjB,CAA0BjB,GAA1B,CAA8B,CAACe,IAAD,EAAOG,GAAP,KAAe;kBAC3D,OAAO;oBACL1B,IAAI,EAAE0B,GADD;oBAEL3B,WAAW,EAAEwB,IAAI,CAACpB,IAAL,KAAc;kBAFtB,CAAP;gBAID,CALe,CADX,CAAP;YAnBF;UA4BD;MA9CD;;MAiDA,QAAQW,KAAK,CAACR,GAAN,CAAUH,IAAlB;QACA,KAAK,YAAL;UACE,OAAOW,KAAK,CAACR,GAAN,CAAUN,IAAjB;QAEF;;QACA,KAAK,SAAL;UACE,OAAOc,KAAK,CAACR,GAAN,CAAUsB,GAAV,IACL;UACAd,KAAK,CAACR,GAAN,CAAUkB,KAFZ;QAIF;;QACA;UACE;UACA;UACA;UACA;UACA,OAAOpB,SAAP;MAhBF;IAkBD;;IAED,IAAIU,KAAK,CAACX,IAAN,KAAe,cAAf,IAAiC,iBAAAW,KAAK,CAACG,IAAN,8DAAYd,IAAZ,MAAqB,cAA1D,EAA0E;MAAA;;MACxE,MAAMsB,QAAQ,GAAGX,KAAK,CAACW,QAAN,qBAAkBX,KAAK,CAACG,IAAxB,iDAAkB,aAAYQ,QAA9B,CAAjB;MACA,MAAMH,KAAK,GAAGG,QAAQ,CAACjB,GAAT,CAAa,CAACe,IAAD,EAAOG,GAAP,KAAe;QACxC,OAAO;UACL1B,IAAI,EAAG,IAAG0B,GAAI,GADT;UAEL3B,WAAW,EAAE,CAAAwB,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEpB,IAAN,MAAe;QAFvB,CAAP;MAID,CALa,CAAd;MAOA,OAAO,CACLC,SADK,EACMzB,YAAY,CAAC2C,KAAD,CADlB,CAAP;IAGD;;IAED,IAAI,CACF,aADE,EACa,0BADb,EAEFO,QAFE,CAEOf,KAAK,CAACX,IAFb,CAAJ,EAEwB;MACtB,OAAO;QACLL,cAAc,EAAEiB,UADX;QAELf,IAAI,EAAEc,KAAK,CAACgB,QAAN,CAAe9B,IAFhB;QAGLD,WAAW,EAAE;MAHR,CAAP;IAKD;;IAED,IAAIe,KAAK,CAACX,IAAN,KAAe,qBAAnB,EAA0C;MACxC,OAAOU,YAAY,CAACC,KAAK,CAACiB,SAAP,EAAkB,IAAlB,CAAnB;IACD;;IAED,MAAM,IAAIC,KAAJ,CAAW,4CAA2ClB,KAAK,CAACX,IAAK,KAAjE,CAAN;EACD,CAnJD;;EAqJA,OAAO,CAACQ,YAAY,CAAC/B,MAAb,IAAuB+B,YAAY,CAACa,KAAb,CAAmB5C,MAA3C,EAAmD4B,GAAnD,CAAwDM,KAAD,IAAW;IACvE,OAAOD,YAAY,CAACC,KAAD,CAAnB;EACD,CAFM,CAAP;AAGD,CA5JD;AA8JA;AACA;AACA;AACA;;;AACA,MAAMmB,SAAS,GAAItB,YAAD,IAAkB;EAClC;EACA,OAAOA,YAAY,CAAC/B,MAAb,CAAoBsD,MAA3B;AACD,CAHD;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,gBAAgB,GAAG,CAACC,KAAD,EAAQC,aAAR,KAA0B;EACjD,MAAMC,GAAG,GAAG,EAAZ;;EACA,KAAK,MAAM,CACTZ,GADS,EAET;IACE1B,IADF;IAEEuC,GAFF;IAGEpC;EAHF,CAFS,CAAX,IAOKiC,KAAK,CAACI,IAAN,CAAWC,OAAX,EAPL,EAO2B;IACzB,IAAIF,GAAG,KAAKF,aAAZ,EAA2B;MACzB;IACD;;IAEDC,GAAG,CAAC1C,IAAJ,CAAS;MACP8B,GADO;MAEP1B,IAFO;MAGPG;IAHO,CAAT;EAKD;;EAED,OAAOmC,GAAP;AACD,CAtBD;;AAwBA,MAAMI,gBAAgB,GAAG,IAAAC,qBAAA,GAAzB;AAEA;AACA;AACA;AACA;;AACA,MAAMC,kBAAkB,GAAG,CAACnE,IAAD,EAAOoE,OAAP,KAAmB;EAC5C,QAAQpE,IAAR;IACA,KAAK,OAAL;MACE,OAAOqE,mBAAP;;IACF,KAAK,YAAL;MACE,OAAOC,wBAAP;;IACF,KAAK,SAAL;IAAgB,KAAK,YAAL;MACd,OAAOC,qBAAP;;IACF;MACE,IAAI,CAACN,gBAAgB,CAACO,aAAjB,CAA+BJ,OAA/B,EAAwC,MAAxC,CAAL,EAAsD;QACpDA,OAAO,CAACK,MAAR,CAAe;UACbC,GAAG,EAAE;YACHC,KAAK,EAAE;cACLC,MAAM,EAAE,CADH;cAELC,IAAI,EAAE;YAFD;UADJ,CADQ;UAObC,OAAO,EAAG,wBAAuB9E,IAAK;QAPzB,CAAf;QASAiE,gBAAgB,CAACc,mBAAjB,CAAqCX,OAArC,EAA8C,MAA9C;MACD,CAZH,CAcE;;;MACA,OAAOC,mBAAP;EAtBF;AAwBD,CAzBD;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMW,mBAAmB,GAAG,CAC1BZ,OAD0B,EAE1BpE,IAF0B,EAG1BuB,IAH0B,EAI1B0D,aAAa,GAAG,EAJU,KAKvB;EAAA;;EACH,MAAMC,UAAU,GAAGC,MAAM,CAACC,MAAP,CAAcH,aAAd,CAAnB;;EACA,IAAIC,UAAU,CAAC9B,QAAX,CAAoB7B,IAApB,KAA6B2D,UAAU,CAACG,IAAX,CAAiBC,OAAD,IAAa;IAC5D,OAAOA,OAAO,IAAI,OAAOA,OAAP,KAAmB,QAA9B,IAA0CA,OAAO,CAACC,WAAR,KAAwBhE,IAAzE;EACD,CAFgC,CAAjC,EAEI;IACF,OAAOA,IAAP;EACD,CANE,CAQH;EACA;EACA;EACA;EACA;;;EACA,MAAMiE,kBAAkB,GAAGL,MAAM,CAACM,WAAP,CACzBN,MAAM,CACHnB,OADH,CACWiB,aADX,EAEGlD,GAFH,CAEO,CAAC,CACJF,GADI,EAEJkB,KAFI,CAAD,KAGC;IACJ,OAAO,CACLlB,GAAG,CAAC6D,OAAJ,CAAY,QAAZ,EAAsB,EAAtB,CADK,EACsB3C,KADtB,CAAP;EAGD,CATH,CADyB,CAA3B;;EAaA,IAAIxB,IAAI,IAAIiE,kBAAZ,EAAgC;IAC9B,OAAOA,kBAAkB,CAACjE,IAAD,CAAzB;EACD;;EAED,MAAMoE,QAAQ,GAAGxB,kBAAkB,CAACnE,IAAD,EAAOoE,OAAP,CAAnC;EAEA,MAAMwB,gBAAgB,2BAAGT,MAAM,CAACnB,OAAP,CAAe2B,QAAf,EAAyBE,IAAzB,CAA8B,CAAC,GACpDC,OADoD,CAAD,KAEjD;IACJ,OAAOA,OAAO,CAAC1C,QAAR,CAAiB7B,IAAjB,CAAP;EACD,CAJwB,CAAH,yDAAG,qBAIpB,CAJoB,CAAzB;;EAKA,IAAIqE,gBAAJ,EAAsB;IACpB,OAAOA,gBAAP;EACD;;EAED,OAAOrE,IAAP;AACD,CA/CD;AAiDA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMwE,UAAU,GAAG,CACjB3B,OADiB,EAEjBpE,IAFiB,EAGjBuB,IAHiB,EAIjByE,WAJiB,KAKd;EACH,MAAML,QAAQ,GAAGxB,kBAAkB,CAACnE,IAAD,EAAOoE,OAAP,CAAnC;EAEA,MAAM6B,aAAa,GAAGd,MAAM,CAACe,IAAP,CAAYP,QAAZ,EAAsBvE,MAAtB,CAA6B+D,MAAM,CAACC,MAAP,CAAcO,QAAd,EAAwBQ,IAAxB,EAA7B,CAAtB;EACA,MAAMC,cAAc,GAAGJ,WAAvB;EACA,MAAMK,OAAO,GAAGJ,aAAa,CAAC7E,MAAd,CAAqBgF,cAArB,CAAhB;EAEA,OAAOC,OAAO,CAACjD,QAAR,CAAiB7B,IAAjB,CAAP;AACD,CAbD;AAeA;AACA;AACA;AACA;AACA;;;AACA,MAAM+E,MAAM,GAAG,CAAC3C,KAAD,EAAQC,aAAR,KAA0B;EACvC,MAAM2C,cAAc,GAAG3C,aAAa,CAAC4C,WAAd,EAAvB;EAEA,OAAO7C,KAAK,CAACI,IAAN,CAAWsB,IAAX,CAAiBoB,GAAD,IAAS;IAC9B,OAAOA,GAAG,CAAC3C,GAAJ,CAAQ0C,WAAR,OAA0BD,cAAjC;EACD,CAFM,CAAP;AAGD,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACA,MAAMG,OAAO,GAAG,CAAC/C,KAAD,EAAQgD,cAAR,KAA2B;EACzC,OAAOA,cAAc,CAACtB,IAAf,CAAqBzB,aAAD,IAAmB;IAC5C,OAAO0C,MAAM,CAAC3C,KAAD,EAAQC,aAAR,CAAb;EACD,CAFM,CAAP;AAGD,CAJD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMgD,iBAAiB,GAAI9C,GAAD,IAAS;EACjC;EACA,IAAI,OAAOA,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA1C,EAAgD;IAC9C,OAAO,KAAP;EACD,CAJgC,CAMjC;;;EACA,MAAM+C,OAAO,GAAG/C,GAAG,CAACpC,IAAJ,CAASoF,IAAT,EAAhB;;EACA,IAAID,OAAO,KAAK,WAAZ,IAA2BA,OAAO,KAAK,MAA3C,EAAmD;IACjD,OAAO,KAAP;EACD,CAVgC,CAYjC;;;EACA,OAAO,IAAP;AACD,CAdD;AAgBA;AACA;AACA;AACA;AACA;;;AACA,MAAME,SAAS,GAAG,CAAChF,GAAD,EAAM+B,GAAN,KAAc;EAC9B,IAAI,CAAC/B,GAAG,CAACiF,GAAJ,CAAQlD,GAAR,CAAL,EAAmB;IACjB/B,GAAG,CAACkF,GAAJ,CAAQnD,GAAR,EAAa,IAAIoD,GAAJ,EAAb;EACD;;EAED,OAAOnF,GAAG,CAACoF,GAAJ,CAAQrD,GAAR,CAAP;AACD,CAND;AAQA;AACA;AACA;AACA;;;AACA,MAAMsD,oBAAoB,GAAG,CAACC,cAAD,EAAiBC,MAAM,GAAGxH,YAA1B,KAA2C;EACtE,KAAK,MAAM,CACTgE,GADS,EAET;IACEvC,IADF;IAEEG,IAFF;IAGE6F,QAAQ,GAAG;EAHb,CAFS,CAAX,IAOKpC,MAAM,CAACnB,OAAP,CAAeqD,cAAf,CAPL,EAOqC;IACnC,MAAMG,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;IAEA0D,SAAS,CAACP,GAAV,CAAc,cAAd,EAA8B1F,IAA9B;IACAiG,SAAS,CAACP,GAAV,CAAc,aAAd,EAA6BvF,IAA7B;IAEA,MAAM+F,YAAY,GAAGF,QAAQ,CAACnE,QAAT,CAAkB,MAAlB,CAArB;;IACA,IAAIqE,YAAY,IAAIlG,IAAI,KAAK,KAA7B,EAAoC;MAClC,MAAM,IAAIgC,KAAJ,CAAU,sEAAV,CAAN;IACD;;IAEDiE,SAAS,CAACP,GAAV,CAAc,cAAd,EAA8BQ,YAA9B;IAEA,MAAMC,YAAY,GAAGH,QAAQ,CAACnE,QAAT,CAAkB,MAAlB,CAArB;;IACA,IAAIsE,YAAY,IAAIhG,IAAI,KAAK,KAA7B,EAAoC;MAClC,MAAM,IAAI6B,KAAJ,CAAU,sEAAV,CAAN;IACD;;IAEDiE,SAAS,CAACP,GAAV,CAAc,cAAd,EAA8BS,YAA9B;IAEA,MAAMC,kBAAkB,GAAGJ,QAAQ,CAACnE,QAAT,CAAkB,oBAAlB,CAA3B;;IACA,IAAIuE,kBAAkB,IAAIpG,IAAI,KAAK,KAAnC,EAA0C;MACxC,MAAM,IAAIgC,KAAJ,CAAU,oFAAV,CAAN;IACD;;IAED,IAAIoE,kBAAkB,IAAIjG,IAAI,KAAK,KAAnC,EAA0C;MACxC,MAAM,IAAI6B,KAAJ,CAAU,oFAAV,CAAN;IACD;;IAEDiE,SAAS,CAACP,GAAV,CAAc,oBAAd,EAAoCU,kBAApC;EACD;AACF,CAvCD;AAyCA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,sBAAsB,GAAG,CAAC5H,IAAD,EAAOqH,cAAP,KAA0B;EACvD,MAAMG,SAAS,GAAG,IAAAvH,sCAAA,EAA8BD,IAA9B,CAAlB;;EAEA,IAAI;IACFoH,oBAAoB,CAACC,cAAD,EAAiBG,SAAjB,CAApB;EACD,CAFD,CAEE,MAAM,CACN;EACD;;EAED,OAAOA,SAAP;AACD,CAVD;AAYA;AACA;AACA;AACA;AACA;;;AACA,MAAMK,qBAAqB,GAAG,CAAC/D,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EAC5D,MAAM0H,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,OAAO0D,SAAS,CAACL,GAAV,CAAc,cAAd,MAAkC,mBAAzC;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACA,MAAMW,uBAAuB,GAAG,CAAChE,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EAC9D,MAAM0H,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,OAAO0D,SAAS,CAACL,GAAV,CAAc,cAAd,CAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACA,MAAMY,wBAAwB,GAAG,CAACjE,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EAC/D,IAAIgI,uBAAuB,CAAChE,GAAD,EAAMwD,MAAN,CAA3B,EAA0C;IACxC,OAAO,IAAP;EACD;;EAED,MAAME,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,MAAMD,GAAG,GAAG2D,SAAS,CAACL,GAAV,CAAc,aAAd,CAAZ;EAEA,OAAOtD,GAAG,KAAKlC,SAAR,GAAoB,IAApB,GAA2BkC,GAAlC;AACD,CAVD;;AAYA,MAAMmE,aAAa,GAAG,IAAIC,GAAJ,CAAQ,CAC5B,mBAD4B,EACP,sBADO,CAAR,CAAtB;AAIA;AACA;AACA;AACA;AACA;;AACA,MAAMC,wBAAwB,GAAG,CAACpE,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EAC/D,MAAM0H,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,MAAMD,GAAG,GAAG2D,SAAS,CAACL,GAAV,CAAc,cAAd,CAAZ;EAEA,OAAOtD,GAAG,KAAKlC,SAAR,GAAoB,IAApB,GAA2BT,OAAO,CAAC2C,GAAD,CAAzC;AACD,CAND;AAQA;AACA;AACA;AACA;AACA;;;AACA,MAAMsE,oBAAoB,GAAG,CAACrE,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EAC3D,MAAM0H,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,OAAOkE,aAAa,CAAChB,GAAd,CAAkBQ,SAAS,CAACL,GAAV,CAAc,cAAd,CAAlB,CAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACA,MAAMiB,uBAAuB,GAAG,CAACtE,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EAC9D,MAAM0H,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,OAAO0D,SAAS,CAACL,GAAV,CAAc,cAAd,CAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACA,MAAMkB,oCAAoC,GAAG,CAACvE,GAAD,EAAMwD,MAAN,KAAiB;EAC5D,OAAOS,wBAAwB,CAACjE,GAAD,EAAMwD,MAAN,CAAxB,IAAyCa,oBAAoB,CAACrE,GAAD,EAAMwD,MAAN,CAApE;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;;;AACA,MAAMgB,mCAAmC,GAAG,CAACxE,GAAD,EAAMwD,MAAN,KAAiB;EAC3D,MAAME,SAAS,GAAGT,SAAS,CAACO,MAAD,EAASxD,GAAT,CAA3B;EAEA,OAAO0D,SAAS,CAACL,GAAV,CAAc,oBAAd,CAAP;AACD,CAJD;AAMA;AACA;AACA;AACA;AACA;;;AACA,MAAMoB,gCAAgC,GAAG,CAACzE,GAAD,EAAMwD,MAAM,GAAGxH,YAAf,KAAgC;EACvE,MAAM0I,oBAAoB,GAAGV,uBAAuB,CAAChE,GAAG,CAACA,GAAL,EAAUwD,MAAV,CAApD;EACA,MAAMmB,qBAAqB,GAAGV,wBAAwB,CAACjE,GAAG,CAACA,GAAL,EAAUwD,MAAV,CAAtD;EACA,MAAMoB,eAAe,GAAGD,qBAAqB,IAAIvH,OAAO,CAAC4C,GAAG,CAACpC,IAAL,CAAxD;EACA,MAAMiH,yBAAyB,GAAG,CAChCP,uBAAuB,CAACtE,GAAG,CAACA,GAAL,EAAUwD,MAAV,CAAvB,IACAa,oBAAoB,CAACrE,GAAG,CAACA,GAAL,EAAUwD,MAAV,CAFY,KAG7BpG,OAAO,CAAC4C,GAAG,CAACvC,IAAL,CAHZ;EAIA,MAAMqH,cAAc,GAAGN,mCAAmC,CAACxE,GAAG,CAACA,GAAL,EAAUwD,MAAV,CAA1D;EACA,MAAMuB,SAAS,GAAGR,oCAAoC,CAACvE,GAAG,CAACA,GAAL,EAAUwD,MAAV,CAApC,KACfoB,eAAe,IAAIC,yBADJ,CAAlB;EAGA,OAAOC,cAAc,IAAI,CAACC,SAAnB,IAAgC,CAACL,oBAAxC;AACD,CAbD;AAeA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMM,sBAAsB,GAAIC,IAAD,IAAU;EACvC,OAAOA,IAAI,IAAIA,IAAI,CAACrH,IAAL,KAAc,eAAtB,IAAyCqH,IAAI,CAACC,MAAL,CAAYtH,IAAZ,KAAqB,YAA9D,IACLqH,IAAI,CAACC,MAAL,CAAYzH,IAAZ,KAAqB,SADvB;AAED,CAHD;;AAKA,MAAM0H,aAAa,GAAIF,IAAD,IAAU;EAAA;;EAC9B,OAAO,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,oCAAAA,IAAI,CAAEG,cAAN,uGAAsB/I,MAAtB,0GAA+B,CAA/B,mFAAmCuB,IAAnC,MAA4C,eAAnD;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMyH,cAAc,GAAG,CAACJ,IAAD,EAAOK,UAAP,KAAsB;EAAA;;EAC3C,IAAI,CAACL,IAAL,EAAW;IACT,OAAO,KAAP;EACD;;EAED,QAAQA,IAAI,CAACrH,IAAb;IACA,KAAK,gBAAL;IACA,KAAK,mBAAL;MACE,OAAO,CAAC,CACN,eADM,EAEN,oBAFM,EAGN0B,QAHM,CAGG2F,IAHH,aAGGA,IAHH,2CAGGA,IAAI,CAAEM,UAHT,8EAGG,iBAAkBzH,cAHrB,0DAGG,sBAAkCF,IAHrC,CAAR;;IAIF,KAAK,kBAAL;MACE,OAAOyH,cAAc,CAACJ,IAAI,CAAChG,KAAN,EAAaqG,UAAb,CAArB;;IACF,KAAK,oBAAL;IACA,KAAK,qBAAL;IACA,KAAK,yBAAL;MAAgC;QAC9B,OAAOL,IAAI,CAACO,UAAL,KAAoB,CAACR,sBAAsB,CAACC,IAAI,CAACQ,IAAN,CAAvB,IAAsC,CAACN,aAAa,CAACF,IAAI,CAACQ,IAAN,CAAxE,KACLJ,cAAc,CAACJ,IAAI,CAACQ,IAAN,EAAYH,UAAZ,CADhB;MAED;;IAED,KAAK,gBAAL;MAAuB;QACrB,OAAOL,IAAI,CAACQ,IAAL,CAAUlE,IAAV,CAAgBmE,QAAD,IAAc;UAClC,OAAOA,QAAQ,CAAC9H,IAAT,KAAkB,qBAAlB,IAA2CyH,cAAc,CAACK,QAAD,EAAWJ,UAAX,CAAhE;QACD,CAFM,CAAP;MAGD;;IAED,KAAK,kBAAL;IACA,KAAK,gBAAL;IACA,KAAK,kBAAL;IACA,KAAK,cAAL;IACA,KAAK,gBAAL;IACA,KAAK,gBAAL;IACA,KAAK,eAAL;MAAsB;QACpB,OAAOD,cAAc,CAACJ,IAAI,CAACQ,IAAN,EAAYH,UAAZ,CAArB;MACD;;IAED,KAAK,aAAL;MAAoB;QAClB,OAAOD,cAAc,CAACJ,IAAI,CAACU,UAAN,EAAkBL,UAAlB,CAAd,IAA+CD,cAAc,CAACJ,IAAI,CAACW,SAAN,EAAiBN,UAAjB,CAApE;MACD;;IAED,KAAK,cAAL;MAAqB;QACnB,OAAOD,cAAc,CAACJ,IAAI,CAACY,KAAN,EAAaP,UAAb,CAAd,IACLD,cAAc,CAACJ,IAAI,CAACa,OAAL,IAAgBb,IAAI,CAACa,OAAL,CAAaL,IAA9B,EAAoCH,UAApC,CADT,IAELD,cAAc,CAACJ,IAAI,CAACc,SAAN,EAAiBT,UAAjB,CAFhB;MAGD;;IAED,KAAK,iBAAL;MAAwB;QACtB,OAAOL,IAAI,CAACe,KAAL,CAAWzE,IAAX,CACJ0E,QAAD,IAAc;UACZ,OAAOA,QAAQ,CAACN,UAAT,CAAoBpE,IAApB,CAA0B2E,GAAD,IAAS;YACvC,OAAOb,cAAc,CAACa,GAAD,EAAMZ,UAAN,CAArB;UACD,CAFM,CAAP;QAGD,CALI,CAAP;MAOD;;IAED,KAAK,iBAAL;MAAwB;QACtB;QACA,IAAIL,IAAI,CAAC1F,QAAL,KAAkB,IAAtB,EAA4B;UAC1B,OAAO,KAAP;QACD;;QAED,IAAI+F,UAAU,IAAIN,sBAAsB,CAACC,IAAI,CAAC1F,QAAN,CAAxC,EAAyD;UACvD;UACA;UACA,OAAO+F,UAAU,CAACL,IAAI,CAAC1F,QAAN,CAAjB;QACD;;QAED,OAAO,IAAP;MACD;;IAED;MAAS;QACP,OAAO,KAAP;MACD;EArED;AAuED,CA5ED;AA8EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAM4G,uBAAuB,GAAG,CAAClB,IAAD,EAAOmB,YAAP,KAAwB;EACtD,IAAI,CAACnB,IAAL,EAAW;IACT,OAAO,KAAP;EACD,CAHqD,CAKtD;;;EACA,QAAQA,IAAI,CAACrH,IAAb;IACA;IACA,KAAK,wBAAL;IACA,KAAK,gBAAL;MACE,OAAOqH,IAAI,CAACC,MAAL,CAAYzH,IAAZ,KAAqB2I,YAArB,MAEL;MACAnB,IAAI,CAACoB,SAAL,CAAe1G,MAAf,GAAwB,CAAxB,IAA6BsF,IAAI,CAACoB,SAAL,CAAe,CAAf,MAAsBxI,SAH9C,KAKLoH,IAAI,CAACoB,SAAL,CAAe9E,IAAf,CAAqB2E,GAAD,IAAS;QAC3B;QACA,OAAOA,GAAG,CAACtI,IAAJ,KAAa,YAAb,IAA6BsI,GAAG,CAACzI,IAAJ,KAAa2I,YAA1C,IAEL;QACAD,uBAAuB,CAACD,GAAD,EAAME,YAAN,CAHzB;MAID,CAND,CALF;;IAYF,KAAK,iBAAL;IACA,KAAK,WAAL;IACA,KAAK,qBAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAACO,UAAN,EAAkBY,YAAlB,CAA9B;;IACF,KAAK,WAAL;IACA,KAAK,gBAAL;MACE,OAAOnB,IAAI,CAACQ,IAAL,CAAUlE,IAAV,CAAgBmE,QAAD,IAAc;QAClC,OAAOS,uBAAuB,CAACT,QAAD,EAAWU,YAAX,CAA9B;MACD,CAFM,CAAP;;IAGF,KAAK,oBAAL;IACA,KAAK,qBAAL;IACA,KAAK,yBAAL;MAAgC;QAAA;;QAC9B;QACA,IAAI,kBAAAnB,IAAI,CAAC5I,MAAL,CAAY,CAAZ,iEAAgBoB,IAAhB,MAAyB2I,YAA7B,EAA2C;UACzC,OAAO,KAAP;QACD;;QAED,OAAOD,uBAAuB,CAAClB,IAAI,CAACQ,IAAN,EAAYW,YAAZ,CAA9B;MACD;;IAED,KAAK,kBAAL;IACA,KAAK,gBAAL;IACA,KAAK,kBAAL;IACA,KAAK,cAAL;IACA,KAAK,gBAAL;IACA,KAAK,gBAAL;IACA,KAAK,eAAL;MAAsB;QACpB,OAAOD,uBAAuB,CAAClB,IAAI,CAACQ,IAAN,EAAYW,YAAZ,CAA9B;MACD;;IAED,KAAK,uBAAL;IACA,KAAK,aAAL;MAAoB;QAClB,OAAOD,uBAAuB,CAAClB,IAAI,CAACqB,IAAN,EAAYF,YAAZ,CAAvB,IACLD,uBAAuB,CAAClB,IAAI,CAACU,UAAN,EAAkBS,YAAlB,CADlB,IAELD,uBAAuB,CAAClB,IAAI,CAACW,SAAN,EAAiBQ,YAAjB,CAFzB;MAGD;;IAED,KAAK,cAAL;MAAqB;QACnB,OAAOD,uBAAuB,CAAClB,IAAI,CAACY,KAAN,EAAaO,YAAb,CAAvB,IACLD,uBAAuB,CAAClB,IAAI,CAACa,OAAL,IAAgBb,IAAI,CAACa,OAAL,CAAaL,IAA9B,EAAoCW,YAApC,CADlB,IAELD,uBAAuB,CAAClB,IAAI,CAACc,SAAN,EAAiBK,YAAjB,CAFzB;MAGD;;IAED,KAAK,iBAAL;MAAwB;QACtB,OAAOnB,IAAI,CAACe,KAAL,CAAWzE,IAAX,CACJ0E,QAAD,IAAc;UACZ,OAAOA,QAAQ,CAACN,UAAT,CAAoBpE,IAApB,CAA0B2E,GAAD,IAAS;YACvC,OAAOC,uBAAuB,CAACD,GAAD,EAAME,YAAN,CAA9B;UACD,CAFM,CAAP;QAGD,CALI,CAAP;MAOD;;IAED,KAAK,cAAL;IACA,KAAK,iBAAL;MACE,OAAOnB,IAAI,CAAC/F,QAAL,CAAcqC,IAAd,CAAoBgF,OAAD,IAAa;QACrC,OAAOJ,uBAAuB,CAACI,OAAD,EAAUH,YAAV,CAA9B;MACD,CAFM,CAAP;;IAIF,KAAK,mBAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAAC7F,KAAN,EAAagH,YAAb,CAA9B;;IAEF,KAAK,sBAAL;IACA,KAAK,kBAAL;IACA,KAAK,mBAAL;MAA0B;QACxB,OAAOD,uBAAuB,CAAClB,IAAI,CAACvG,IAAN,EAAY0H,YAAZ,CAAvB,IACLD,uBAAuB,CAAClB,IAAI,CAAC7F,KAAN,EAAagH,YAAb,CADzB;MAED;IAED;;IACA,KAAK,oBAAL;IACA,KAAK,iBAAL;MACE,OAAOnB,IAAI,CAACuB,WAAL,CAAiBjF,IAAjB,CAAuBkF,aAAD,IAAmB;QAC9C,OAAON,uBAAuB,CAACM,aAAD,EAAgBL,YAAhB,CAA9B;MACD,CAFM,CAAP;;IAIF,KAAK,eAAL;IACA,KAAK,kBAAL;MACE,OAAOnB,IAAI,CAACnG,UAAL,CAAgByC,IAAhB,CAAsBmF,QAAD,IAAc;QACxC,OAAOP,uBAAuB,CAACO,QAAD,EAAWN,YAAX,CAA9B;MACD,CAFM,CAAP;IAGF;;IACA,KAAK,aAAL;IACA,KAAK,kBAAL;MACE,OAAOnB,IAAI,CAAC0B,UAAL,IAAmB1B,IAAI,CAAC0B,UAAL,CAAgBpF,IAAhB,CAAsBqF,SAAD,IAAe;QAC5D,OAAOT,uBAAuB,CAACS,SAAD,EAAYR,YAAZ,CAA9B;MACD,CAFyB,CAAnB,IAGLnB,IAAI,CAAC4B,QAAL,IAAiBV,uBAAuB,CAAClB,IAAI,CAAClH,GAAN,EAAWqI,YAAX,CAHnC,IAILD,uBAAuB,CAAClB,IAAI,CAAChG,KAAN,EAAamH,YAAb,CAJzB;IAMF;;IACA,KAAK,gBAAL;IACA;IACA;;IACA,KAAK,oBAAL,CA9GA,CA+GA;;IACA,KAAK,eAAL;IACA;;IACA,KAAK,UAAL;MACE,OAAOnB,IAAI,CAAC4B,QAAL,IAAiBV,uBAAuB,CAAClB,IAAI,CAAClH,GAAN,EAAWqI,YAAX,CAAxC,IACLD,uBAAuB,CAAClB,IAAI,CAAChG,KAAN,EAAamH,YAAb,CADzB;IAEF;;IACA,KAAK,cAAL;MACE;MACA,OAAOnB,IAAI,CAAC4B,QAAL,IAAiBV,uBAAuB,CAAClB,IAAI,CAAClH,GAAN,EAAWqI,YAAX,CAAxC,IACLnB,IAAI,CAACoB,SAAL,CAAe9E,IAAf,CAAqB2E,GAAD,IAAS;QAC3B,OAAOC,uBAAuB,CAACD,GAAD,EAAME,YAAN,CAA9B;MACD,CAFD,CADF;;IAKF,KAAK,iBAAL;IACA,KAAK,kBAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAACQ,IAAN,EAAYW,YAAZ,CAA9B;;IAEF,KAAK,iBAAL;IACA,KAAK,eAAL;IACA,KAAK,iBAAL;IACA,KAAK,iBAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAAC1F,QAAN,EAAgB6G,YAAhB,CAA9B;;IAEF,KAAK,qBAAL;MAA4B;QAC1B,OAAOnB,IAAI,CAAC6B,YAAL,CAAkBvF,IAAlB,CAAwB2E,GAAD,IAAS;UACrC,OAAOC,uBAAuB,CAACD,GAAD,EAAME,YAAN,CAA9B;QACD,CAFM,CAAP;MAGD;;IAED,KAAK,oBAAL;MAA2B;QACzB,OAAOD,uBAAuB,CAAClB,IAAI,CAAC8B,EAAN,EAAUX,YAAV,CAAvB,IACLD,uBAAuB,CAAClB,IAAI,CAAC+B,IAAN,EAAYZ,YAAZ,CADzB;MAED;;IAED,KAAK,0BAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAACgC,KAAN,EAAab,YAAb,CAA9B;IAEF;IACA;;IACA,KAAK,0BAAL;IACA,KAAK,kBAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAACiC,MAAN,EAAcd,YAAd,CAAvB,IACLD,uBAAuB,CAAClB,IAAI,CAACyB,QAAN,EAAgBN,YAAhB,CADzB;IAGF;;IACA,KAAK,QAAL;IACA,KAAK,kBAAL;MACE,OAAOD,uBAAuB,CAAClB,IAAI,CAACkC,MAAN,EAAcf,YAAd,CAA9B;;IAEF,KAAK,iBAAL;MAAwB;QACtB,IAAInB,IAAI,CAAC1F,QAAL,KAAkB,IAAtB,EAA4B;UAC1B,OAAO,KAAP;QACD;;QAED,OAAO4G,uBAAuB,CAAClB,IAAI,CAAC1F,QAAN,EAAgB6G,YAAhB,CAA9B;MACD;;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;IAEE;MACE,OAAO,KAAP;EAlLF;AAoLD,CA1LD;AA4LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMgB,yCAAyC,GAAG,CAACnC,IAAD,EAAOoC,kBAAP,KAA8B;EAC9E,OAAOhC,cAAc,CAACJ,IAAD,EAAQqC,IAAD,IAAU;IACpC,IAAID,kBAAJ,EAAwB;MACtB,OAAO,IAAP;IACD;;IAED,IAAIlC,aAAa,CAACmC,IAAD,CAAjB,EAAyB;MACvB,OAAO,KAAP;IACD;;IAED,MAAM,CACJ;MACEjL,MADF;MAEEoJ;IAFF,IAGI,EAJA,IAKF6B,IAAI,CAACjB,SALT;;IAOA,IAAI,EAAChK,MAAD,aAACA,MAAD,eAACA,MAAM,CAAEsD,MAAT,CAAJ,EAAqB;MACnB,OAAO,KAAP;IACD;;IAED,MAAM,CACJ;MACElC,IAAI,EAAE2I;IADR,CADI,IAIF/J,MAJJ;IAMA,OAAO8J,uBAAuB,CAACV,IAAD,EAAOW,YAAP,CAA9B;EACD,CA3BoB,CAArB;AA4BD,CA7BD,C,CA+BA;;;AACA,MAAMmB,mBAAmB,GAAG,CAACtC,IAAD,EAAOuC,qBAAP,KAAiC;EAC3D,IAAI,CAACvC,IAAL,EAAW;IACT,OAAO,KAAP;EACD;;EAED,QAAQA,IAAI,CAACrH,IAAb;IACA,KAAK,gBAAL;MAAuB;QACrB,OAAOqH,IAAI,CAACQ,IAAL,CAAUlE,IAAV,CAAgBmE,QAAD,IAAc;UAClC,OAAO,CAAC,CACN,yBADM,EAEN,qBAFM,EAGN,oBAHM,EAINpG,QAJM,CAIGoG,QAAQ,CAAC9H,IAJZ,CAAD,IAIsB2J,mBAAmB,CAC9C7B,QAD8C,EACpC8B,qBADoC,CAJhD;QAOD,CARM,CAAP;MASD;IAED;;IACA,KAAK,wBAAL;IACA,KAAK,gBAAL;MACE,OAAOvC,IAAI,CAACoB,SAAL,CAAe9E,IAAf,CAAqBgF,OAAD,IAAa;QACtC,OAAOgB,mBAAmB,CAAChB,OAAD,EAAUiB,qBAAV,CAA1B;MACD,CAFM,CAAP;;IAGF,KAAK,iBAAL;IACA,KAAK,qBAAL;MAA4B;QAC1B,OAAOD,mBAAmB,CAACtC,IAAI,CAACO,UAAN,EAAkBgC,qBAAlB,CAA1B;MACD;;IAED,KAAK,kBAAL;IACA,KAAK,gBAAL;IACA,KAAK,kBAAL;IACA,KAAK,cAAL;IACA,KAAK,gBAAL;IACA,KAAK,gBAAL;IACA,KAAK,eAAL;MAAsB;QACpB,OAAOD,mBAAmB,CAACtC,IAAI,CAACQ,IAAN,EAAY+B,qBAAZ,CAA1B;MACD;;IAED,KAAK,uBAAL;IACA,KAAK,aAAL;MAAoB;QAClB,OAAOD,mBAAmB,CAACtC,IAAI,CAACqB,IAAN,EAAYkB,qBAAZ,CAAnB,IACLD,mBAAmB,CAACtC,IAAI,CAACU,UAAN,EAAkB6B,qBAAlB,CADd,IAELD,mBAAmB,CAACtC,IAAI,CAACW,SAAN,EAAiB4B,qBAAjB,CAFrB;MAGD;;IAED,KAAK,cAAL;MAAqB;QACnB,OAAOD,mBAAmB,CAACtC,IAAI,CAACY,KAAN,EAAa2B,qBAAb,CAAnB,IACLD,mBAAmB,CAACtC,IAAI,CAACa,OAAL,IAAgBb,IAAI,CAACa,OAAL,CAAaL,IAA9B,EAAoC+B,qBAApC,CADd,IAELD,mBAAmB,CAACtC,IAAI,CAACc,SAAN,EAAiByB,qBAAjB,CAFrB;MAGD;;IAED,KAAK,iBAAL;MAAwB;QACtB,OAAOvC,IAAI,CAACe,KAAL,CAAWzE,IAAX,CACJ0E,QAAD,IAAc;UACZ,OAAOA,QAAQ,CAACN,UAAT,CAAoBpE,IAApB,CAA0B2E,GAAD,IAAS;YACvC,OAAOqB,mBAAmB,CAACrB,GAAD,EAAMsB,qBAAN,CAA1B;UACD,CAFM,CAAP;QAGD,CALI,CAAP;MAOD;;IAED,KAAK,cAAL;IACA,KAAK,iBAAL;MACE,OAAOvC,IAAI,CAAC/F,QAAL,CAAcqC,IAAd,CAAoBgF,OAAD,IAAa;QACrC,OAAOgB,mBAAmB,CAAChB,OAAD,EAAUiB,qBAAV,CAA1B;MACD,CAFM,CAAP;;IAGF,KAAK,mBAAL;MACE,OAAOD,mBAAmB,CAACtC,IAAI,CAAC7F,KAAN,EAAaoI,qBAAb,CAA1B;;IAEF,KAAK,qBAAL;MAA4B;QAC1B,OAAOvC,IAAI,CAAC6B,YAAL,CAAkBvF,IAAlB,CAAwB2E,GAAD,IAAS;UACrC,OAAOqB,mBAAmB,CAACrB,GAAD,EAAMsB,qBAAN,CAA1B;QACD,CAFM,CAAP;MAGD;;IAED,KAAK,oBAAL;MAA2B;QACzB,OAAOD,mBAAmB,CAACtC,IAAI,CAAC8B,EAAN,EAAUS,qBAAV,CAAnB,IACLD,mBAAmB,CAACtC,IAAI,CAAC+B,IAAN,EAAYQ,qBAAZ,CADrB;MAED;;IAED,KAAK,sBAAL;IACA,KAAK,kBAAL;IACA,KAAK,mBAAL;MAA0B;QACxB,OAAOD,mBAAmB,CAACtC,IAAI,CAACvG,IAAN,EAAY8I,qBAAZ,CAAnB,IACLD,mBAAmB,CAACtC,IAAI,CAAC7F,KAAN,EAAaoI,qBAAb,CADrB;MAED;IAED;;IACA,KAAK,oBAAL;IACA,KAAK,iBAAL;MACE,OAAOvC,IAAI,CAACuB,WAAL,CAAiBjF,IAAjB,CAAuBkF,aAAD,IAAmB;QAC9C,OAAOc,mBAAmB,CAACd,aAAD,EAAgBe,qBAAhB,CAA1B;MACD,CAFM,CAAP;;IAIF,KAAK,eAAL;IACA,KAAK,kBAAL;MACE,OAAOvC,IAAI,CAACnG,UAAL,CAAgByC,IAAhB,CAAsBmF,QAAD,IAAc;QACxC,OAAOa,mBAAmB,CAACb,QAAD,EAAWc,qBAAX,CAA1B;MACD,CAFM,CAAP;IAIF;;IACA,KAAK,oBAAL;IACA;IACA;;IACA,KAAK,gBAAL,CApGA,CAqGA;;IACA,KAAK,eAAL;IACA;;IACA,KAAK,UAAL;MACE,OAAOvC,IAAI,CAAC4B,QAAL,IAAiBU,mBAAmB,CAACtC,IAAI,CAAClH,GAAN,EAAWyJ,qBAAX,CAApC,IACLD,mBAAmB,CAACtC,IAAI,CAAChG,KAAN,EAAauI,qBAAb,CADrB;IAEF;;IACA,KAAK,cAAL;MACE;MACA,OAAOvC,IAAI,CAAC4B,QAAL,IAAiBU,mBAAmB,CAACtC,IAAI,CAAClH,GAAN,EAAWyJ,qBAAX,CAApC,IACLvC,IAAI,CAACoB,SAAL,CAAe9E,IAAf,CAAqB2E,GAAD,IAAS;QAC3B,OAAOqB,mBAAmB,CAACrB,GAAD,EAAMsB,qBAAN,CAA1B;MACD,CAFD,CADF;;IAKF,KAAK,eAAL;IACA,KAAK,iBAAL;MACE,OAAOD,mBAAmB,CAACtC,IAAI,CAAC1F,QAAN,EAAgBiI,qBAAhB,CAA1B;;IAEF,KAAK,0BAAL;MACE,OAAOD,mBAAmB,CAACtC,IAAI,CAACgC,KAAN,EAAaO,qBAAb,CAA1B;IAEF;IACA;;IACA,KAAK,0BAAL;IACA,KAAK,kBAAL;MACE,OAAOD,mBAAmB,CAACtC,IAAI,CAACiC,MAAN,EAAcM,qBAAd,CAAnB,IACLD,mBAAmB,CAACtC,IAAI,CAACyB,QAAN,EAAgBc,qBAAhB,CADrB;IAGF;;IACA,KAAK,QAAL;IACA,KAAK,kBAAL;MACE,OAAOD,mBAAmB,CAACtC,IAAI,CAACkC,MAAN,EAAcK,qBAAd,CAA1B;;IAEF,KAAK,iBAAL;MAAwB;QACtB,IAAIvC,IAAI,CAAC1F,QAAL,KAAkB,IAAtB,EAA4B;UAC1B,OAAO,KAAP;QACD;;QAED,OAAOgI,mBAAmB,CAACtC,IAAI,CAAC1F,QAAN,EAAgBiI,qBAAhB,CAA1B;MACD;;IAED,KAAK,iBAAL;MAAwB;QACtB,IAAIA,qBAAJ,EAA2B;UACzB,IAAIvC,IAAI,CAACwC,MAAL,CAAY7J,IAAZ,KAAqB,oBAAzB,EAA+C;YAC7C,OAAO,IAAP;UACD;;UAED,OAAO,KAAP;QACD,CAPqB,CAStB;;;QACA,IAAIqH,IAAI,CAAC1F,QAAL,KAAkB,IAAtB,EAA4B;UAC1B,OAAO,KAAP;QACD;;QAED,OAAO,IAAP;MACD;;IAED;MAAS;QACP,OAAO,KAAP;MACD;EAjKD;AAmKD,CAxKD;AA0KA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMmI,aAAa,GAAG,CAACzC,IAAD,EAAOuC,qBAAP,KAAiC;EACrD,OAAOvC,IAAI,CAAC0C,SAAL,KACL1C,IAAI,CAACO,UAAL,IAAmB+B,mBAAmB,CAACtC,IAAI,CAACQ,IAAN,EAAY+B,qBAAZ,CADjC,CAAP;AAGD,CAJD;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMI,aAAa,GAAG,CAAC3C,IAAD,EAAO4C,aAAP,KAAyB;EAC7C,IAAI,CAAC5C,IAAL,EAAW;IACT,OAAO,KAAP;EACD,CAH4C,CAK7C;EACA;EACA;;;EACA,QAAQA,IAAI,CAACrH,IAAb;IACA,KAAK,oBAAL;IACA,KAAK,qBAAL;IACA,KAAK,yBAAL;MAAgC;QAC9B,OAAO,CAACiK,aAAD,IAAkB,CAAC5C,IAAI,CAAC6C,KAAxB,IAAiCF,aAAa,CAAC3C,IAAI,CAACQ,IAAN,EAAY,IAAZ,CAArD;MACD;;IAED,KAAK,gBAAL;MAAuB;QACrB,OAAOR,IAAI,CAACQ,IAAL,CAAUlE,IAAV,CAAgBmE,QAAD,IAAc;UAClC,OAAOA,QAAQ,CAAC9H,IAAT,KAAkB,qBAAlB,IAA2CgK,aAAa,CAAClC,QAAD,CAA/D;QACD,CAFM,CAAP;MAGD;;IAED,KAAK,kBAAL;IACA,KAAK,gBAAL;IACA,KAAK,kBAAL;IACA,KAAK,cAAL;IACA,KAAK,gBAAL;IACA,KAAK,gBAAL;IACA,KAAK,eAAL;MAAsB;QACpB,OAAOkC,aAAa,CAAC3C,IAAI,CAACQ,IAAN,CAApB;MACD;;IAED,KAAK,aAAL;MAAoB;QAClB,OAAOmC,aAAa,CAAC3C,IAAI,CAACU,UAAN,CAAb,IAAkCiC,aAAa,CAAC3C,IAAI,CAACW,SAAN,CAAtD;MACD;IAED;;IACA,KAAK,cAAL;MAAqB;QACnB,OAAOgC,aAAa,CAAC3C,IAAI,CAACa,OAAL,IAAgBb,IAAI,CAACa,OAAL,CAAaL,IAA9B,CAAb,IACHmC,aAAa,CAAC3C,IAAI,CAACc,SAAN,CADjB;MAED;;IAED,KAAK,iBAAL;MAAwB;QACtB,OAAOd,IAAI,CAACe,KAAL,CAAWzE,IAAX,CACJ0E,QAAD,IAAc;UACZ,OAAOA,QAAQ,CAACN,UAAT,CAAoBpE,IAApB,CAA0B2E,GAAD,IAAS;YACvC,OAAO0B,aAAa,CAAC1B,GAAD,CAApB;UACD,CAFM,CAAP;QAGD,CALI,CAAP;MAOD;;IAED,KAAK,gBAAL;MAAuB;QACrB,OAAO,IAAP;MACD;;IAED;MAAS;QACP,OAAO,KAAP;MACD;EAjDD;AAmDD,CA3DD;AA6DA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAM6B,uBAAuB,GAAI/H,GAAD,IAAS;EACvC,OAAOA,GAAG,CAACvC,IAAJ,CACJuK,KADI,CACE,GADF,EAEJ/J,GAFI,CAECL,IAAD,IAAU;IACb,OAAOA,IAAI,CAACoF,IAAL,GAAYpB,OAAZ,CAAoB,wBAApB,EAA8C,SAA9C,CAAP;EACD,CAJI,CAAP;AAKD,CAND;AAQA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMqG,gBAAgB,GAAG,CAAC3H,OAAD,EAAU4H,eAAV,KAA8B;EACrD,MAAM;IACJC,QAAQ,GAAGD,eAAe,KAAK,IAApB,GAA2B,CACpC,yBADoC,EAEpC,qBAFoC,EAGpC,oBAHoC,CAA3B,GAIPA;EALA,IAMF5H,OAAO,CAAC8H,OAAR,CAAgB,CAAhB,KAAsB,EAN1B;EAQA,OAAOD,QAAP;AACD,CAVD;AAYA;AACA;AACA;AACA;AACA;;;AACA,MAAME,gBAAgB,GAAG,CAACF,QAAD,EAAWG,UAAX,EAAuBxC,OAAvB,KAAmC;EAC1D,MAAMhH,UAAU,GAAG,EAAnB;;EAEA,KAAK,MAAM,CACTK,GADS,EAETH,IAFS,CAAX,IAGKmJ,QAAQ,CAACjI,OAAT,EAHL,EAGyB;IACvB,IAAIwG,QAAJ;IACA,IAAIzH,KAAJ;;IAEA,IAAI,OAAOD,IAAP,KAAgB,QAApB,EAA8B;MAC5B,MAAMuJ,OAAO,GAAG;QACdC,SAAS,EAAErJ,GADG;QAEdsJ,QAAQ,EAAEzJ,IAAI,CAACsB;MAFD,CAAhB;;MAIA,IAAItB,IAAI,CAAC0J,OAAT,EAAkB;QAChBhC,QAAQ,GAAG1H,IAAI,CAACsB,OAAhB;QACArB,KAAK,GAAGqJ,UAAU,CAACK,IAAX,CACN,IADM,EACA,EACJ,GAAGJ,OADC;UAEJG,OAAO,EAAE1J,IAAI,CAAC0J;QAFV,CADA,EAIH5C,OAAO,CAAC6C,IAAR,CAAa,IAAb,EAAmB3J,IAAI,CAAC0J,OAAxB,CAJG,CAAR;MAMD,CARD,MAQO;QACLhC,QAAQ,GAAG1H,IAAI,CAACsB,OAAhB;QACArB,KAAK,GAAGqJ,UAAU,CAACK,IAAX,CAAgB,IAAhB,EAAsBJ,OAAtB,EAA+B,IAA/B,CAAR;MACD;IACF,CAjBD,MAiBO;MACL,MAAMA,OAAO,GAAG;QACdC,SAAS,EAAErJ,GADG;QAEdsJ,QAAQ,EAAEzJ;MAFI,CAAhB;MAIA0H,QAAQ,GAAG1H,IAAX;MACAC,KAAK,GAAGqJ,UAAU,CAACK,IAAX,CAAgB,IAAhB,EAAsBJ,OAAtB,EAA+B,IAA/B,CAAR;IACD;;IAED,MAAMK,GAAG,GAAG9J,UAAU,CAAC4H,QAAD,CAAtB;IACA5H,UAAU,CAAC4H,QAAD,CAAV,GAAuBkC,GAAG,GAAG,UAAU,GAAGC,IAAb,EAAmB;MAC9CD,GAAG,CAAC,GAAGC,IAAJ,CAAH;MACA5J,KAAK,CAAC,GAAG4J,IAAJ,CAAL;IACD,CAHyB,GAGtB5J,KAHJ;EAID;;EAED,OAAOH,UAAP;AACD,CA5CD;;AA8CA,MAAMgK,UAAU,GAAG,CAAC7I,IAAD,EAAO9C,MAAP,KAAkB;EACnC,OAAO8C,IAAI,CAAC9C,MAAL,CAAa6C,GAAD,IAAS;IAC1B,OAAO7C,MAAM,CAAC6C,GAAD,CAAb;EACD,CAFM,CAAP;AAGD,CAJD;;AAMA,MAAM+I,4BAA4B,GAAG,IAAI5E,GAAJ,CAAQ,CAC3C,OAD2C,EAClC,KADkC,EAC3B,UAD2B,EACf,UADe,EACH,MADG,EAE3C,UAF2C,EAI3C;AACA,SAL2C,EAKhC,QALgC,CAAR,CAArC;;AAQA,MAAM6E,aAAa,GAAG,CAAC1I,OAAD,EAAUpE,IAAV,EAAgB+D,IAAhB,EAAsBkB,aAAtB,KAAwC;EAC5D,MAAM8H,QAAQ,GAAG/H,mBAAmB,CAACZ,OAAD,EAAUpE,IAAV,EAAgB,aAAhB,EAA+BiF,aAA/B,CAApC;EACA,MAAM+H,gBAAgB,GAAG,EAAzB;EACA,MAAMC,aAAa,GAAGL,UAAU,CAAC7I,IAAD,EAAQD,GAAD,IAAS;IAC9C,MAAM;MACJA,GAAG,EAAEoJ;IADD,IAEFpJ,GAFJ;IAGA,MAAMqJ,WAAW,GAAGN,4BAA4B,CAAC7F,GAA7B,CAAiCkG,OAAjC,CAApB;;IACA,IAAI,CAACC,WAAD,IAAgBD,OAAO,KAAKH,QAAhC,EAA0C;MACxCC,gBAAgB,CAAC7L,IAAjB,CAAsB2C,GAAtB;IACD;;IAED,OAAOqJ,WAAP;EACD,CAV+B,CAAhC;EAYA,OAAO;IACLF,aADK;IAELD;EAFK,CAAP;AAID,CAnBD;;AAqBA,MAAMI,SAAS,GAAIC,UAAD,IAAgB;EAAA;;EAChC,OAAO,CAAC,0BAAAA,UAAU,CAACC,IAAX,CAAgBC,KAAhB,CAAsB,eAAtB,iFAAyC,CAAzC,MAA+C,EAAhD,IAAsD,GAA7D;AACD,CAFD;;AAIA,MAAMC,aAAa,GAAIzE,IAAD,IAAU;EAAA;;EAC9B,OAAO,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAErH,IAAN,MAAe,kBAAf,IAAqCqH,IAAI,CAAC0E,IAAL,KAAc,aAAnD,IACL,CAAA1E,IAAI,SAAJ,IAAAA,IAAI,WAAJ,4BAAAA,IAAI,CAAEwC,MAAN,8DAAckC,IAAd,MAAuB,aADzB;AAED,CAHD;;AAKA,MAAMC,QAAQ,GAAI3E,IAAD,IAAU;EAAA;;EACzB,OAAOA,IAAI,IAAI,kBAAAA,IAAI,CAACwC,MAAL,gEAAakC,IAAb,MAAsB,KAArC;AACD,CAFD;;AAIA,MAAME,QAAQ,GAAI5E,IAAD,IAAU;EAAA;;EACzB,OAAOA,IAAI,IAAI,kBAAAA,IAAI,CAACwC,MAAL,gEAAakC,IAAb,MAAsB,KAArC;AACD,CAFD;;AAIA,MAAMG,eAAe,GAAI7E,IAAD,IAAU;EAChC,MAAM;IACJrH,IADI;IAEJ+L,IAAI,EAAEI,UAFF;IAGJhM,GAAG,EAAE;MACHN,IAAI,EAAEuM;IADH;EAHD,IAMF/E,IANJ;EAOA,MAAMgF,YAAY,GAAGF,UAAU,KAAK,KAAf,GAAuB,KAAvB,GAA+B,KAApD;EAEA,MAAMG,QAAQ,GAAGtM,IAAI,KAAK,kBAAT,GAA8B,MAA9B,GAAuC,YAAxD;EAEA,OAAOqH,IAAI,CAACwC,MAAL,CAAYyC,QAAZ,EAAsB3I,IAAtB,CAA2B,CAAC;IACjCoI,IADiC;IAEjC5L,GAAG,EAAE;MACHN;IADG;EAF4B,CAAD,KAK5B;IACJ,OAAOkM,IAAI,KAAKM,YAAT,IAAyBxM,IAAI,KAAKuM,UAAzC;EACD,CAPM,CAAP;AAQD,CApBD;;AAsBA,MAAMG,mBAAmB,GAAG,CAACtK,KAAD,EAAQoF,IAAR,EAAc3E,OAAd,EAAuB8J,MAAvB,KAAkC;EAC5D,MAAMC,eAAe,GAAIrL,IAAD,IAAU;IAAA;;IAChC,MAAMsL,gBAAgB,GAAGF,MAAM,CAAC,CAAD,CAAN,CAAUtL,UAAnC;IAEA,OAAO,sBAAAwB,OAAO,CAAC8H,OAAR,CAAgB,CAAhB,yEAAqBpJ,IAArB,OACJsL,gBAAgB,CAACtL,IAAD,CAAhB,IAA0BsL,gBAAgB,CAACtL,IAAD,CAAhB,CAAuBuL,OAD7C,CAAP;EAED,CALD;;EAOA,MAAMC,YAAY,GAAGH,eAAe,CAAC,cAAD,CAApC;EACA,MAAMI,YAAY,GAAGJ,eAAe,CAAC,cAAD,CAApC;EAEA,OAAO,CAACA,eAAe,CAAC,mBAAD,CAAhB,KAEHX,aAAa,CAACzE,IAAD,CAAb,IACArC,OAAO,CAAC/C,KAAD,EAAQ,CACb,OADa,EAEb,aAFa,CAAR,CAHJ,KAOP+J,QAAQ,CAAC3E,IAAD,CAAR,KACE,CAACuF,YAAD,IACAA,YAAY,KAAK,WAAjB,IAAgCV,eAAe,CAAC7E,IAAI,CAACwC,MAAN,CAFjD,CAPO,IAWPoC,QAAQ,CAAC5E,IAAD,CAAR,KACE,CAACwF,YAAD,IACAA,YAAY,KAAK,WAAjB,IAAgCX,eAAe,CAAC7E,IAAI,CAACwC,MAAN,CAFjD,CAXA;AAeD,CA1BD;AA4BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMiD,qBAAqB,GAAIC,GAAD,IAAS;EACrC,OAAOA,GAAG,CAAC/I,OAAJ,CAAY,kBAAZ,EAAgC,KAAhC,CAAP;AACD,CAFD;AAIA;AACA;AACA;AACA;;;AACA,MAAMgJ,YAAY,GAAInN,IAAD,IAAU;EAC7B,OAAQoN,aAAD,IAAmB;IACxB,OAAOA,aAAa,KAAKpN,IAAlB,IACLiN,qBAAqB,CAACG,aAAD,CAArB,KAAyCH,qBAAqB,CAACjN,IAAD,CADhE;EAED,CAHD;AAID,CALD;AAOA;AACA;AACA;AACA;AACA;;;AACA,MAAMqN,oBAAoB,GAAG,CAACrN,IAAD,EAAOoN,aAAP,KAAyB;EACpD,OAAO,CAACpN,IAAI,CAACsN,UAAL,CAAgBF,aAAhB,CAAD,IACL,CAACH,qBAAqB,CAACjN,IAAD,CAArB,CAA4BsN,UAA5B,CAAuCL,qBAAqB,CAACG,aAAD,CAA5D,CADH;AAED,CAHD;AAKA;AACA;AACA;AACA;AACA;;;AACA,MAAMG,kBAAkB,GAAG,CAACC,WAAD,EAAcC,aAAd,KAAgC;EACzD,MAAMzB,KAAK,GAAGwB,WAAW,CAACxB,KAAZ,CAAkB,yBAAlB,CAAd;EACA,IAAI0B,KAAK,GAAG,GAAZ;EACA,IAAIC,KAAK,GAAGH,WAAZ;;EACA,IAAIxB,KAAJ,EAAW;IACT,GACI2B,KADJ,EAEED,KAFF,IAGI1B,KAHJ;;IAIA,IAAI,CAAC0B,KAAL,EAAY;MACVA,KAAK,GAAG,GAAR;IACD;EACF;;EAED,MAAME,WAAW,GAAG,CAClB,GAAG,IAAIlH,GAAJ,CAAQgH,KAAK,IAAID,aAAa,IAAI,EAArB,CAAb,CADe,CAApB;EAGAC,KAAK,GAAGE,WAAW,CAACC,IAAZ,CAAiB,EAAjB,CAAR;EAEA,OAAO,IAAIC,MAAJ,CAAWH,KAAX,EAAkBD,KAAlB,CAAP;AACD,CApBD;;eAsBe;EACbP,YADa;EAEbF,qBAFa;EAGbzC,gBAHa;EAIbkC,mBAJa;EAKbrB,UALa;EAMb1M,YANa;EAObiM,gBAPa;EAQblK,yBARa;EASbmL,SATa;EAUb1J,gBAVa;EAWbsB,mBAXa;EAYb8J,kBAZa;EAabhC,aAba;EAcblF,sBAda;EAeblB,OAfa;EAgBbE,iBAhBa;EAiBbpD,SAjBa;EAkBb2F,cAlBa;EAmBb7C,MAnBa;EAoBboF,aApBa;EAqBbR,yCArBa;EAsBbM,aAtBa;EAuBbgC,aAvBa;EAwBbE,QAxBa;EAyBb7F,qBAzBa;EA0Bb8F,QA1Ba;EA2Bb5H,UA3Ba;EA4BbqB,oBA5Ba;EA6BbyE,uBA7Ba;EA8Bb+C,oBA9Ba;EA+Bb7O,eA/Ba;EAgCboI,oBAhCa;EAiCbD,wBAjCa;EAkCbH,wBAlCa;EAmCbQ,gCAnCa;EAoCbH,uBApCa;EAqCbN;AArCa,C"}
1
+ {"version":3,"file":"jsdocUtils.js","names":["tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","WarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeTag","tagType","trim","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","hasNonFunctionYield","node","checkYieldReturnValue","body","bodyNode","arguments","element","expression","test","consequent","alternate","block","handler","finalizer","cases","someCase","nde","declarations","id","init","expressions","subExpression","property","computed","quasi","object","source","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","args","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","children","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","default","checkGetters","checkSetters","dropPathSegmentQuotes","str","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp","hasReturnValue","hasValueOrExecutorHasNonEmptyResolveValue"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n\nimport WarnSettings from './WarnSettings';\nimport getDefaultTagStructureForMode from './getDefaultTagStructureForMode';\nimport {\n jsdocTags,\n closureTags,\n typeScriptTags,\n} from './tagNames';\nimport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue';\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"} ParserMode\n */\n\nlet tagStructure;\n\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if (cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {object} propSignature\n * @returns {undefined|Array|string}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n }),\n ];\n }\n\n return propSignature.key.name;\n};\n\n/**\n * @param {object} functionNode\n * @param {boolean} checkDefaultObjects\n * @returns {Array}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ? param.left.typeAnnotation : param.typeAnnotation;\n\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ? param.left.name : param.name, flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n // eslint-disable-next-line default-case\n switch (param.value.type) {\n case 'ArrayPattern':\n return [\n param.key.name, param.value.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n case 'ObjectPattern':\n return [\n param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'AssignmentPattern': {\n // eslint-disable-next-line default-case\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n param.key.name, param.value.right.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n param.key.name, param.value.left.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n param.key.name, param.value.left.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n return param.key.raw ||\n // istanbul ignore next -- `raw` may not be present in all parsers\n param.key.value;\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n if (!functionNode) {\n return [];\n }\n\n return (functionNode.params || functionNode.value?.params || []).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {Node} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return functionNode.params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n *\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {Array<object>}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {string} mode\n * @param context\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {object} tagPreference\n * @returns {string|object}\n */\nconst getPreferredTagName = (\n context,\n mode,\n name,\n tagPreference = {},\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (name in tagPreferenceFixed) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {Array} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * @param {object} jsdoc\n * @param {Array} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a defined type.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a defined type is declared; otherwise false.\n */\nconst hasDefinedTypeTag = (tag) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, a type is present\n return true;\n};\n\n/**\n * @param map\n * @param tag\n * @returns {Map}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return map.get(tag);\n};\n\n/**\n * @param structuredTags\n * @param tagMap\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('nameContents', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param mode\n * @param structuredTags\n * @returns {Map}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameContents') === 'namepath-defining';\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('typeAllowed');\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('nameContents');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return namepathTypes.has(tagStruct.get('nameContents'));\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return tagMightHaveTypePosition(tag, tagMap) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeOrNameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\n// eslint-disable-next-line complexity\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(node.handler && node.handler.body, checkYieldReturnValue) ||\n hasNonFunctionYield(node.finalizer, checkYieldReturnValue);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (node.parent.type === 'VariableDeclarator') {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return node.generator && (\n node.expression || hasNonFunctionYield(node.body, checkYieldReturnValue)\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim().replace(/^\\[(?<name>.*?)=.*\\]$/u, '$<name>');\n });\n};\n\n/**\n * @typedef {true|string[]} DefaultContexts\n */\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {DefaultContexts} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n * @param {Function} handler\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n let property;\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = prop.context;\n value = checkJsdoc.bind(\n null, {\n ...selInfo,\n comment: prop.comment,\n }, handler.bind(null, prop.comment),\n );\n } else {\n property = prop.context;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = properties[property];\n properties[property] = old ? function (...args) {\n old(...args);\n value(...args);\n } : value;\n }\n\n return properties;\n};\n\nconst filterTags = (tags, filter) => {\n return tags.filter((tag) => {\n return filter(tag);\n });\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n};\n\nconst isGetter = (node) => {\n return node && node.parent?.kind === 'get';\n};\n\nconst isSetter = (node) => {\n return node && node.parent?.kind === 'set';\n};\n\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key: {\n name: sourceName,\n },\n } = node;\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const children = type === 'MethodDefinition' ? 'body' : 'properties';\n\n return node.parent[children].some(({\n kind,\n key: {\n name,\n },\n }) => {\n return kind === oppositeKind && name === sourceName;\n });\n};\n\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(node.parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(node.parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n *\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replace(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => void}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} requiredFlags\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasDefinedTypeTag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isSetter,\n isValidTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"mappings":"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"}
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.hasValueOrExecutorHasNonEmptyResolveValue = exports.hasReturnValue = void 0;
7
+
8
+ /* eslint-disable jsdoc/no-undefined-types */
9
+
10
+ /**
11
+ * Checks if a node is a promise but has no resolve value or an empty value.
12
+ * An `undefined` resolve does not count.
13
+ *
14
+ * @param {object} node
15
+ * @returns {boolean}
16
+ */
17
+ const isNewPromiseExpression = node => {
18
+ return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise';
19
+ };
20
+
21
+ const isVoidPromise = node => {
22
+ var _node$typeParameters, _node$typeParameters$, _node$typeParameters$2;
23
+
24
+ return (node === null || node === void 0 ? void 0 : (_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 ? void 0 : (_node$typeParameters$ = _node$typeParameters.params) === null || _node$typeParameters$ === void 0 ? void 0 : (_node$typeParameters$2 = _node$typeParameters$[0]) === null || _node$typeParameters$2 === void 0 ? void 0 : _node$typeParameters$2.type) === 'TSVoidKeyword';
25
+ };
26
+ /**
27
+ * @callback PromiseFilter
28
+ * @param {object} node
29
+ * @returns {boolean}
30
+ */
31
+
32
+ /**
33
+ * Checks if a node has a return statement. Void return does not count.
34
+ *
35
+ * @param {object} node
36
+ * @param {PromiseFilter} promFilter
37
+ * @returns {boolean|Node}
38
+ */
39
+ // eslint-disable-next-line complexity
40
+
41
+
42
+ const hasReturnValue = (node, promFilter) => {
43
+ var _node$returnType, _node$returnType$type;
44
+
45
+ if (!node) {
46
+ return false;
47
+ }
48
+
49
+ switch (node.type) {
50
+ case 'TSFunctionType':
51
+ case 'TSMethodSignature':
52
+ return !['TSVoidKeyword', 'TSUndefinedKeyword'].includes(node === null || node === void 0 ? void 0 : (_node$returnType = node.returnType) === null || _node$returnType === void 0 ? void 0 : (_node$returnType$type = _node$returnType.typeAnnotation) === null || _node$returnType$type === void 0 ? void 0 : _node$returnType$type.type);
53
+
54
+ case 'MethodDefinition':
55
+ return hasReturnValue(node.value, promFilter);
56
+
57
+ case 'FunctionExpression':
58
+ case 'FunctionDeclaration':
59
+ case 'ArrowFunctionExpression':
60
+ {
61
+ return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) || hasReturnValue(node.body, promFilter);
62
+ }
63
+
64
+ case 'BlockStatement':
65
+ {
66
+ return node.body.some(bodyNode => {
67
+ return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);
68
+ });
69
+ }
70
+
71
+ case 'LabeledStatement':
72
+ case 'WhileStatement':
73
+ case 'DoWhileStatement':
74
+ case 'ForStatement':
75
+ case 'ForInStatement':
76
+ case 'ForOfStatement':
77
+ case 'WithStatement':
78
+ {
79
+ return hasReturnValue(node.body, promFilter);
80
+ }
81
+
82
+ case 'IfStatement':
83
+ {
84
+ return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);
85
+ }
86
+
87
+ case 'TryStatement':
88
+ {
89
+ return hasReturnValue(node.block, promFilter) || hasReturnValue(node.handler && node.handler.body, promFilter) || hasReturnValue(node.finalizer, promFilter);
90
+ }
91
+
92
+ case 'SwitchStatement':
93
+ {
94
+ return node.cases.some(someCase => {
95
+ return someCase.consequent.some(nde => {
96
+ return hasReturnValue(nde, promFilter);
97
+ });
98
+ });
99
+ }
100
+
101
+ case 'ReturnStatement':
102
+ {
103
+ // void return does not count.
104
+ if (node.argument === null) {
105
+ return false;
106
+ }
107
+
108
+ if (promFilter && isNewPromiseExpression(node.argument)) {
109
+ // Let caller decide how to filter, but this is, at the least,
110
+ // a return of sorts and truthy
111
+ return promFilter(node.argument);
112
+ }
113
+
114
+ return true;
115
+ }
116
+
117
+ default:
118
+ {
119
+ return false;
120
+ }
121
+ }
122
+ };
123
+ /**
124
+ * Avoids further checking child nodes if a nested function shadows the
125
+ * resolver, but otherwise, if name is used (by call or passed in as an
126
+ * argument to another function), will be considered as non-empty.
127
+ *
128
+ * This could check for redeclaration of the resolver, but as such is
129
+ * unlikely, we avoid the performance cost of checking everywhere for
130
+ * (re)declarations or assignments.
131
+ *
132
+ * @param {AST} node
133
+ * @param {string} resolverName
134
+ * @returns {boolean}
135
+ */
136
+ // eslint-disable-next-line complexity
137
+
138
+
139
+ exports.hasReturnValue = hasReturnValue;
140
+
141
+ const hasNonEmptyResolverCall = (node, resolverName) => {
142
+ if (!node) {
143
+ return false;
144
+ } // Arrow function without block
145
+
146
+
147
+ switch (node.type) {
148
+ // istanbul ignore next -- In Babel?
149
+ case 'OptionalCallExpression':
150
+ case 'CallExpression':
151
+ return node.callee.name === resolverName && ( // Implicit or explicit undefined
152
+ node.arguments.length > 1 || node.arguments[0] !== undefined) || node.arguments.some(nde => {
153
+ // Being passed in to another function (which might invoke it)
154
+ return nde.type === 'Identifier' && nde.name === resolverName || // Handle nested items
155
+ hasNonEmptyResolverCall(nde, resolverName);
156
+ });
157
+
158
+ case 'ChainExpression':
159
+ case 'Decorator':
160
+ case 'ExpressionStatement':
161
+ return hasNonEmptyResolverCall(node.expression, resolverName);
162
+
163
+ case 'ClassBody':
164
+ case 'BlockStatement':
165
+ return node.body.some(bodyNode => {
166
+ return hasNonEmptyResolverCall(bodyNode, resolverName);
167
+ });
168
+
169
+ case 'FunctionExpression':
170
+ case 'FunctionDeclaration':
171
+ case 'ArrowFunctionExpression':
172
+ {
173
+ var _node$params$;
174
+
175
+ // Shadowing
176
+ if (((_node$params$ = node.params[0]) === null || _node$params$ === void 0 ? void 0 : _node$params$.name) === resolverName) {
177
+ return false;
178
+ }
179
+
180
+ return hasNonEmptyResolverCall(node.body, resolverName);
181
+ }
182
+
183
+ case 'LabeledStatement':
184
+ case 'WhileStatement':
185
+ case 'DoWhileStatement':
186
+ case 'ForStatement':
187
+ case 'ForInStatement':
188
+ case 'ForOfStatement':
189
+ case 'WithStatement':
190
+ {
191
+ return hasNonEmptyResolverCall(node.body, resolverName);
192
+ }
193
+
194
+ case 'ConditionalExpression':
195
+ case 'IfStatement':
196
+ {
197
+ return hasNonEmptyResolverCall(node.test, resolverName) || hasNonEmptyResolverCall(node.consequent, resolverName) || hasNonEmptyResolverCall(node.alternate, resolverName);
198
+ }
199
+
200
+ case 'TryStatement':
201
+ {
202
+ return hasNonEmptyResolverCall(node.block, resolverName) || hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) || hasNonEmptyResolverCall(node.finalizer, resolverName);
203
+ }
204
+
205
+ case 'SwitchStatement':
206
+ {
207
+ return node.cases.some(someCase => {
208
+ return someCase.consequent.some(nde => {
209
+ return hasNonEmptyResolverCall(nde, resolverName);
210
+ });
211
+ });
212
+ }
213
+
214
+ case 'ArrayPattern':
215
+ case 'ArrayExpression':
216
+ return node.elements.some(element => {
217
+ return hasNonEmptyResolverCall(element, resolverName);
218
+ });
219
+
220
+ case 'AssignmentPattern':
221
+ return hasNonEmptyResolverCall(node.right, resolverName);
222
+
223
+ case 'AssignmentExpression':
224
+ case 'BinaryExpression':
225
+ case 'LogicalExpression':
226
+ {
227
+ return hasNonEmptyResolverCall(node.left, resolverName) || hasNonEmptyResolverCall(node.right, resolverName);
228
+ }
229
+ // Comma
230
+
231
+ case 'SequenceExpression':
232
+ case 'TemplateLiteral':
233
+ return node.expressions.some(subExpression => {
234
+ return hasNonEmptyResolverCall(subExpression, resolverName);
235
+ });
236
+
237
+ case 'ObjectPattern':
238
+ case 'ObjectExpression':
239
+ return node.properties.some(property => {
240
+ return hasNonEmptyResolverCall(property, resolverName);
241
+ });
242
+ // istanbul ignore next -- In Babel?
243
+
244
+ case 'ClassMethod':
245
+ case 'MethodDefinition':
246
+ return node.decorators && node.decorators.some(decorator => {
247
+ return hasNonEmptyResolverCall(decorator, resolverName);
248
+ }) || node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
249
+ // istanbul ignore next -- In Babel?
250
+
251
+ case 'ObjectProperty':
252
+ /* eslint-disable no-fallthrough */
253
+ // istanbul ignore next -- In Babel?
254
+
255
+ case 'PropertyDefinition': // istanbul ignore next -- In Babel?
256
+
257
+ case 'ClassProperty':
258
+ /* eslint-enable no-fallthrough */
259
+
260
+ case 'Property':
261
+ return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || hasNonEmptyResolverCall(node.value, resolverName);
262
+ // istanbul ignore next -- In Babel?
263
+
264
+ case 'ObjectMethod':
265
+ // istanbul ignore next -- In Babel?
266
+ return node.computed && hasNonEmptyResolverCall(node.key, resolverName) || node.arguments.some(nde => {
267
+ return hasNonEmptyResolverCall(nde, resolverName);
268
+ });
269
+
270
+ case 'ClassExpression':
271
+ case 'ClassDeclaration':
272
+ return hasNonEmptyResolverCall(node.body, resolverName);
273
+
274
+ case 'AwaitExpression':
275
+ case 'SpreadElement':
276
+ case 'UnaryExpression':
277
+ case 'YieldExpression':
278
+ return hasNonEmptyResolverCall(node.argument, resolverName);
279
+
280
+ case 'VariableDeclaration':
281
+ {
282
+ return node.declarations.some(nde => {
283
+ return hasNonEmptyResolverCall(nde, resolverName);
284
+ });
285
+ }
286
+
287
+ case 'VariableDeclarator':
288
+ {
289
+ return hasNonEmptyResolverCall(node.id, resolverName) || hasNonEmptyResolverCall(node.init, resolverName);
290
+ }
291
+
292
+ case 'TaggedTemplateExpression':
293
+ return hasNonEmptyResolverCall(node.quasi, resolverName);
294
+ // ?.
295
+ // istanbul ignore next -- In Babel?
296
+
297
+ case 'OptionalMemberExpression':
298
+ case 'MemberExpression':
299
+ return hasNonEmptyResolverCall(node.object, resolverName) || hasNonEmptyResolverCall(node.property, resolverName);
300
+ // istanbul ignore next -- In Babel?
301
+
302
+ case 'Import':
303
+ case 'ImportExpression':
304
+ return hasNonEmptyResolverCall(node.source, resolverName);
305
+
306
+ case 'ReturnStatement':
307
+ {
308
+ if (node.argument === null) {
309
+ return false;
310
+ }
311
+
312
+ return hasNonEmptyResolverCall(node.argument, resolverName);
313
+ }
314
+
315
+ /*
316
+ // Shouldn't need to parse literals/literal components, etc.
317
+ case 'Identifier':
318
+ case 'TemplateElement':
319
+ case 'Super':
320
+ // Exports not relevant in this context
321
+ */
322
+
323
+ default:
324
+ return false;
325
+ }
326
+ };
327
+ /**
328
+ * Checks if a Promise executor has no resolve value or an empty value.
329
+ * An `undefined` resolve does not count.
330
+ *
331
+ * @param {object} node
332
+ * @param {boolean} anyPromiseAsReturn
333
+ * @returns {boolean}
334
+ */
335
+
336
+
337
+ const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {
338
+ return hasReturnValue(node, prom => {
339
+ if (anyPromiseAsReturn) {
340
+ return true;
341
+ }
342
+
343
+ if (isVoidPromise(prom)) {
344
+ return false;
345
+ }
346
+
347
+ const [{
348
+ params,
349
+ body
350
+ } = {}] = prom.arguments;
351
+
352
+ if (!(params !== null && params !== void 0 && params.length)) {
353
+ return false;
354
+ }
355
+
356
+ const [{
357
+ name: resolverName
358
+ }] = params;
359
+ return hasNonEmptyResolverCall(body, resolverName);
360
+ });
361
+ };
362
+
363
+ exports.hasValueOrExecutorHasNonEmptyResolveValue = hasValueOrExecutorHasNonEmptyResolveValue;
364
+ //# sourceMappingURL=hasReturnValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","hasReturnValue","promFilter","includes","returnType","typeAnnotation","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":";;;;;;;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,sBAAsB,GAAIC,IAAD,IAAU;EACvC,OAAOA,IAAI,IAAIA,IAAI,CAACC,IAAL,KAAc,eAAtB,IAAyCD,IAAI,CAACE,MAAL,CAAYD,IAAZ,KAAqB,YAA9D,IACLD,IAAI,CAACE,MAAL,CAAYC,IAAZ,KAAqB,SADvB;AAED,CAHD;;AAKA,MAAMC,aAAa,GAAIJ,IAAD,IAAU;EAAA;;EAC9B,OAAO,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,oCAAAA,IAAI,CAAEK,cAAN,uGAAsBC,MAAtB,0GAA+B,CAA/B,mFAAmCL,IAAnC,MAA4C,eAAnD;AACD,CAFD;AAIA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMM,cAAc,GAAG,CAACP,IAAD,EAAOQ,UAAP,KAAsB;EAAA;;EAC3C,IAAI,CAACR,IAAL,EAAW;IACT,OAAO,KAAP;EACD;;EAED,QAAQA,IAAI,CAACC,IAAb;IACA,KAAK,gBAAL;IACA,KAAK,mBAAL;MACE,OAAO,CAAC,CACN,eADM,EAEN,oBAFM,EAGNQ,QAHM,CAGGT,IAHH,aAGGA,IAHH,2CAGGA,IAAI,CAAEU,UAHT,8EAGG,iBAAkBC,cAHrB,0DAGG,sBAAkCV,IAHrC,CAAR;;IAIF,KAAK,kBAAL;MACE,OAAOM,cAAc,CAACP,IAAI,CAACY,KAAN,EAAaJ,UAAb,CAArB;;IACF,KAAK,oBAAL;IACA,KAAK,qBAAL;IACA,KAAK,yBAAL;MAAgC;QAC9B,OAAOR,IAAI,CAACa,UAAL,KAAoB,CAACd,sBAAsB,CAACC,IAAI,CAACc,IAAN,CAAvB,IAAsC,CAACV,aAAa,CAACJ,IAAI,CAACc,IAAN,CAAxE,KACLP,cAAc,CAACP,IAAI,CAACc,IAAN,EAAYN,UAAZ,CADhB;MAED;;IAED,KAAK,gBAAL;MAAuB;QACrB,OAAOR,IAAI,CAACc,IAAL,CAAUC,IAAV,CAAgBC,QAAD,IAAc;UAClC,OAAOA,QAAQ,CAACf,IAAT,KAAkB,qBAAlB,IAA2CM,cAAc,CAACS,QAAD,EAAWR,UAAX,CAAhE;QACD,CAFM,CAAP;MAGD;;IAED,KAAK,kBAAL;IACA,KAAK,gBAAL;IACA,KAAK,kBAAL;IACA,KAAK,cAAL;IACA,KAAK,gBAAL;IACA,KAAK,gBAAL;IACA,KAAK,eAAL;MAAsB;QACpB,OAAOD,cAAc,CAACP,IAAI,CAACc,IAAN,EAAYN,UAAZ,CAArB;MACD;;IAED,KAAK,aAAL;MAAoB;QAClB,OAAOD,cAAc,CAACP,IAAI,CAACiB,UAAN,EAAkBT,UAAlB,CAAd,IAA+CD,cAAc,CAACP,IAAI,CAACkB,SAAN,EAAiBV,UAAjB,CAApE;MACD;;IAED,KAAK,cAAL;MAAqB;QACnB,OAAOD,cAAc,CAACP,IAAI,CAACmB,KAAN,EAAaX,UAAb,CAAd,IACLD,cAAc,CAACP,IAAI,CAACoB,OAAL,IAAgBpB,IAAI,CAACoB,OAAL,CAAaN,IAA9B,EAAoCN,UAApC,CADT,IAELD,cAAc,CAACP,IAAI,CAACqB,SAAN,EAAiBb,UAAjB,CAFhB;MAGD;;IAED,KAAK,iBAAL;MAAwB;QACtB,OAAOR,IAAI,CAACsB,KAAL,CAAWP,IAAX,CACJQ,QAAD,IAAc;UACZ,OAAOA,QAAQ,CAACN,UAAT,CAAoBF,IAApB,CAA0BS,GAAD,IAAS;YACvC,OAAOjB,cAAc,CAACiB,GAAD,EAAMhB,UAAN,CAArB;UACD,CAFM,CAAP;QAGD,CALI,CAAP;MAOD;;IAED,KAAK,iBAAL;MAAwB;QACtB;QACA,IAAIR,IAAI,CAACyB,QAAL,KAAkB,IAAtB,EAA4B;UAC1B,OAAO,KAAP;QACD;;QAED,IAAIjB,UAAU,IAAIT,sBAAsB,CAACC,IAAI,CAACyB,QAAN,CAAxC,EAAyD;UACvD;UACA;UACA,OAAOjB,UAAU,CAACR,IAAI,CAACyB,QAAN,CAAjB;QACD;;QAED,OAAO,IAAP;MACD;;IAED;MAAS;QACP,OAAO,KAAP;MACD;EArED;AAuED,CA5ED;AA8EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;AACA,MAAMC,uBAAuB,GAAG,CAAC1B,IAAD,EAAO2B,YAAP,KAAwB;EACtD,IAAI,CAAC3B,IAAL,EAAW;IACT,OAAO,KAAP;EACD,CAHqD,CAKtD;;;EACA,QAAQA,IAAI,CAACC,IAAb;IACA;IACA,KAAK,wBAAL;IACA,KAAK,gBAAL;MACE,OAAOD,IAAI,CAACE,MAAL,CAAYC,IAAZ,KAAqBwB,YAArB,MAEL;MACA3B,IAAI,CAAC4B,SAAL,CAAeC,MAAf,GAAwB,CAAxB,IAA6B7B,IAAI,CAAC4B,SAAL,CAAe,CAAf,MAAsBE,SAH9C,KAKL9B,IAAI,CAAC4B,SAAL,CAAeb,IAAf,CAAqBS,GAAD,IAAS;QAC3B;QACA,OAAOA,GAAG,CAACvB,IAAJ,KAAa,YAAb,IAA6BuB,GAAG,CAACrB,IAAJ,KAAawB,YAA1C,IAEL;QACAD,uBAAuB,CAACF,GAAD,EAAMG,YAAN,CAHzB;MAID,CAND,CALF;;IAYF,KAAK,iBAAL;IACA,KAAK,WAAL;IACA,KAAK,qBAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAACa,UAAN,EAAkBc,YAAlB,CAA9B;;IACF,KAAK,WAAL;IACA,KAAK,gBAAL;MACE,OAAO3B,IAAI,CAACc,IAAL,CAAUC,IAAV,CAAgBC,QAAD,IAAc;QAClC,OAAOU,uBAAuB,CAACV,QAAD,EAAWW,YAAX,CAA9B;MACD,CAFM,CAAP;;IAGF,KAAK,oBAAL;IACA,KAAK,qBAAL;IACA,KAAK,yBAAL;MAAgC;QAAA;;QAC9B;QACA,IAAI,kBAAA3B,IAAI,CAACM,MAAL,CAAY,CAAZ,iEAAgBH,IAAhB,MAAyBwB,YAA7B,EAA2C;UACzC,OAAO,KAAP;QACD;;QAED,OAAOD,uBAAuB,CAAC1B,IAAI,CAACc,IAAN,EAAYa,YAAZ,CAA9B;MACD;;IAED,KAAK,kBAAL;IACA,KAAK,gBAAL;IACA,KAAK,kBAAL;IACA,KAAK,cAAL;IACA,KAAK,gBAAL;IACA,KAAK,gBAAL;IACA,KAAK,eAAL;MAAsB;QACpB,OAAOD,uBAAuB,CAAC1B,IAAI,CAACc,IAAN,EAAYa,YAAZ,CAA9B;MACD;;IAED,KAAK,uBAAL;IACA,KAAK,aAAL;MAAoB;QAClB,OAAOD,uBAAuB,CAAC1B,IAAI,CAAC+B,IAAN,EAAYJ,YAAZ,CAAvB,IACLD,uBAAuB,CAAC1B,IAAI,CAACiB,UAAN,EAAkBU,YAAlB,CADlB,IAELD,uBAAuB,CAAC1B,IAAI,CAACkB,SAAN,EAAiBS,YAAjB,CAFzB;MAGD;;IAED,KAAK,cAAL;MAAqB;QACnB,OAAOD,uBAAuB,CAAC1B,IAAI,CAACmB,KAAN,EAAaQ,YAAb,CAAvB,IACLD,uBAAuB,CAAC1B,IAAI,CAACoB,OAAL,IAAgBpB,IAAI,CAACoB,OAAL,CAAaN,IAA9B,EAAoCa,YAApC,CADlB,IAELD,uBAAuB,CAAC1B,IAAI,CAACqB,SAAN,EAAiBM,YAAjB,CAFzB;MAGD;;IAED,KAAK,iBAAL;MAAwB;QACtB,OAAO3B,IAAI,CAACsB,KAAL,CAAWP,IAAX,CACJQ,QAAD,IAAc;UACZ,OAAOA,QAAQ,CAACN,UAAT,CAAoBF,IAApB,CAA0BS,GAAD,IAAS;YACvC,OAAOE,uBAAuB,CAACF,GAAD,EAAMG,YAAN,CAA9B;UACD,CAFM,CAAP;QAGD,CALI,CAAP;MAOD;;IAED,KAAK,cAAL;IACA,KAAK,iBAAL;MACE,OAAO3B,IAAI,CAACgC,QAAL,CAAcjB,IAAd,CAAoBkB,OAAD,IAAa;QACrC,OAAOP,uBAAuB,CAACO,OAAD,EAAUN,YAAV,CAA9B;MACD,CAFM,CAAP;;IAIF,KAAK,mBAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAACkC,KAAN,EAAaP,YAAb,CAA9B;;IAEF,KAAK,sBAAL;IACA,KAAK,kBAAL;IACA,KAAK,mBAAL;MAA0B;QACxB,OAAOD,uBAAuB,CAAC1B,IAAI,CAACmC,IAAN,EAAYR,YAAZ,CAAvB,IACLD,uBAAuB,CAAC1B,IAAI,CAACkC,KAAN,EAAaP,YAAb,CADzB;MAED;IAED;;IACA,KAAK,oBAAL;IACA,KAAK,iBAAL;MACE,OAAO3B,IAAI,CAACoC,WAAL,CAAiBrB,IAAjB,CAAuBsB,aAAD,IAAmB;QAC9C,OAAOX,uBAAuB,CAACW,aAAD,EAAgBV,YAAhB,CAA9B;MACD,CAFM,CAAP;;IAIF,KAAK,eAAL;IACA,KAAK,kBAAL;MACE,OAAO3B,IAAI,CAACsC,UAAL,CAAgBvB,IAAhB,CAAsBwB,QAAD,IAAc;QACxC,OAAOb,uBAAuB,CAACa,QAAD,EAAWZ,YAAX,CAA9B;MACD,CAFM,CAAP;IAGF;;IACA,KAAK,aAAL;IACA,KAAK,kBAAL;MACE,OAAO3B,IAAI,CAACwC,UAAL,IAAmBxC,IAAI,CAACwC,UAAL,CAAgBzB,IAAhB,CAAsB0B,SAAD,IAAe;QAC5D,OAAOf,uBAAuB,CAACe,SAAD,EAAYd,YAAZ,CAA9B;MACD,CAFyB,CAAnB,IAGL3B,IAAI,CAAC0C,QAAL,IAAiBhB,uBAAuB,CAAC1B,IAAI,CAAC2C,GAAN,EAAWhB,YAAX,CAHnC,IAILD,uBAAuB,CAAC1B,IAAI,CAACY,KAAN,EAAae,YAAb,CAJzB;IAMF;;IACA,KAAK,gBAAL;IACA;IACA;;IACA,KAAK,oBAAL,CA9GA,CA+GA;;IACA,KAAK,eAAL;IACA;;IACA,KAAK,UAAL;MACE,OAAO3B,IAAI,CAAC0C,QAAL,IAAiBhB,uBAAuB,CAAC1B,IAAI,CAAC2C,GAAN,EAAWhB,YAAX,CAAxC,IACLD,uBAAuB,CAAC1B,IAAI,CAACY,KAAN,EAAae,YAAb,CADzB;IAEF;;IACA,KAAK,cAAL;MACE;MACA,OAAO3B,IAAI,CAAC0C,QAAL,IAAiBhB,uBAAuB,CAAC1B,IAAI,CAAC2C,GAAN,EAAWhB,YAAX,CAAxC,IACL3B,IAAI,CAAC4B,SAAL,CAAeb,IAAf,CAAqBS,GAAD,IAAS;QAC3B,OAAOE,uBAAuB,CAACF,GAAD,EAAMG,YAAN,CAA9B;MACD,CAFD,CADF;;IAKF,KAAK,iBAAL;IACA,KAAK,kBAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAACc,IAAN,EAAYa,YAAZ,CAA9B;;IAEF,KAAK,iBAAL;IACA,KAAK,eAAL;IACA,KAAK,iBAAL;IACA,KAAK,iBAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAACyB,QAAN,EAAgBE,YAAhB,CAA9B;;IAEF,KAAK,qBAAL;MAA4B;QAC1B,OAAO3B,IAAI,CAAC4C,YAAL,CAAkB7B,IAAlB,CAAwBS,GAAD,IAAS;UACrC,OAAOE,uBAAuB,CAACF,GAAD,EAAMG,YAAN,CAA9B;QACD,CAFM,CAAP;MAGD;;IAED,KAAK,oBAAL;MAA2B;QACzB,OAAOD,uBAAuB,CAAC1B,IAAI,CAAC6C,EAAN,EAAUlB,YAAV,CAAvB,IACLD,uBAAuB,CAAC1B,IAAI,CAAC8C,IAAN,EAAYnB,YAAZ,CADzB;MAED;;IAED,KAAK,0BAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAAC+C,KAAN,EAAapB,YAAb,CAA9B;IAEF;IACA;;IACA,KAAK,0BAAL;IACA,KAAK,kBAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAACgD,MAAN,EAAcrB,YAAd,CAAvB,IACLD,uBAAuB,CAAC1B,IAAI,CAACuC,QAAN,EAAgBZ,YAAhB,CADzB;IAGF;;IACA,KAAK,QAAL;IACA,KAAK,kBAAL;MACE,OAAOD,uBAAuB,CAAC1B,IAAI,CAACiD,MAAN,EAActB,YAAd,CAA9B;;IAEF,KAAK,iBAAL;MAAwB;QACtB,IAAI3B,IAAI,CAACyB,QAAL,KAAkB,IAAtB,EAA4B;UAC1B,OAAO,KAAP;QACD;;QAED,OAAOC,uBAAuB,CAAC1B,IAAI,CAACyB,QAAN,EAAgBE,YAAhB,CAA9B;MACD;;IAED;AACF;AACA;AACA;AACA;AACA;AACA;;IAEE;MACE,OAAO,KAAP;EAlLF;AAoLD,CA1LD;AA4LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMuB,yCAAyC,GAAG,CAAClD,IAAD,EAAOmD,kBAAP,KAA8B;EAC9E,OAAO5C,cAAc,CAACP,IAAD,EAAQoD,IAAD,IAAU;IACpC,IAAID,kBAAJ,EAAwB;MACtB,OAAO,IAAP;IACD;;IAED,IAAI/C,aAAa,CAACgD,IAAD,CAAjB,EAAyB;MACvB,OAAO,KAAP;IACD;;IAED,MAAM,CACJ;MACE9C,MADF;MAEEQ;IAFF,IAGI,EAJA,IAKFsC,IAAI,CAACxB,SALT;;IAOA,IAAI,EAACtB,MAAD,aAACA,MAAD,eAACA,MAAM,CAAEuB,MAAT,CAAJ,EAAqB;MACnB,OAAO,KAAP;IACD;;IAED,MAAM,CACJ;MACE1B,IAAI,EAAEwB;IADR,CADI,IAIFrB,MAJJ;IAMA,OAAOoB,uBAAuB,CAACZ,IAAD,EAAOa,YAAP,CAA9B;EACD,CA3BoB,CAArB;AA4BD,CA7BD"}
package/package.json CHANGED
@@ -117,5 +117,5 @@
117
117
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
118
118
  "test-index": "npm run test-no-cov -- test/rules/index.js"
119
119
  },
120
- "version": "39.3.3"
120
+ "version": "39.3.4"
121
121
  }