eslint-plugin-jsdoc 39.2.0 → 39.2.3

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
@@ -588,14 +588,11 @@ properties:
588
588
  within a normal AST selector but this should only be considered
589
589
  experimental. When using such a parser, you need not use `comment` and
590
590
  can just use a plain string context. The determination of the node on
591
- which the comment is attached is also subject to change. It may be
592
- currently possible for different structures to map to the same comment
593
- block. This is because normally when querying to find either the
594
- declaration of the function expression for
595
- `const quux = function () {}`, the associated comment would,
596
- in both cases, generally be expected to be on the line above both, rather
597
- than to be immediately preceding the function (in the case of the
598
- function). See [@es-joy/jsdoccomment](https://github.com/es-joy/jsdoccomment)
591
+ which the comment is attached is based more on actual location than
592
+ semantics (e.g., it will be attached to a `VariableDeclaration` if above
593
+ that rather than to the `FunctionExpression` it is fundamentally
594
+ describing). See
595
+ [@es-joy/jsdoccomment](https://github.com/es-joy/jsdoccomment)
599
596
  for the precise structure of the comment (and comment type) nodes.
600
597
 
601
598
  <a name="user-content-eslint-plugin-jsdoc-advanced-ast-and-selectors-discovering-available-ast-definitions"></a>
@@ -14870,6 +14867,13 @@ function quux (foo) {
14870
14867
  }
14871
14868
  // Message: Missing JSDoc @param "foo" type.
14872
14869
 
14870
+ /**
14871
+ * @param {a xxx
14872
+ */
14873
+ function quux () {
14874
+ }
14875
+ // Message: Missing JSDoc @param "" type.
14876
+
14873
14877
  /**
14874
14878
  * @param foo
14875
14879
  */
@@ -652,8 +652,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
652
652
  });
653
653
 
654
654
  if (classJsdocNode) {
655
- const indnt = ' '.repeat(classJsdocNode.loc.start.column);
656
- return (0, _jsdoccomment.parseComment)(classJsdocNode, indnt);
655
+ return (0, _jsdoccomment.parseComment)(classJsdocNode, '');
657
656
  }
658
657
 
659
658
  return null;
@@ -756,9 +755,11 @@ const makeReport = (context, commentNode) => {
756
755
  const lineNumber = commentNode.loc.start.line + jsdocLoc.line;
757
756
  loc = {
758
757
  end: {
758
+ column: 0,
759
759
  line: lineNumber
760
760
  },
761
761
  start: {
762
+ column: 0,
762
763
  line: lineNumber
763
764
  }
764
765
  }; // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+
@@ -845,7 +846,7 @@ const iterate = (info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, nod
845
846
  const getIndentAndJSDoc = function (lines, jsdocNode) {
846
847
  const sourceLine = lines[jsdocNode.loc.start.line - 1];
847
848
  const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);
848
- const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, indnt);
849
+ const jsdc = (0, _jsdoccomment.parseComment)(jsdocNode, '');
849
850
  return [indnt, jsdc];
850
851
  };
851
852
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/iterateJsdoc.js"],"names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","indnt","repeat","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","charAt","jsdc","iterateAllJsdocs","contexts","additiveContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":"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","sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\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 descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(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, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n const indnt = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indnt);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\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(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n line: lineNumber,\n },\n start: {\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, indnt);\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
1
+ {"version":3,"sources":["../src/iterateJsdoc.js"],"names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","contexts","additiveContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":";;;;;;;;;;;;;;AAAA;;AAMA;;AAIA;;;;AAEA,MAAM;AACJA,EAAAA,WADI;AAEJC,EAAAA;AAFI,IAGFC,mBAHJ;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAJ,EAApB;;AAEA,MAAMC,aAAa,GAAG,CAACC,OAAD,EAAU;AAC9BC,EAAAA,iBAD8B;AAE9BC,EAAAA;AAF8B,CAAV,KAGhB;AACJ,QAAMC,KAAK,GAAG,EAAd;;AACAA,EAAAA,KAAK,CAACC,cAAN,GAAwBC,OAAD,IAAa;AAClCL,IAAAA,OAAO,CAACM,MAAR,CAAe;AACbC,MAAAA,GAAG,EAAE;AACHC,QAAAA,KAAK,EAAE;AACLC,UAAAA,MAAM,EAAE,CADH;AAELC,UAAAA,IAAI,EAAE;AAFD;AADJ,OADQ;AAObL,MAAAA;AAPa,KAAf;AASD,GAVD;;AAYAF,EAAAA,KAAK,CAACQ,uBAAN,GAAiCC,GAAD,IAAS;AACvC,WAAOC,oBAAWF,uBAAX,CAAmCC,GAAnC,CAAP;AACD,GAFD;;AAIAT,EAAAA,KAAK,CAACW,oBAAN,GAA6BD,oBAAWC,oBAAxC;;AAEAX,EAAAA,KAAK,CAACY,yBAAN,GAAkC,CAAC;AACjCC,IAAAA;AADiC,GAAD,KAE5B;AACJ,UAAMC,GAAG,GAAGJ,oBAAWK,mBAAX,CAA+BlB,OAA/B,EAAwCE,IAAxC,EAA8Cc,OAA9C,EAAuDf,iBAAvD,CAAZ;;AACA,UAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,QAAvC;;AACA,QAAIA,GAAG,KAAK,KAAR,IAAiBE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAtC,EAAmD;AACjD,aAAO;AACLC,QAAAA,OAAO,EAAE,IADJ;AAELL,QAAAA;AAFK,OAAP;AAID;;AAED,WAAOC,GAAP;AACD,GAbD;;AAeA,SAAOd,KAAP;AACD,CAvCD;;AAyCA,MAAMmB,QAAQ,GAAG,CACfC,IADe,EAEfC,KAFe,EAGfC,SAHe,EAIfC,QAJe,EAKfpB,MALe,EAMfN,OANe,EAOf2B,YAPe,EAQfC,UARe,EASfC,MATe,KAUZ;AACH,QAAMC,SAAS,GAAG9B,OAAO,CAAC+B,YAAR,EAAlB;AACA,QAAMC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AAEA,QAAM9B,KAAK,GAAGJ,aAAa,CAACC,OAAD,EAAU0B,QAAV,CAA3B;AAEA,QAAM;AACJzB,IAAAA,iBADI;AAEJiC,IAAAA,oBAFI;AAGJC,IAAAA,kBAHI;AAIJC,IAAAA,sBAJI;AAKJC,IAAAA,2BALI;AAMJC,IAAAA,QANI;AAOJC,IAAAA,QAPI;AAQJrC,IAAAA;AARI,MASFwB,QATJ;;AAWAvB,EAAAA,KAAK,CAACqC,mBAAN,GAA4B,MAAM;AAChC,WAAO,CAACb,YAAD,IAAiB,CACtB,kBADsB,EAEtB,yBAFsB,EAGtB,qBAHsB,EAItB,oBAJsB,EAKtBc,QALsB,CAKblB,IAAI,IAAIA,IAAI,CAACmB,IALA,CAAxB;AAMD,GAPD;;AASAvC,EAAAA,KAAK,CAACwC,iBAAN,GAA0B,MAAM;AAC9B,WAAOhB,YAAY,IAAIxB,KAAK,CAACyC,OAAN,CAAc,CACnC,UADmC,EACvB,UADuB,EACX,MADW,EACH,QADG,CAAd,CAAvB;AAGD,GAJD;;AAMAzC,EAAAA,KAAK,CAAC0C,SAAN,GAAkB,CAACC,QAAD,EAAWC,UAAX,KAA0B;AAC1C,WAAO,8BAAiBA,UAAU,GAAGrD,WAAW,CAACoD,QAAD,CAAd,GAA2BA,QAAtD,CAAP;AACD,GAFD;;AAIA3C,EAAAA,KAAK,CAAC6C,WAAN,GAAoB,CAACC,GAAD,EAAMrC,GAAN,EAAWsC,OAAX,EAAoBH,UAApB,EAAgCI,IAAhC,KAAyC;AAC3D7C,IAAAA,MAAM,CAAC2C,GAAD,EAAMC,OAAO,GAAIE,KAAD,IAAW;AAC/BF,MAAAA,OAAO;AACP,YAAM9B,WAAW,GAAGjB,KAAK,CAAC0C,SAAN,CAAgBrB,KAAhB,EAAuBuB,UAAvB,CAApB;AAEA,aAAOK,KAAK,CAACC,WAAN,CAAkB5B,SAAlB,EAA6BL,WAA7B,CAAP;AACD,KALkB,GAKf,IALE,EAKIR,GALJ,EAKSuC,IALT,CAAN;AAMD,GAPD;;AASAhD,EAAAA,KAAK,CAACmD,kBAAN,GAA2B,CAACC,GAAD,EAAMC,aAAN,KAAwB;AACjD,WAAO3C,oBAAWyC,kBAAX,CAA8BC,GAA9B,EAAmCC,aAAnC,CAAP;AACD,GAFD;;AAIArD,EAAAA,KAAK,CAACsD,iBAAN,GAA2BC,EAAD,IAAQ;AAChC,UAAMC,YAAY,GAAG,EAArB;AACAD,IAAAA,EAAE,CAACE,MAAH,CAAUC,IAAV,CAAe,CAAC;AACdC,MAAAA,MAAM,EAAE;AACNC,QAAAA,GADM;AAENC,QAAAA,OAFM;AAGNC,QAAAA,aAHM;AAINrD,QAAAA,GAJM;AAKNsD,QAAAA,OALM;AAMNC,QAAAA,IANM;AAONzB,QAAAA,IAPM;AAQN0B,QAAAA;AARM;AADM,KAAD,KAWT;AACJ,YAAMC,IAAI,GAAG,CACXzD,GAAG,IAAIsD,OAAP,IACA,CAACtD,GAAD,IAAQ,CAACuD,IAAT,IAAiB,CAACzB,IAAlB,IAA0BuB,aAD1B,IAC2C,EAFhC,CAIb;AAJa,QAKXK,KALW,CAKL,CALK,KAMVF,WAAW,IAAI,EANL,KAMYJ,OAAO,IAAI,EANvB,CAAb;;AAQA,UAAID,GAAJ,EAAS;AACP,YAAIM,IAAJ,EAAU;AACRV,UAAAA,YAAY,CAACY,IAAb,CAAkBF,IAAlB;AACD;;AAED,eAAO,IAAP;AACD;;AAEDV,MAAAA,YAAY,CAACY,IAAb,CAAkBF,IAAlB;AAEA,aAAO,KAAP;AACD,KA/BD;AAiCA,WAAOV,YAAY,CAACa,IAAb,CAAkB,IAAlB,CAAP;AACD,GApCD;;AAsCArE,EAAAA,KAAK,CAACsE,cAAN,GAAuB,MAAM;AAC3B,UAAMd,YAAY,GAAG,EAArB;AACA,QAAIe,mBAAmB,GAAG,CAA1B;AACAlD,IAAAA,KAAK,CAACoC,MAAN,CAAaC,IAAb,CAAkB,CAAC;AACjBC,MAAAA,MAAM,EAAE;AACNM,QAAAA,WADM;AAENxD,QAAAA,GAFM;AAGNmD,QAAAA;AAHM;AADS,KAAD,EAMfY,GANe,KAMP;AACT,UAAIA,GAAG,KAAK/D,GAAG,IAAImD,GAAZ,CAAP,EAAyB;AACvBW,QAAAA,mBAAmB,GAAGC,GAAG,GAAG,CAA5B;AAEA,eAAO,IAAP;AACD;;AAED,UAAIA,GAAG,IAAIP,WAAX,EAAwB;AACtBT,QAAAA,YAAY,CAACY,IAAb,CAAkBH,WAAW,KAAKT,YAAY,CAACiB,MAAb,GAAsB,EAAtB,GAA2B,IAAhC,CAA7B;AACD;;AAED,aAAO,KAAP;AACD,KAlBD;AAoBA,WAAO;AACLR,MAAAA,WAAW,EAAET,YAAY,CAACa,IAAb,CAAkB,IAAlB,CADR;AAELE,MAAAA;AAFK,KAAP;AAID,GA3BD;;AA6BAvE,EAAAA,KAAK,CAAC0E,SAAN,GAAkB,CAACjE,GAAD,EAAM,GAAGkD,MAAT,KAAoB;AACpC,SAAK,MAAM,CACTa,GADS,EAETG,GAFS,CAAX,IAGKlE,GAAG,CAACgD,MAAJ,CAAWmB,OAAX,EAHL,EAG2B;AACzBD,MAAAA,GAAG,CAAChB,MAAJ,GAAa,EACX,GAAGgB,GAAG,CAAChB,MADI;AAEX,WAAGA,MAAM,CAACa,GAAD;AAFE,OAAb;AAID;AACF,GAVD;;AAYAxE,EAAAA,KAAK,CAAC6E,MAAN,GAAe,CAACpE,GAAD,EAAMkD,MAAN,KAAiB;AAC9BlD,IAAAA,GAAG,CAACgD,MAAJ,GAAa,CACX;AACA;AACEqB,MAAAA,MAAM,EAAErE,GAAG,CAACF,IAFd;AAGEoD,MAAAA,MAAM,EAAEnE,UAAU,CAAC;AACjBuF,QAAAA,SAAS,EAAE,GADM;AAEjBjB,QAAAA,aAAa,EAAE,GAFE;AAGjBzD,QAAAA,KAAK,EAAEqB,MAAM,GAAG,GAHC;AAIjBjB,QAAAA,GAAG,EAAE,MAAMA,GAAG,CAACA,GAJE;AAKjB,WAAGkD;AALc,OAAD;AAHpB,KADW,CAAb;AAaD,GAdD;;AAgBA3D,EAAAA,KAAK,CAACgF,SAAN,GAAmBR,GAAD,IAAS;AACzB,WAAOxE,KAAK,CAACiF,aAAN,CAAoBT,GAApB,CAAP;AACD,GAFD;;AAIAxE,EAAAA,KAAK,CAACiF,aAAN,GAAsB,CAACC,QAAD,EAAWC,eAAe,GAAG,CAA7B,KAAmC;AACvD,UAAM;AACJ1B,MAAAA,MAAM,EAAE2B;AADJ,QAEF/D,KAAK,CAACgE,IAAN,CAAWH,QAAX,CAFJ;AAGA,QAAII,SAAJ;AACA,UAAMC,WAAW,GAAGlE,KAAK,CAACoC,MAAN,CAAa,CAAb,EAAgBqB,MAApC;AACAM,IAAAA,SAAS,CAAC1B,IAAV,CAAe,CAAC;AACdoB,MAAAA;AADc,KAAD,EAEZU,MAFY,KAED;AACZ,YAAMC,WAAW,GAAGpE,KAAK,CAACoC,MAAN,CAAaiC,SAAb,CAAuB,CAAC;AAC1CZ,QAAAA,MAAM,EAAEa,SADkC;AAE1ChC,QAAAA,MAAM,EAAE;AACNC,UAAAA;AADM;AAFkC,OAAD,KAKrC;AACJ,eAAOkB,MAAM,KAAKa,SAAX,IAAwB,CAAC/B,GAAhC;AACD,OAPmB,CAApB,CADY,CASZ;;AACA,UAAI6B,WAAW,GAAG,CAAC,CAAnB,EAAsB;AACpB,YAAIG,WAAW,GAAG,CAAlB;AACAR,QAAAA,SAAS,CAACjB,KAAV,CAAgBqB,MAAM,GAAG,CAAzB,EAA4B9B,IAA5B,CAAiC,CAAC;AAChCC,UAAAA,MAAM,EAAE;AACNlD,YAAAA,GADM;AAENmD,YAAAA;AAFM;AADwB,SAAD,KAK3B;AACJ,cAAI,CAACnD,GAAD,IAAQ,CAACmD,GAAb,EAAkB;AAChBgC,YAAAA,WAAW;AAEX,mBAAO,KAAP;AACD;;AAED,iBAAO,IAAP;AACD,SAbD;AAcAvE,QAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBJ,WAAW,GAAGN,eAAlC,EAAmDS,WAAW,GAAGT,eAAjE;AACAC,QAAAA,SAAS,CAACS,MAAV,CAAiBL,MAAM,GAAGL,eAA1B,EAA2CS,WAAW,GAAGT,eAAzD;AACAG,QAAAA,SAAS,GAAGG,WAAZ;AAEA,eAAO,IAAP;AACD,OA/BW,CAiCZ;;;AACA,aAAO,KAAP;AACD,KArCD;;AAsCA,SAAK,MAAM,CACTjB,GADS,EAETG,GAFS,CAAX,IAGKtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBmB,SAAnB,EAA8BV,OAA9B,EAHL,EAG8C;AAC5CD,MAAAA,GAAG,CAACG,MAAJ,GAAaS,WAAW,GAAGD,SAAd,GAA0Bd,GAAvC;AACD,KAjDsD,CAmDvD;AACA;AACA;;AACD,GAtDD;;AAwDAxE,EAAAA,KAAK,CAAC8F,MAAN,GAAe,CACbC,aADa,EAEbjB,MAAM,GAAG,CAAC;AAAA;;AAAA,0BAAAzD,KAAK,CAACgE,IAAN,CAAWhE,KAAK,CAACgE,IAAN,CAAWZ,MAAX,GAAoB,CAA/B,oFAAmChB,MAAnC,CAA0C,CAA1C,6EAA8CqB,MAA9C;AAAA,UAAwDzD,KAAK,CAACoC,MAAN,CAAaiC,SAAb,CAAuB,CAAC;AACxF/B,IAAAA,MAAM,EAAE;AACNlD,MAAAA;AADM;AADgF,GAAD,KAInF;AACJ,WAAOA,GAAP;AACD,GANiE,IAM7D,CANI,IAMC,CARG,EASbkD,MAAM,GAAG,EATI,KAUV;AACHtC,IAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBf,MAApB,EAA4B,CAA5B,EAA+B;AAC7BA,MAAAA,MAD6B;AAE7BrB,MAAAA,MAAM,EAAE,EAFqB;AAG7BE,MAAAA,MAAM,EAAEnE,UAAU,CAAC;AACjBuF,QAAAA,SAAS,EAAE,GADM;AAEjBjB,QAAAA,aAAa,EAAE,GAFE;AAGjBzD,QAAAA,KAAK,EAAEqB,MAAM,GAAG,GAHC;AAIjBjB,QAAAA,GAAG,EAAG,IAAGsF,aAAc,EAJN;AAKjB,WAAGpC;AALc,OAAD;AAHW,KAA/B;;AAWA,SAAK,MAAMgB,GAAX,IAAkBtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBW,MAAM,GAAG,CAA5B,CAAlB,EAAkD;AAChDH,MAAAA,GAAG,CAACG,MAAJ;AACD;AACF,GAzBD;;AA2BA9E,EAAAA,KAAK,CAACgG,YAAN,GAAqB,MAAM;AACzB,QAAIC,SAAJ;;AACA,SAAK,MAAM;AACTnB,MAAAA,MADS;AAETnB,MAAAA,MAAM,EAAE;AACNlD,QAAAA;AADM;AAFC,KAAX,IAKKY,KAAK,CAACoC,MALX,EAKmB;AACjB,UAAIhD,GAAJ,EAAS;AACPwF,QAAAA,SAAS,GAAGnB,MAAZ;AACA;AACD;AACF;;AAED,WAAOmB,SAAP;AACD,GAfD;;AAiBAjG,EAAAA,KAAK,CAACR,UAAN,GAAmBA,UAAnB;;AAEAQ,EAAAA,KAAK,CAACkG,WAAN,GAAqBvC,MAAD,IAAY;AAC9B,SAAK,MAAMwC,IAAX,IAAmB,CACjB,OADiB,EAEjB,eAFiB,EAGjB,KAHiB,EAIjB,MAJiB,EAKjB,UALiB,EAMjB,SANiB,EAOjB,MAPiB,EAQjB,UARiB,EASjB,aATiB,EAUjB,KAViB,EAWjB,SAXiB,CAAnB,EAYG;AACDxC,MAAAA,MAAM,CAACwC,IAAD,CAAN,GAAe,EAAf;AACD;AACF,GAhBD;;AAkBAnG,EAAAA,KAAK,CAACoG,OAAN,GAAgB,CAACX,WAAD,EAAc9B,MAAd,KAAyB;AAAA;;AACvC,UAAMmB,MAAM,GAAG,CAAC,kBAAAzD,KAAK,CAACoC,MAAN,CAAagC,WAAW,GAAG,CAA3B,iEAA+BX,MAA/B,KAAyC,CAA1C,IAA+C,CAA9D;AACAzD,IAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBJ,WAApB,EAAiC,CAAjC,EAAoC;AAClCX,MAAAA,MADkC;AAElCrB,MAAAA,MAAM,EAAE,EAF0B;AAGlCE,MAAAA,MAAM,EAAEnE,UAAU,CAACmE,MAAD;AAHgB,KAApC;;AAMA,SAAK,MAAMgB,GAAX,IAAkBtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBW,MAAM,GAAG,CAA5B,CAAlB,EAAkD;AAChDH,MAAAA,GAAG,CAACG,MAAJ;AACD,KAVsC,CAWvC;AACA;;AACD,GAbD;;AAeA9E,EAAAA,KAAK,CAACqG,QAAN,GAAiB,CAACnB,QAAD,EAAWC,eAAX,EAA4BmB,QAA5B,KAAyC;AACxD,UAAM;AACJ7C,MAAAA,MAAM,EAAE2B;AADJ,QAEF/D,KAAK,CAACgE,IAAN,CAAWH,QAAX,CAFJ;AAGA,QAAII,SAAJ;AACA,UAAMC,WAAW,GAAGlE,KAAK,CAACoC,MAAN,CAAa,CAAb,EAAgBqB,MAApC;AACAM,IAAAA,SAAS,CAAC1B,IAAV,CAAe,CAAC;AACdoB,MAAAA;AADc,KAAD,KAET;AACJ,YAAMyB,QAAQ,GAAG,MAAM;AACrB,eAAO;AACLzB,UAAAA,MADK;AAELrB,UAAAA,MAAM,EAAE,EAFH;AAGLE,UAAAA,MAAM,EAAEnE,UAAU,CAAC;AACjBuF,YAAAA,SAAS,EAAE,GADM;AAEjB1E,YAAAA,KAAK,EAAEqB,MAAM,GAAG;AAFC,WAAD;AAHb,SAAP;AAQD,OATD;;AAWA,YAAM8E,SAAS,GAAG,MAAM;AACtB,eAAOC,KAAK,CAACC,IAAN,CAAW;AAChBjC,UAAAA,MAAM,EAAE6B;AADQ,SAAX,EAEJC,QAFI,CAAP;AAGD,OAJD;;AAMA,YAAMd,WAAW,GAAGpE,KAAK,CAACoC,MAAN,CAAaiC,SAAb,CAAuB,CAAC;AAC1CZ,QAAAA,MAAM,EAAEa,SADkC;AAE1ChC,QAAAA,MAAM,EAAE;AACNC,UAAAA;AADM;AAFkC,OAAD,KAKrC;AACJ,eAAOkB,MAAM,KAAKa,SAAX,IAAwB,CAAC/B,GAAhC;AACD,OAPmB,CAApB,CAlBI,CA0BJ;;AACA,UAAI6B,WAAW,GAAG,CAAC,CAAnB,EAAsB;AACpB,cAAMkB,KAAK,GAAGH,SAAS,EAAvB;AACAnF,QAAAA,KAAK,CAACoC,MAAN,CAAaoC,MAAb,CAAoBJ,WAAW,GAAGN,eAAlC,EAAmD,CAAnD,EAAsD,GAAGwB,KAAzD,EAFoB,CAIpB;;AACArB,QAAAA,SAAS,GAAGG,WAAZ;AAEA,eAAO,IAAP;AACD,OAnCG,CAqCJ;;;AACA,aAAO,KAAP;AACD,KAzCD;;AA0CA,SAAK,MAAM,CACTjB,GADS,EAETG,GAFS,CAAX,IAGKtD,KAAK,CAACoC,MAAN,CAAaU,KAAb,CAAmBmB,SAAnB,EAA8BV,OAA9B,EAHL,EAG8C;AAC5CD,MAAAA,GAAG,CAACG,MAAJ,GAAaS,WAAW,GAAGD,SAAd,GAA0Bd,GAAvC;AACD;AACF,GAtDD;;AAwDAxE,EAAAA,KAAK,CAAC4G,aAAN,GAAsB,MAAM;AAC1B,UAAM;AACJnD,MAAAA,MAAM,EAAE,CACN;AACEE,QAAAA;AADF,OADM;AADJ,QAMFtC,KANJ;AAOA,UAAM;AACJyC,MAAAA,aADI;AAEJG,MAAAA,WAFI;AAGJJ,MAAAA,OAHI;AAIJpD,MAAAA,GAJI;AAKJuD,MAAAA,IALI;AAMJzB,MAAAA;AANI,QAOFoB,MAPJ;AASA,QAAI;AACFA,MAAAA,MAAM,EAAE;AACNkD,QAAAA,QADM;AAEN9C,QAAAA,OAFM;AAGN+C,QAAAA;AAHM;AADN,QAMAzF,KAAK,CAACoC,MAAN,CAAa,CAAb,CANJ,CAjB0B,CAyB1B;;AACA,QAAI,CAACQ,WAAL,EAAkB;AAChB,UAAI4C,QAAJ,EAAc;AACZA,QAAAA,QAAQ,GAAG,EAAX;AACD,OAFD,MAEO,IAAIC,QAAJ,EAAc;AACnBA,QAAAA,QAAQ,GAAG,EAAX,CADmB,CAErB;AACC,OAHM;AAGA;AAA0I,YAAI/C,OAAJ,EAAa;AAC5JA,UAAAA,OAAO,GAAG,EAAV;AACD;AACF;;AAED/D,IAAAA,KAAK,CAACkG,WAAN,CAAkBvC,MAAlB;AAEA3D,IAAAA,KAAK,CAACoG,OAAN,CAAc,CAAd,EAAiB;AACfrB,MAAAA,SAAS,EAAE,GADI;AAGf;AACA;AACAd,MAAAA,WAAW,EAAEA,WAAW,CAAC8C,OAAZ,EALE;AAMf/C,MAAAA,IANe;AAOfF,MAAAA,aAPe;AAQf+C,MAAAA,QARe;AASf9C,MAAAA,OATe;AAUf+C,MAAAA,QAVe;AAWfzG,MAAAA,KAAK,EAAEqB,MAAM,GAAG,GAXD;AAYfjB,MAAAA,GAZe;AAaf8B,MAAAA;AAbe,KAAjB;AAeAvC,IAAAA,KAAK,CAACoG,OAAN,CAAc,CAAd,EAAiB;AACfxC,MAAAA,GAAG,EAAE,IADU;AAEfC,MAAAA,OAFe;AAGfxD,MAAAA,KAAK,EAAEqB,MAAM,GAAG;AAHD,KAAjB;AAKD,GA3DD;;AA6DA1B,EAAAA,KAAK,CAACgH,YAAN,GAAsBC,MAAD,IAAY;AAC/B,WAAOvG,oBAAWsG,YAAX,CAAwBC,MAAxB,CAAP;AACD,GAFD;;AAIAjH,EAAAA,KAAK,CAACkH,yBAAN,GAAmCC,0BAAD,IAAgC;AAChE,WAAOzG,oBAAWwG,yBAAX,CAAqC9F,IAArC,EAA2C+F,0BAA3C,CAAP;AACD,GAFD;;AAIAnH,EAAAA,KAAK,CAACoH,SAAN,GAAkB,MAAM;AACtB,WAAO1G,oBAAW0G,SAAX,CAAqBhG,IAArB,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAACqH,WAAN,GAAoB,MAAM;AACxB,WAAOjG,IAAI,KACTA,IAAI,CAACkG,SAAL,IACAlG,IAAI,CAACmB,IAAL,KAAc,kBAAd,IAAoCnB,IAAI,CAACmG,KAAL,CAAWD,SAD/C,IAEA,CACE,wBADF,EAC4B,0BAD5B,EAEEhF,QAFF,CAEWlB,IAAI,CAACmB,IAFhB,KAGEnB,IAAI,CAACoG,WAAL,CAAiBF,SANV,CAAX;AAQD,GATD;;AAWAtH,EAAAA,KAAK,CAACyH,aAAN,GAAsB,MAAM;AAC1B,WAAO/G,oBAAW+G,aAAX,CAAyBrG,IAAzB,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAAC0H,gBAAN,GAA0B7G,OAAD,IAAa;AACpC,UAAMmD,IAAI,GAAGhE,KAAK,CAACe,mBAAN,CAA0B;AACrCF,MAAAA;AADqC,KAA1B,CAAb;;AAGA,QAAI,CAACmD,IAAL,EAAW;AACT,aAAO,KAAP;AACD;;AAED,WAAOtD,oBAAWgH,gBAAX,CAA4BrG,KAA5B,EAAmC2C,IAAnC,CAAP;AACD,GATD;;AAWAhE,EAAAA,KAAK,CAACe,mBAAN,GAA4B,CAAC;AAC3BF,IAAAA,OAD2B;AAE3B8G,IAAAA,uBAAuB,GAAG,KAFC;AAG3BC,IAAAA,iBAAiB,GAAG,KAHO;AAI3BC,IAAAA,cAAc,GAAI,qBAAoBhH,OAAQ;AAJnB,GAAD,KAKtB;AACJ,UAAMC,GAAG,GAAGJ,oBAAWK,mBAAX,CAA+BlB,OAA/B,EAAwCE,IAAxC,EAA8Cc,OAA9C,EAAuDf,iBAAvD,CAAZ;;AACA,UAAMkB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAP,KAAe,QAAvC;;AACA,QAAId,KAAK,CAAC8H,MAAN,CAAajH,OAAb,MAA0BC,GAAG,KAAK,KAAR,IAAiBE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAA5D,CAAJ,EAA8E;AAC5E,UAAI0G,uBAAJ,EAA6B;AAC3B,eAAO;AACLzG,UAAAA,OAAO,EAAE,IADJ;AAELL,UAAAA;AAFK,SAAP;AAID;;AAED,YAAMX,OAAO,GAAGc,QAAQ,IAAIF,GAAG,CAACZ,OAAhB,IAA2B2H,cAA3C;AACA1H,MAAAA,MAAM,CAACD,OAAD,EAAU,IAAV,EAAgBF,KAAK,CAAC+H,OAAN,CAAclH,OAAd,EAAuB,CAAvB,CAAhB,CAAN;AAEA,aAAO,KAAP;AACD;;AAED,WAAOG,QAAQ,IAAI,CAAC4G,iBAAb,GAAiC9G,GAAG,CAACG,WAArC,GAAmDH,GAA1D;AACD,GAvBD;;AAyBAd,EAAAA,KAAK,CAACgI,UAAN,GAAmB,CAAChE,IAAD,EAAOiE,WAAP,KAAuB;AACxC,WAAOvH,oBAAWsH,UAAX,CAAsBnI,OAAtB,EAA+BE,IAA/B,EAAqCiE,IAArC,EAA2CiE,WAA3C,CAAP;AACD,GAFD;;AAIAjI,EAAAA,KAAK,CAACyC,OAAN,GAAiByF,KAAD,IAAW;AACzB,WAAOxH,oBAAW+B,OAAX,CAAmBpB,KAAnB,EAA0B6G,KAA1B,CAAP;AACD,GAFD;;AAIAlI,EAAAA,KAAK,CAAC8H,MAAN,GAAgB9D,IAAD,IAAU;AACvB,WAAOtD,oBAAWoH,MAAX,CAAkBzG,KAAlB,EAAyB2C,IAAzB,CAAP;AACD,GAFD;;AAIAhE,EAAAA,KAAK,CAACmI,YAAN,GAAsBnE,IAAD,IAAU;AAC7B,WAAOtD,oBAAWyH,YAAX,CAAwBnE,IAAxB,CAAP;AACD,GAFD;;AAIAhE,EAAAA,KAAK,CAACoI,qBAAN,GAA+BpE,IAAD,IAAU;AACtC,WAAOtD,oBAAW0H,qBAAX,CAAiCpE,IAAjC,CAAP;AACD,GAFD;;AAIAhE,EAAAA,KAAK,CAACqI,SAAN,GAAkB,MAAM;AAAA;;AACtB,QACErG,kBAAkB,KAAK,KAAvB,KACGhC,KAAK,CAAC8H,MAAN,CAAa,QAAb,KAA0B9H,KAAK,CAACsI,WAAN,CAAkB,QAAlB,CAD7B,KAEAvG,oBAAoB,KAAK,KAAzB,KACG/B,KAAK,CAAC8H,MAAN,CAAa,UAAb,KAA4B9H,KAAK,CAACsI,WAAN,CAAkB,UAAlB,CAD/B,CAFA,IAIArG,sBAAsB,KAAK,KAA3B,KACGjC,KAAK,CAAC8H,MAAN,CAAa,YAAb,KAA8B9H,KAAK,CAACsI,WAAN,CAAkB,YAAlB,CADjC,CAJA,IAOApG,2BAA2B,KACxBlC,KAAK,CAACyC,OAAN,CAAc,CACb,UADa,EACD,SADC,CAAd,KAGCzC,KAAK,CAACsI,WAAN,CAAkB,UAAlB,CAHD,IAIGtI,KAAK,CAACsI,WAAN,CAAkB,SAAlB,CALqB,CAR7B,EAauC;AACrC,aAAO,IAAP;AACD;;AAED,QAAI5H,oBAAW6H,mBAAX,CACFlH,KADE,EACKD,IADL,EACWvB,OADX,EACoB4B,UAAU,CAAC+G,IAAX,CAAgBC,MADpC,CAAJ,EAEG;AACD,aAAO,IAAP;AACD;;AAED,UAAMC,UAAU,GAAG,sBAAA7I,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,yEAAoBD,UAApB,KAAkC,CACnD,YADmD,EAEnD,IAAG3I,IAAI,KAAK,SAAT,GAAqB,EAArB,GAA0B,CAC3B,YAD2B,CAA7B,CAFmD,CAArD;;AAMA,QAAI2I,UAAU,CAACjE,MAAX,IAAqBzE,KAAK,CAAC4I,cAAN,CAAqBF,UAArB,EAAiCjE,MAA1D,EAAkE;AAChE,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAnCD;;AAqCA,OAAK,MAAMoE,MAAX,IAAqB,CACnB,0BADmB,EAEnB,0BAFmB,CAArB,EAGG;AACD7I,IAAAA,KAAK,CAAC6I,MAAD,CAAL,GAAgB,CAAChI,OAAD,EAAUiI,aAAV,KAA4B;AAC1C,YAAMC,MAAM,GAAGrI,oBAAWmI,MAAX,EAAmBhI,OAAnB,CAAf;;AACA,UAAIkI,MAAJ,EAAY;AACV,eAAO,IAAP;AACD;;AAED,UAAI,CAACD,aAAL,EAAoB;AAClB,eAAO,KAAP;AACD;;AAED,YAAME,WAAW,GAAGF,aAAa,CAACpF,IAAd,CAAoBuF,YAAD,IAAkB;AACvD,eAAOvI,oBAAWmI,MAAX,EAAmBhI,OAAnB,EAA4BoI,YAA5B,CAAP;AACD,OAFmB,CAApB;AAIA,aAAOD,WAAW,GAAG;AACnBE,QAAAA,SAAS,EAAE;AADQ,OAAH,GAEd,KAFJ;AAGD,KAjBD;AAkBD;;AAED,OAAK,MAAML,MAAX,IAAqB,CACnB,yBADmB,EAEnB,yBAFmB,EAGnB,kCAHmB,CAArB,EAIG;AACD7I,IAAAA,KAAK,CAAC6I,MAAD,CAAL,GAAgB,CAAChI,OAAD,EAAUiI,aAAV,KAA4B;AAC1C,YAAMC,MAAM,GAAGrI,oBAAWmI,MAAX,EAAmBhI,OAAnB,CAAf;;AACA,UAAI,CAACkI,MAAL,EAAa;AACX,eAAO,KAAP;AACD,OAJyC,CAM1C;;;AAEA,YAAMC,WAAW,GAAGF,aAAa,CAACK,KAAd,CAAqBF,YAAD,IAAkB;AACxD,eAAOvI,oBAAWmI,MAAX,EAAmBhI,OAAnB,EAA4BoI,YAA5B,CAAP;AACD,OAFmB,CAApB;AAIA,aAAOD,WAAW,GAAG,IAAH,GAAU;AAC1BE,QAAAA,SAAS,EAAE;AADe,OAA5B;AAGD,KAfD;AAgBD;;AAED,OAAK,MAAML,MAAX,IAAqB,CACnB,uBADmB,EAEnB,sBAFmB,CAArB,EAGG;AACD7I,IAAAA,KAAK,CAAC6I,MAAD,CAAL,GAAiBhI,OAAD,IAAa;AAC3B,aAAOH,oBAAWmI,MAAX,EAAmBhI,OAAnB,CAAP;AACD,KAFD;AAGD;;AAEDb,EAAAA,KAAK,CAACoJ,sBAAN,GAAgCC,GAAD,IAAS;AACtC,WAAO3I,oBAAW0I,sBAAX,CAAkCC,GAAlC,EAAuC9H,QAAQ,CAAC+H,cAAhD,CAAP;AACD,GAFD;;AAIAtJ,EAAAA,KAAK,CAACuJ,iBAAN,GAA2B9I,GAAD,IAAS;AACjC,WAAOC,oBAAW6I,iBAAX,CAA6B9I,GAA7B,CAAP;AACD,GAFD;;AAIAT,EAAAA,KAAK,CAACwJ,yCAAN,GAAmDC,kBAAD,IAAwB;AACxE,WAAO/I,oBAAW8I,yCAAX,CAAqDpI,IAArD,EAA2DqI,kBAA3D,CAAP;AACD,GAFD;;AAIAzJ,EAAAA,KAAK,CAAC0J,aAAN,GAAsB,MAAM;AAC1B,QAAI,CACF,wBADE,EACwB,0BADxB,EAEFpH,QAFE,CAEOlB,IAAI,CAACmB,IAFZ,CAAJ,EAEuB;AACrB,aAAO7B,oBAAWgJ,aAAX,CAAyBtI,IAAI,CAACoG,WAA9B,CAAP;AACD;;AAED,WAAO9G,oBAAWgJ,aAAX,CAAyBtI,IAAzB,CAAP;AACD,GARD;;AAUApB,EAAAA,KAAK,CAAC2J,mBAAN,GAA4B,MAAM;AAChC,WAAOjJ,oBAAWgJ,aAAX,CAAyBtI,IAAzB,EAA+B,IAA/B,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAAC4J,aAAN,GAAsB,MAAM;AAC1B,WAAOlJ,oBAAWkJ,aAAX,CAAyBxI,IAAzB,CAAP;AACD,GAFD;;AAIApB,EAAAA,KAAK,CAAC6J,OAAN,GAAgB,MAAM;AACpB,WAAOzI,IAAI,CAAC0I,KAAZ;AACD,GAFD;;AAIA9J,EAAAA,KAAK,CAAC+H,OAAN,GAAiBlH,OAAD,IAAa;AAC3B,WAAOb,KAAK,CAAC+J,UAAN,CAAkBC,IAAD,IAAU;AAChC,aAAOA,IAAI,CAACvJ,GAAL,KAAaI,OAApB;AACD,KAFM,CAAP;AAGD,GAJD;;AAMAb,EAAAA,KAAK,CAAC4I,cAAN,GAAwBqB,OAAD,IAAa;AAClC,WAAOjK,KAAK,CAAC+J,UAAN,CAAkBtJ,GAAD,IAAS;AAC/B,aAAOwJ,OAAO,CAAC3H,QAAR,CAAiB7B,GAAG,CAACA,GAArB,CAAP;AACD,KAFM,CAAP;AAGD,GAJD;;AAMAT,EAAAA,KAAK,CAAC+J,UAAN,GAAoBG,MAAD,IAAY;AAC7B,WAAOxJ,oBAAWqJ,UAAX,CAAsB1I,KAAK,CAACgE,IAA5B,EAAkC6E,MAAlC,CAAP;AACD,GAFD;;AAIAlK,EAAAA,KAAK,CAACmK,aAAN,GAAuB9E,IAAD,IAAU;AAC9B,WAAO3E,oBAAWyJ,aAAX,CAAyBtK,OAAzB,EAAkCE,IAAlC,EAAwCsF,IAAxC,EAA8CvF,iBAA9C,CAAP;AACD,GAFD;;AAIAE,EAAAA,KAAK,CAACoK,YAAN,GAAsBvJ,OAAD,IAAa;AAChC,UAAM;AACJwE,MAAAA;AADI,QAEFxF,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,KAAsB,EAF1B;AAIA,WAAO0B,OAAO,CAAChF,IAAI,IAAIA,IAAI,CAAC/C,QAAL,CAAczB,OAAd,CAAT,CAAd;AACD,GAND;;AAQAb,EAAAA,KAAK,CAACsK,YAAN,GAAqB,MAAM;AACzB,WAAO,CACL,GAAG3I,SADE,EACSP,IADT,EAELmJ,OAFK,GAEKC,IAFL,CAEWC,MAAD,IAAY;AAC3B,aAAOA,MAAM,IAAI,CACf,kBADe,EACK,iBADL,EAEfnI,QAFe,CAENmI,MAAM,CAAClI,IAFD,CAAjB;AAGD,KANM,KAMD,IANN;AAOD,GARD;;AAUAvC,EAAAA,KAAK,CAAC0K,aAAN,GAAsB,MAAM;AAC1B,UAAMC,SAAS,GAAG3K,KAAK,CAACsK,YAAN,EAAlB;;AAEA,QAAI,CAACK,SAAL,EAAgB;AACd,aAAO,IAAP;AACD;;AAED,UAAMC,cAAc,GAAG,mCAAgB/I,UAAhB,EAA4B8I,SAA5B,EAAuC;AAC5DxI,MAAAA,QAD4D;AAE5DC,MAAAA;AAF4D,KAAvC,CAAvB;;AAKA,QAAIwI,cAAJ,EAAoB;AAClB,aAAO,gCAAaA,cAAb,EAA6B,EAA7B,CAAP;AACD;;AAED,WAAO,IAAP;AACD,GAjBD;;AAmBA5K,EAAAA,KAAK,CAACsI,WAAN,GAAqBzH,OAAD,IAAa;AAC/B,UAAMgK,UAAU,GAAG7K,KAAK,CAAC0K,aAAN,EAAnB;AAEA,WAAOL,OAAO,CAACQ,UAAD,CAAP,IAAuBnK,oBAAWoH,MAAX,CAAkB+C,UAAlB,EAA8BhK,OAA9B,CAA9B;AACD,GAJD;;AAMAb,EAAAA,KAAK,CAAC8K,mBAAN,GAA4B,CAACjK,OAAD,EAAUkK,YAAV,EAAwBpD,uBAAuB,GAAG,KAAlD,KAA4D;AACtF,UAAM5B,aAAa,GAAG/F,KAAK,CAACe,mBAAN,CAA0B;AAC9C4G,MAAAA,uBAD8C;AAE9C9G,MAAAA;AAF8C,KAA1B,CAAtB;;AAIA,QAAI,CAACkF,aAAD,IACF4B,uBAAuB,IAAI5B,aAA3B,IAA4C,OAAOA,aAAP,KAAyB,QADvE,EAEE;AACA;AACD;;AAED,UAAMiF,iBAAiB,GAAG3J,KAAK,CAACgE,IAAN,CAAW6E,MAAX,CAAkB,CAAC;AAC3CzJ,MAAAA;AAD2C,KAAD,KAEtC;AACJ,aAAOA,GAAG,KAAKsF,aAAf;AACD,KAJyB,CAA1B;;AAMA,SAAK,MAAMkF,gBAAX,IAA+BD,iBAA/B,EAAkD;AAChDD,MAAAA,YAAY,CAACE,gBAAD,EAAmBlF,aAAnB,CAAZ;AACD;AACF,GApBD;;AAsBA,SAAO/F,KAAP;AACD,CAlsBD;;AAosBA,MAAMkL,WAAW,GAAIrL,OAAD,IAAa;AAAA;;AAC/B;AACA,QAAM0B,QAAQ,GAAG;AACf;AACA4J,IAAAA,aAAa,EAAEd,OAAO,0BAACxK,OAAO,CAAC0B,QAAR,CAAiBF,KAAlB,0DAAC,sBAAwB8J,aAAzB,CAFP;AAGfC,IAAAA,cAAc,EAAEf,OAAO,2BAACxK,OAAO,CAAC0B,QAAR,CAAiBF,KAAlB,2DAAC,uBAAwB+J,cAAzB,CAHR;AAIfjJ,IAAAA,QAAQ,EAAEkJ,MAAM,CAAC,2BAAAxL,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBc,QAAxB,KAAoC,CAArC,CAJD;AAKfC,IAAAA,QAAQ,EAAEiJ,MAAM,CAAC,2BAAAxL,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBe,QAAxB,KAAoC,CAArC,CALD;AAOf;AACAtC,IAAAA,iBAAiB,EAAE,2BAAAD,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBvB,iBAAxB,KAA6C,EARjD;AAUf;AACAwL,IAAAA,cAAc,EAAE,2BAAAzL,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBiK,cAAxB,KAA0C,EAX3C;AAaf;AACAhC,IAAAA,cAAc,EAAE,2BAAAzJ,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,kFAAwBiI,cAAxB,KAA0C,EAd3C;AAgBf;AACA;AACAvH,IAAAA,oBAAoB,4BAAElC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,2DAAE,uBAAwBU,oBAlB/B;AAmBfC,IAAAA,kBAAkB,4BAAEnC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,2DAAE,uBAAwBW,kBAnB7B;AAoBfC,IAAAA,sBAAsB,6BAAEpC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,4DAAE,wBAAwBY,sBApBjC;AAqBfC,IAAAA,2BAA2B,6BAAErC,OAAO,CAAC0B,QAAR,CAAiBF,KAAnB,4DAAE,wBAAwBa,2BArBtC;AAuBf;AACAnC,IAAAA,IAAI,EAAE,4BAAAF,OAAO,CAAC0B,QAAR,CAAiBF,KAAjB,oFAAwBtB,IAAxB,MACHF,OAAO,CAAC0L,UAAR,CAAmBjJ,QAAnB,CAA4B,oBAA5B,IAAoD,YAApD,GAAmE,OADhE;AAxBS,GAAjB;AA2BA;;AAEA5B,sBAAW8K,eAAX,CAA2BjK,QAAQ,CAACxB,IAApC;;AACA,MAAI;AACFW,wBAAW+K,oBAAX,CAAgClK,QAAQ,CAAC+H,cAAzC;AACD,GAFD,CAEE,OAAOoC,KAAP,EAAc;AACd7L,IAAAA,OAAO,CAACM,MAAR,CAAe;AACbC,MAAAA,GAAG,EAAE;AACHC,QAAAA,KAAK,EAAE;AACLC,UAAAA,MAAM,EAAE,CADH;AAELC,UAAAA,IAAI,EAAE;AAFD;AADJ,OADQ;AAObL,MAAAA,OAAO,EAAEwL,KAAK,CAACxL;AAPF,KAAf;AAUA,WAAO,KAAP;AACD;;AAED,SAAOqB,QAAP;AACD,CAjDD;AAmDA;AACA;AACA;AACA;AACA;AACA;;;;;AACA,MAAMoK,UAAU,GAAG,CAAC9L,OAAD,EAAU+L,WAAV,KAA0B;AAC3C,QAAMzL,MAAM,GAAG,CAACD,OAAD,EAAU2L,GAAG,GAAG,IAAhB,EAAsBC,QAAQ,GAAG,IAAjC,EAAuC9I,IAAI,GAAG,IAA9C,KAAuD;AACpE,QAAI5C,GAAJ;;AAEA,QAAI0L,QAAJ,EAAc;AACZ,UAAI,EAAE,UAAUA,QAAZ,CAAJ,EAA2B;AACzBA,QAAAA,QAAQ,CAACvL,IAAT,GAAgBuL,QAAQ,CAACrI,MAAT,CAAgB,CAAhB,EAAmBqB,MAAnC;AACD;;AAED,YAAMiH,UAAU,GAAGH,WAAW,CAACxL,GAAZ,CAAgBC,KAAhB,CAAsBE,IAAtB,GAA6BuL,QAAQ,CAACvL,IAAzD;AAEAH,MAAAA,GAAG,GAAG;AACJwD,QAAAA,GAAG,EAAE;AACHtD,UAAAA,MAAM,EAAE,CADL;AAEHC,UAAAA,IAAI,EAAEwL;AAFH,SADD;AAKJ1L,QAAAA,KAAK,EAAE;AACLC,UAAAA,MAAM,EAAE,CADH;AAELC,UAAAA,IAAI,EAAEwL;AAFD;AALH,OAAN,CAPY,CAkBZ;AACA;;AACA,UAAID,QAAQ,CAACxL,MAAb,EAAqB;AACnB,cAAM0L,SAAS,GAAGJ,WAAW,CAACxL,GAAZ,CAAgBC,KAAhB,CAAsBC,MAAtB,GAA+BwL,QAAQ,CAACxL,MAA1D;AAEAF,QAAAA,GAAG,CAACwD,GAAJ,CAAQtD,MAAR,GAAiB0L,SAAjB;AACA5L,QAAAA,GAAG,CAACC,KAAJ,CAAUC,MAAV,GAAmB0L,SAAnB;AACD;AACF;;AAEDnM,IAAAA,OAAO,CAACM,MAAR,CAAe;AACb6C,MAAAA,IADa;AAEb6I,MAAAA,GAFa;AAGbzL,MAAAA,GAHa;AAIbF,MAAAA,OAJa;AAKbkB,MAAAA,IAAI,EAAEwK;AALO,KAAf;AAOD,GAtCD;;AAwCA,SAAOzL,MAAP;AACD,CA1CD;AA4CA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;;AAEA,MAAM8L,OAAO,GAAG,CACdC,IADc,EAEdxK,MAFc,EAENL,KAFM,EAGdI,UAHc,EAGF5B,OAHE,EAGO8G,KAHP,EAGcrF,SAHd,EAGyBF,IAHzB,EAG+BG,QAH/B,EAIdM,UAJc,EAIFsK,QAJE,EAIQC,KAJR,EAIe5K,YAJf,KAKX;AACH,QAAMrB,MAAM,GAAGwL,UAAU,CAAC9L,OAAD,EAAUyB,SAAV,CAAzB;AAEA,QAAMtB,KAAK,GAAGmB,QAAQ,CACpBC,IADoB,EAEpBC,KAFoB,EAGpBC,SAHoB,EAIpBC,QAJoB,EAKpBpB,MALoB,EAMpBN,OANoB,EAOpB2B,YAPoB,EAQpBC,UARoB,EASpBC,MAToB,CAAtB;;AAYA,MACE,CAACD,UAAU,CAAC4K,aAAZ,IAA6B9K,QAAQ,CAAC6J,cAAtC,IACApL,KAAK,CAAC8H,MAAN,CAAa,UAAb,CAFF,EAGE;AACA;AACD;;AAED,MACE,CAACrG,UAAU,CAAC6K,YAAZ,IAA4B/K,QAAQ,CAAC4J,aAArC,KAEEnL,KAAK,CAAC8H,MAAN,CAAa,SAAb,KACAzG,KAAK,CAACgE,IAAN,CACG6E,MADH,CACU,CAAC;AACPzJ,IAAAA;AADO,GAAD,KAEF;AACJ,WAAOA,GAAG,KAAK,QAAf;AACD,GALH,EAMGiD,IANH,CAMQ,CAAC;AACLO,IAAAA;AADK,GAAD,KAEA;AACJ,WAAOA,WAAW,KAAK,SAAvB;AACD,GAVH,CAHF,CADF,EAgBE;AACA;AACD;;AAEDkI,EAAAA,QAAQ,CAAC;AACPtM,IAAAA,OADO;AAEPH,IAAAA,WAFO;AAGPgC,IAAAA,MAHO;AAIPwK,IAAAA,IAJO;AAKP1K,IAAAA,YALO;AAMPH,IAAAA,KANO;AAOPC,IAAAA,SAPO;AAQPF,IAAAA,IARO;AASPjB,IAAAA,MATO;AAUPoB,IAAAA,QAVO;AAWPM,IAAAA,UAXO;AAYPuK,IAAAA,KAZO;AAaPpM,IAAAA;AAbO,GAAD,CAAR;AAeD,CA9DD;;AAgEA,MAAMuM,iBAAiB,GAAG,UAAU5F,KAAV,EAAiBrF,SAAjB,EAA4B;AACpD,QAAMkL,UAAU,GAAG7F,KAAK,CAACrF,SAAS,CAAClB,GAAV,CAAcC,KAAd,CAAoBE,IAApB,GAA2B,CAA5B,CAAxB;AACA,QAAMkM,KAAK,GAAGD,UAAU,CAACE,MAAX,CAAkB,CAAlB,EAAqBC,MAArB,CAA4BrL,SAAS,CAAClB,GAAV,CAAcC,KAAd,CAAoBC,MAAhD,CAAd;AACA,QAAMsM,IAAI,GAAG,gCAAatL,SAAb,EAAwB,EAAxB,CAAb;AAEA,SAAO,CACLmL,KADK,EACEG,IADF,CAAP;AAGD,CARD;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMC,gBAAgB,GAAG,CAACV,QAAD,EAAW1K,UAAX,EAAuBqL,QAAvB,EAAiCC,gBAAjC,KAAsD;AAC7E,QAAMC,aAAa,GAAG,IAAIC,GAAJ,EAAtB;AAEA,MAAIlK,OAAJ;AACA,MAAIxB,QAAJ;;AACA,QAAM2L,YAAY,GAAG,CAACrN,OAAD,EAAUuB,IAAV,EAAgB+L,UAAhB,EAA4Bf,KAA5B,EAAmCgB,QAAnC,KAAgD;AACnE,UAAMvL,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACA,UAAM;AACJ6E,MAAAA;AADI,QAEF9E,UAFJ;AAIA,UAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAD,EAAU0B,QAAV,CAA3B;;AACA,SAAK,MAAMD,SAAX,IAAwB6L,UAAxB,EAAoC;AAClC,UAAI,CAAE,YAAD,CAAeE,IAAf,CAAoBxL,UAAU,CAACyL,OAAX,CAAmBhM,SAAnB,CAApB,CAAL,EAAyD;AACvD;AACD;;AAED,YAAM,CACJI,MADI,EAEJL,KAFI,IAGFkL,iBAAiB,CACnB5F,KADmB,EACZrF,SADY,CAHrB;;AAOA,UAAIyL,gBAAJ,EAAsB;AACpB,aAAK,MAAM,CACTvI,GADS,EAET;AACE+I,UAAAA;AADF,SAFS,CAAX,IAKKT,QAAQ,CAAClI,OAAT,EALL,EAKyB;AACvB,cAAI2I,OAAO,IAAIxK,OAAO,CAACwK,OAAD,EAAUlM,KAAV,CAAP,KAA4B,KAA3C,EAAkD;AAChD;AACD;;AAED4K,UAAAA,OAAO,CACL;AACEsB,YAAAA,OADF;AAEEjI,YAAAA,SAAS,EAAEd,GAFb;AAGEgJ,YAAAA,QAAQ,EAAEpM,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEmB;AAHlB,WADK,EAMLb,MANK,EAOLL,KAPK,EAQLI,UARK,EASL5B,OATK,EAUL8G,KAVK,EAWLrF,SAXK,EAYLF,IAZK,EAaLG,QAbK,EAcLM,UAdK,EAeLsK,QAfK,EAgBLC,KAhBK,EAiBL,IAjBK,CAAP;AAmBD;;AAED;AACD;;AAED,UAAIqB,WAAJ;AACA,UAAInI,SAAJ,CAhDkC,CAiDlC;;AACA,UAAIwH,QAAQ,IAAIA,QAAQ,CAAC3D,KAAT,CAAe,CAAC;AAC9BoE,QAAAA;AAD8B,OAAD,EAE5B/I,GAF4B,KAEpB;AACTiJ,QAAAA,WAAW,GAAGF,OAAd;AACAjI,QAAAA,SAAS,GAAGd,GAAZ;AAEA,eAAO+I,OAAO,IAAIxK,OAAO,CAACwK,OAAD,EAAUlM,KAAV,CAAP,KAA4B,KAA9C;AACD,OAPe,CAAhB,EAOI;AACF;AACD;;AAED4K,MAAAA,OAAO,CACLwB,WAAW,GAAG;AACZF,QAAAA,OAAO,EAAEE,WADG;AAEZnI,QAAAA,SAFY;AAGZkI,QAAAA,QAAQ,EAAEpM,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEmB;AAHJ,OAAH,GAIP;AACF+C,QAAAA,SADE;AAEFkI,QAAAA,QAAQ,EAAEpM,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEmB;AAFd,OALC,EASLb,MATK,EAULL,KAVK,EAWLI,UAXK,EAYL5B,OAZK,EAaL8G,KAbK,EAcLrF,SAdK,EAeLF,IAfK,EAgBLG,QAhBK,EAiBLM,UAjBK,EAkBLsK,QAlBK,EAmBLC,KAnBK,EAoBL,IApBK,CAAP;AAsBD;;AAED,QAAIgB,QAAQ,IAAI3L,UAAU,CAACiM,IAA3B,EAAiC;AAC/BjM,MAAAA,UAAU,CAACiM,IAAX,CAAgB;AACd7N,QAAAA,OADc;AAEduM,QAAAA,KAFc;AAGdpM,QAAAA;AAHc,OAAhB;AAKD;AACF,GAnGD;;AAqGA,SAAO;AACL2N,IAAAA,MAAM,CAAE9N,OAAF,EAAW;AACf,YAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACAP,MAAAA,QAAQ,GAAG2J,WAAW,CAACrL,OAAD,CAAtB;;AACA,UAAI,CAAC0B,QAAL,EAAe;AACb,eAAO,EAAP;AACD;;AAED,UAAIuL,QAAJ,EAAc;AACZ/J,QAAAA,OAAO,GAAG,kCAAexB,QAAf,CAAV;AACD;;AAED,YAAM6K,KAAK,GAAG,EAAd;AAEA,aAAO;AACL,yBAAkBhL,IAAlB,EAAwB;AACtB,gBAAMwM,WAAW,GAAG,qCAAkBxM,IAAlB,EAAwBS,UAAxB,CAApB;;AAEA,cAAIT,IAAI,KAAKwM,WAAb,EAA0B;AACxB;AACD;;AAED,gBAAMhC,WAAW,GAAG,mCAAgB/J,UAAhB,EAA4BT,IAA5B,EAAkCG,QAAlC,CAApB;;AACA,cAAIyL,aAAa,CAACa,GAAd,CAAkBjC,WAAlB,CAAJ,EAAoC;AAClC;AACD;;AAED,cAAI,CAACA,WAAL,EAAkB;AAChB,gBAAInK,UAAU,CAACqM,UAAf,EAA2B;AACzBrM,cAAAA,UAAU,CAACqM,UAAX,CAAsB;AACpB1M,gBAAAA,IADoB;AAEpBgL,gBAAAA;AAFoB,eAAtB;AAID;;AAED;AACD;;AAEDY,UAAAA,aAAa,CAACe,GAAd,CAAkBnC,WAAlB;AACAsB,UAAAA,YAAY,CAACrN,OAAD,EAAUuB,IAAV,EAAgB,CAC1BwK,WAD0B,CAAhB,EAETQ,KAFS,CAAZ;AAGD,SA5BI;;AA6BL,yBAAkB;AAChB,gBAAM4B,WAAW,GAAGnM,UAAU,CAACoM,cAAX,EAApB;AACA,gBAAMC,cAAc,GAAGF,WAAW,CAAC9D,MAAZ,CAAoB9I,IAAD,IAAU;AAClD,mBAAO,CAAC4L,aAAa,CAACa,GAAd,CAAkBzM,IAAlB,CAAR;AACD,WAFsB,CAAvB;AAIA8L,UAAAA,YAAY,CAACrN,OAAD,EAAU,IAAV,EAAgBqO,cAAhB,EAAgC9B,KAAhC,EAAuC,IAAvC,CAAZ;AACD;;AApCI,OAAP;AAsCD,KApDI;;AAqDL5D,IAAAA,IAAI,EAAE/G,UAAU,CAAC+G;AArDZ,GAAP;AAuDD,CAjKD;AAmKA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAM2F,SAAS,GAAG,CAAChC,QAAD,EAAW1K,UAAX,KAA0B;AAC1C,SAAO;AACLkM,IAAAA,MAAM,CAAE9N,OAAF,EAAW;AACf,YAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACA,YAAMP,QAAQ,GAAG2J,WAAW,CAACrL,OAAD,CAA5B;;AACA,UAAI,CAAC0B,QAAL,EAAe;AACb,eAAO,EAAP;AACD;;AAED,aAAO;AACL,yBAAkB;AAChB,gBAAMyM,WAAW,GAAGnM,UAAU,CAACoM,cAAX,EAApB;AACA,gBAAM;AACJtH,YAAAA;AADI,cAEF9E,UAFJ;AAGA,gBAAM7B,KAAK,GAAGJ,aAAa,CAACC,OAAD,EAAU0B,QAAV,CAA3B;AAEA4K,UAAAA,QAAQ,CAAC;AACP6B,YAAAA,WADO;AAEPnO,YAAAA,OAFO;AAGP8G,YAAAA,KAHO;AAIPgF,YAAAA,UAJO;AAKPpK,YAAAA,QALO;AAMPM,YAAAA,UANO;AAOP7B,YAAAA;AAPO,WAAD,CAAR;AASD;;AAjBI,OAAP;AAmBD,KA3BI;;AA4BLwI,IAAAA,IAAI,EAAE/G,UAAU,CAAC+G;AA5BZ,GAAP;AA8BD,CA/BD;;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS4F,YAAT,CAAuBjC,QAAvB,EAAiC1K,UAAjC,EAA6C;AAAA;;AAC1D,QAAM4M,QAAQ,GAAG5M,UAAH,aAAGA,UAAH,2CAAGA,UAAU,CAAE+G,IAAf,qDAAG,iBAAkBjG,IAAnC;;AACA,MAAI,CAAC8L,QAAD,IAAa,CAAC,CAChB,SADgB,EACL,YADK,EACS,QADT,EAEhB/L,QAFgB,CAEP+L,QAFO,CAAlB,EAEsB;AACpB,UAAM,IAAIC,SAAJ,CAAc,wFAAd,CAAN;AACD;;AAED,MAAI,OAAOnC,QAAP,KAAoB,UAAxB,EAAoC;AAClC,UAAM,IAAImC,SAAJ,CAAc,2CAAd,CAAN;AACD;;AAED,MAAI7M,UAAU,CAAC0M,SAAf,EAA0B;AACxB,WAAOA,SAAS,CAAChC,QAAD,EAAW1K,UAAX,CAAhB;AACD;;AAED,MAAIA,UAAU,CAACoL,gBAAf,EAAiC;AAC/B,WAAOA,gBAAgB,CAACV,QAAD,EAAW1K,UAAX,CAAvB;AACD;;AAED,SAAO;AACL;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACIkM,IAAAA,MAAM,CAAE9N,OAAF,EAAW;AACf,YAAM0B,QAAQ,GAAG2J,WAAW,CAACrL,OAAD,CAA5B;;AACA,UAAI,CAAC0B,QAAL,EAAe;AACb,eAAO,EAAP;AACD;;AAED,UAAIuL,QAAJ;;AACA,UAAIrL,UAAU,CAAC8M,eAAX,IAA8B9M,UAAU,CAAC+M,eAAzC,IAA4D/M,UAAU,CAACgN,YAA3E,EAAyF;AAAA;;AACvF3B,QAAAA,QAAQ,GAAGrL,UAAU,CAACgN,YAAX,0BAA2B5O,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,CAA3B,+CAA2B,mBAAoB+F,KAA/C,GACT7O,OAAO,CAAC8I,OAAR,CAAgB,CAAhB,EAAmB+F,KADV,GAEThO,oBAAWiO,gBAAX,CAA4B9O,OAA5B,EAAqC4B,UAAU,CAAC8M,eAAhD,CAFF;;AAIA,YAAIzB,QAAJ,EAAc;AACZA,UAAAA,QAAQ,GAAGA,QAAQ,CAAC8B,GAAT,CAAcC,GAAD,IAAS;AAC/B,gBAAI,OAAOA,GAAP,KAAe,QAAf,IAA2B,CAACA,GAAG,CAAChP,OAApC,EAA6C;AAC3C,qBAAO,EACL,GAAGgP,GADE;AAELhP,gBAAAA,OAAO,EAAE;AAFJ,eAAP;AAID;;AAED,mBAAOgP,GAAP;AACD,WATU,CAAX;AAUD;;AAED,cAAMC,WAAW,gBAAGhC,QAAH,8CAAG,UAAUxK,QAAV,CAAmB,KAAnB,CAApB;AACA,cAAMyM,YAAY,GAAG,CAACD,WAAD,mBAAgBhC,QAAhB,+CAAgB,WAAUtC,IAAV,CAAgBwE,IAAD,IAAU;AAC5D,iBAAO,CAAAA,IAAI,SAAJ,IAAAA,IAAI,WAAJ,YAAAA,IAAI,CAAEnP,OAAN,MAAkB,KAAzB;AACD,SAFoC,CAAhB,CAArB;;AAGA,YAAIiP,WAAW,IAAIC,YAAnB,EAAiC;AAC/B,iBAAOlC,gBAAgB,CACrBV,QADqB,EACX1K,UADW,EACCsN,YAAY,GAAGjC,QAAH,GAAc,IAD3B,EACiCrL,UAAU,CAACgN,YAD5C,CAAhB,CAELd,MAFK,CAEE9N,OAFF,CAAP;AAGD;AACF;;AAED,YAAMgC,UAAU,GAAGhC,OAAO,CAACiC,aAAR,EAAnB;AACA,YAAM;AACJ6E,QAAAA;AADI,UAEF9E,UAFJ;AAIA,YAAMuK,KAAK,GAAG,EAAd;;AAEA,YAAM6C,UAAU,GAAG,CAAC/C,IAAD,EAAOnJ,OAAP,EAAgB3B,IAAhB,KAAyB;AAC1C,cAAME,SAAS,GAAG,mCAAgBO,UAAhB,EAA4BT,IAA5B,EAAkCG,QAAlC,CAAlB;;AACA,YAAI,CAACD,SAAL,EAAgB;AACd;AACD;;AAED,cAAM,CACJI,MADI,EAEJL,KAFI,IAGFkL,iBAAiB,CACnB5F,KADmB,EACZrF,SADY,CAHrB;;AAOA,aACE;AACA;AACA;AACAyB,QAAAA,OAAO,IAAIA,OAAO,CAAC1B,KAAD,CAAP,KAAmB,KAJhC,EAKE;AACA;AACD;;AAED4K,QAAAA,OAAO,CACLC,IADK,EACCxK,MADD,EACSL,KADT,EACgBI,UADhB,EAC4B5B,OAD5B,EACqC8G,KADrC,EAC4CrF,SAD5C,EACuDF,IADvD,EAC6DG,QAD7D,EACuEM,UADvE,EACmFsK,QADnF,EAC6FC,KAD7F,CAAP;AAGD,OAzBD;;AA2BA,UAAI8C,aAAa,GAAG,EAApB;;AAEA,UAAIpC,QAAQ,KACVrL,UAAU,CAAC8M,eAAX,IAA8B9M,UAAU,CAAC+M,eAAzC,IAA4D/M,UAAU,CAACgN,YAD7D,CAAZ,EAEG;AACDS,QAAAA,aAAa,GAAGxO,oBAAWyO,gBAAX,CACdrC,QADc,EAEdmC,UAFc,EAGd,kCAAe1N,QAAf,CAHc,CAAhB;AAKD,OARD,MAQO;AACL,aAAK,MAAM4E,IAAX,IAAmB,CACjB,yBADiB,EAEjB,qBAFiB,EAGjB,oBAHiB,CAAnB,EAIG;AACD+I,UAAAA,aAAa,CAAC/I,IAAD,CAAb,GAAsB8I,UAAU,CAACG,IAAX,CAAgB,IAAhB,EAAsB;AAC1C5B,YAAAA,QAAQ,EAAErH;AADgC,WAAtB,EAEnB,IAFmB,CAAtB;AAGD;AACF;;AAED,UAAI1E,UAAU,CAACiM,IAAf,EAAqB;AACnBwB,QAAAA,aAAa,CAAC,cAAD,CAAb,GAAgC,MAAM;AACpCzN,UAAAA,UAAU,CAACiM,IAAX,CAAgB;AACd7N,YAAAA,OADc;AAEduM,YAAAA;AAFc,WAAhB;AAID,SALD;AAMD;;AAED,aAAO8C,aAAP;AACD,KAhHI;;AAiHL1G,IAAAA,IAAI,EAAE/G,UAAU,CAAC+G;AAjHZ,GAAP;AAmHD","sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\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 descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(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, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\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(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
@@ -254,7 +254,7 @@ const getFunctionParameterNames = (functionNode, checkDefaultObjects) => {
254
254
  throw new Error(`Unsupported function signature format: \`${param.type}\`.`);
255
255
  };
256
256
 
257
- return functionNode.params.map(param => {
257
+ return (functionNode.params || functionNode.value.params).map(param => {
258
258
  return getParamName(param);
259
259
  });
260
260
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagStructure","setTagStructure","mode","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","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"],"mappings":"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","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.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();\n });\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 {true|string[]} 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"],"file":"jsdocUtils.js"}
1
+ {"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagStructure","setTagStructure","mode","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","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"],"mappings":"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","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();\n });\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 {true|string[]} 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"],"file":"jsdocUtils.js"}
package/package.json CHANGED
@@ -5,12 +5,12 @@
5
5
  "url": "http://gajus.com"
6
6
  },
7
7
  "dependencies": {
8
- "@es-joy/jsdoccomment": "~0.22.1",
8
+ "@es-joy/jsdoccomment": "~0.25.0",
9
9
  "comment-parser": "1.3.1",
10
10
  "debug": "^4.3.4",
11
11
  "escape-string-regexp": "^4.0.0",
12
12
  "esquery": "^1.4.0",
13
- "semver": "^7.3.6",
13
+ "semver": "^7.3.7",
14
14
  "spdx-expression-parse": "^3.0.1"
15
15
  },
16
16
  "description": "JSDoc linting rules for ESLint.",
@@ -23,21 +23,22 @@
23
23
  "@babel/plugin-transform-flow-strip-types": "^7.16.7",
24
24
  "@babel/preset-env": "^7.16.11",
25
25
  "@babel/register": "^7.17.7",
26
- "@es-joy/jsdoc-eslint-parser": "^0.8.2",
26
+ "@es-joy/jsdoc-eslint-parser": "^0.13.0",
27
27
  "@hkdobrev/run-if-changed": "^0.3.1",
28
- "@typescript-eslint/parser": "^5.18.0",
28
+ "@typescript-eslint/parser": "^5.19.0",
29
29
  "babel-plugin-add-module-exports": "^1.0.4",
30
30
  "babel-plugin-istanbul": "^6.1.1",
31
31
  "camelcase": "^6.3.0",
32
32
  "chai": "^4.3.6",
33
33
  "cross-env": "^7.0.3",
34
34
  "decamelize": "^5.0.1",
35
- "eslint": "^8.12.0",
35
+ "eslint": "^8.13.0",
36
36
  "eslint-config-canonical": "~33.0.1",
37
37
  "gitdown": "^3.1.5",
38
- "glob": "^7.2.0",
38
+ "glob": "^8.0.1",
39
39
  "husky": "^7.0.4",
40
- "lint-staged": "^12.3.7",
40
+ "jsdoc-type-pratt-parser": "^2.2.5",
41
+ "lint-staged": "^12.3.8",
41
42
  "lodash.defaultsdeep": "^4.6.1",
42
43
  "mocha": "^9.2.2",
43
44
  "nyc": "^15.1.0",
@@ -116,5 +117,5 @@
116
117
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
117
118
  "test-index": "npm run test-no-cov -- test/rules/index.js"
118
119
  },
119
- "version": "39.2.0"
120
+ "version": "39.2.3"
120
121
  }