{"version":3,"file":"jsdocUtils.cjs","names":["_getDefaultTagStructureForMode","_interopRequireDefault","require","_tagNames","_WarnSettings","_jsdoccomment","_hasReturnValue","e","__esModule","default","tagStructure","setTagStructure","mode","getDefaultTagStructureForMode","exports","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","String","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","ignoreInterfacedParameters","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","closureTags","jsdocTags","typeScriptTags","hasBeenWarned","report","loc","end","column","line","start","message","markSettingAsWarned","getTagDescription","tg","returnArray","descriptions","source","some","tokens","description","lineEnd","postDelimiter","postTag","desc","slice","join","getPreferredTagNameSimple","tagPreference","prefValues","Object","values","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","hasOwn","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","filterTags","getTags","tagName","item","getPreferredTagName","allowObjectReturn","defaultMessage","skipReportingBlockedTag","tagNamePreference","isObject","blocked","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getInlineTags","inlineTags","inlineTag","flatMap","number","getAllTags","hasATag","targetTagNames","mayBeUndefinedTypeTag","tagType","trim","parsedTypes","tryParse","elem","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNameOrNamepathDefiningTag","isNamepathReferencingTag","isNamepathOrUrlReferencingTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNameOrNamepath","nampathRole","tagMightHaveNamepath","tagMightHaveName","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","hasNonFunctionYield","node","checkYieldReturnValue","element","body","bodyNode","arguments","expression","computed","test","consequent","alternate","object","property","nde","expressions","subExpression","cases","someCase","quasi","block","handler","finalizer","declarations","id","init","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","settings","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","tagsWithNamesAndDescriptions","getTagsByType","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","sibling","child","ky","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","checkGetters","checkSetters","dropPathSegmentQuotes","str","replaceAll","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","RegExp","strictNativeTypes","rewireByParsedType","parsedType","indent","typeBracketSpacing","typeLines","stringify","firstTypeLine","shift","lastTypeLine","pop","beginNameOrDescIdx","findIndex","nameAndDesc","initialNumber","src","postName","postType","typeLine","delimiter","firstTagIdx","initialEndSource","at"],"sources":["../src/jsdocUtils.js"],"sourcesContent":["import getDefaultTagStructureForMode from './getDefaultTagStructureForMode.js';\nimport {\n  closureTags,\n  jsdocTags,\n  typeScriptTags,\n} from './tagNames.js';\nimport WarnSettings from './WarnSettings.js';\nimport {\n  stringify,\n  tryParse,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {number} Integer\n */\n/**\n * @typedef {import('./utils/hasReturnValue.js').ESTreeOrTypeScriptNode} ESTreeOrTypeScriptNode\n */\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"|\"permissive\"} ParserMode\n */\n\n/**\n * @type {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nlet tagStructure;\n\n/**\n * @param {ParserMode} mode\n * @returns {void}\n */\nconst setTagStructure = (mode) => {\n  tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n/**\n * @typedef {undefined|string|{\n *   name: Integer,\n *   restElement: boolean\n * }|{\n *   isRestProperty: boolean|undefined,\n *   name: string,\n *   restElement: boolean\n * }|{\n *   name: string,\n *   restElement: boolean\n * }} ParamCommon\n */\n/**\n * @typedef {ParamCommon|[string|undefined, (FlattendRootInfo & {\n *   annotationParamName?: string,\n * })]|NestedParamInfo} ParamNameInfo\n */\n\n/**\n * @typedef {{\n *   hasPropertyRest: boolean,\n *   hasRestElement: boolean,\n *   names: string[],\n *   rests: boolean[],\n * }} FlattendRootInfo\n */\n/**\n * @typedef {[string, (string[]|ParamInfo[])]} NestedParamInfo\n */\n/**\n * @typedef {ParamCommon|\n * [string|undefined, (FlattendRootInfo & {\n *   annotationParamName?: string\n * })]|\n * NestedParamInfo} ParamInfo\n */\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.\n * @callback FlattenRoots\n * @param {ParamInfo[]} params\n * @param {string} [root]\n * @returns {FlattendRootInfo}\n */\n\n/** @type {FlattenRoots} */\nconst flattenRoots = (params, root = '') => {\n  let hasRestElement = false;\n  let hasPropertyRest = false;\n\n  /**\n   * @type {boolean[]}\n   */\n  const rests = [];\n\n  const names = params.reduce(\n    /**\n     * @param {string[]} acc\n     * @param {ParamInfo} cur\n     * @returns {string[]}\n     */\n    (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 = /** @type {string[]} */ ([\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 ('isRestProperty' in cur && cur.isRestProperty) {\n          hasPropertyRest = true;\n          rests.push(true);\n        } else {\n          rests.push(false);\n        }\n\n        if ('restElement' in cur && cur.restElement) {\n          hasRestElement = true;\n        }\n\n        acc.push(root ? `${root}.${String(cur.name)}` : String(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\n  return {\n    hasPropertyRest,\n    hasRestElement,\n    names,\n    rests,\n  };\n};\n\n/**\n * @param {import('@typescript-eslint/types').TSESTree.TSIndexSignature|\n *  import('@typescript-eslint/types').TSESTree.TSConstructSignatureDeclaration|\n *  import('@typescript-eslint/types').TSESTree.TSCallSignatureDeclaration|\n *  import('@typescript-eslint/types').TSESTree.TSPropertySignature} propSignature\n * @returns {undefined|string|[string, 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      /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n        propSignature.key\n      ).name,\n      propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n        return /** @type {string} */ (\n          getPropertiesFromPropertySignature(\n            /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n              member\n            ),\n          )\n        );\n      }),\n    ];\n  }\n\n  return /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n    propSignature.key\n  ).name;\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode|null} functionNode\n * @param {boolean} [checkDefaultObjects]\n * @param {boolean} [ignoreInterfacedParameters]\n * @throws {Error}\n * @returns {ParamNameInfo[]}\n */\nconst getFunctionParameterNames = (\n  functionNode, checkDefaultObjects, ignoreInterfacedParameters,\n) => {\n  /* eslint-disable complexity -- Temporary */\n  /**\n   * @param {import('estree').Identifier|import('estree').AssignmentPattern|\n   *   import('estree').ObjectPattern|import('estree').Property|\n   *   import('estree').RestElement|import('estree').ArrayPattern|\n   *   import('@typescript-eslint/types').TSESTree.TSParameterProperty|\n   *   import('@typescript-eslint/types').TSESTree.Property|\n   *   import('@typescript-eslint/types').TSESTree.RestElement|\n   *   import('@typescript-eslint/types').TSESTree.Identifier|\n   *   import('@typescript-eslint/types').TSESTree.ObjectPattern|\n   *   import('@typescript-eslint/types').TSESTree.BindingName|\n   *   import('@typescript-eslint/types').TSESTree.Parameter\n   * } param\n   * @param {boolean} [isProperty]\n   * @returns {ParamNameInfo|[string, ParamNameInfo[]]}\n   */\n  const getParamName = (param, isProperty) => {\n    /* eslint-enable complexity -- Temporary */\n    const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n    if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n      if (ignoreInterfacedParameters && 'typeAnnotation' in param &&\n        param.typeAnnotation) {\n        // No-op\n        return [\n          undefined, {\n            hasPropertyRest: false,\n            hasRestElement: false,\n            names: [],\n            rests: [],\n          },\n        ];\n      }\n\n      const typeAnnotation = hasLeftTypeAnnotation ?\n        /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n          param.left\n        ).typeAnnotation :\n        /** @type {import('@typescript-eslint/types').TSESTree.Identifier|import('@typescript-eslint/types').TSESTree.ObjectPattern} */\n        (param).typeAnnotation;\n\n      if (typeAnnotation?.typeAnnotation?.type === 'TSTypeLiteral') {\n        const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n          return getPropertiesFromPropertySignature(\n            /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */\n            (member),\n          );\n        });\n\n        const flattened = {\n          ...flattenRoots(propertyNames),\n          annotationParamName: 'name' in param ? param.name : undefined,\n        };\n        const hasLeftName = 'left' in param && 'name' in param.left;\n\n        if ('name' in param || hasLeftName) {\n          return [\n            hasLeftName ?\n              /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n                param.left\n              ).name :\n              /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n                param\n              ).name,\n            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 (\n      param.type === 'ObjectPattern' ||\n      ('left' in param &&\n      (\n        param\n      ).left.type === 'ObjectPattern')\n    ) {\n      const properties = /** @type {import('@typescript-eslint/types').TSESTree.ObjectPattern} */ (\n        param\n      ).properties ||\n        /** @type {import('estree').ObjectPattern} */\n        (\n          /** @type {import('@typescript-eslint/types').TSESTree.AssignmentPattern} */ (\n            param\n          ).left\n        )?.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      switch (param.value.type) {\n        case 'ArrayPattern': {\n          return [\n          /** @type {import('estree').Identifier} */\n            (param.key).name,\n            /** @type {import('estree').ArrayPattern} */ (\n              param.value\n            ).elements.map((prop, idx) => {\n              return {\n                name: idx,\n                restElement: prop?.type === 'RestElement',\n              };\n            }),\n          ];\n        }\n\n        case 'ObjectPattern': {\n          return [\n          /** @type {import('estree').Identifier} */ (param.key).name,\n            /** @type {import('estree').ObjectPattern} */ (\n              param.value\n            ).properties.map((prop) => {\n              return /** @type {string|[string, string[]]} */ (getParamName(prop, isProperty));\n            }),\n          ];\n        }\n\n        case 'AssignmentPattern': {\n          switch (param.value.left.type) {\n            case 'ArrayPattern':\n              return [\n                /** @type {import('estree').Identifier} */\n                (param.key).name,\n                /** @type {import('estree').ArrayPattern} */ (\n                  param.value.left\n                ).elements.map((prop, idx) => {\n                  return {\n                    name: idx,\n                    restElement: prop?.type === 'RestElement',\n                  };\n                }),\n              ];\n            case 'Identifier':\n              // Default parameter\n              if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n                return [\n                  /** @type {import('estree').Identifier} */ (\n                    param.key\n                  ).name,\n                  /** @type {import('estree').AssignmentPattern} */ (\n                    param.value\n                  ).right.properties.map((prop) => {\n                    return /** @type {string} */ (getParamName(\n                      /** @type {import('estree').Property} */\n                      (prop),\n                      isProperty,\n                    ));\n                  }),\n                ];\n              }\n\n              break;\n            case 'ObjectPattern':\n              return [\n                /** @type {import('estree').Identifier} */\n                (param.key).name,\n                /** @type {import('estree').ObjectPattern} */ (\n                  param.value.left\n                ).properties.map((prop) => {\n                  return getParamName(prop, isProperty);\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        /* c8 ignore next 2 -- `raw` may not be present in all parsers */\n          return /** @type {string} */ (param.key.raw ||\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 (\n      param.type === 'ArrayPattern' ||\n      /** @type {import('estree').AssignmentPattern} */ (\n        param\n      ).left?.type === 'ArrayPattern'\n    ) {\n      const elements = /** @type {import('estree').ArrayPattern} */ (\n        param\n      ).elements || /** @type {import('estree').ArrayPattern} */ (\n        /** @type {import('estree').AssignmentPattern} */ (\n          param\n        ).left\n      )?.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      'ExperimentalRestProperty', 'RestElement',\n    ].includes(param.type)) {\n      return {\n        isRestProperty: isProperty,\n        name: /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n          /** @type {import('@typescript-eslint/types').TSESTree.RestElement} */ (\n            param\n          // @ts-expect-error Ok\n          ).argument).name ?? param?.argument?.elements?.map(({\n          // @ts-expect-error Ok\n          name,\n        }) => {\n          return name;\n        }),\n        restElement: true,\n      };\n    }\n\n    if (param.type === 'TSParameterProperty') {\n      return getParamName(\n        /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n          /** @type {import('@typescript-eslint/types').TSESTree.TSParameterProperty} */ (\n            param\n          ).parameter\n        ),\n        true,\n      );\n    }\n\n    throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n  };\n\n  if (!functionNode) {\n    return [];\n  }\n\n  return (\n    /** @type {import('@typescript-eslint/types').TSESTree.TSFunctionType} */\n    (/** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (functionNode)?.typeAnnotation?.typeAnnotation)?.params ||\n    /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n      functionNode\n    ).params || /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n      functionNode\n    ).value?.params || []).map((param) => {\n    return getParamName(param);\n  });\n};\n\n/**\n * @param {ESTreeOrTypeScriptNode} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n  // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n  return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n    functionNode\n  ).params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * `foo` or `foo.bar`.\n * @param {import('comment-parser').Block} jsdoc\n * @param {string} targetTagName\n * @returns {{\n *   idx: Integer,\n *   name: string,\n *   type: string\n * }[]}\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 {ParserMode|undefined} mode\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {import('./tagNames.js').AliasedTags}\n */\nconst getTagNamesForMode = (mode, context) => {\n  switch (mode) {\n    case 'closure':\n    case 'permissive':\n      return closureTags;\n    case 'jsdoc':\n      return jsdocTags;\n    case 'typescript':\n      return typeScriptTags;\n    default:\n      if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n        context.report({\n          loc: {\n            end: {\n              column: 1,\n              line: 1,\n            },\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 {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\nconst getTagDescription = (tg, returnArray) => {\n  /**\n   * @type {string[]}\n   */\n  const descriptions = [];\n  tg.source.some(({\n    tokens: {\n      description,\n      end,\n      lineEnd,\n      name,\n      postDelimiter,\n      postTag,\n      tag,\n      type,\n    },\n  }) => {\n    const desc = (\n      tag && postTag ||\n        !tag && !name && !type && postDelimiter || ''\n\n    // Remove space\n    ).slice(1) +\n        (description || '') + (lineEnd || '');\n\n    if (end) {\n      if (desc) {\n        descriptions.push(desc);\n      }\n\n      return true;\n    }\n\n    descriptions.push(desc);\n\n    return false;\n  });\n\n  return returnArray ? descriptions : descriptions.join('\\n');\n};\n\n/**\n * @typedef {{\n *   report: (descriptor: import('eslint').Rule.ReportDescriptor) => void\n * }} Reporter\n */\n\n/**\n * @param {string} name\n * @param {ParserMode|undefined} mode\n * @param {TagNamePreference} tagPreference\n * @param {import('eslint').Rule.RuleContext} context\n * @returns {string|false|{\n *   message: string;\n *   replacement?: string|undefined;\n * }}\n */\nconst getPreferredTagNameSimple = (\n  name,\n  mode,\n  tagPreference = {},\n  // @ts-expect-error Just a no-op\n  // eslint-disable-next-line unicorn/no-object-as-default-parameter -- Ok\n  context = {\n    report () {\n      // No-op\n    },\n  },\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 /v, ''), value,\n        ];\n      }),\n  );\n\n  if (Object.hasOwn(tagPreferenceFixed, name)) {\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 {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {string} name\n * @param {string[]} 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 {import('./iterateJsdoc.js').JsdocBlockWithInline} 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 {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\nconst filterTags = (jsdoc, filter) => {\n  return jsdoc.tags.filter((tag) => {\n    return filter(tag);\n  });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\nconst getTags = (jsdoc, tagName) => {\n  return filterTags(jsdoc, (item) => {\n    return item.tag === tagName;\n  });\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {{\n *   tagName: string,\n *   context?: import('eslint').Rule.RuleContext,\n *   mode?: ParserMode,\n *   report?: import('./iterateJsdoc.js').Report\n *   tagNamePreference?: TagNamePreference\n *   skipReportingBlockedTag?: boolean,\n *   allowObjectReturn?: boolean,\n *   defaultMessage?: string,\n * }} cfg\n * @returns {string|undefined|false|{\n *   message: string;\n *   replacement?: string|undefined;\n * }|{\n *   blocked: true,\n *   tagName: string\n * }}\n */\nconst getPreferredTagName = (jsdoc, {\n  allowObjectReturn = false,\n  context,\n  tagName,\n  defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n  mode,\n  report = () => {},\n  skipReportingBlockedTag = false,\n  tagNamePreference,\n}) => {\n  const ret = getPreferredTagNameSimple(tagName, mode, tagNamePreference, context);\n  const isObject = ret && typeof ret === 'object';\n  if (hasTag(jsdoc, tagName) && (ret === false || isObject && !ret.replacement)) {\n    if (skipReportingBlockedTag) {\n      return {\n        blocked: true,\n        tagName,\n      };\n    }\n\n    const message = isObject && ret.message || defaultMessage;\n    report(message, null, getTags(jsdoc, tagName)[0]);\n\n    return false;\n  }\n\n  return isObject && !allowObjectReturn ? ret.replacement : ret;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string} tagName\n * @param {(\n *   matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n *   targetTagName: string\n * ) => void} arrayHandler\n * @param {object} cfg\n * @param {import('eslint').Rule.RuleContext} [cfg.context]\n * @param {ParserMode} [cfg.mode]\n * @param {import('./iterateJsdoc.js').Report} [cfg.report]\n * @param {TagNamePreference} [cfg.tagNamePreference]\n * @param {boolean} [cfg.skipReportingBlockedTag]\n * @returns {void}\n */\nconst forEachPreferredTag = (\n  jsdoc, tagName, arrayHandler,\n  {\n    context,\n    mode,\n    report,\n    skipReportingBlockedTag = false,\n    tagNamePreference,\n  } = {},\n) => {\n  const targetTagName = /** @type {string|false} */ (\n    getPreferredTagName(jsdoc, {\n      context,\n      mode,\n      report,\n      skipReportingBlockedTag,\n      tagName,\n      tagNamePreference,\n    })\n  );\n  if (!targetTagName ||\n    skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n  ) {\n    return;\n  }\n\n  const matchingJsdocTags = jsdoc.tags.filter(({\n    tag,\n  }) => {\n    return tag === targetTagName;\n  });\n\n  for (const matchingJsdocTag of matchingJsdocTags) {\n    arrayHandler(\n      /**\n       * @type {import('@es-joy/jsdoccomment').JsdocTagWithInline}\n       */ (\n        matchingJsdocTag\n      ), targetTagName,\n    );\n  }\n};\n\n/**\n * Get all inline tags and inline tags in tags\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @returns {(import('comment-parser').Spec|\n *   import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n *     line?: number | undefined; column?: number | undefined;\n *   })[]}\n */\nconst getInlineTags = (jsdoc) => {\n  return [\n    ...jsdoc.inlineTags.map((inlineTag) => {\n      // Tags don't have source or line numbers, so add before returning\n      let line = -1;\n      for (const {\n        tokens: {\n          description,\n        },\n      } of jsdoc.source) {\n        line++;\n        if (description && description.includes(`{@${inlineTag.tag}`)) {\n          break;\n        }\n      }\n\n      inlineTag.line = line;\n\n      return inlineTag;\n    }),\n    ...jsdoc.tags.flatMap((tag) => {\n      for (const inlineTag of tag.inlineTags) {\n        /** @type {import('./iterateJsdoc.js').Integer} */\n        let line = 0;\n        for (const {\n          number,\n          tokens: {\n            description,\n          },\n        } of tag.source) {\n          if (description && description.includes(`{@${inlineTag.tag}`)) {\n            line = number;\n            break;\n          }\n        }\n\n        inlineTag.line = line;\n      }\n\n      return (\n        /**\n         * @type {import('comment-parser').Spec & {\n         *   inlineTags: import('@es-joy/jsdoccomment').JsdocInlineTagNoType[]\n         * }}\n         */ (\n          tag\n        ).inlineTags\n      );\n    }),\n  ];\n};\n\n/**\n * Get all tags, inline tags and inline tags in tags\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @returns {(import('comment-parser').Spec|\n *   import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n *     line?: number | undefined; column?: number | undefined;\n *   })[]}\n */\nconst getAllTags = (jsdoc) => {\n  return [\n    ...jsdoc.tags,\n    ...getInlineTags(jsdoc),\n  ];\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {string[]} 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 has an undefined type.\n * @param {import('comment-parser').Spec|null|undefined} tag\n *   the tag which should be checked.\n * @param {ParserMode} mode\n * @returns {boolean}\n *   true in case a defined type is undeclared; otherwise false.\n */\nconst mayBeUndefinedTypeTag = (tag, mode) => {\n  // The function should not continue in the event the type is not defined...\n  if (typeof tag === 'undefined' || tag === null) {\n    return true;\n  }\n\n  // .. same applies if it declares an `{undefined}` or `{void}` type\n  const tagType = tag.type.trim();\n\n  // Exit early if matching\n  if (\n    tagType === 'undefined' || tagType === 'void' ||\n    tagType === '*' || tagType === 'any'\n  ) {\n    return true;\n  }\n\n  let parsedTypes;\n  try {\n    parsedTypes = tryParse(\n      tagType,\n      mode === 'permissive' ? undefined : [\n        mode,\n      ],\n    );\n  } catch {\n    // Ignore\n  }\n\n  if (\n    // We do not traverse deeply as it could be, e.g., `Promise<void>`\n    parsedTypes &&\n    parsedTypes.type === 'JsdocTypeUnion' &&\n    parsedTypes.elements.some((elem) => {\n      return elem.type === 'JsdocTypeUndefined' ||\n        elem.type === 'JsdocTypeName' && elem.value === 'void';\n    })) {\n    return true;\n  }\n\n  // In any other case, a type is present\n  return false;\n};\n\n/**\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} map\n * @param {string} tag\n * @returns {Map<string, string|string[]|boolean|undefined>}\n */\nconst ensureMap = (map, tag) => {\n  if (!map.has(tag)) {\n    map.set(tag, new Map());\n  }\n\n  return /** @type {Map<string, string | boolean>} */ (map.get(tag));\n};\n\n/**\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {void}\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n  for (const [\n    tag,\n    {\n      name,\n      required = [],\n      type,\n    },\n  ] of Object.entries(structuredTags)) {\n    const tagStruct = ensureMap(tagMap, tag);\n\n    tagStruct.set('namepathRole', 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 {ParserMode} mode\n * @param {import('./iterateJsdoc.js').StructuredTags} structuredTags\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n  const tagStruct = getDefaultTagStructureForMode(mode);\n\n  try {\n    overrideTagStructure(structuredTags, tagStruct);\n  /* c8 ignore next 3 */\n  } catch {\n    //\n  }\n\n  return tagStruct;\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNameOrNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  return /** @type {(string|boolean|undefined)[]} */ ([\n    'name-defining',\n    'namepath-defining',\n  ]).includes(/** @type {string|boolean|undefined} */ (\n    tagStruct.get('namepathRole')));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathReferencingTag = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n  return tagStruct.get('namepathRole') === 'namepath-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst isNamepathOrUrlReferencingTag = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n  return tagStruct.get('namepathRole') === 'namepath-or-url-referencing';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  return /** @type {boolean|undefined} */ (tagStruct.get('typeRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|string}\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 = /** @type {boolean|undefined} */ (tagStruct.get('typeAllowed'));\n\n  return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n  'name-defining', 'namepath-defining',\n  'namepath-referencing',\n]);\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  const ret = tagStruct.get('namepathRole');\n\n  return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNameOrNamepath = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  const nampathRole = tagStruct.get('namepathRole');\n\n  return nampathRole !== false &&\n    namepathTypes.has(/** @type {string} */ (nampathRole));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  const nampathRole = tagStruct.get('namepathRole');\n\n  return nampathRole !== false &&\n    [\n      'namepath-defining',\n      'namepath-referencing',\n    ].includes(/** @type {string} */ (nampathRole));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveName = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  const nampathRole = tagStruct.get('namepathRole');\n\n  return nampathRole !== false &&\n    nampathRole === 'name-defining';\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  return /** @type {boolean|undefined} */ (tagStruct.get('nameRequired'));\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n  return Boolean(tagMightHaveTypePosition(tag, tagMap)) || tagMightHaveNameOrNamepath(tag, tagMap);\n};\n\n/**\n * @param {string} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n  const tagStruct = ensureMap(tagMap, tag);\n\n  return /** @type {boolean} */ (tagStruct.get('typeOrNameRequired'));\n};\n\n/**\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').TagStructure} tagMap\n * @returns {boolean|undefined}\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    tagMightHaveNameOrNamepath(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 complexity -- Temporary */\n/**\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n  /* eslint-enable complexity -- Temporary */\n  if (!node) {\n    return false;\n  }\n\n  switch (node.type) {\n    case 'ArrayExpression':\n\n    case 'ArrayPattern':\n      return node.elements.some((element) => {\n        return hasNonFunctionYield(element, checkYieldReturnValue);\n      });\n    case 'AssignmentExpression':\n    case 'BinaryExpression':\n    case 'LogicalExpression': {\n      return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n      hasNonFunctionYield(node.right, checkYieldReturnValue);\n    }\n\n    case 'AssignmentPattern':\n      return hasNonFunctionYield(node.right, checkYieldReturnValue);\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    /* c8 ignore next 2 -- In Babel? */\n    case 'CallExpression':\n    // @ts-expect-error In Babel?\n    case 'OptionalCallExpression':\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    /* c8 ignore next 2 -- In Babel? */\n    // @ts-expect-error In Babel?\n    case 'ClassProperty':\n\n    /* c8 ignore next 2 -- In Babel? */\n      // @ts-expect-error In Babel?\n    case 'ObjectProperty':\n    /* c8 ignore next 2 -- In Babel? */\n    case 'Property':\n\n    case 'PropertyDefinition':\n      return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n      hasNonFunctionYield(node.value, checkYieldReturnValue);\n\n    case 'ConditionalExpression':\n\n    case 'IfStatement': {\n      return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n      hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n      hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n    }\n\n    case 'DoWhileStatement':\n    case 'ForInStatement':\n\n    case 'ForOfStatement':\n\n    case 'ForStatement':\n\n    case 'LabeledStatement':\n    case 'WhileStatement':\n    case 'WithStatement': {\n      return hasNonFunctionYield(node.body, checkYieldReturnValue);\n    }\n\n    /* c8 ignore next 2 -- In Babel? */\n    // @ts-expect-error In Babel?\n    case 'Import':\n    case 'ImportExpression':\n      return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n    // ?.\n      /* c8 ignore next 2 -- In Babel? */\n    case 'MemberExpression':\n    // @ts-expect-error In Babel?\n    case 'OptionalMemberExpression':\n      return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n      hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n    case 'ObjectExpression':\n    case 'ObjectPattern':\n      return node.properties.some((property) => {\n        return hasNonFunctionYield(property, checkYieldReturnValue);\n      });\n      /* c8 ignore next 2 -- In Babel? */\n      // @ts-expect-error In Babel?\n    case 'ObjectMethod':\n    /* c8 ignore next 6 -- In Babel? */\n    // @ts-expect-error In Babel?\n      return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n      // @ts-expect-error In Babel?\n      node.arguments.some((nde) => {\n        return hasNonFunctionYield(nde, checkYieldReturnValue);\n      });\n    case 'ReturnStatement': {\n      if (node.argument === null) {\n        return false;\n      }\n\n      return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n    }\n\n    // Comma\n    case 'SequenceExpression':\n\n    case 'TemplateLiteral':\n      return node.expressions.some((subExpression) => {\n        return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n      });\n    case 'SpreadElement':\n\n    case 'UnaryExpression':\n      return hasNonFunctionYield(node.argument, checkYieldReturnValue);\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 'TaggedTemplateExpression':\n      return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n    case 'TryStatement': {\n      return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n      hasNonFunctionYield(\n        node.handler && node.handler.body, checkYieldReturnValue,\n      ) ||\n      hasNonFunctionYield(\n        /** @type {import('@typescript-eslint/types').TSESTree.BlockStatement} */\n        (node.finalizer),\n        checkYieldReturnValue,\n      );\n    }\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 'YieldExpression': {\n      if (checkYieldReturnValue) {\n        if (\n        /** @type {import('eslint').Rule.Node} */ (\n            node\n          ).parent?.type === 'VariableDeclarator'\n        ) {\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 * @param {ESTreeOrTypeScriptNode} node\n * @param {boolean} [checkYieldReturnValue]\n * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n  return /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n    node\n  ).generator && (\n    /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (\n      node\n    ).expression || hasNonFunctionYield(\n      /** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */\n      (node).body,\n      checkYieldReturnValue,\n    )\n  );\n};\n\n/**\n * Checks if a node has a throws statement.\n * @param {ESTreeOrTypeScriptNode|null|undefined} node\n * @param {boolean} [innerFunction]\n * @returns {boolean}\n */\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 'ArrowFunctionExpression':\n    case 'FunctionDeclaration':\n    case 'FunctionExpression': {\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 'DoWhileStatement':\n    case 'ForInStatement':\n    case 'ForOfStatement':\n    case 'ForStatement':\n    case 'LabeledStatement':\n    case 'WhileStatement':\n    case 'WithStatement': {\n      return hasThrowValue(node.body);\n    }\n\n    case 'IfStatement': {\n      return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\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    // 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    default: {\n      return false;\n    }\n  }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n  return /^(@link|@linkcode|@linkplain|@tutorial) /v.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n * @see {@link https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {@link https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\nconst parseClosureTemplateTag = (tag) => {\n  return tag.name\n    .split(',')\n    .map((type) => {\n      return type.trim().replace(/^\\[?(?<name>.*?)=.*$/v, '$<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 * @param {import('eslint').Rule.RuleContext} context\n * @param {DefaultContexts|undefined} defaultContexts\n * @param {{\n *   contexts?: import('./iterateJsdoc.js').Context[]\n * }} settings\n * @returns {(string|import('./iterateJsdoc.js').ContextObject)[]}\n */\nconst enforcedContexts = (context, defaultContexts, settings) => {\n  const contexts = context.options[0]?.contexts || settings.contexts || (defaultContexts === true ? [\n    'ArrowFunctionExpression',\n    'FunctionDeclaration',\n    'FunctionExpression',\n    'TSDeclareFunction',\n  ] : defaultContexts);\n\n  return contexts;\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Context[]} contexts\n * @param {import('./iterateJsdoc.js').CheckJsdoc} checkJsdoc\n * @param {import('@es-joy/jsdoccomment').CommentHandler} [handler]\n * @returns {import('eslint').Rule.RuleListener}\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n  /** @type {import('eslint').Rule.RuleListener} */\n  const properties = {};\n\n  for (const [\n    idx,\n    prop,\n  ] of contexts.entries()) {\n    /** @type {string} */\n    let property;\n\n    /** @type {(node: import('eslint').Rule.Node) => void} */\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 = /** @type {string} */ (prop.context);\n        value = checkJsdoc.bind(\n          null,\n          {\n            ...selInfo,\n            comment: prop.comment,\n          },\n          /**\n           * @type {(jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean}\n           */\n          (/** @type {import('@es-joy/jsdoccomment').CommentHandler} */ (\n            handler\n          ).bind(null, prop.comment)),\n        );\n      } else {\n        property = /** @type {string} */ (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 = /**\n                 * @type {((node: import('eslint').Rule.Node) => void)}\n                 */ (properties[property]);\n    properties[property] = old ?\n      /**\n       * @type {((node: import('eslint').Rule.Node) => void)}\n       */\n      function (node) {\n        old(node);\n        value(node);\n      } :\n      value;\n  }\n\n  return properties;\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n  'arg', 'argument', 'param', 'prop', 'property',\n  'return',\n\n  // These two are parsed by our custom parser as though having a `name`\n  'returns', 'template',\n]);\n\n/**\n * @typedef {{\n *   [key: string]: false|string|\n *     {message: string, replacement?: string}\n * }} TagNamePreference\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {ParserMode|undefined} mode\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n *   tagsWithNames: import('comment-parser').Spec[],\n *   tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\nconst getTagsByType = (context, mode, tags) => {\n  /**\n   * @type {import('comment-parser').Spec[]}\n   */\n  const tagsWithoutNames = [];\n  const tagsWithNames = tags.filter((tag) => {\n    const {\n      tag: tagName,\n    } = tag;\n    const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n    if (!tagWithName) {\n      tagsWithoutNames.push(tag);\n    }\n\n    return tagWithName;\n  });\n\n  return {\n    tagsWithNames,\n    tagsWithoutNames,\n  };\n};\n\n/**\n * @param {import('eslint').SourceCode|{\n *   text: string\n * }} sourceCode\n * @returns {string}\n */\nconst getIndent = (sourceCode) => {\n  return (sourceCode.text.match(/^\\n*([ \\t]+)/v)?.[1] ?? '') + ' ';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isConstructor = (node) => {\n  return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n  /** @type {import('@typescript-eslint/types').TSESTree.MethodDefinition} */ (\n    node?.parent\n  )?.kind === 'constructor';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isGetter = (node) => {\n  return node !== null &&\n  /**\n   * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n   *   import('@typescript-eslint/types').TSESTree.Property}\n   */ (\n    node.parent\n  )?.kind === 'get';\n};\n\n/**\n * @param {import('eslint').Rule.Node|null} node\n * @returns {boolean}\n */\nconst isSetter = (node) => {\n  return node !== null &&\n  /**\n   * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n   *   import('@typescript-eslint/types').TSESTree.Property}\n   */(\n    node.parent\n  )?.kind === 'set';\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessorPair = (node) => {\n  const {\n    key,\n    kind: sourceKind,\n    type,\n  } =\n    /**\n     * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n     *   import('@typescript-eslint/types').TSESTree.Property}\n     */ (node);\n\n  const sourceName =\n    /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n      key\n    ).name;\n\n  const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n  const sibling = type === 'MethodDefinition' ?\n    /** @type {import('@typescript-eslint/types').TSESTree.ClassBody} */ (\n      node.parent\n    ).body :\n    /** @type {import('@typescript-eslint/types').TSESTree.ObjectExpression} */ (\n      node.parent\n    ).properties;\n\n  return (\n    sibling.some((child) => {\n      const {\n        key: ky,\n        kind,\n      } = /**\n           * @type {import('@typescript-eslint/types').TSESTree.MethodDefinition|\n           *   import('@typescript-eslint/types').TSESTree.Property}\n           */ (child);\n\n      const name =\n        /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n          ky\n        ).name;\n\n      return kind === oppositeKind && name === sourceName;\n    })\n  );\n};\n\n/**\n * @param {import('./iterateJsdoc.js').JsdocBlockWithInline} jsdoc\n * @param {import('eslint').Rule.Node|null} node\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4} schema\n * @returns {boolean}\n */\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n  /**\n   * @param {\"checkGetters\"|\"checkSetters\"|\"checkConstructors\"} prop\n   * @returns {boolean|\"no-setter\"|\"no-getter\"}\n   */\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(\n      /** @type {import('./iterateJsdoc.js').Node} */\n      (/** @type {import('./iterateJsdoc.js').Node} */ (node).parent),\n    )\n  ) ||\n  isSetter(node) && (\n    !checkSetters ||\n    checkSetters === 'no-getter' && hasAccessorPair(\n      /** @type {import('./iterateJsdoc.js').Node} */\n      (/** @type {import('./iterateJsdoc.js').Node} */ (node).parent),\n    )\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 * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n  return str.replaceAll(/\\.(['\"])(.*)\\1/gv, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\nconst comparePaths = (name) => {\n  return (otherPathName) => {\n    return otherPathName === name ||\n      dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n  };\n};\n\n/**\n * @callback PathDoesNotBeginWith\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\n\n/** @type {PathDoesNotBeginWith} */\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(/^\\/(.*)\\/([gimyvus]*)$/vs);\n  let flags = 'v';\n  let regex = regexString;\n  if (match) {\n    [\n      , regex,\n      flags,\n    ] = match;\n    if (!flags) {\n      flags = 'v';\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\nconst strictNativeTypes = [\n  'undefined',\n  'null',\n  'boolean',\n  'number',\n  'bigint',\n  'string',\n  'symbol',\n  'object',\n  'Array',\n  'Function',\n  'Date',\n  'RegExp',\n];\n\n/**\n * @param {import('@es-joy/jsdoccomment').JsdocBlockWithInline} jsdoc\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n * @param {import('jsdoc-type-pratt-parser').RootResult} parsedType\n * @param {string} indent\n * @param {string} typeBracketSpacing\n */\nconst rewireByParsedType = (jsdoc, tag, parsedType, indent, typeBracketSpacing = '') => {\n  const typeLines = stringify(parsedType).split('\\n');\n  const firstTypeLine = typeLines.shift();\n  const lastTypeLine = typeLines.pop();\n\n  const beginNameOrDescIdx = tag.source.findIndex(({\n    tokens,\n  }) => {\n    return tokens.name || tokens.description;\n  });\n\n  const nameAndDesc = beginNameOrDescIdx === -1 ?\n    null :\n    tag.source.slice(beginNameOrDescIdx);\n\n  const initialNumber = tag.source[0].number;\n\n  const src = [\n    // Get inevitably present tag from first `tag.source`\n    {\n      number: initialNumber,\n      source: '',\n      tokens: {\n        ...tag.source[0].tokens,\n        ...(typeLines.length || lastTypeLine ? {\n          end: '',\n          name: '',\n          postName: '',\n          postType: '',\n        } : (nameAndDesc ? {\n          name: nameAndDesc[0].tokens.name,\n          postType: ' ',\n        } : {})),\n        type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''),\n      },\n    },\n    // Get any intervening type lines\n    ...(typeLines.length ? typeLines.map((typeLine, idx) => {\n      return {\n        number: initialNumber + idx + 1,\n        source: '',\n        tokens: {\n          // Grab any delimiter info from first item\n          ...tag.source[0].tokens,\n          delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter,\n          end: '',\n          name: '',\n          postName: '',\n          postTag: '',\n          postType: '',\n          start: indent + ' ',\n          tag: '',\n          type: typeLine,\n        },\n      };\n    }) : []),\n  ];\n\n  // Merge any final type line and name and description\n  if (\n    // Name and description may be already included if present with the tag\n    nameAndDesc && beginNameOrDescIdx > 0\n  ) {\n    if (typeLines.length || lastTypeLine !== undefined) {\n      src.push({\n        number: src.length + 1,\n        source: '',\n        tokens: {\n          ...nameAndDesc[0].tokens,\n          type: lastTypeLine + typeBracketSpacing + '}',\n        },\n      });\n    }\n\n    if (\n      // Get any remaining description lines\n      nameAndDesc.length > 1\n    ) {\n      src.push(\n        ...nameAndDesc.slice(1).map(({\n          source,\n          tokens,\n        }, idx) => {\n          return {\n            number: src.length + idx + 2,\n            source,\n            tokens,\n          };\n        }),\n      );\n    }\n  } else if (nameAndDesc) {\n    if ((typeLines.length || lastTypeLine !== undefined) && lastTypeLine) {\n      src.push({\n        number: src.length + 1,\n        source: '',\n        tokens: {\n          ...nameAndDesc[0].tokens,\n          delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter,\n          postTag: '',\n          start: indent + ' ',\n          tag: '',\n          type: lastTypeLine + typeBracketSpacing + '}',\n        },\n      });\n    }\n\n    if (\n      // Get any remaining description lines\n      nameAndDesc.length > 1\n    ) {\n      src.push(\n        ...nameAndDesc.slice(1).map(({\n          source,\n          tokens,\n        }, idx) => {\n          return {\n            number: src.length + idx + 2,\n            source,\n            tokens,\n          };\n        }),\n      );\n    }\n  } else if (lastTypeLine) {\n    src.push({\n      number: src.length + 1,\n      source: '',\n      tokens: {\n        ...tag.source[0].tokens,\n        delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter,\n        postTag: '',\n        start: indent + ' ',\n        tag: '',\n        type: lastTypeLine + typeBracketSpacing + '}',\n      },\n    });\n  }\n\n  tag.source = src;\n\n  // Properly rewire `jsdoc.source`\n  const firstTagIdx = jsdoc.source.findIndex(({\n    tokens: {\n      tag: tg,\n    },\n  }) => {\n    return tg;\n  });\n\n  const initialEndSource = jsdoc.source.find(({\n    tokens: {\n      end,\n    },\n  }) => {\n    return end;\n  });\n\n  jsdoc.source = [\n    ...jsdoc.source.slice(0, firstTagIdx),\n    ...jsdoc.tags.flatMap(({\n      source,\n    }) => {\n      return source;\n    }),\n  ];\n\n  if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) {\n    jsdoc.source.push(initialEndSource);\n  }\n};\n\nexport {\n  comparePaths,\n  dropPathSegmentQuotes,\n  enforcedContexts,\n  exemptSpeciaMethods,\n  filterTags,\n  flattenRoots,\n  forEachPreferredTag,\n  getAllTags,\n  getContextObject,\n  getFunctionParameterNames,\n  getIndent,\n  getInlineTags,\n  getJsdocTagsDeep,\n  getPreferredTagName,\n  getPreferredTagNameSimple,\n  getRegexFromString,\n  getTagDescription,\n  getTags,\n  getTagsByType,\n  getTagStructureForMode,\n  hasATag,\n  hasParams,\n\n  hasTag,\n  hasThrowValue,\n\n  hasYieldValue,\n  isConstructor,\n  isGetter,\n  isNameOrNamepathDefiningTag,\n  isNamepathOrUrlReferencingTag,\n  isNamepathReferencingTag,\n  isSetter,\n  isValidTag,\n  mayBeUndefinedTypeTag,\n  overrideTagStructure,\n  parseClosureTemplateTag,\n  pathDoesNotBeginWith,\n  rewireByParsedType,\n  setTagStructure,\n  strictNativeTypes,\n  tagMightHaveEitherTypeOrNamePosition,\n  tagMightHaveName,\n  tagMightHaveNameOrNamepath,\n  tagMightHaveNamepath,\n  tagMightHaveNamePosition,\n  tagMightHaveTypePosition,\n  tagMissingRequiredTypeOrNamepath,\n  tagMustHaveNamePosition,\n  tagMustHaveTypePosition,\n};\nexport {\n  hasReturnValue,\n  hasValueOrExecutorHasNonEmptyResolveValue,\n} from './utils/hasReturnValue.js';\n"],"mappings":"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","ignoreList":[]}