eslint-plugin-jsdoc 54.0.0 → 54.1.0
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/dist/iterateJsdoc.cjs +3 -1
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/iterateJsdoc.d.ts.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +6 -3
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +4 -2
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/package.json +21 -21
- package/src/iterateJsdoc.js +2 -1
- package/src/rules/noUndefinedTypes.js +4 -2
- package/src/rules/requireJsdoc.js +2 -1
package/dist/iterateJsdoc.cjs
CHANGED
|
@@ -677,7 +677,9 @@ const getBasicUtils = (context, {
|
|
|
677
677
|
*/
|
|
678
678
|
const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iteratingAll, ruleConfig, indent) => {
|
|
679
679
|
const ancestors = /** @type {import('eslint').Rule.Node[]} */node ? sc.getAncestors ? sc.getAncestors(node)
|
|
680
|
-
/* c8 ignore next
|
|
680
|
+
/* c8 ignore next 5 */ :
|
|
681
|
+
// @ts-expect-error ESLint 8
|
|
682
|
+
context.getAncestors() : [];
|
|
681
683
|
|
|
682
684
|
/* c8 ignore next -- Fallback to deprecated method */
|
|
683
685
|
const {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.cjs","names":["jsdocUtils","_interopRequireWildcard","require","_jsdoccomment","_commentParser","_esquery","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","mode","tagNamePreference","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagNameSimple","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","augmentsExtendsReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","maxLines","minLines","overrideReplacesDocs","functionTypes","isIteratingFunction","includes","String","type","isIteratingFunctionOrVariable","declarations","declaration","some","init","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","setTagDescription","matcher","setter","finalIdx","source","tokens","description","idx","getDescription","descriptions","lastDescriptionLine","tagsBegun","push","length","join","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","postDelimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","lineEnd","name","postName","postTag","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","isConstructor","getJsdocTagsDeep","getPreferredTagName","args","isValidTag","definedTags","names","hasTag","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","getTags","tagList","filterTags","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","skipReportingBlockedTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indentChar","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n * line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isIteratingFunctionOrVariable: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: {},\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * }\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n mode,\n tagNamePreference,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagNameSimple(\n tagName,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagNamePreference,\n context,\n );\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\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n sc,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n (sc.getAncestors ?\n (\n sc.getAncestors(node)\n /* c8 ignore next 4 */\n ) :\n (\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n augmentsExtendsReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n maxLines,\n minLines,\n mode,\n overrideReplacesDocs,\n tagNamePreference,\n } = settings;\n\n const functionTypes = [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'MethodDefinition',\n ];\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || functionTypes.includes(String(node?.type));\n };\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunctionOrVariable = () => {\n if (utils.isIteratingFunction()) {\n return true;\n }\n\n /** @type {import('estree').VariableDeclarator[]} */\n const declarations = node?.type === 'VariableDeclaration' ?\n node.declarations :\n (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ?\n node.declaration.declarations :\n []);\n\n return declarations.some(({\n init,\n }) => {\n return functionTypes.includes(String(init?.type));\n });\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/v);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/v).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n return jsdocUtils.getTagDescription(tg, returnArray);\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n delimiter,\n description,\n end,\n postDelimiter,\n start,\n tag,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* c8 ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n /* c8 ignore next 3 -- Already checked */\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {ChangeTag} */\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 /** @type {SetTag} */\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n number: tag.line,\n // Or tag.source[0].number?\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n /** @type {RemoveTag} */\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\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 }) => {\n return number === srcNumber;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n end: ending,\n tag,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[\n /**\n * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"}\n */ (\n item\n )\n ] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n // missing tags, this step should be added here (so that, e.g.,\n // if accessing `jsdoc.tags`, such as to add a new tag, the\n // correct information will be available)\n };\n\n /** @type {AddTag} */\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 /** @type {GetFirstLine} */\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 /** @type {SeedTokens} */\n utils.seedTokens = seedTokens;\n\n /** @type {EmptyTokens} */\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[\n /**\n * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n */ (\n prop\n )\n ] = '';\n }\n };\n\n /** @type {AddLine} */\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 /** @type {AddLines} */\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\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 // c8 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 /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n lineEnd,\n name,\n postDelimiter,\n tag,\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 } else /* c8 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 /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n )?.generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = (args) => {\n return jsdocUtils.getPreferredTagName(\n jsdoc, {\n ...args,\n context,\n mode,\n report,\n tagNamePreference,\n },\n );\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\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,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\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 /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](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[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return Boolean(node && 'async' in node && node.async);\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return jsdocUtils.getTags(jsdoc, tagName);\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\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 /** @type {GetClassJsdoc} */\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 /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag) => {\n return jsdocUtils.forEachPreferredTag(\n jsdoc, tagName, arrayHandler, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagNamePreference,\n },\n );\n };\n\n /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * [name: string]: any,\n * contexts?: Context[]\n * }} Settings\n */\n\n/**\n * @typedef {{\n * settings?: {\n * jsdoc?: {\n * ignorePrivate: boolean,\n * ignoreInternal: boolean,\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * overrideReplacesDocs: boolean,\n * ignoreReplacesDocs: boolean,\n * implementsReplacesDocs: boolean,\n * augmentsExtendsReplacesDocs: boolean,\n * exemptDestructuredRootsFromChecks: boolean,\n * mode: import('./jsdocUtils.js').ParserMode,\n * contexts: Context[],\n * }\n * }\n * }} JSDocSettings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext & JSDocSettings} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable perfectionist/sort-objects */\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 // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* eslint-enable perfectionist/sort-objects */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (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 if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).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/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * @param {{\n * comment?: string,\n * lastIndex?: Integer,\n * selector?: string,\n * isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n const report = makeReport(\n context,\n /** @type {import('estree').Node} */\n (jsdocNde),\n );\n\n const utils = getUtils(\n node,\n jsdoc,\n /** @type {import('eslint').AST.Token} */\n (jsdocNode),\n settings,\n report,\n context,\n sourceCode,\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 jsdocUtils\n .filterTags(jsdoc, ({\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 jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n\n let indentChar = sourceLine.charAt(0);\n if (indentChar !== ' ' && indentChar !== '\\t') {\n indentChar = ' ';\n }\n\n const indnt = indentChar.repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n * range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\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 * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/v).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (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 jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\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 jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\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 /**\n * @param {import('eslint').Rule.Node & {\n * range: [Integer, Integer];\n * }} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (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(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\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 * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'layout', 'problem', 'suggestion',\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(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\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, ruleConfig.nonGlobalSettings ? {} : settings);\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 if (typeof ctxt === 'string') {\n return false;\n }\n\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator,\n ruleConfig,\n hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n\n /** @type {CheckJsdoc} */\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,\n /** @type {import('estree').Comment} */\n (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,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\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 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n\nexport {\n parseComment,\n} from '@es-joy/jsdoccomment';\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAA8B,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJgB,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;A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D,MAAMqO,SAAS,GAAG,kDAChBJ,WAAW,CAACnO,GAAG,CACfI,KAAK,CAACF,MAAM,GAAGmO,QAAQ,CAACnO,MAAM;QAEhCF,GAAG,CAACC,GAAG,CAACC,MAAM,GAAGqO,SAAS;QAC1BvO,GAAG,CAACI,KAAK,CAACF,MAAM,GAAGqO,SAAS;MAC9B;IACF;IAEA9O,OAAO,CAACM,MAAM,CAAC;MACbwD,IAAI;MACJ6K,GAAG;MACHpO,GAAG;MACHF,OAAO;MACPkB,IAAI,EAAEmN;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOpO,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMyO,OAAO,GAAGA,CACd5I,IAAI,EACJrE,MAAM,EAAEN,KAAK,EACbK,UAAU,EAAE7B,OAAO,EAAEyB,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAC9CO,UAAU,EAAE+M,QAAQ,EAAEC,KAAK,EAAErN,YAAY,KACtC;EACH,MAAMsN,QAAQ,GAAG,sBAAwBzN,SAAU;EACnD,MAAMnB,MAAM,GAAGmO,UAAU,CACvBzO,OAAO,EACP;EACCkP,QACH,CAAC;EAED,MAAM/O,KAAK,GAAGmB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACL;EACCC,SAAS,EACVC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACPiC,UAAU,EACVL,YAAY,EACZC,UAAU,EACVC,MACF,CAAC;EAED,IACE,CAACD,UAAU,CAACsN,aAAa,IAAIzN,QAAQ,CAACuM,cAAc,IACpD9N,KAAK,CAAC8J,MAAM,CAAC,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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"iterateJsdoc.cjs","names":["jsdocUtils","_interopRequireWildcard","require","_jsdoccomment","_commentParser","_esquery","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","mode","tagNamePreference","utils","reportSettings","message","report","loc","end","column","line","start","parseClosureTemplateTag","tag","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagNameSimple","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","sc","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","augmentsExtendsReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","maxLines","minLines","overrideReplacesDocs","functionTypes","isIteratingFunction","includes","String","type","isIteratingFunctionOrVariable","declarations","declaration","some","init","isVirtualFunction","Boolean","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","setTagDescription","matcher","setter","finalIdx","source","tokens","description","idx","getDescription","descriptions","lastDescriptionLine","tagsBegun","push","length","join","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","postDelimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","lineEnd","name","postName","postTag","postType","trimEnd","flattenRoots","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","isConstructor","getJsdocTagsDeep","getPreferredTagName","args","isValidTag","definedTags","names","hasTag","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","tagMissingRequiredTypeOrNamepath","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","getTags","tagList","filterTags","filter","filterAllTags","getAllTags","getTagsByType","hasOptionTag","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","skipReportingBlockedTag","findContext","contexts","comment","foundContext","cntxt","esquery","matches","parse","visitorKeys","contextStr","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","jsdocNde","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indentChar","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","selector","lastComment","settngs","exit","create","commentHandler","*:not(Program)","noTracking","nonComment","ste","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","allComms","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import * as jsdocUtils from './jsdocUtils.js';\nimport {\n commentHandler,\n getJSDocComment,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport esquery from 'esquery';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {import('@es-joy/jsdoccomment').JsdocBlockWithInline} JsdocBlockWithInline\n */\n\n/**\n * @typedef {{\n * disallowName?: string,\n * allowName?: string,\n * context?: string,\n * comment?: string,\n * tags?: string[],\n * replacement?: string,\n * minimum?: Integer,\n * message?: string,\n * forceRequireReturn?: boolean\n * }} ContextObject\n */\n/**\n * @typedef {string|ContextObject} Context\n */\n\n/**\n * @callback CheckJsdoc\n * @param {{\n * lastIndex?: Integer,\n * isFunctionContext?: boolean,\n * selector?: string,\n * comment?: string\n * }} info\n * @param {null|((jsdoc: import('@es-joy/jsdoccomment').JsdocBlockWithInline) => boolean|undefined)} handler\n * @param {import('eslint').Rule.Node} node\n * @returns {void}\n */\n\n/**\n * @callback ForEachPreferredTag\n * @param {string} tagName\n * @param {(\n * matchingJsdocTag: import('@es-joy/jsdoccomment').JsdocTagWithInline,\n * targetTagName: string\n * ) => void} arrayHandler\n * @param {boolean} [skipReportingBlockedTag]\n * @returns {void}\n */\n\n/**\n * @callback ReportSettings\n * @param {string} message\n * @returns {void}\n */\n\n/**\n * @callback ParseClosureTemplateTag\n * @param {import('comment-parser').Spec} tag\n * @returns {string[]}\n */\n\n/**\n * @callback GetPreferredTagNameObject\n * @param {{\n * tagName: string\n * }} cfg\n * @returns {string|false|{\n * message: string;\n * replacement?: string|undefined\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @typedef {{\n * forEachPreferredTag: ForEachPreferredTag,\n * reportSettings: ReportSettings,\n * parseClosureTemplateTag: ParseClosureTemplateTag,\n * getPreferredTagNameObject: GetPreferredTagNameObject,\n * pathDoesNotBeginWith: import('./jsdocUtils.js').PathDoesNotBeginWith\n * }} BasicUtils\n */\n\n/**\n * @callback IsIteratingFunction\n * @returns {boolean}\n */\n\n/**\n * @callback IsVirtualFunction\n * @returns {boolean}\n */\n\n/**\n * @callback Stringify\n * @param {import('comment-parser').Block} tagBlock\n * @param {boolean} [specRewire]\n * @returns {string}\n */\n\n/**\n * @callback ReportJSDoc\n * @param {string} msg\n * @param {null|import('comment-parser').Spec|{line: Integer, column?: Integer}} [tag]\n * @param {(() => void)|null} [handler]\n * @param {boolean} [specRewire]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n */\n\n/**\n * @callback GetRegexFromString\n * @param {string} str\n * @param {string} [requiredFlags]\n * @returns {RegExp}\n */\n\n/**\n * @callback GetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {boolean} [returnArray]\n * @returns {string[]|string}\n */\n\n/**\n * @callback SetTagDescription\n * @param {import('comment-parser').Spec} tg\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback GetDescription\n * @returns {{\n * description: string,\n * descriptions: string[],\n * lastDescriptionLine: Integer\n * }}\n */\n\n/**\n * @callback SetBlockDescription\n * @param {(\n * info: {\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * },\n * seedTokens: (\n * tokens?: Partial<import('comment-parser').Tokens>\n * ) => import('comment-parser').Tokens,\n * descLines: string[]\n * ) => import('comment-parser').Line[]} setter\n * @returns {void}\n */\n\n/**\n * @callback SetDescriptionLines\n * @param {RegExp} matcher\n * @param {(description: string) => string} setter\n * @returns {Integer}\n */\n\n/**\n * @callback ChangeTag\n * @param {import('comment-parser').Spec} tag\n * @param {...Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback SetTag\n * @param {import('comment-parser').Spec & {\n * line: Integer\n * }} tag\n * @param {Partial<import('comment-parser').Tokens>} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback RemoveTag\n * @param {Integer} tagIndex\n * @param {{\n * removeEmptyBlock?: boolean,\n * tagSourceOffset?: Integer\n * }} [cfg]\n * @returns {void}\n */\n\n/**\n * @callback AddTag\n * @param {string} targetTagName\n * @param {Integer} [number]\n * @param {import('comment-parser').Tokens|{}} [tokens]\n * @returns {void}\n */\n\n/**\n * @callback GetFirstLine\n * @returns {Integer|undefined}\n */\n\n/**\n * @typedef {(\n * tokens?: Partial<import('comment-parser').Tokens> | undefined\n * ) => import('comment-parser').Tokens} SeedTokens\n */\n\n/**\n * Sets tokens to empty string.\n * @callback EmptyTokens\n * @param {import('comment-parser').Tokens} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLine\n * @param {Integer} sourceIndex\n * @param {Partial<import('comment-parser').Tokens>} tokens\n * @returns {void}\n */\n\n/**\n * @callback AddLines\n * @param {Integer} tagIndex\n * @param {Integer} tagSourceOffset\n * @param {Integer} numLines\n * @returns {void}\n */\n\n/**\n * @callback MakeMultiline\n * @returns {void}\n */\n\n/**\n * @callback GetFunctionParameterNames\n * @param {boolean} [useDefaultObjectProperties]\n * @returns {import('./jsdocUtils.js').ParamNameInfo[]}\n */\n\n/**\n * @callback HasParams\n * @returns {Integer}\n */\n\n/**\n * @callback IsGenerator\n * @returns {boolean}\n */\n\n/**\n * @callback IsConstructor\n * @returns {boolean}\n */\n\n/**\n * @callback GetJsdocTagsDeep\n * @param {string} tagName\n * @returns {false|{\n * idx: Integer,\n * name: string,\n * type: string\n * }[]}\n */\n\n/**\n * @callback GetPreferredTagName\n * @param {{\n * tagName: string,\n * skipReportingBlockedTag?: boolean,\n * allowObjectReturn?: boolean,\n * defaultMessage?: string\n * }} cfg\n * @returns {string|undefined|false|{\n * message: string;\n * replacement?: string|undefined;\n * }|{\n * blocked: true,\n * tagName: string\n * }}\n */\n\n/**\n * @callback IsValidTag\n * @param {string} name\n * @param {string[]} definedTags\n * @returns {boolean}\n */\n\n/**\n * @callback HasATag\n * @param {string[]} names\n * @returns {boolean}\n */\n\n/**\n * @callback HasTag\n * @param {string} name\n * @returns {boolean}\n */\n\n/**\n * @callback ComparePaths\n * @param {string} name\n * @returns {(otherPathName: string) => boolean}\n */\n\n/**\n * @callback DropPathSegmentQuotes\n * @param {string} name\n * @returns {string}\n */\n\n/**\n * @callback AvoidDocs\n * @returns {boolean}\n */\n\n/**\n * @callback TagMightHaveNamePositionTypePosition\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} [otherModeMaps]\n * @returns {boolean|{otherMode: true}}\n */\n\n/**\n * @callback TagMustHave\n * @param {string} tagName\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback TagMissingRequiredTypeOrNamepath\n * @param {import('comment-parser').Spec} tag\n * @param {import('./getDefaultTagStructureForMode.js').\n * TagStructure[]} otherModeMaps\n * @returns {boolean|{\n * otherMode: false\n * }}\n */\n\n/**\n * @callback IsNamepathX\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetTagStructureForMode\n * @param {import('./jsdocUtils.js').ParserMode} mde\n * @returns {import('./getDefaultTagStructureForMode.js').TagStructure}\n */\n\n/**\n * @callback MayBeUndefinedTypeTag\n * @param {import('comment-parser').Spec} tag\n * @returns {boolean}\n */\n\n/**\n * @callback HasValueOrExecutorHasNonEmptyResolveValue\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} [allBranches]\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasYieldReturnValue\n * @returns {boolean}\n */\n\n/**\n * @callback HasThrowValue\n * @returns {boolean}\n */\n\n/**\n * @callback IsAsync\n * @returns {boolean|undefined}\n */\n\n/**\n * @callback GetTags\n * @param {string} tagName\n * @returns {import('comment-parser').Spec[]}\n */\n\n/**\n * @callback GetPresentTags\n * @param {string[]} tagList\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterTags\n * @param {(tag: import('@es-joy/jsdoccomment').JsdocTagWithInline) => boolean} filter\n * @returns {import('@es-joy/jsdoccomment').JsdocTagWithInline[]}\n */\n\n/**\n * @callback FilterAllTags\n * @param {(tag: (import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)) => boolean} filter\n * @returns {(import('comment-parser').Spec|\n * import('@es-joy/jsdoccomment').JsdocInlineTagNoType)[]}\n */\n\n/**\n * @callback GetTagsByType\n * @param {import('comment-parser').Spec[]} tags\n * @returns {{\n * tagsWithNames: import('comment-parser').Spec[],\n * tagsWithoutNames: import('comment-parser').Spec[]\n * }}\n */\n\n/**\n * @callback HasOptionTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback GetClassNode\n * @returns {Node|null}\n */\n\n/**\n * @callback GetClassJsdoc\n * @returns {null|JsdocBlockWithInline}\n */\n\n/**\n * @callback ClassHasTag\n * @param {string} tagName\n * @returns {boolean}\n */\n\n/**\n * @callback FindContext\n * @param {Context[]} contexts\n * @param {string|undefined} comment\n * @returns {{\n * foundContext: Context|undefined,\n * contextStr: string\n * }}\n */\n\n/**\n * @typedef {BasicUtils & {\n * isIteratingFunction: IsIteratingFunction,\n * isIteratingFunctionOrVariable: IsIteratingFunction,\n * isVirtualFunction: IsVirtualFunction,\n * stringify: Stringify,\n * reportJSDoc: ReportJSDoc,\n * getRegexFromString: GetRegexFromString,\n * getTagDescription: GetTagDescription,\n * setTagDescription: SetTagDescription,\n * getDescription: GetDescription,\n * setBlockDescription: SetBlockDescription,\n * setDescriptionLines: SetDescriptionLines,\n * changeTag: ChangeTag,\n * setTag: SetTag,\n * removeTag: RemoveTag,\n * addTag: AddTag,\n * getFirstLine: GetFirstLine,\n * seedTokens: SeedTokens,\n * emptyTokens: EmptyTokens,\n * addLine: AddLine,\n * addLines: AddLines,\n * makeMultiline: MakeMultiline,\n * flattenRoots: import('./jsdocUtils.js').FlattenRoots,\n * getFunctionParameterNames: GetFunctionParameterNames,\n * hasParams: HasParams,\n * isGenerator: IsGenerator,\n * isConstructor: IsConstructor,\n * getJsdocTagsDeep: GetJsdocTagsDeep,\n * getPreferredTagName: GetPreferredTagName,\n * isValidTag: IsValidTag,\n * hasATag: HasATag,\n * hasTag: HasTag,\n * comparePaths: ComparePaths,\n * dropPathSegmentQuotes: DropPathSegmentQuotes,\n * avoidDocs: AvoidDocs,\n * tagMightHaveNamePosition: TagMightHaveNamePositionTypePosition,\n * tagMightHaveTypePosition: TagMightHaveNamePositionTypePosition,\n * tagMustHaveNamePosition: TagMustHave,\n * tagMustHaveTypePosition: TagMustHave,\n * tagMissingRequiredTypeOrNamepath: TagMissingRequiredTypeOrNamepath,\n * isNamepathDefiningTag: IsNamepathX,\n * isNamepathReferencingTag: IsNamepathX,\n * isNamepathOrUrlReferencingTag: IsNamepathX,\n * tagMightHaveNamepath: IsNamepathX,\n * getTagStructureForMode: GetTagStructureForMode,\n * mayBeUndefinedTypeTag: MayBeUndefinedTypeTag,\n * hasValueOrExecutorHasNonEmptyResolveValue: HasValueOrExecutorHasNonEmptyResolveValue,\n * hasYieldValue: HasYieldValue,\n * hasYieldReturnValue: HasYieldReturnValue,\n * hasThrowValue: HasThrowValue,\n * isAsync: IsAsync,\n * getTags: GetTags,\n * getPresentTags: GetPresentTags,\n * filterTags: FilterTags,\n * filterAllTags: FilterAllTags,\n * getTagsByType: GetTagsByType,\n * hasOptionTag: HasOptionTag,\n * getClassNode: GetClassNode,\n * getClassJsdoc: GetClassJsdoc,\n * classHasTag: ClassHasTag,\n * findContext: FindContext\n * }} Utils\n */\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n * @typedef {import('eslint').Rule.RuleMetaData} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n * @typedef {{\n * globalTags: {},\n * hasDuplicates: {\n * [key: string]: boolean\n * },\n * selectorMap: {\n * [selector: string]: {\n * [comment: string]: Integer\n * }\n * },\n * hasTag: {\n * [key: string]: boolean\n * },\n * hasNonComment: number,\n * hasNonCommentBeforeTag: {\n * [key: string]: boolean|number\n * }\n * }} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n * @typedef {import('eslint').Rule.Node} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {{\n * tagNamePreference?: import('./jsdocUtils.js').TagNamePreference,\n * mode?: import('./jsdocUtils.js').ParserMode\n * }} cfg\n * @returns {BasicUtils}\n */\nconst getBasicUtils = (context, {\n mode,\n tagNamePreference,\n}) => {\n /** @type {BasicUtils} */\n const utils = {};\n\n /** @type {ReportSettings} */\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n /** @type {ParseClosureTemplateTag} */\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n /** @type {GetPreferredTagNameObject} */\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagNameSimple(\n tagName,\n /** @type {import('./jsdocUtils.js').ParserMode} */ (mode),\n tagNamePreference,\n context,\n );\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\n/**\n * @callback Report\n * @param {string} message\n * @param {import('eslint').Rule.ReportFixer|null} [fix]\n * @param {null|\n * {line?: Integer, column?: Integer}|\n * import('comment-parser').Spec & {line?: Integer}\n * } [jsdocLoc]\n * @param {undefined|{\n * [key: string]: string\n * }} [data]\n * @returns {void}\n */\n\n/**\n * @param {Node|null} node\n * @param {JsdocBlockWithInline} jsdoc\n * @param {import('eslint').AST.Token} jsdocNode\n * @param {Settings} settings\n * @param {Report} report\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('eslint').SourceCode} sc\n * @param {boolean|undefined} iteratingAll\n * @param {RuleConfig} ruleConfig\n * @param {string} indent\n * @returns {Utils}\n */\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n sc,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = /** @type {import('eslint').Rule.Node[]} */ (node ?\n (sc.getAncestors ?\n (\n sc.getAncestors(node)\n /* c8 ignore next 5 */\n ) :\n (\n // @ts-expect-error ESLint 8\n context.getAncestors()\n )) :\n []);\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n\n const utils = /** @type {Utils} */ (getBasicUtils(context, settings));\n\n const {\n augmentsExtendsReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n maxLines,\n minLines,\n mode,\n overrideReplacesDocs,\n tagNamePreference,\n } = settings;\n\n const functionTypes = [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'MethodDefinition',\n ];\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunction = () => {\n return !iteratingAll || functionTypes.includes(String(node?.type));\n };\n\n /** @type {IsIteratingFunction} */\n utils.isIteratingFunctionOrVariable = () => {\n if (utils.isIteratingFunction()) {\n return true;\n }\n\n /** @type {import('estree').VariableDeclarator[]} */\n const declarations = node?.type === 'VariableDeclaration' ?\n node.declarations :\n (node?.type === 'ExportNamedDeclaration' && node.declaration?.type === 'VariableDeclaration' ?\n node.declaration.declarations :\n []);\n\n return declarations.some(({\n init,\n }) => {\n return functionTypes.includes(String(init?.type));\n });\n };\n\n /** @type {IsVirtualFunction} */\n utils.isVirtualFunction = () => {\n return Boolean(iteratingAll) && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n /** @type {Stringify} */\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(/** @type {import('comment-parser').Block} */ (\n specRewire ? block : tagBlock));\n };\n\n /** @type {ReportJSDoc} */\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? /** @type {import('eslint').Rule.ReportFixer} */ (\n fixer,\n ) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/v);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/v).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n /** @type {GetRegexFromString} */\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n /** @type {GetTagDescription} */\n utils.getTagDescription = (tg, returnArray) => {\n return jsdocUtils.getTagDescription(tg, returnArray);\n };\n\n /** @type {SetTagDescription} */\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {GetDescription} */\n utils.getDescription = () => {\n /** @type {string[]} */\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n /** @type {SetBlockDescription} */\n utils.setBlockDescription = (setter) => {\n /** @type {string[]} */\n const descLines = [];\n /**\n * @type {undefined|Integer}\n */\n let startIdx;\n /**\n * @type {undefined|Integer}\n */\n let endIdx;\n\n /**\n * @type {undefined|{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n let info;\n\n jsdoc.source.some(({\n tokens: {\n delimiter,\n description,\n end,\n postDelimiter,\n start,\n tag,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* c8 ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n /** @type {Integer} */ (startIdx),\n /** @type {Integer} */ (endIdx) - /** @type {Integer} */ (startIdx),\n ...setter(\n /**\n * @type {{\n * delimiter: string,\n * postDelimiter: string,\n * start: string\n * }}\n */\n (info),\n seedTokens,\n descLines,\n ),\n );\n }\n };\n\n /** @type {SetDescriptionLines} */\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n end,\n tag,\n },\n }, idx) => {\n /* c8 ignore next 3 -- Already checked */\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n /** @type {ChangeTag} */\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 /** @type {SetTag} */\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n number: tag.line,\n // Or tag.source[0].number?\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n /** @type {RemoveTag} */\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\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 }) => {\n return number === srcNumber;\n });\n // c8 ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n end: ending,\n tag,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[\n /**\n * @type {\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"}\n */ (\n item\n )\n ] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect\n // missing tags, this step should be added here (so that, e.g.,\n // if accessing `jsdoc.tags`, such as to add a new tag, the\n // correct information will be available)\n };\n\n /** @type {AddTag} */\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 /** @type {GetFirstLine} */\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 /** @type {SeedTokens} */\n utils.seedTokens = seedTokens;\n\n /** @type {EmptyTokens} */\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[\n /**\n * @type {\"start\"|\"postDelimiter\"|\"tag\"|\"type\"|\"postType\"|\n * \"postTag\"|\"name\"|\"postName\"|\"description\"|\"end\"|\"lineEnd\"}\n */ (\n prop\n )\n ] = '';\n }\n };\n\n /** @type {AddLine} */\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 /** @type {AddLines} */\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n /** @type {Integer|undefined} */\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 // c8 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 /* c8 ignore next 2 */\n // eslint-disable-next-line @stylistic/padding-line-between-statements -- c8\n return false;\n });\n\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + /** @type {Integer} */ (lastIndex) + idx;\n }\n };\n\n /** @type {MakeMultiline} */\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n description,\n lineEnd,\n name,\n postDelimiter,\n tag,\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 } else /* c8 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 /**\n * @type {import('./jsdocUtils.js').FlattenRoots}\n */\n utils.flattenRoots = jsdocUtils.flattenRoots;\n\n /** @type {GetFunctionParameterNames} */\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n /** @type {HasParams} */\n utils.hasParams = () => {\n return jsdocUtils.hasParams(/** @type {Node} */ (node));\n };\n\n /** @type {IsGenerator} */\n utils.isGenerator = () => {\n return node !== null && Boolean(\n /**\n * @type {import('estree').FunctionDeclaration|\n * import('estree').FunctionExpression}\n */ (node).generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(node.type) &&\n /** @type {import('estree').FunctionDeclaration} */\n (\n /**\n * @type {import('estree').ExportNamedDeclaration|\n * import('estree').ExportDefaultDeclaration}\n */ (node).declaration\n )?.generator,\n );\n };\n\n /** @type {IsConstructor} */\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(/** @type {Node} */ (node));\n };\n\n /** @type {GetJsdocTagsDeep} */\n utils.getJsdocTagsDeep = (tagName) => {\n const name = /** @type {string|false} */ (utils.getPreferredTagName({\n tagName,\n }));\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n /** @type {GetPreferredTagName} */\n utils.getPreferredTagName = (args) => {\n return jsdocUtils.getPreferredTagName(\n jsdoc, {\n ...args,\n context,\n mode,\n report,\n tagNamePreference,\n },\n );\n };\n\n /** @type {IsValidTag} */\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n /** @type {HasATag} */\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n /** @type {HasTag} */\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n /** @type {ComparePaths} */\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n /** @type {DropPathSegmentQuotes} */\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n /** @type {AvoidDocs} */\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,\n node,\n context,\n /** @type {import('json-schema').JSONSchema4|import('json-schema').JSONSchema4[]} */ (\n ruleConfig.meta.schema\n ),\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 /** @type {TagMightHaveNamePositionTypePosition} */\n utils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */ (\n method\n )\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](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[\n /** @type {\"tagMightHaveNamePosition\"|\"tagMightHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n /** @type {TagMissingRequiredTypeOrNamepath} */\n utils.tagMissingRequiredTypeOrNamepath = (tagName, otherModeMaps) => {\n const result = jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName);\n if (!result) {\n return false;\n }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils.tagMissingRequiredTypeOrNamepath(tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n ]) {\n /** @type {TagMustHave} */\n utils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[\n /** @type {\"tagMustHaveNamePosition\"|\"tagMustHaveTypePosition\"} */\n (method)\n ](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'isNamepathReferencingTag',\n 'isNamepathOrUrlReferencingTag',\n 'tagMightHaveNamepath',\n ]) {\n /** @type {IsNamepathX} */\n utils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */ (\n method\n )] = (tagName) => {\n return jsdocUtils[\n /** @type {\"isNamepathDefiningTag\"|\"isNamepathReferencingTag\"|\"isNamepathOrUrlReferencingTag\"|\"tagMightHaveNamepath\"} */\n (method)\n ](tagName);\n };\n }\n\n /** @type {GetTagStructureForMode} */\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n /** @type {MayBeUndefinedTypeTag} */\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n /** @type {HasValueOrExecutorHasNonEmptyResolveValue} */\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(\n /** @type {Node} */ (node), anyPromiseAsReturn, allBranches,\n );\n };\n\n /** @type {HasYieldValue} */\n utils.hasYieldValue = () => {\n if ([\n 'ExportDefaultDeclaration', 'ExportNamedDeclaration',\n ].includes(/** @type {Node} */ (node).type)) {\n return jsdocUtils.hasYieldValue(\n /** @type {import('estree').Declaration|import('estree').Expression} */ (\n /** @type {import('estree').ExportNamedDeclaration|import('estree').ExportDefaultDeclaration} */\n (node).declaration\n ),\n );\n }\n\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node));\n };\n\n /** @type {HasYieldReturnValue} */\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(/** @type {Node} */ (node), true);\n };\n\n /** @type {HasThrowValue} */\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n /** @type {IsAsync} */\n utils.isAsync = () => {\n return Boolean(node && 'async' in node && node.async);\n };\n\n /** @type {GetTags} */\n utils.getTags = (tagName) => {\n return jsdocUtils.getTags(jsdoc, tagName);\n };\n\n /** @type {GetPresentTags} */\n utils.getPresentTags = (tagList) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n /** @type {FilterTags} */\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc, (tag) => {\n return filter(tag);\n });\n };\n\n /** @type {FilterAllTags} */\n utils.filterAllTags = (filter) => {\n const tags = jsdocUtils.getAllTags(jsdoc);\n return tags.filter((tag) => {\n return filter(tag);\n });\n };\n\n /** @type {GetTagsByType} */\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags);\n };\n\n /** @type {HasOptionTag} */\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n /** @type {GetClassNode} */\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 /** @type {GetClassJsdoc} */\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 /** @type {ClassHasTag} */\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc !== null && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n /** @type {ForEachPreferredTag} */\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag) => {\n return jsdocUtils.forEachPreferredTag(\n jsdoc, tagName, arrayHandler, {\n context,\n mode,\n report,\n skipReportingBlockedTag,\n tagNamePreference,\n },\n );\n };\n\n /** @type {FindContext} */\n utils.findContext = (contexts, comment) => {\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n ) :\n (!cntxt.context || cntxt.context === 'any' ||\n esquery.matches(\n /** @type {Node} */ (node),\n esquery.parse(cntxt.context),\n undefined,\n {\n visitorKeys: sourceCode.visitorKeys,\n },\n )) && comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n String(foundContext);\n\n return {\n contextStr,\n foundContext,\n };\n };\n\n return utils;\n};\n\n/**\n * @typedef {{\n * [key: string]: false|string|{\n * message: string,\n * replacement?: false|string\n * skipRootChecking?: boolean\n * }\n * }} PreferredTypes\n */\n/**\n * @typedef {{\n * [key: string]: {\n * name?: \"text\"|\"namepath-defining\"|\"namepath-referencing\"|false,\n * type?: boolean|string[],\n * required?: (\"name\"|\"type\"|\"typeOrNameRequired\")[]\n * }\n * }} StructuredTags\n */\n/**\n * Settings from ESLint types.\n * @typedef {{\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * mode: import('./jsdocUtils.js').ParserMode,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * [name: string]: any,\n * contexts?: Context[]\n * }} Settings\n */\n\n/**\n * @typedef {{\n * settings?: {\n * jsdoc?: {\n * ignorePrivate: boolean,\n * ignoreInternal: boolean,\n * maxLines: Integer,\n * minLines: Integer,\n * tagNamePreference: import('./jsdocUtils.js').TagNamePreference,\n * preferredTypes: PreferredTypes,\n * structuredTags: StructuredTags,\n * overrideReplacesDocs: boolean,\n * ignoreReplacesDocs: boolean,\n * implementsReplacesDocs: boolean,\n * augmentsExtendsReplacesDocs: boolean,\n * exemptDestructuredRootsFromChecks: boolean,\n * mode: import('./jsdocUtils.js').ParserMode,\n * contexts: Context[],\n * }\n * }\n * }} JSDocSettings\n */\n\n/**\n * @param {import('eslint').Rule.RuleContext & JSDocSettings} context\n * @returns {Settings|false}\n */\nconst getSettings = (context) => {\n /* eslint-disable perfectionist/sort-objects */\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 // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* eslint-enable perfectionist/sort-objects */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: /** @type {Error} */ (error).message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n * @callback MakeReport\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('estree').Node} commentNode\n * @returns {Report}\n */\n\n/** @type {MakeReport} */\nconst makeReport = (context, commentNode) => {\n /** @type {Report} */\n const report = (message, fix = null, jsdocLoc = null, data = undefined) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */ (\n jsdocLoc\n ).source[0].number;\n }\n\n const lineNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).start.line +\n /** @type {Integer} */ (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 if ('column' in jsdocLoc && typeof jsdocLoc.column === 'number') {\n const colNumber = /** @type {import('eslint').AST.SourceLocation} */ (\n commentNode.loc\n ).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/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent?: string,\n * info?: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state?: StateObject,\n * globalState?: Map<string, Map<string, string>>,\n * jsdoc?: JsdocBlockWithInline,\n * jsdocNode?: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node?: Node,\n * allComments?: import('estree').Node[]\n * report?: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: BasicUtils,\n * }\n * ) => any } JsdocVisitorBasic\n */\n/**\n * @typedef {(\n * arg: {\n * context: import('eslint').Rule.RuleContext,\n * sourceCode: import('eslint').SourceCode,\n * indent: string,\n * info: {\n * comment?: string|undefined,\n * lastIndex?: Integer|undefined\n * },\n * state: StateObject,\n * globalState: Map<string, Map<string, string>>,\n * jsdoc: JsdocBlockWithInline,\n * jsdocNode: import('eslint').Rule.Node & {\n * range: [number, number]\n * },\n * node: Node|null,\n * allComments?: import('estree').Node[]\n * report: Report,\n * makeReport?: MakeReport,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * @param {{\n * comment?: string,\n * lastIndex?: Integer,\n * selector?: string,\n * isFunctionContext?: boolean,\n * }} info\n * @param {string} indent\n * @param {JsdocBlockWithInline} jsdoc\n * @param {RuleConfig} ruleConfig\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('@es-joy/jsdoccomment').Token} jsdocNode\n * @param {Node|null} node\n * @param {Settings} settings\n * @param {import('eslint').SourceCode} sourceCode\n * @param {JsdocVisitor} iterator\n * @param {StateObject} state\n * @param {boolean} [iteratingAll]\n * @returns {void}\n */\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n const report = makeReport(\n context,\n /** @type {import('estree').Node} */\n (jsdocNde),\n );\n\n const utils = getUtils(\n node,\n jsdoc,\n /** @type {import('eslint').AST.Token} */\n (jsdocNode),\n settings,\n report,\n context,\n sourceCode,\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 jsdocUtils\n .filterTags(jsdoc, ({\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 jsdoc,\n jsdocNode: /**\n * @type {import('eslint').Rule.Node & {\n * range: [number, number];}}\n */ (jsdocNde),\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\n/**\n * @param {string[]} lines\n * @param {import('estree').Comment} jsdocNode\n * @returns {[indent: string, jsdoc: JsdocBlockWithInline]}\n */\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.line - 1\n ];\n\n let indentChar = sourceLine.charAt(0);\n if (indentChar !== ' ' && indentChar !== '\\t') {\n indentChar = ' ';\n }\n\n const indnt = indentChar.repeat(\n /** @type {import('estree').SourceLocation} */\n (jsdocNode.loc).start.column,\n );\n\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node & {\n * range: [number, number]\n * }, state: StateObject}} NonCommentArgs\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils.js').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {true} [checkPrivate] Whether to check `@private` blocks (normally exempted)\n * @property {true} [checkInternal] Whether to check `@internal` blocks (normally exempted)\n * @property {true} [checkFile] Whether to iterates over all JSDoc blocks regardless of attachment\n * @property {true} [nonGlobalSettings] Whether to avoid relying on settings for global contexts\n * @property {true} [noTracking] Whether to disable the tracking of visited comment nodes (as\n * non-tracked may conduct further actions)\n * @property {true} [matchContext] Whether the rule expects contexts to be based on a match option\n * @property {(args: {\n * context: import('eslint').Rule.RuleContext,\n * state: StateObject,\n * settings: Settings,\n * utils: BasicUtils\n * }) => void} [exit] Handler to be executed upon exiting iteration of program AST\n * @property {(nca: NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\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 * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param {ContextObject[]|null} [contexts] The `contexts` containing relevant `comment` info.\n * @param {boolean} [additiveCommentContexts] If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n /** @type {import('@es-joy/jsdoccomment').CommentHandler} */\n let handler;\n\n /** @type {Settings|false} */\n let settings;\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {Node|null} node\n * @param {import('estree').Comment[]} jsdocNodes\n * @param {StateObject} state\n * @param {boolean} [lastCall]\n * @returns {void}\n */\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, /** @type {Settings} */ (settings));\n for (const jsdocNode of jsdocNodes) {\n const jsdocNde = /** @type {unknown} */ (jsdocNode);\n if (!(/^\\/\\*\\*\\s/v).test(sourceCode.getText(\n /** @type {import('estree').Node} */\n (jsdocNde),\n ))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of /** @type {ContextObject[]} */ (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 jsdocNode,\n /** @type {Node} */\n (node),\n /** @type {Settings} */\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 jsdocNode,\n node,\n /** @type {Settings} */\n (settings),\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n const settngs = /** @type {Settings} */ (settings);\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings: settngs,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\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 /**\n * @param {import('eslint').Rule.Node & {\n * range: [Integer, Integer];\n * }} node\n * @returns {void}\n */\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(\n sourceCode, node, /** @type {Settings} */ (settings),\n );\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n const ste = /** @type {StateObject} */ (state);\n ruleConfig.nonComment({\n node,\n state: ste,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n /** @type {import('estree').Comment} */\n (commentNode),\n ], /** @type {StateObject} */ (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(\n context,\n null,\n untrackedJSdoc,\n /** @type {StateObject} */\n (state),\n true,\n );\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 * @param {JsdocVisitorBasic} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComms = /** @type {unknown} */ (sourceCode.getAllComments());\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments: /** @type {import('estree').Node[]} */ (allComms),\n context,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // dslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n * @returns {import('eslint').Rule.RuleModule}\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'layout', 'problem', 'suggestion',\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(\n /** @type {JsdocVisitorBasic} */ (iterator),\n ruleConfig,\n );\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n /** @type {import('eslint').Rule.RuleModule} */\n return {\n /**\n * The entrypoint for the JSDoc rule.\n * @param {import('eslint').Rule.RuleContext} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {import('eslint').Rule.RuleListener}\n * a listener with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n /**\n * @type {Context[]|undefined}\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, ruleConfig.nonGlobalSettings ? {} : settings);\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 if (typeof ctxt === 'string') {\n return false;\n }\n\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator,\n ruleConfig,\n hasObjectAny ? /** @type {ContextObject[]} */ (contexts) : null,\n ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const {\n lines,\n } = sourceCode;\n\n /** @type {Partial<StateObject>} */\n const state = {};\n\n /** @type {CheckJsdoc} */\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,\n /** @type {import('estree').Comment} */\n (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,\n indent,\n jsdoc,\n ruleConfig,\n context,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n /** @type {StateObject} */\n (state),\n );\n };\n\n /** @type {import('eslint').Rule.RuleListener} */\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 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (typeof ruleConfig.exit === 'function') {\n contextObject['Program:exit'] = () => {\n const ste = /** @type {StateObject} */ (state);\n\n // @ts-expect-error `utils` not needed at this point\n /** @type {Required<RuleConfig>} */ (ruleConfig).exit({\n context,\n settings,\n state: ste,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n\nexport {\n parseComment,\n} from '@es-joy/jsdoccomment';\n"],"mappings":";;;;;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AAKA,IAAAE,cAAA,GAAAF,OAAA;AAIA,IAAAG,QAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAA8B,SAAAI,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAE9B;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAM;EACJgB,WAAW;EACXC;AACF,CAAC,GAAGC,mBAAI;;AAER;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAC,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAGA,CAACC,OAAO,EAAE;EAC9BC,IAAI;EACJC;AACF,CAAC,KAAK;EACJ;EACA,MAAMC,KAAK,GAAG,CAAC,CAAC;;EAEhB;EACAA,KAAK,CAACC,cAAc,GAAIC,OAAO,IAAK;IAClCL,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;EACAF,KAAK,CAACS,uBAAuB,GAAIC,GAAG,IAAK;IACvC,OAAO7C,UAAU,CAAC4C,uBAAuB,CAACC,GAAG,CAAC;EAChD,CAAC;EAEDV,KAAK,CAACW,oBAAoB,GAAG9C,UAAU,CAAC8C,oBAAoB;;EAE5D;EACAX,KAAK,CAACY,yBAAyB,GAAG,CAAC;IACjCC;EACF,CAAC,KAAK;IACJ,MAAMC,GAAG,GAAGjD,UAAU,CAACkD,yBAAyB,CAC9CF,OAAO,EACP,mDAAqDf,IAAI,EACzDC,iBAAiB,EACjBF,OACF,CAAC;IACD,MAAMmB,QAAQ,GAAGF,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ;IAC/C,IAAIA,GAAG,KAAK,KAAK,IAAKE,QAAQ,IAAI,CAACF,GAAG,CAACG,WAAY,EAAE;MACnD,OAAO;QACLC,OAAO,EAAE,IAAI;QACbL;MACF,CAAC;IACH;IAEA,OAAOC,GAAG;EACZ,CAAC;EAED,OAAOd,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMmB,QAAQ,GAAGA,CACfC,IAAI,EACJC,KAAK,EACLC,SAAS,EACTC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACP2B,EAAE,EACFC,YAAY,EACZC,UAAU,EACVC,MAAM,KACH;EACH,MAAMC,SAAS,GAAG,2CAA6CR,IAAI,GAChEI,EAAE,CAACK,YAAY,GAEZL,EAAE,CAACK,YAAY,CAACT,IAAI;EACtB;EAGE;EACAvB,OAAO,CAACgC,YAAY,CAAC,CACtB,GACH,EAAG;;EAEL;EACA,MAAM;IACJC,UAAU,GAAGjC,OAAO,CAACkC,aAAa,CAAC;EACrC,CAAC,GAAGlC,OAAO;EAEX,MAAMG,KAAK,GAAG,oBAAsBJ,aAAa,CAACC,OAAO,EAAE0B,QAAQ,CAAE;EAErE,MAAM;IACJS,2BAA2B;IAC3BC,kBAAkB;IAClBC,sBAAsB;IACtBC,QAAQ;IACRC,QAAQ;IACRtC,IAAI;IACJuC,oBAAoB;IACpBtC;EACF,CAAC,GAAGwB,QAAQ;EAEZ,MAAMe,aAAa,GAAG,CACpB,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,CACnB;;EAED;EACAtC,KAAK,CAACuC,mBAAmB,GAAG,MAAM;IAChC,OAAO,CAACd,YAAY,IAAIa,aAAa,CAACE,QAAQ,CAACC,MAAM,CAACrB,IAAI,EAAEsB,IAAI,CAAC,CAAC;EACpE,CAAC;;EAED;EACA1C,KAAK,CAAC2C,6BAA6B,GAAG,MAAM;IAC1C,IAAI3C,KAAK,CAACuC,mBAAmB,CAAC,CAAC,EAAE;MAC/B,OAAO,IAAI;IACb;;IAEA;IACA,MAAMK,YAAY,GAAGxB,IAAI,EAAEsB,IAAI,KAAK,qBAAqB,GACvDtB,IAAI,CAACwB,YAAY,GAChBxB,IAAI,EAAEsB,IAAI,KAAK,wBAAwB,IAAItB,IAAI,CAACyB,WAAW,EAAEH,IAAI,KAAK,qBAAqB,GAC1FtB,IAAI,CAACyB,WAAW,CAACD,YAAY,GAC7B,EAAG;IAEP,OAAOA,YAAY,CAACE,IAAI,CAAC,CAAC;MACxBC;IACF,CAAC,KAAK;MACJ,OAAOT,aAAa,CAACE,QAAQ,CAACC,MAAM,CAACM,IAAI,EAAEL,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC;EACJ,CAAC;;EAED;EACA1C,KAAK,CAACgD,iBAAiB,GAAG,MAAM;IAC9B,OAAOC,OAAO,CAACxB,YAAY,CAAC,IAAIzB,KAAK,CAACkD,OAAO,CAAC,CAC5C,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,CACzC,CAAC;EACJ,CAAC;;EAED;EACAlD,KAAK,CAACmD,SAAS,GAAG,CAACC,QAAQ,EAAEC,UAAU,KAAK;IAC1C,IAAIC,KAAK;IACT,IAAID,UAAU,EAAE;MACdC,KAAK,GAAG/D,WAAW,CAAC6D,QAAQ,CAAC;IAC/B;IAEA,OAAO,IAAAG,wBAAgB,EAAC;IACtBF,UAAU,GAAGC,KAAK,GAAGF,QAAS,CAAC;EACnC,CAAC;;EAED;EACApD,KAAK,CAACwD,WAAW,GAAG,CAACC,GAAG,EAAE/C,GAAG,EAAEgD,OAAO,EAAEL,UAAU,EAAEM,IAAI,KAAK;IAC3DxD,MAAM,CAACsD,GAAG,EAAEC,OAAO,GAAG,gDACpBE,KAAK,IACF;MACHF,OAAO,CAAC,CAAC;MACT,MAAMzC,WAAW,GAAGjB,KAAK,CAACmD,SAAS,CAAC9B,KAAK,EAAEgC,UAAU,CAAC;MAEtD,IAAI,CAACpC,WAAW,EAAE;QAChB,MAAM4C,IAAI,GAAG/B,UAAU,CAACgC,OAAO,CAAC,CAAC;QACjC,MAAMC,gBAAgB,GAAGF,IAAI,CAACG,KAAK,CACjC,CAAC,EAAE1C,SAAS,CAAC2C,KAAK,CAAC,CAAC,CACtB,CAAC,CAACC,MAAM,CAAC,YAAY,CAAC;QACtB,IAAIH,gBAAgB,GAAG,CAAC,CAAC,EAAE;UACzB,OAAOH,KAAK,CAACO,WAAW,CAAC,CACvBJ,gBAAgB,EAAEzC,SAAS,CAAC2C,KAAK,CAAC,CAAC,CAAC,CACrC,CAAC;QACJ;QAEA,OAAOL,KAAK,CAACO,WAAW,CACrB,KAAK,CAAEC,IAAI,CAACP,IAAI,CAACQ,MAAM,CAAC/C,SAAS,CAAC2C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3C,CACE3C,SAAS,CAAC2C,KAAK,CAAC,CAAC,CAAC,EAAE3C,SAAS,CAAC2C,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAC3C,GACD3C,SAAS,CAAC2C,KACd,CAAC;MACH;MAEA,OAAOL,KAAK,CAACU,WAAW,CAAChD,SAAS,EAAEL,WAAW,CAAC;IAClD,CAAC,GAAG,IAAI,EAAEP,GAAG,EAAEiD,IAAI,CAAC;EACtB,CAAC;;EAED;EACA3D,KAAK,CAACuE,kBAAkB,GAAG,CAACC,GAAG,EAAEC,aAAa,KAAK;IACjD,OAAO5G,UAAU,CAAC0G,kBAAkB,CAACC,GAAG,EAAEC,aAAa,CAAC;EAC1D,CAAC;;EAED;EACAzE,KAAK,CAAC0E,iBAAiB,GAAG,CAACC,EAAE,EAAEC,WAAW,KAAK;IAC7C,OAAO/G,UAAU,CAAC6G,iBAAiB,CAACC,EAAE,EAAEC,WAAW,CAAC;EACtD,CAAC;;EAED;EACA5E,KAAK,CAAC6E,iBAAiB,GAAG,CAACF,EAAE,EAAEG,OAAO,EAAEC,MAAM,KAAK;IACjD,IAAIC,QAAQ,GAAG,CAAC;IAChBL,EAAE,CAACM,MAAM,CAACnC,IAAI,CAAC,CAAC;MACdoC,MAAM,EAAE;QACNC;MACF;IACF,CAAC,EAAEC,GAAG,KAAK;MACT,IAAID,WAAW,IAAIL,OAAO,CAACV,IAAI,CAACe,WAAW,CAAC,EAAE;QAC5CR,EAAE,CAACM,MAAM,CAACG,GAAG,CAAC,CAACF,MAAM,CAACC,WAAW,GAAGJ,MAAM,CAACI,WAAW,CAAC;QACvDH,QAAQ,GAAGI,GAAG;QACd,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAOJ,QAAQ;EACjB,CAAC;;EAED;EACAhF,KAAK,CAACqF,cAAc,GAAG,MAAM;IAC3B;IACA,MAAMC,YAAY,GAAG,EAAE;IACvB,IAAIC,mBAAmB,GAAG,CAAC;IAC3B,IAAIC,SAAS,GAAG,KAAK;IACrBnE,KAAK,CAAC4D,MAAM,CAACnC,IAAI,CAAC,CAAC;MACjBoC,MAAM,EAAE;QACNC,WAAW;QACX9E,GAAG;QACHK;MACF;IACF,CAAC,EAAE0E,GAAG,KAAK;MACT,IAAI1E,GAAG,EAAE;QACP8E,SAAS,GAAG,IAAI;MAClB;MAEA,IAAIJ,GAAG,KAAK1E,GAAG,IAAIL,GAAG,CAAC,EAAE;QACvBkF,mBAAmB,GAAGH,GAAG,GAAG,CAAC;QAC7B,IAAI,CAACI,SAAS,IAAIL,WAAW,EAAE;UAC7BG,YAAY,CAACG,IAAI,CAACN,WAAW,CAAC;QAChC;QAEA,OAAO,IAAI;MACb;MAEA,IAAI,CAACK,SAAS,KAAKJ,GAAG,IAAID,WAAW,CAAC,EAAE;QACtCG,YAAY,CAACG,IAAI,CAACN,WAAW,KAAKG,YAAY,CAACI,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;MACrE;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAO;MACLP,WAAW,EAAEG,YAAY,CAACK,IAAI,CAAC,IAAI,CAAC;MACpCL,YAAY;MACZC;IACF,CAAC;EACH,CAAC;;EAED;EACAvF,KAAK,CAAC4F,mBAAmB,GAAIb,MAAM,IAAK;IACtC;IACA,MAAMc,SAAS,GAAG,EAAE;IACpB;AACJ;AACA;IACI,IAAIC,QAAQ;IACZ;AACJ;AACA;IACI,IAAIC,MAAM;;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;IACI,IAAIC,IAAI;IAER3E,KAAK,CAAC4D,MAAM,CAACnC,IAAI,CAAC,CAAC;MACjBoC,MAAM,EAAE;QACNe,SAAS;QACTd,WAAW;QACX9E,GAAG;QACH6F,aAAa;QACb1F,KAAK;QACLE;MACF;IACF,CAAC,EAAE0E,GAAG,KAAK;MACT,IAAIa,SAAS,KAAK,KAAK,EAAE;QACvB,OAAO,KAAK;MACd;MAEA,IAAIH,QAAQ,KAAKK,SAAS,EAAE;QAC1BL,QAAQ,GAAGV,GAAG;QACdY,IAAI,GAAG;UACLC,SAAS;UACTC,aAAa;UACb1F;QACF,CAAC;MACH;MAEA,IAAIE,GAAG,IAAIL,GAAG,EAAE;QACd0F,MAAM,GAAGX,GAAG;QACZ,OAAO,IAAI;MACb;MAEAS,SAAS,CAACJ,IAAI,CAACN,WAAW,CAAC;MAC3B,OAAO,KAAK;IACd,CAAC,CAAC;;IAEF;IACA,IAAIU,SAAS,CAACH,MAAM,EAAE;MACpBrE,KAAK,CAAC4D,MAAM,CAACmB,MAAM,CACjB,sBAAwBN,QAAQ,EAChC,sBAAwBC,MAAM,IAAI,sBAAwBD,QAAQ,CAAC,EACnE,GAAGf,MAAM;MACP;AACV;AACA;AACA;AACA;AACA;AACA;MACWiB,IAAI,EACLxG,UAAU,EACVqG,SACF,CACF,CAAC;IACH;EACF,CAAC;;EAED;EACA7F,KAAK,CAACqG,mBAAmB,GAAG,CAACvB,OAAO,EAAEC,MAAM,KAAK;IAC/C,IAAIC,QAAQ,GAAG,CAAC;IAChB3D,KAAK,CAAC4D,MAAM,CAACnC,IAAI,CAAC,CAAC;MACjBoC,MAAM,EAAE;QACNC,WAAW;QACX9E,GAAG;QACHK;MACF;IACF,CAAC,EAAE0E,GAAG,KAAK;MACT;MACA,IAAIA,GAAG,KAAK1E,GAAG,IAAIL,GAAG,CAAC,EAAE;QACvB,OAAO,IAAI;MACb;MAEA,IAAI8E,WAAW,IAAIL,OAAO,CAACV,IAAI,CAACe,WAAW,CAAC,EAAE;QAC5C9D,KAAK,CAAC4D,MAAM,CAACG,GAAG,CAAC,CAACF,MAAM,CAACC,WAAW,GAAGJ,MAAM,CAACI,WAAW,CAAC;QAC1DH,QAAQ,GAAGI,GAAG;QACd,OAAO,IAAI;MACb;MAEA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,OAAOJ,QAAQ;EACjB,CAAC;;EAED;EACAhF,KAAK,CAACsG,SAAS,GAAG,CAAC5F,GAAG,EAAE,GAAGwE,MAAM,KAAK;IACpC,KAAK,MAAM,CACTE,GAAG,EACHmB,GAAG,CACJ,IAAI7F,GAAG,CAACuE,MAAM,CAACuB,OAAO,CAAC,CAAC,EAAE;MACzBD,GAAG,CAACrB,MAAM,GAAG;QACX,GAAGqB,GAAG,CAACrB,MAAM;QACb,GAAGA,MAAM,CAACE,GAAG;MACf,CAAC;IACH;EACF,CAAC;;EAED;EACApF,KAAK,CAACyG,MAAM,GAAG,CAAC/F,GAAG,EAAEwE,MAAM,KAAK;IAC9BxE,GAAG,CAACuE,MAAM,GAAG,CACX;MACEyB,MAAM,EAAEhG,GAAG,CAACH,IAAI;MAChB;MACA0E,MAAM,EAAE,EAAE;MACVC,MAAM,EAAE1F,UAAU,CAAC;QACjByG,SAAS,EAAE,GAAG;QACdC,aAAa,EAAE,GAAG;QAClB1F,KAAK,EAAEmB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAE,GAAG,GAAGA,GAAG,CAACA,GAAG;QAClB,GAAGwE;MACL,CAAC;IACH,CAAC,CACF;EACH,CAAC;;EAED;EACAlF,KAAK,CAAC2G,SAAS,GAAG,CAACC,QAAQ,EAAE;IAC3BC,gBAAgB,GAAG,KAAK;IACxBC,eAAe,GAAG;EACpB,CAAC,GAAG,CAAC,CAAC,KAAK;IACT,MAAM;MACJ7B,MAAM,EAAE8B;IACV,CAAC,GAAG1F,KAAK,CAAC2F,IAAI,CAACJ,QAAQ,CAAC;IACxB;IACA,IAAIK,SAAS;IACb,MAAMC,WAAW,GAAG7F,KAAK,CAAC4D,MAAM,CAAC,CAAC,CAAC,CAACyB,MAAM;IAC1CK,SAAS,CAACjE,IAAI,CAAC,CAAC;MACd4D;IACF,CAAC,EAAES,MAAM,KAAK;MACZ,MAAMC,WAAW,GAAG/F,KAAK,CAAC4D,MAAM,CAACoC,SAAS,CAAC,CAAC;QAC1CX,MAAM,EAAEY;MACV,CAAC,KAAK;QACJ,OAAOZ,MAAM,KAAKY,SAAS;MAC7B,CAAC,CAAC;MACF;MACA,IAAIF,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,IAAIG,WAAW,GAAG,CAAC;QACnBR,SAAS,CAAC/C,KAAK,CAACmD,MAAM,GAAG,CAAC,CAAC,CAACrE,IAAI,CAAC,CAAC;UAChCoC,MAAM,EAAE;YACN7E,GAAG,EAAEmH,MAAM;YACX9G;UACF;QACF,CAAC,KAAK;UACJ,IAAI,CAACA,GAAG,IAAI,CAAC8G,MAAM,EAAE;YACnBD,WAAW,EAAE;YAEb,OAAO,KAAK;UACd;UAEA,OAAO,IAAI;QACb,CAAC,CAAC;QAEF,MAAME,SAAS,GAAGL,WAAW,GAAGN,eAAe;QAE/C,MAAM;UACJb,SAAS;UACT5F;QACF,CAAC,GAAGgB,KAAK,CAAC4D,MAAM,CAACwC,SAAS,CAAC,CAACvC,MAAM;QAElC,IACEuC,SAAS,KAAK,CAAC,IAAIpG,KAAK,CAAC2F,IAAI,CAACtB,MAAM,IAAI,CAAC,IACzC,CAACmB,gBAAgB,KAAKxG,GAAG,IAAI4F,SAAS,KAAK,KAAK,CAAC,EACjD;UACA,MAAM;YACJf;UACF,CAAC,GAAG7D,KAAK,CAAC4D,MAAM,CAACwC,SAAS,CAAC;UAC3B,KAAK,MAAMC,IAAI,IAAI,CACjB,eAAe,EACf,KAAK,EACL,SAAS,EACT,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,aAAa,CACd,EAAE;YACDxC,MAAM;YACJ;AACd;AACA;AACA;YACgBwC,IAAI,EAEP,GAAG,EAAE;UACR;QACF,CAAC,MAAM;UACLrG,KAAK,CAAC4D,MAAM,CAACmB,MAAM,CAACqB,SAAS,EAAEF,WAAW,GAAGT,eAAe,IAAIW,SAAS,GAAG,CAAC,GAAGpG,KAAK,CAAC4D,MAAM,CAACS,MAAM,CAAC,CAAC;UACrGqB,SAAS,CAACX,MAAM,CAACe,MAAM,GAAGL,eAAe,EAAES,WAAW,GAAGT,eAAe,IAAIW,SAAS,GAAG,CAAC,GAAGpG,KAAK,CAAC4D,MAAM,CAACS,MAAM,CAAC,CAAC;QACnH;QAEAuB,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;MACA;MACA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CACThC,GAAG,EACHmB,GAAG,CACJ,IAAIlF,KAAK,CAAC4D,MAAM,CAACjB,KAAK,CAACiD,SAAS,CAAC,CAACT,OAAO,CAAC,CAAC,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGQ,WAAW,IAAG,sBAAwBD,SAAS,CAAC,GAAG7B,GAAG;IACrE;;IAEA;IACA;IACA;IACA;EACF,CAAC;;EAED;EACApF,KAAK,CAAC2H,MAAM,GAAG,CACbC,aAAa,EACblB,MAAM,GAAG,CAACrF,KAAK,CAAC2F,IAAI,CAAC3F,KAAK,CAAC2F,IAAI,CAACtB,MAAM,GAAG,CAAC,CAAC,EAAET,MAAM,CAAC,CAAC,CAAC,EAAEyB,MAAM,IAAIrF,KAAK,CAAC4D,MAAM,CAACoC,SAAS,CAAC,CAAC;IACxFnC,MAAM,EAAE;MACNxE;IACF;EACF,CAAC,KAAK;IACJ,OAAOA,GAAG;EACZ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EACXwE,MAAM,GAAG,CAAC,CAAC,KACR;IACH7D,KAAK,CAAC4D,MAAM,CAACmB,MAAM,CAACM,MAAM,EAAE,CAAC,EAAE;MAC7BA,MAAM;MACNzB,MAAM,EAAE,EAAE;MACVC,MAAM,EAAE1F,UAAU,CAAC;QACjByG,SAAS,EAAE,GAAG;QACdC,aAAa,EAAE,GAAG;QAClB1F,KAAK,EAAEmB,MAAM,GAAG,GAAG;QACnBjB,GAAG,EAAE,IAAIkH,aAAa,EAAE;QACxB,GAAG1C;MACL,CAAC;IACH,CAAC,CAAC;IACF,KAAK,MAAMqB,GAAG,IAAIlF,KAAK,CAAC4D,MAAM,CAACjB,KAAK,CAAC0C,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;EACF,CAAC;;EAED;EACA1G,KAAK,CAAC6H,YAAY,GAAG,MAAM;IACzB,IAAIC,SAAS;IACb,KAAK,MAAM;MACTpB,MAAM;MACNxB,MAAM,EAAE;QACNxE;MACF;IACF,CAAC,IAAIW,KAAK,CAAC4D,MAAM,EAAE;MACjB,IAAIvE,GAAG,EAAE;QACPoH,SAAS,GAAGpB,MAAM;QAClB;MACF;IACF;IAEA,OAAOoB,SAAS;EAClB,CAAC;;EAED;EACA9H,KAAK,CAACR,UAAU,GAAGA,UAAU;;EAE7B;EACAQ,KAAK,CAAC+H,WAAW,GAAI7C,MAAM,IAAK;IAC9B,KAAK,MAAM8C,IAAI,IAAI,CACjB,OAAO,EACP,eAAe,EACf,KAAK,EACL,MAAM,EACN,UAAU,EACV,SAAS,EACT,MAAM,EACN,UAAU,EACV,aAAa,EACb,KAAK,EACL,SAAS,CACV,EAAE;MACD9C,MAAM;MACJ;AACR;AACA;AACA;MACU8C,IAAI,EAEP,GAAG,EAAE;IACR;EACF,CAAC;;EAED;EACAhI,KAAK,CAACiI,OAAO,GAAG,CAACb,WAAW,EAAElC,MAAM,KAAK;IACvC,MAAMwB,MAAM,GAAG,CAACrF,KAAK,CAAC4D,MAAM,CAACmC,WAAW,GAAG,CAAC,CAAC,EAAEV,MAAM,IAAI,CAAC,IAAI,CAAC;IAC/DrF,KAAK,CAAC4D,MAAM,CAACmB,MAAM,CAACgB,WAAW,EAAE,CAAC,EAAE;MAClCV,MAAM;MACNzB,MAAM,EAAE,EAAE;MACVC,MAAM,EAAE1F,UAAU,CAAC0F,MAAM;IAC3B,CAAC,CAAC;IAEF,KAAK,MAAMqB,GAAG,IAAIlF,KAAK,CAAC4D,MAAM,CAACjB,KAAK,CAAC0C,MAAM,GAAG,CAAC,CAAC,EAAE;MAChDH,GAAG,CAACG,MAAM,EAAE;IACd;IACA;IACA;EACF,CAAC;;EAED;EACA1G,KAAK,CAACkI,QAAQ,GAAG,CAACtB,QAAQ,EAAEE,eAAe,EAAEqB,QAAQ,KAAK;IACxD,MAAM;MACJlD,MAAM,EAAE8B;IACV,CAAC,GAAG1F,KAAK,CAAC2F,IAAI,CAACJ,QAAQ,CAAC;IACxB;IACA,IAAIK,SAAS;IACb,MAAMC,WAAW,GAAG7F,KAAK,CAAC4D,MAAM,CAAC,CAAC,CAAC,CAACyB,MAAM;IAC1CK,SAAS,CAACjE,IAAI,CAAC,CAAC;MACd4D;IACF,CAAC,KAAK;MACJ,MAAM0B,QAAQ,GAAGA,CAAA,KAAM;QACrB,OAAO;UACL1B,MAAM;UACNzB,MAAM,EAAE,EAAE;UACVC,MAAM,EAAE1F,UAAU,CAAC;YACjByG,SAAS,EAAE,GAAG;YACdzF,KAAK,EAAEmB,MAAM,GAAG;UAClB,CAAC;QACH,CAAC;MACH,CAAC;MAED,MAAM0G,SAAS,GAAGA,CAAA,KAAM;QACtB,OAAOC,KAAK,CAACC,IAAI,CAAC;UAChB7C,MAAM,EAAEyC;QACV,CAAC,EAAEC,QAAQ,CAAC;MACd,CAAC;MAED,MAAMhB,WAAW,GAAG/F,KAAK,CAAC4D,MAAM,CAACoC,SAAS,CAAC,CAAC;QAC1CX,MAAM,EAAEY,SAAS;QACjBpC,MAAM,EAAE;UACN7E;QACF;MACF,CAAC,KAAK;QACJ,OAAOqG,MAAM,KAAKY,SAAS,IAAI,CAACjH,GAAG;MACrC,CAAC,CAAC;MACF;MACA,IAAI+G,WAAW,GAAG,CAAC,CAAC,EAAE;QACpB,MAAMoB,KAAK,GAAGH,SAAS,CAAC,CAAC;QACzBhH,KAAK,CAAC4D,MAAM,CAACmB,MAAM,CAACgB,WAAW,GAAGN,eAAe,EAAE,CAAC,EAAE,GAAG0B,KAAK,CAAC;;QAE/D;QACAvB,SAAS,GAAGG,WAAW;QAEvB,OAAO,IAAI;MACb;MACA;MACA;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IAEF,KAAK,MAAM,CACThC,GAAG,EACHmB,GAAG,CACJ,IAAIlF,KAAK,CAAC4D,MAAM,CAACjB,KAAK,CAACiD,SAAS,CAAC,CAACT,OAAO,CAAC,CAAC,EAAE;MAC5CD,GAAG,CAACG,MAAM,GAAGQ,WAAW,IAAG,sBAAwBD,SAAS,CAAC,GAAG7B,GAAG;IACrE;EACF,CAAC;;EAED;EACApF,KAAK,CAACyI,aAAa,GAAG,MAAM;IAC1B,MAAM;MACJxD,MAAM,EAAE,CACN;QACEC;MACF,CAAC;IAEL,CAAC,GAAG7D,KAAK;IACT,MAAM;MACJ8D,WAAW;MACXuD,OAAO;MACPC,IAAI;MACJzC,aAAa;MACbxF,GAAG;MACHgC;IACF,CAAC,GAAGwC,MAAM;IAEV,IAAI;MACFA,MAAM,EAAE;QACN0D,QAAQ;QACRC,OAAO;QACPC;MACF;IACF,CAAC,GAAGzH,KAAK,CAAC4D,MAAM,CAAC,CAAC,CAAC;;IAEnB;IACA,IAAI,CAACE,WAAW,EAAE;MAChB,IAAIyD,QAAQ,EAAE;QACZA,QAAQ,GAAG,EAAE;MACf,CAAC,MAAM,IAAIE,QAAQ,EAAE;QACnBA,QAAQ,GAAG,EAAE;MACf,CAAC,MAAM,mIAAoI,IAAID,OAAO,EAAE;UACtJA,OAAO,GAAG,EAAE;QACd;IACF;IAEA7I,KAAK,CAAC+H,WAAW,CAAC7C,MAAM,CAAC;IAEzBlF,KAAK,CAACiI,OAAO,CAAC,CAAC,EAAE;MACfhC,SAAS,EAAE,GAAG;MAEd;MACA;MACAd,WAAW,EAAEA,WAAW,CAAC4D,OAAO,CAAC,CAAC;MAClCJ,IAAI;MACJzC,aAAa;MACb0C,QAAQ;MACRC,OAAO;MACPC,QAAQ;MACRtI,KAAK,EAAEmB,MAAM,GAAG,GAAG;MACnBjB,GAAG;MACHgC;IACF,CAAC,CAAC;IACF1C,KAAK,CAACiI,OAAO,CAAC,CAAC,EAAE;MACf5H,GAAG,EAAE,IAAI;MACTqI,OAAO;MACPlI,KAAK,EAAEmB,MAAM,GAAG;IAClB,CAAC,CAAC;EACJ,CAAC;;EAED;AACF;AACA;EACE3B,KAAK,CAACgJ,YAAY,GAAGnL,UAAU,CAACmL,YAAY;;EAE5C;EACAhJ,KAAK,CAACiJ,yBAAyB,GAAIC,0BAA0B,IAAK;IAChE,OAAOrL,UAAU,CAACoL,yBAAyB,CAAC7H,IAAI,EAAE8H,0BAA0B,CAAC;EAC/E,CAAC;;EAED;EACAlJ,KAAK,CAACmJ,SAAS,GAAG,MAAM;IACtB,OAAOtL,UAAU,CAACsL,SAAS,CAAC,mBAAqB/H,IAAK,CAAC;EACzD,CAAC;;EAED;EACApB,KAAK,CAACoJ,WAAW,GAAG,MAAM;IACxB,OAAOhI,IAAI,KAAK,IAAI,IAAI6B,OAAO;IAC7B;AACN;AACA;AACA;IAAW7B,IAAI,CAAEiI,SAAS,IACpBjI,IAAI,CAACsB,IAAI,KAAK,kBAAkB,IAAItB,IAAI,CAACkI,KAAK,CAACD,SAAS,IACxD,CACE,0BAA0B,EAAE,wBAAwB,CACrD,CAAC7G,QAAQ,CAACpB,IAAI,CAACsB,IAAI,CAAC,IACrB;IACA;IACE;AACR;AACA;AACA;IAAatB,IAAI,CAAEyB,WAAW,GACrBwG,SACL,CAAC;EACH,CAAC;;EAED;EACArJ,KAAK,CAACuJ,aAAa,GAAG,MAAM;IAC1B,OAAO1L,UAAU,CAAC0L,aAAa,CAAC,mBAAqBnI,IAAK,CAAC;EAC7D,CAAC;;EAED;EACApB,KAAK,CAACwJ,gBAAgB,GAAI3I,OAAO,IAAK;IACpC,MAAM8H,IAAI,GAAG,2BAA6B3I,KAAK,CAACyJ,mBAAmB,CAAC;MAClE5I;IACF,CAAC,CAAE;IACH,IAAI,CAAC8H,IAAI,EAAE;MACT,OAAO,KAAK;IACd;IAEA,OAAO9K,UAAU,CAAC2L,gBAAgB,CAACnI,KAAK,EAAEsH,IAAI,CAAC;EACjD,CAAC;;EAED;EACA3I,KAAK,CAACyJ,mBAAmB,GAAIC,IAAI,IAAK;IACpC,OAAO7L,UAAU,CAAC4L,mBAAmB,CACnCpI,KAAK,EAAE;MACL,GAAGqI,IAAI;MACP7J,OAAO;MACPC,IAAI;MACJK,MAAM;MACNJ;IACF,CACF,CAAC;EACH,CAAC;;EAED;EACAC,KAAK,CAAC2J,UAAU,GAAG,CAAChB,IAAI,EAAEiB,WAAW,KAAK;IACxC,OAAO/L,UAAU,CAAC8L,UAAU,CAAC9J,OAAO,EAAEC,IAAI,EAAE6I,IAAI,EAAEiB,WAAW,CAAC;EAChE,CAAC;;EAED;EACA5J,KAAK,CAACkD,OAAO,GAAI2G,KAAK,IAAK;IACzB,OAAOhM,UAAU,CAACqF,OAAO,CAAC7B,KAAK,EAAEwI,KAAK,CAAC;EACzC,CAAC;;EAED;EACA7J,KAAK,CAAC8J,MAAM,GAAInB,IAAI,IAAK;IACvB,OAAO9K,UAAU,CAACiM,MAAM,CAACzI,KAAK,EAAEsH,IAAI,CAAC;EACvC,CAAC;;EAED;EACA3I,KAAK,CAAC+J,YAAY,GAAIpB,IAAI,IAAK;IAC7B,OAAO9K,UAAU,CAACkM,YAAY,CAACpB,IAAI,CAAC;EACtC,CAAC;;EAED;EACA3I,KAAK,CAACgK,qBAAqB,GAAIrB,IAAI,IAAK;IACtC,OAAO9K,UAAU,CAACmM,qBAAqB,CAACrB,IAAI,CAAC;EAC/C,CAAC;;EAED;EACA3I,KAAK,CAACiK,SAAS,GAAG,MAAM;IACtB,IACEhI,kBAAkB,KAAK,KAAK,KACzBjC,KAAK,CAAC8J,MAAM,CAAC,QAAQ,CAAC,IAAI9J,KAAK,CAACkK,WAAW,CAAC,QAAQ,CAAC,CAAC,IACzD7H,oBAAoB,KAAK,KAAK,KAC3BrC,KAAK,CAAC8J,MAAM,CAAC,UAAU,CAAC,IAAI9J,KAAK,CAACkK,WAAW,CAAC,UAAU,CAAC,CAAC,IAC7DhI,sBAAsB,KAAK,KAAK,KAC7BlC,KAAK,CAAC8J,MAAM,CAAC,YAAY,CAAC,IAAI9J,KAAK,CAACkK,WAAW,CAAC,YAAY,CAAC,CAAC,IAEjElI,2BAA2B,KACxBhC,KAAK,CAACkD,OAAO,CAAC,CACb,UAAU,EAAE,SAAS,CACtB,CAAC,IACAlD,KAAK,CAACkK,WAAW,CAAC,UAAU,CAAC,IAC3BlK,KAAK,CAACkK,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE;MACrC,OAAO,IAAI;IACb;IAEA,IAAIrM,UAAU,CAACsM,mBAAmB,CAChC9I,KAAK,EACLD,IAAI,EACJvB,OAAO,EACP;IACE6B,UAAU,CAAC0I,IAAI,CAACC,MAEpB,CAAC,EAAE;MACD,OAAO,IAAI;IACb;IAEA,MAAMC,UAAU,GAAGzK,OAAO,CAAC0K,OAAO,CAAC,CAAC,CAAC,EAAED,UAAU,IAAI,CACnD,YAAY,EACZ,IAAGxK,IAAI,KAAK,SAAS,GAAG,EAAE,GAAG,CAC3B,YAAY,CACb,EACF;IACD,IAAIwK,UAAU,CAAC5E,MAAM,IAAI1F,KAAK,CAACwK,cAAc,CAACF,UAAU,CAAC,CAAC5E,MAAM,EAAE;MAChE,OAAO,IAAI;IACb;IAEA,OAAO,KAAK;EACd,CAAC;EAED,KAAK,MAAM+E,MAAM,IAAI,CACnB,0BAA0B,EAC1B,0BAA0B,CAC3B,EAAE;IACD;IACAzK,KAAK,EACH;IACEyK,MAAM,EAET,GAAG,CAAC5J,OAAO,EAAE6J,aAAa,KAAK;MAC9B,MAAMC,MAAM,GAAG9M,UAAU,EACvB;MACC4M,MAAM,EACR,CAAC5J,OAAO,CAAC;MACV,IAAI8J,MAAM,EAAE;QACV,OAAO,IAAI;MACb;MAEA,IAAI,CAACD,aAAa,EAAE;QAClB,OAAO,KAAK;MACd;MAEA,MAAME,WAAW,GAAGF,aAAa,CAAC5H,IAAI,CAAE+H,YAAY,IAAK;QACvD,OAAOhN,UAAU,EACf;QACC4M,MAAM,EACR,CAAC5J,OAAO,EAAEgK,YAAY,CAAC;MAC1B,CAAC,CAAC;MAEF,OAAOD,WAAW,GAAG;QACnBE,SAAS,EAAE;MACb,CAAC,GAAG,KAAK;IACX,CAAC;EACH;;EAEA;EACA9K,KAAK,CAAC+K,gCAAgC,GAAG,CAAClK,OAAO,EAAE6J,aAAa,KAAK;IACnE,MAAMC,MAAM,GAAG9M,UAAU,CAACkN,gCAAgC,CAAClK,OAAO,CAAC;IACnE,IAAI,CAAC8J,MAAM,EAAE;MACX,OAAO,KAAK;IACd;IAEA,MAAMC,WAAW,GAAGF,aAAa,CAACM,KAAK,CAAEH,YAAY,IAAK;MACxD,OAAOhN,UAAU,CAACkN,gCAAgC,CAAClK,OAAO,EAAEgK,YAAY,CAAC;IAC3E,CAAC,CAAC;IAEF,OAAOD,WAAW,GAAG,IAAI,GAAG;MAC1BE,SAAS,EAAE;IACb,CAAC;EACH,CAAC;EAED,KAAK,MAAML,MAAM,IAAI,CACnB,yBAAyB,EACzB,yBAAyB,CAC1B,EAAE;IACD;IACAzK,KAAK,EACH;IACCyK,MAAM,EACR,GAAG,CAAC5J,OAAO,EAAE6J,aAAa,KAAK;MAC9B,MAAMC,MAAM,GAAG9M,UAAU,EACvB;MACC4M,MAAM,EACR,CAAC5J,OAAO,CAAC;MACV,IAAI,CAAC8J,MAAM,EAAE;QACX,OAAO,KAAK;MACd;;MAEA;;MAEA,MAAMC,WAAW,GAAGF,aAAa,CAACM,KAAK,CAAEH,YAAY,IAAK;QACxD,OAAOhN,UAAU,EACf;QACC4M,MAAM,EACR,CAAC5J,OAAO,EAAEgK,YAAY,CAAC;MAC1B,CAAC,CAAC;MAEF,OAAOD,WAAW,GAAG,IAAI,GAAG;QAC1BE,SAAS,EAAE;MACb,CAAC;IACH,CAAC;EACH;EAEA,KAAK,MAAML,MAAM,IAAI,CACnB,uBAAuB,EACvB,0BAA0B,EAC1B,+BAA+B,EAC/B,sBAAsB,CACvB,EAAE;IACD;IACAzK,KAAK,EACH;IACEyK,MAAM,EACN,GAAI5J,OAAO,IAAK;MAClB,OAAOhD,UAAU,EACf;MACC4M,MAAM,EACR,CAAC5J,OAAO,CAAC;IACZ,CAAC;EACH;;EAEA;EACAb,KAAK,CAACiL,sBAAsB,GAAIC,GAAG,IAAK;IACtC,OAAOrN,UAAU,CAACoN,sBAAsB,CAACC,GAAG,EAAE3J,QAAQ,CAAC4J,cAAc,CAAC;EACxE,CAAC;;EAED;EACAnL,KAAK,CAACoL,qBAAqB,GAAI1K,GAAG,IAAK;IACrC,OAAO7C,UAAU,CAACuN,qBAAqB,CAAC1K,GAAG,EAAEa,QAAQ,CAACzB,IAAI,CAAC;EAC7D,CAAC;;EAED;EACAE,KAAK,CAACqL,yCAAyC,GAAG,CAACC,kBAAkB,EAAEC,WAAW,KAAK;IACrF,OAAO1N,UAAU,CAACwN,yCAAyC,CACzD,mBAAqBjK,IAAI,EAAGkK,kBAAkB,EAAEC,WAClD,CAAC;EACH,CAAC;;EAED;EACAvL,KAAK,CAACwL,aAAa,GAAG,MAAM;IAC1B,IAAI,CACF,0BAA0B,EAAE,wBAAwB,CACrD,CAAChJ,QAAQ,CAAC,mBAAqBpB,IAAI,CAAEsB,IAAI,CAAC,EAAE;MAC3C,OAAO7E,UAAU,CAAC2N,aAAa,CAC7B;MACE;MACCpK,IAAI,CAAEyB,WAEX,CAAC;IACH;IAEA,OAAOhF,UAAU,CAAC2N,aAAa,CAAC,mBAAqBpK,IAAK,CAAC;EAC7D,CAAC;;EAED;EACApB,KAAK,CAACyL,mBAAmB,GAAG,MAAM;IAChC,OAAO5N,UAAU,CAAC2N,aAAa,CAAC,mBAAqBpK,IAAI,EAAG,IAAI,CAAC;EACnE,CAAC;;EAED;EACApB,KAAK,CAAC0L,aAAa,GAAG,MAAM;IAC1B,OAAO7N,UAAU,CAAC6N,aAAa,CAACtK,IAAI,CAAC;EACvC,CAAC;;EAED;EACApB,KAAK,CAAC2L,OAAO,GAAG,MAAM;IACpB,OAAO1I,OAAO,CAAC7B,IAAI,IAAI,OAAO,IAAIA,IAAI,IAAIA,IAAI,CAACwK,KAAK,CAAC;EACvD,CAAC;;EAED;EACA5L,KAAK,CAAC6L,OAAO,GAAIhL,OAAO,IAAK;IAC3B,OAAOhD,UAAU,CAACgO,OAAO,CAACxK,KAAK,EAAER,OAAO,CAAC;EAC3C,CAAC;;EAED;EACAb,KAAK,CAACwK,cAAc,GAAIsB,OAAO,IAAK;IAClC,OAAOjO,UAAU,CAACkO,UAAU,CAAC1K,KAAK,EAAGX,GAAG,IAAK;MAC3C,OAAOoL,OAAO,CAACtJ,QAAQ,CAAC9B,GAAG,CAACA,GAAG,CAAC;IAClC,CAAC,CAAC;EACJ,CAAC;;EAED;EACAV,KAAK,CAAC+L,UAAU,GAAIC,MAAM,IAAK;IAC7B,OAAOnO,UAAU,CAACkO,UAAU,CAAC1K,KAAK,EAAGX,GAAG,IAAK;MAC3C,OAAOsL,MAAM,CAACtL,GAAG,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC;;EAED;EACAV,KAAK,CAACiM,aAAa,GAAID,MAAM,IAAK;IAChC,MAAMhF,IAAI,GAAGnJ,UAAU,CAACqO,UAAU,CAAC7K,KAAK,CAAC;IACzC,OAAO2F,IAAI,CAACgF,MAAM,CAAEtL,GAAG,IAAK;MAC1B,OAAOsL,MAAM,CAACtL,GAAG,CAAC;IACpB,CAAC,CAAC;EACJ,CAAC;;EAED;EACAV,KAAK,CAACmM,aAAa,GAAInF,IAAI,IAAK;IAC9B,OAAOnJ,UAAU,CAACsO,aAAa,CAACtM,OAAO,EAAEC,IAAI,EAAEkH,IAAI,CAAC;EACtD,CAAC;;EAED;EACAhH,KAAK,CAACoM,YAAY,GAAIvL,OAAO,IAAK;IAChC,MAAM;MACJmG;IACF,CAAC,GAAGnH,OAAO,CAAC0K,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5B,OAAOtH,OAAO,CAAC+D,IAAI,IAAIA,IAAI,CAACxE,QAAQ,CAAC3B,OAAO,CAAC,CAAC;EAChD,CAAC;;EAED;EACAb,KAAK,CAACqM,YAAY,GAAG,MAAM;IACzB,OAAO,CACL,GAAGzK,SAAS,EAAER,IAAI,CACnB,CAACkL,OAAO,CAAC,CAAC,CAACC,IAAI,CAAEC,MAAM,IAAK;MAC3B,OAAOA,MAAM,IAAI,CACf,kBAAkB,EAAE,iBAAiB,CACtC,CAAChK,QAAQ,CAACgK,MAAM,CAAC9J,IAAI,CAAC;IACzB,CAAC,CAAC,IAAI,IAAI;EACZ,CAAC;;EAED;EACA1C,KAAK,CAACyM,aAAa,GAAG,MAAM;IAC1B,MAAMC,SAAS,GAAG1M,KAAK,CAACqM,YAAY,CAAC,CAAC;IAEtC,IAAI,CAACK,SAAS,EAAE;MACd,OAAO,IAAI;IACb;IAEA,MAAMC,cAAc,GAAG,IAAAC,6BAAe,EAAC9K,UAAU,EAAE4K,SAAS,EAAE;MAC5DvK,QAAQ;MACRC;IACF,CAAC,CAAC;IAEF,IAAIuK,cAAc,EAAE;MAClB,OAAO,IAAAE,0BAAY,EAACF,cAAc,EAAE,EAAE,CAAC;IACzC;IAEA,OAAO,IAAI;EACb,CAAC;;EAED;EACA3M,KAAK,CAACkK,WAAW,GAAIrJ,OAAO,IAAK;IAC/B,MAAMiM,UAAU,GAAG9M,KAAK,CAACyM,aAAa,CAAC,CAAC;IAExC,OAAOK,UAAU,KAAK,IAAI,IAAIjP,UAAU,CAACiM,MAAM,CAACgD,UAAU,EAAEjM,OAAO,CAAC;EACtE,CAAC;;EAED;EACAb,KAAK,CAAC+M,mBAAmB,GAAG,CAAClM,OAAO,EAAEmM,YAAY,EAAEC,uBAAuB,KAAK;IAC9E,OAAOpP,UAAU,CAACkP,mBAAmB,CACnC1L,KAAK,EAAER,OAAO,EAAEmM,YAAY,EAAE;MAC5BnN,OAAO;MACPC,IAAI;MACJK,MAAM;MACN8M,uBAAuB;MACvBlN;IACF,CACF,CAAC;EACH,CAAC;;EAED;EACAC,KAAK,CAACkN,WAAW,GAAG,CAACC,QAAQ,EAAEC,OAAO,KAAK;IACzC,MAAMC,YAAY,GAAGF,QAAQ,CAACZ,IAAI,CAAEe,KAAK,IAAK;MAC5C,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAC9BC,gBAAO,CAACC,OAAO,CACb,mBAAqBpM,IAAI,EACzBmM,gBAAO,CAACE,KAAK,CAACH,KAAK,CAAC,EACpBnH,SAAS,EACT;QACEuH,WAAW,EAAE5L,UAAU,CAAC4L;MAC1B,CACF,CAAC,GACD,CAAC,CAACJ,KAAK,CAACzN,OAAO,IAAIyN,KAAK,CAACzN,OAAO,KAAK,KAAK,IAC1C0N,gBAAO,CAACC,OAAO,CACb,mBAAqBpM,IAAI,EACzBmM,gBAAO,CAACE,KAAK,CAACH,KAAK,CAACzN,OAAO,CAAC,EAC5BsG,SAAS,EACT;QACEuH,WAAW,EAAE5L,UAAU,CAAC4L;MAC1B,CACF,CAAC,KAAKN,OAAO,KAAKE,KAAK,CAACF,OAAO;IACnC,CAAC,CAAC;IAEF,MAAMO,UAAU,GAAG,OAAON,YAAY,KAAK,QAAQ,GACjDA,YAAY,CAACxN,OAAO,IAAI,KAAK,GAC7B4C,MAAM,CAAC4K,YAAY,CAAC;IAEtB,OAAO;MACLM,UAAU;MACVN;IACF,CAAC;EACH,CAAC;EAED,OAAOrN,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM4N,WAAW,GAAI/N,OAAO,IAAK;EAC/B;EACA,MAAM0B,QAAQ,GAAG;IACf;IACAsM,aAAa,EAAE5K,OAAO,CAACpD,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEwM,aAAa,CAAC;IAC7DC,cAAc,EAAE7K,OAAO,CAACpD,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEyM,cAAc,CAAC;IAC/D3L,QAAQ,EAAE4L,MAAM,CAAClO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEc,QAAQ,IAAI,CAAC,CAAC;IACvDC,QAAQ,EAAE2L,MAAM,CAAClO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEe,QAAQ,IAAI,CAAC,CAAC;IAEvD;IACArC,iBAAiB,EAAEF,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEtB,iBAAiB,IAAI,CAAC,CAAC;IAElE;IACAiO,cAAc,EAAEnO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAE2M,cAAc,IAAI,CAAC,CAAC;IAE5D;IACA7C,cAAc,EAAEtL,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAE8J,cAAc,IAAI,CAAC,CAAC;IAE5D;IACA;IACA9I,oBAAoB,EAAExC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEgB,oBAAoB;IAClEJ,kBAAkB,EAAEpC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEY,kBAAkB;IAC9DC,sBAAsB,EAAErC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEa,sBAAsB;IACtEF,2BAA2B,EAAEnC,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEW,2BAA2B;IAEhF;IACAiM,iCAAiC,EAAEpO,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAE4M,iCAAiC;IAE5F;IACAnO,IAAI,EAAED,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAEvB,IAAI,IAAI,YAAY;IAElD;IACAqN,QAAQ,EAAEtN,OAAO,CAAC0B,QAAQ,CAACF,KAAK,EAAE8L;EACpC,CAAC;EACD;;EAEAtP,UAAU,CAACqQ,eAAe,CAAC3M,QAAQ,CAACzB,IAAI,CAAC;EACzC,IAAI;IACFjC,UAAU,CAACsQ,oBAAoB,CAAC5M,QAAQ,CAAC4J,cAAc,CAAC;EAC1D,CAAC,CAAC,OAAOiD,KAAK,EAAE;IACdvO,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDL,OAAO,EAAE,oBAAsBkO,KAAK,CAAElO;IACxC,CAAC,CAAC;IAEF,OAAO,KAAK;EACd;EAEA,OAAOqB,QAAQ;AACjB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AAAA8M,OAAA,CAAAT,WAAA,GAAAA,WAAA;AACA,MAAMU,UAAU,GAAGA,CAACzO,OAAO,EAAE0O,WAAW,KAAK;EAC3C;EACA,MAAMpO,MAAM,GAAGA,CAACD,OAAO,EAAEsO,GAAG,GAAG,IAAI,EAAEC,QAAQ,GAAG,IAAI,EAAE9K,IAAI,GAAGwC,SAAS,KAAK;IACzE,IAAI/F,GAAG;IAEP,IAAIqO,QAAQ,EAAE;MACZ,IAAI,EAAE,MAAM,IAAIA,QAAQ,CAAC,EAAE;QACzBA,QAAQ,CAAClO,IAAI,GAAG,+DACdkO,QAAQ,CACRxJ,MAAM,CAAC,CAAC,CAAC,CAACyB,MAAM;MACpB;MAEA,MAAMgI,UAAU,GAAG,kDACjBH,WAAW,CAACnO,GAAG,CACfI,KAAK,CAACD,IAAI,IACZ,sBAAwBkO,QAAQ,CAAClO,IAAI,CAAC;MAEtCH,GAAG,GAAG;QACJC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAEmO;QACR,CAAC;QACDlO,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAEmO;QACR;MACF,CAAC;MAED,IAAI,QAAQ,IAAID,QAAQ,IAAI,OAAOA,QAAQ,CAACnO,MAAM,KAAK,QAAQ,EAAE;QAC/D,MAAMqO,SAAS,GAAG,kDAChBJ,WAAW,CAACnO,GAAG,CACfI,KAAK,CAACF,MAAM,GAAGmO,QAAQ,CAACnO,MAAM;QAEhCF,GAAG,CAACC,GAAG,CAACC,MAAM,GAAGqO,SAAS;QAC1BvO,GAAG,CAACI,KAAK,CAACF,MAAM,GAAGqO,SAAS;MAC9B;IACF;IAEA9O,OAAO,CAACM,MAAM,CAAC;MACbwD,IAAI;MACJ6K,GAAG;MACHpO,GAAG;MACHF,OAAO;MACPkB,IAAI,EAAEmN;IACR,CAAC,CAAC;EACJ,CAAC;EAED,OAAOpO,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMyO,OAAO,GAAGA,CACd5I,IAAI,EACJrE,MAAM,EAAEN,KAAK,EACbK,UAAU,EAAE7B,OAAO,EAAEyB,SAAS,EAAEF,IAAI,EAAEG,QAAQ,EAC9CO,UAAU,EAAE+M,QAAQ,EAAEC,KAAK,EAAErN,YAAY,KACtC;EACH,MAAMsN,QAAQ,GAAG,sBAAwBzN,SAAU;EACnD,MAAMnB,MAAM,GAAGmO,UAAU,CACvBzO,OAAO,EACP;EACCkP,QACH,CAAC;EAED,MAAM/O,KAAK,GAAGmB,QAAQ,CACpBC,IAAI,EACJC,KAAK,EACL;EACCC,SAAS,EACVC,QAAQ,EACRpB,MAAM,EACNN,OAAO,EACPiC,UAAU,EACVL,YAAY,EACZC,UAAU,EACVC,MACF,CAAC;EAED,IACE,CAACD,UAAU,CAACsN,aAAa,IAAIzN,QAAQ,CAACuM,cAAc,IACpD9N,KAAK,CAAC8J,MAAM,C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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterateJsdoc.d.ts","sourceRoot":"","sources":["../src/iterateJsdoc.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"iterateJsdoc.d.ts","sourceRoot":"","sources":["../src/iterateJsdoc.js"],"names":[],"mappings":"AAwzEA;;;;GAIG;AACH,+CAJW,YAAY,cACZ,UAAU,GACR,OAAO,QAAQ,EAAE,IAAI,CAAC,UAAU,CA8K5C;;sBA59EY,MAAM;mCAIN,OAAO,sBAAsB,EAAE,oBAAoB;4BAInD;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;sBAGS,MAAM,GAAC,aAAa;gCAKtB;IACN,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,WACO,IAAI,GAAC,CAAC,CAAC,KAAK,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,KAAK,OAAO,GAAC,SAAS,CAAC,QACxF,OAAO,QAAQ,EAAE,IAAI,CAAC,IAAI,KACxB,IAAI;4CAKN,MAAM,gBACN,CACN,gBAAgB,EAAE,OAAO,sBAAsB,EAAE,kBAAkB,EACnE,aAAa,EAAE,MAAM,KAClB,IAAI,oDAEC,IAAI;uCAKN,MAAM,KACJ,IAAI;4CAKN,OAAO,gBAAgB,EAAE,IAAI,KAC3B,MAAM,EAAE;8CAKV;IACN,OAAO,EAAE,MAAM,CAAA;CAChB,KACS,MAAM,GAAC,KAAK,GAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAC,SAAS,CAAA;CAC/B,GAAC;IACA,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;yBAIS;IACR,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,cAAc,EAAE,cAAc,CAAC;IAC/B,uBAAuB,EAAE,uBAAuB,CAAC;IACjD,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,oBAAoB,EAAE,OAAO,iBAAiB,EAAE,oBAAoB,CAAA;CACrE;wCAKS,OAAO;sCAKP,OAAO;mCAKT,OAAO,gBAAgB,EAAE,KAAK,uCAE5B,MAAM;gCAKR,MAAM;UACoC,OAAO;aAAW,OAAO;uCAC5D,IAAI,+DAEX,SAAS,GAAC;IACpB,CAAK,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB;uCAKO,MAAM,yCAEJ,MAAM;qCAKR,OAAO,gBAAgB,EAAE,IAAI,wCAE3B,MAAM,EAAE,GAAC,MAAM;qCAKjB,OAAO,gBAAgB,EAAE,IAAI,WAC7B,MAAM,UACN,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,KAC7B,OAAO;mCAKP;IACR,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAA;CAC7B;2CAKO,CACN,IAAI,EAAE;IACJ,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAA;CACd,EACD,UAAU,EAAE,CACV,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,gBAAgB,EAAE,MAAM,CAAC,KAC9C,OAAO,gBAAgB,EAAE,MAAM,EACpC,SAAS,EAAE,MAAM,EAAE,KAChB,OAAO,gBAAgB,EAAE,IAAI,EAAE,KAC1B,IAAI;4CAKN,MAAM,UACN,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,KAC7B,OAAO;8BAKT,OAAO,gBAAgB,EAAE,IAAI,aAC1B,OAAO,CAAC,OAAO,gBAAgB,EAAE,MAAM,CAAC,EAAA,KACzC,IAAI;2BAKN,OAAO,gBAAgB,EAAE,IAAI,GAAG;IACtC,IAAI,EAAE,OAAO,CAAA;CACd,oEAES,IAAI;mCAKN,OAAO;uBAEM,OAAO;sBACR,OAAO;kBAEjB,IAAI;qCAKN,MAAM,6FAGJ,IAAI;iCAKJ,OAAO,GAAC,SAAS;yBAIjB,CACR,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,gBAAgB,EAAE,MAAM,CAAC,GAAG,SAAS,KAC1D,OAAO,gBAAgB,EAAE,MAAM;;;;mCAM5B,OAAO,gBAAgB,EAAE,MAAM,KAC7B,IAAI;oCAKN,OAAO,UACP,OAAO,CAAC,OAAO,gBAAgB,EAAE,MAAM,CAAC,KACtC,IAAI;kCAKN,OAAO,mBACP,OAAO,YACP,OAAO,KACL,IAAI;kCAKJ,IAAI;8FAMJ,OAAO,iBAAiB,EAAE,aAAa,EAAE;8BAKzC,OAAO;gCAKP,OAAO;kCAKP,OAAO;yCAKT,MAAM,KACJ,KAAK,GAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAA;CACb,EAAE;wCAKK;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,KACS,MAAM,GAAC,SAAS,GAAC,KAAK,GAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAC,SAAS,CAAC;CAChC,GAAC;IACA,OAAO,EAAE,IAAI,CAAC;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;gCAKO,MAAM,eACN,MAAM,EAAE,KACN,OAAO;8BAKT,MAAM,EAAE,KACN,OAAO;4BAKT,MAAM,KACJ,OAAO;kCAKT,MAAM,KACJ,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO;2CAKpC,MAAM,KACJ,MAAM;8BAKN,OAAO;6DAKT,MAAM,8FAGJ,OAAO,GAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAC;oCAK3B,MAAM,iBACN,OAAO,oCAAoC,EACjD,YAAY,EAAE,KACN,OAAO,GAAC;IAChB,SAAS,EAAE,KAAK,CAAA;CACjB;qDAKO,OAAO,gBAAgB,EAAE,IAAI,iBAC7B,OAAO,oCAAoC,EACjD,YAAY,EAAE,KACN,OAAO,GAAC;IAChB,SAAS,EAAE,KAAK,CAAA;CACjB;oCAKO,MAAM,KACJ,OAAO;2CAKT,OAAO,iBAAiB,EAAE,UAAU,KAClC,OAAO,oCAAoC,EAAE,YAAY;0CAK3D,OAAO,gBAAgB,EAAE,IAAI,KAC3B,OAAO;6EAKT,OAAO,wCAEL,OAAO;kCAKP,OAAO;wCAKP,OAAO;kCAKP,OAAO;4BAKP,OAAO,GAAC,SAAS;gCAKnB,MAAM,KACJ,OAAO,gBAAgB,EAAE,IAAI,EAAE;uCAKjC,MAAM,EAAE,KACN,OAAO,sBAAsB,EAAE,kBAAkB,EAAE;kCAKrD,CAAC,GAAG,EAAE,OAAO,sBAAsB,EAAE,kBAAkB,KAAK,OAAO,KACjE,OAAO,sBAAsB,EAAE,kBAAkB,EAAE;qCAKrD,CAAC,GAAG,EAAE,CAAC,OAAO,gBAAgB,EAAE,IAAI,GAC9C,OAAW,sBAAsB,EAAE,oBAAoB,CAAC,KAAK,OAAO,KACxD,CAAC,OAAO,gBAAgB,EAAE,IAAI,GAC1C,OAAW,sBAAsB,EAAE,oBAAoB,CAAC,EAAE;mCAKhD,OAAO,gBAAgB,EAAE,IAAI,EAAE,KAC7B;IACR,aAAa,EAAE,OAAO,gBAAgB,EAAE,IAAI,EAAE,CAAC;IAC/C,gBAAgB,EAAE,OAAO,gBAAgB,EAAE,IAAI,EAAE,CAAA;CAClD;qCAKO,MAAM,KACJ,OAAO;iCAKP,IAAI,GAAC,IAAI;kCAKT,IAAI,GAAC,oBAAoB;oCAK3B,MAAM,KACJ,OAAO;qCAKT,OAAO,EAAE,WACT,MAAM,GAAC,SAAS,KACd;IACR,YAAY,EAAE,OAAO,GAAC,SAAS,CAAC;IAChC,UAAU,EAAE,MAAM,CAAA;CACnB;oBAIS,UAAU,GAAG;IACrB,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,6BAA6B,EAAE,mBAAmB,CAAC;IACnD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,cAAc,CAAC;IAC/B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,OAAO,iBAAiB,EAAE,YAAY,CAAC;IACrD,yBAAyB,EAAE,yBAAyB,CAAC;IACrD,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,SAAS,EAAE,SAAS,CAAC;IACrB,wBAAwB,EAAE,oCAAoC,CAAC;IAC/D,wBAAwB,EAAE,oCAAoC,CAAC;IAC/D,uBAAuB,EAAE,WAAW,CAAC;IACrC,uBAAuB,EAAE,WAAW,CAAC;IACrC,gCAAgC,EAAE,gCAAgC,CAAC;IACnE,qBAAqB,EAAE,WAAW,CAAC;IACnC,wBAAwB,EAAE,WAAW,CAAC;IACtC,6BAA6B,EAAE,WAAW,CAAC;IAC3C,oBAAoB,EAAE,WAAW,CAAC;IAClC,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,yCAAyC,EAAE,yCAAyC,CAAC;IACrF,aAAa,EAAE,aAAa,CAAC;IAC7B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAA;CACzB;;;;6BAYS,OAAO,QAAQ,EAAE,IAAI,CAAC,YAAY;;;;0BAKlC;IACR,UAAU,EAAE,EAAE,CAAC;IACf,aAAa,EAAE;QACnB,CAAO,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAC;IACF,WAAW,EAAE;QACjB,CAAO,QAAQ,EAAE,MAAM,GAAG;YAC1B,CAAS,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;SAC3B,CAAA;KACF,CAAC;IACF,MAAM,EAAE;QACZ,CAAO,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KACvB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,sBAAsB,EAAE;QAC5B,CAAO,GAAG,EAAE,MAAM,GAAG,OAAO,GAAC,MAAM,CAAA;KAC9B,CAAA;CACF;;;;mBAKS,OAAO,QAAQ,EAAE,IAAI,CAAC,IAAI;+BA6E5B,MAAM;WAGJ,OAAO;aAAW,OAAO;;WACO,OAAO;8BAEzC,SAAS,GAAC;IACpB,CAAK,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CACtB,KACS,IAAI;6BAsiCJ;IACZ,CAAK,GAAG,EAAE,MAAM,GAAG,KAAK,GAAC,MAAM,GAAC;QAC1B,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,KAAK,GAAC,MAAM,CAAA;QAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAC3B,CAAA;CACF;6BAGS;IACZ,CAAK,GAAG,EAAE,MAAM,GAAG;QACb,IAAI,CAAC,EAAE,MAAM,GAAC,mBAAmB,GAAC,sBAAsB,GAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,EAAE,OAAO,GAAC,MAAM,EAAE,CAAC;QACxB,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAC,MAAM,GAAC,oBAAoB,CAAC,EAAE,CAAA;KAClD,CAAA;CACF;;;;uBAIS;IACR,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,iBAAiB,EAAE,OAAO,iBAAiB,EAAE,iBAAiB,CAAC;IAC/D,IAAI,EAAE,OAAO,iBAAiB,EAAE,UAAU,CAAC;IAC3C,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,cAAc,CAAC;IACnC,CAAK,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;CACrB;4BAIS;IACR,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE;YACN,aAAa,EAAE,OAAO,CAAC;YACvB,cAAc,EAAE,OAAO,CAAC;YACxB,QAAQ,EAAE,OAAO,CAAC;YAClB,QAAQ,EAAE,OAAO,CAAC;YAClB,iBAAiB,EAAE,OAAO,iBAAiB,EAAE,iBAAiB,CAAC;YAC/D,cAAc,EAAE,cAAc,CAAC;YAC/B,cAAc,EAAE,cAAc,CAAC;YAC/B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,kBAAkB,EAAE,OAAO,CAAC;YAC5B,sBAAsB,EAAE,OAAO,CAAC;YAChC,2BAA2B,EAAE,OAAO,CAAC;YACrC,iCAAiC,EAAE,OAAO,CAAC;YAC3C,IAAI,EAAE,OAAO,iBAAiB,EAAE,UAAU,CAAC;YAC3C,QAAQ,EAAE,OAAO,EAAE,CAAC;SACrB,CAAA;KACF,CAAA;CACF;;;;mCAsEO,OAAO,QAAQ,EAAE,IAAI,CAAC,WAAW,eACjC,OAAO,QAAQ,EAAE,IAAI,KACnB,MAAM;gCAuDN,CACR,GAAG,EAAE;IACH,OAAO,EAAE,OAAO,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;IAC3C,UAAU,EAAE,OAAO,QAAQ,EAAE,UAAU,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,GAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,EAAE,OAAO,GAAC,SAAS,CAAA;KAC9B,CAAC;IACF,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG;QACvC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxB,CAAC;IACF,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,QAAQ,EAAE,IAAI,EAAE,CAAA;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;CACnB,KACE,GAAG;2BAGE,CACR,GAAG,EAAE;IACH,OAAO,EAAE,OAAO,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;IAC3C,UAAU,EAAE,OAAO,QAAQ,EAAE,UAAU,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE;QACJ,OAAO,CAAC,EAAE,MAAM,GAAC,SAAS,CAAC;QAC3B,SAAS,CAAC,EAAE,OAAO,GAAC,SAAS,CAAA;KAC9B,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;IACnB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,KAAK,EAAE,oBAAoB,CAAC;IAC5B,SAAS,EAAE,OAAO,QAAQ,EAAE,IAAI,CAAC,IAAI,GAAG;QACtC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxB,CAAC;IACF,IAAI,EAAE,IAAI,GAAC,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,QAAQ,EAAE,IAAI,EAAE,CAAA;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;CACd,KACE,GAAG;6BA8HE;IAAC,IAAI,EAAE,IAAI,GAAG;QACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxB,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAC;;;;;UAKX,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAYP;QAChB,OAAO,EAAE,OAAO,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC;QAC3C,KAAK,EAAE,WAAW,CAAC;QACnB,QAAQ,EAAE,QAAQ,CAAC;QACnB,KAAK,EAAE,UAAU,CAAA;KAClB,KAAK,IAAI;;;;;wBACO,cAAc,KAAK,IAAI;;AAzX3C;;;;;;;;GAQG;AACH;;;;;;;;GAQG;AACH;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;GAGG;AACH,qCAHW,OAAO,QAAQ,EAAE,IAAI,CAAC,WAAW,GAAG,aAAa,GAC/C,QAAQ,GAAC,KAAK,CA4D1B;4BAhzD2B,iBAAiB"}
|
|
@@ -257,8 +257,10 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
257
257
|
}).filter(Boolean);
|
|
258
258
|
}
|
|
259
259
|
return [];
|
|
260
|
-
})()).concat(...getValidRuntimeIdentifiers(node && (sourceCode.getScope && /* c8 ignore next
|
|
261
|
-
sourceCode.getScope(node) ||
|
|
260
|
+
})()).concat(...getValidRuntimeIdentifiers(node && (sourceCode.getScope && /* c8 ignore next 3 */
|
|
261
|
+
sourceCode.getScope(node) ||
|
|
262
|
+
// @ts-expect-error ESLint 8
|
|
263
|
+
context.getScope()))).concat(settings.mode === 'jsdoc' ? [] : [...(settings.mode === 'typescript' ? typescriptGlobals : []), ...closureGenericTypes]));
|
|
262
264
|
|
|
263
265
|
/**
|
|
264
266
|
* @typedef {{
|
|
@@ -355,8 +357,9 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
355
357
|
} else if (markVariablesAsUsed && !extraTypes.includes(val)) {
|
|
356
358
|
if (sourceCode.markVariableAsUsed) {
|
|
357
359
|
sourceCode.markVariableAsUsed(val);
|
|
358
|
-
/* c8 ignore next
|
|
360
|
+
/* c8 ignore next 4 */
|
|
359
361
|
} else {
|
|
362
|
+
// @ts-expect-error ESLint 8
|
|
360
363
|
context.markVariableAsUsed(val);
|
|
361
364
|
}
|
|
362
365
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","init","callee","id","methodOrProp","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","includes","right","structuredTypes","Array","isArray","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 3 */\n } else {\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"noUndefinedTypes.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdoccomment","_parseImportsExports","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","extraTypes","typescriptGlobals","stripPseudoTypes","str","replace","_default","exports","iterateJsdoc","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","disableReporting","markVariablesAsUsed","options","definedPreferredTypes","mode","preferredTypes","structuredTags","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","Boolean","allComments","getAllComments","comments","comment","test","value","commentNode","parseComment","globals","flatMap","trim","split","concat","languageOptions","typedefDeclarations","doc","tags","tag","isNamepathDefiningTag","name","importTags","description","type","typePart","imprt","importsExports","parseImportsExports","types","namedImports","push","names","namespaceImports","namespace","ancestorNodes","currentNode","parent","getTemplateTags","ancestorNode","getJSDocComment","jsdoc","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","getValidRuntimeIdentifiers","scope","result","Set","scp","variables","add","upper","imports","allDefinedTypes","identifiers","globalItem","body","item","property","key","init","callee","id","methodOrProp","getScope","tagToParsedType","propertyName","potentialType","parsedType","tryParseType","parseType","typeTags","filterTags","tagMightHaveTypePosition","namepathReferencingTags","isNamepathReferencingTag","namepathOrUrlReferencingTags","filterAllTags","isNamepathOrUrlReferencingTag","tagsWithTypes","traverse","nde","parentNode","_parent","val","currNode","includes","right","structuredTypes","Array","isArray","markVariableAsUsed","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/noUndefinedTypes.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function', 'Intl',\n];\n\nconst typescriptGlobals = [\n // https://www.typescriptlang.org/docs/handbook/utility-types.html\n 'Awaited',\n 'Partial',\n 'Required',\n 'Readonly',\n 'Record',\n 'Pick',\n 'Omit',\n 'Exclude',\n 'Extract',\n 'NonNullable',\n 'Parameters',\n 'ConstructorParameters',\n 'ReturnType',\n 'InstanceType',\n 'ThisParameterType',\n 'OmitThisParameter',\n 'ThisType',\n 'Uppercase',\n 'Lowercase',\n 'Capitalize',\n 'Uncapitalize',\n];\n\n/**\n * @param {string|false|undefined} [str]\n * @returns {undefined|string|false}\n */\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/v, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n\n // When is this ever `null`?\n const globalScope = /** @type {import('eslint').Scope.Scope} */ (\n scopeManager.globalScope\n );\n\n const\n /**\n * @type {{\n * definedTypes: string[],\n * disableReporting: boolean,\n * markVariablesAsUsed: boolean\n * }}\n */ {\n definedTypes = [],\n disableReporting = false,\n markVariablesAsUsed = true,\n } = context.options[0] || {};\n\n /** @type {(string|undefined)[]} */\n let definedPreferredTypes = [];\n const {\n mode,\n preferredTypes,\n structuredTags,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = /** @type {string[]} */ (Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter(Boolean));\n }\n\n const allComments = sourceCode.getAllComments();\n const comments = allComments\n .filter((comment) => {\n return (/^\\*\\s/v).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n });\n\n const globals = allComments\n .filter((comment) => {\n return (/^\\s*globals/v).test(comment.value);\n }).flatMap((commentNode) => {\n return commentNode.value.replace(/^\\s*globals/v, '').trim().split(/,\\s*/v);\n }).concat(Object.keys(context.languageOptions.globals ?? []));\n\n const typedefDeclarations = comments\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const importTags = settings.mode === 'typescript' ? /** @type {string[]} */ (comments.flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return tag === 'import';\n });\n }).flatMap((tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n const types = [];\n const namedImports = Object.values(importsExports.namedImports || {})[0]?.[0];\n if (namedImports) {\n if (namedImports.default) {\n types.push(namedImports.default);\n }\n\n if (namedImports.names) {\n types.push(...Object.keys(namedImports.names));\n }\n }\n\n const namespaceImports = Object.values(importsExports.namespaceImports || {})[0]?.[0];\n if (namespaceImports) {\n if (namespaceImports.namespace) {\n types.push(namespaceImports.namespace);\n }\n\n if (namespaceImports.default) {\n types.push(namespaceImports.default);\n }\n }\n\n return types;\n }).filter(Boolean)) : [];\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n /**\n * @param {import('eslint').Rule.Node} ancestorNode\n * @returns {import('comment-parser').Spec[]}\n */\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdoc.tags.filter((tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags([\n 'template',\n ]);\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block?.type === 'Program';\n\n /**\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {Set<string>}\n */\n const getValidRuntimeIdentifiers = (scope) => {\n const result = new Set();\n\n let scp = scope;\n while (scp) {\n for (const {\n name,\n } of scp.variables) {\n result.add(name);\n }\n\n scp = scp.upper;\n }\n\n return result;\n };\n\n /**\n * We treat imports differently as we can't introspect their children.\n * @type {string[]}\n */\n const imports = [];\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).flatMap(({\n identifiers,\n name,\n }) => {\n const globalItem = /** @type {import('estree').Identifier & {parent: import('@typescript-eslint/types').TSESTree.Node}} */ (\n identifiers?.[0]\n )?.parent;\n switch (globalItem?.type) {\n case 'ClassDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.PropertyDefinition} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'ImportDefaultSpecifier':\n case 'ImportNamespaceSpecifier':\n case 'ImportSpecifier':\n imports.push(name);\n break;\n case 'TSInterfaceDeclaration':\n return [\n name,\n ...globalItem.body.body.map((item) => {\n const property = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.TSPropertySignature} */ (\n item)?.key)?.name;\n /* c8 ignore next 3 -- Guard */\n if (!property) {\n return '';\n }\n\n return `${name}.${property}`;\n }).filter(Boolean),\n ];\n case 'VariableDeclarator':\n if (/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n /** @type {import('@typescript-eslint/types').TSESTree.CallExpression} */ (\n globalItem?.init\n )?.callee)?.name === 'require'\n ) {\n imports.push(/** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n globalItem.id\n ).name);\n break;\n }\n\n return [];\n }\n\n return [\n name,\n ];\n /* c8 ignore next */\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(importTags)\n .concat(definedTypes)\n .concat(/** @type {string[]} */ (definedPreferredTypes))\n .concat((() => {\n // Other methods are not in scope, but we need them, and we grab them here\n if (node?.type === 'MethodDefinition') {\n return /** @type {import('estree').ClassBody} */ (node.parent).body.flatMap((methodOrProp) => {\n if (methodOrProp.type === 'MethodDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n\n if (methodOrProp.type === 'PropertyDefinition') {\n // eslint-disable-next-line unicorn/no-lonely-if -- Pattern\n if (methodOrProp.key.type === 'Identifier') {\n return [\n methodOrProp.key.name,\n `${/** @type {import('estree').ClassDeclaration} */ (\n node.parent?.parent\n )?.id?.name}.${methodOrProp.key.name}`,\n ];\n }\n }\n /* c8 ignore next 2 -- Not yet built */\n\n return '';\n }).filter(Boolean);\n }\n\n return [];\n })())\n .concat(...getValidRuntimeIdentifiers(node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n )))\n .concat(\n settings.mode === 'jsdoc' ?\n [] :\n [\n ...settings.mode === 'typescript' ? typescriptGlobals : [],\n ...closureGenericTypes,\n ],\n ));\n\n /**\n * @typedef {{\n * parsedType: import('jsdoc-type-pratt-parser').RootResult;\n * tag: import('comment-parser').Spec|import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * line?: import('../iterateJsdoc.js').Integer\n * }\n * }} TypeAndTagInfo\n */\n\n /**\n * @param {string} propertyName\n * @returns {(tag: (import('@es-joy/jsdoccomment').JsdocInlineTagNoType & {\n * name?: string,\n * type?: string,\n * line?: import('../iterateJsdoc.js').Integer\n * })|import('comment-parser').Spec & {\n * namepathOrURL?: string\n * }\n * ) => undefined|TypeAndTagInfo}\n */\n const tagToParsedType = (propertyName) => {\n return (tag) => {\n try {\n const potentialType = tag[\n /** @type {\"type\"|\"name\"|\"namepathOrURL\"} */ (propertyName)\n ];\n return {\n parsedType: mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode),\n tag,\n };\n } catch {\n return undefined;\n }\n };\n };\n\n const typeTags = utils.filterTags(({\n tag,\n }) => {\n return tag !== 'import' && utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n }).map(tagToParsedType('type'));\n\n const namepathReferencingTags = utils.filterTags(({\n tag,\n }) => {\n return utils.isNamepathReferencingTag(tag);\n }).map(tagToParsedType('name'));\n\n const namepathOrUrlReferencingTags = utils.filterAllTags(({\n tag,\n }) => {\n return utils.isNamepathOrUrlReferencingTag(tag);\n }).map(tagToParsedType('namepathOrURL'));\n\n const tagsWithTypes = /** @type {TypeAndTagInfo[]} */ ([\n ...typeTags,\n ...namepathReferencingTags,\n ...namepathOrUrlReferencingTags,\n // Remove types which failed to parse\n ].filter(Boolean));\n\n for (const {\n parsedType,\n tag,\n } of tagsWithTypes) {\n traverse(parsedType, (nde, parentNode) => {\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */\n // eslint-disable-next-line canonical/id-match -- Avoid clashes\n (nde)._parent = parentNode;\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n\n let val = value;\n\n /** @type {import('jsdoc-type-pratt-parser').NonRootResult|undefined} */\n let currNode = nde;\n do {\n currNode =\n /**\n * @type {import('jsdoc-type-pratt-parser').NameResult & {\n * _parent?: import('jsdoc-type-pratt-parser').NonRootResult\n * }}\n */ (currNode)._parent;\n if (\n // Avoid appending for imports and globals since we don't want to\n // check their properties which may or may not exist\n !imports.includes(val) && !globals.includes(val) &&\n !importTags.includes(val) &&\n !extraTypes.includes(val) &&\n !typedefDeclarations.includes(val) &&\n currNode && 'right' in currNode &&\n currNode.right?.type === 'JsdocTypeProperty') {\n val = val + '.' + currNode.right.value;\n }\n } while (currNode?.type === 'JsdocTypeNamePath');\n\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(val) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(val))\n ) {\n if (!disableReporting) {\n report(`The type '${val}' is undefined.`, null, tag);\n }\n } else if (markVariablesAsUsed && !extraTypes.includes(val)) {\n if (sourceCode.markVariableAsUsed) {\n sourceCode.markVariableAsUsed(val);\n /* c8 ignore next 4 */\n } else {\n // @ts-expect-error ESLint 8\n context.markVariableAsUsed(val);\n }\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/no-undefined-types.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n disableReporting: {\n type: 'boolean',\n },\n markVariablesAsUsed: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -204,8 +204,10 @@ const isExemptedImplementer = (node, sourceCode, context, settings) => {
|
|
|
204
204
|
name: interfaceName
|
|
205
205
|
} = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */
|
|
206
206
|
impl.expression;
|
|
207
|
-
const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (sourceCode.getScope && /* c8 ignore next
|
|
208
|
-
sourceCode.getScope(node) ||
|
|
207
|
+
const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (sourceCode.getScope && /* c8 ignore next 3 */
|
|
208
|
+
sourceCode.getScope(node) ||
|
|
209
|
+
// @ts-expect-error ESLint 8
|
|
210
|
+
context.getScope()));
|
|
209
211
|
if (interfaceMethodNode) {
|
|
210
212
|
// @ts-expect-error Ok
|
|
211
213
|
const comment = (0, _jsdoccomment.getJSDocComment)(sourceCode, interfaceMethodNode, settings);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireJsdoc.cjs","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","_jsdocUtils","_jsdoccomment","e","__esModule","default","OPTIONS_SCHEMA","additionalProperties","properties","checkConstructors","type","checkGetters","anyOf","enum","checkSetters","contexts","items","context","inlineCommentBlock","minLineCount","enableFixer","exemptEmptyConstructors","exemptEmptyFunctions","fixerMessage","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getMethodOnInterface","interfaceName","methodName","scope","scp","identifiers","name","variables","identifier","interfaceDeclaration","parent","bodyItem","body","methodSig","key","upper","isExemptedImplementer","node","sourceCode","settings","implments","implements","impl","expression","interfaceMethodNode","getScope","comment","getJSDocComment","getOption","baseObject","option","options","getOptions","undefined","baseObj","prop","Object","keys","opt","_default","exports","create","getSourceCode","getSettings","opts","requireOption","checkJsDoc","info","_handler","some","ctxt","count","underMinLine","getText","match","length","contextMinLineCount","find","ctx","selector","jsDocNode","exemptSpeciaMethods","description","inlineTags","problems","source","tags","isFunctionContext","isConstructor","functionParameterNames","getFunctionParameterNames","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","loc","start","column","contxt","insertion","repeat","slice","insertTextBefore","report","end","line","messageId","Boolean","initModuleExports","initWindow","exported","exportParser","isUncommentedExport","hasOption","getContextObject","enforcedContexts","includes","value","meta","docs","category","recommended","url","fixable","messages","missingJsDoc","schema","module"],"sources":["../../src/rules/requireJsdoc.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n exemptSpeciaMethods,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n hasReturnValue,\n isConstructor,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getJSDocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {{\n * ancestorsOnly: boolean,\n * esm: boolean,\n * initModuleExports: boolean,\n * initWindow: boolean\n * }} RequireJsdocOpts\n */\n\n/**\n * @typedef {import('eslint').Rule.Node|\n * import('@typescript-eslint/types').TSESTree.Node} ESLintOrTSNode\n */\n\n/** @type {import('json-schema').JSONSchema4} */\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-setter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n checkSetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-getter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n minLineCount: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyConstructors: {\n default: false,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n fixerMessage: {\n default: '',\n type: 'string',\n },\n minLineCount: {\n type: 'integer',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\n/**\n * @param {string} interfaceName\n * @param {string} methodName\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {import('@typescript-eslint/types').TSESTree.TSMethodSignature|null}\n */\nconst getMethodOnInterface = (interfaceName, methodName, scope) => {\n let scp = scope;\n while (scp) {\n for (const {\n identifiers,\n name,\n } of scp.variables) {\n if (interfaceName !== name) {\n continue;\n }\n\n for (const identifier of identifiers) {\n const interfaceDeclaration = /** @type {import('@typescript-eslint/types').TSESTree.Identifier & {parent: import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration}} */ (\n identifier\n ).parent;\n /* c8 ignore next 3 -- TS */\n if (interfaceDeclaration.type !== 'TSInterfaceDeclaration') {\n continue;\n }\n\n for (const bodyItem of interfaceDeclaration.body.body) {\n const methodSig = /** @type {import('@typescript-eslint/types').TSESTree.TSMethodSignature} */ (\n bodyItem\n );\n if (methodName === /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n methodSig.key\n ).name) {\n return methodSig;\n }\n }\n }\n }\n\n scp = scp.upper;\n }\n\n return null;\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n */\nconst isExemptedImplementer = (node, sourceCode, context, settings) => {\n if (node.type === 'FunctionExpression' &&\n node.parent.type === 'MethodDefinition' &&\n node.parent.parent.type === 'ClassBody' &&\n node.parent.parent.parent.type === 'ClassDeclaration' &&\n 'implements' in node.parent.parent.parent\n ) {\n const implments = /** @type {import('@typescript-eslint/types').TSESTree.TSClassImplements[]} */ (\n node.parent.parent.parent.implements\n );\n\n const {\n name: methodName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.parent.key\n );\n\n for (const impl of implments) {\n const {\n name: interfaceName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n impl.expression\n );\n\n const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n ));\n if (interfaceMethodNode) {\n // @ts-expect-error Ok\n const comment = getJSDocComment(sourceCode, interfaceMethodNode, settings);\n if (comment) {\n return true;\n }\n }\n }\n }\n\n return false;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4Object} baseObject\n * @param {string} option\n * @param {string} key\n * @returns {boolean|undefined}\n */\nconst getOption = (context, baseObject, option, key) => {\n if (context.options[0] && option in context.options[0] &&\n // Todo: boolean shouldn't be returning property, but\n // tests currently require\n (typeof context.options[0][option] === 'boolean' ||\n key in context.options[0][option])\n ) {\n return context.options[0][option][key];\n }\n\n return /** @type {{[key: string]: {default?: boolean|undefined}}} */ (\n baseObject.properties\n )[key].default;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {{\n * contexts: (string|{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * })[],\n * enableFixer: boolean,\n * exemptEmptyConstructors: boolean,\n * exemptEmptyFunctions: boolean,\n * fixerMessage: string,\n * minLineCount: undefined|import('../iterateJsdoc.js').Integer,\n * publicOnly: boolean|{[key: string]: boolean|undefined}\n * require: {[key: string]: boolean|undefined}\n * }}\n */\nconst getOptions = (context, settings) => {\n const {\n contexts = settings.contexts || [],\n enableFixer = true,\n exemptEmptyConstructors = true,\n exemptEmptyFunctions = false,\n fixerMessage = '',\n minLineCount = undefined,\n publicOnly,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */ (baseObj),\n 'publicOnly',\n prop,\n );\n\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n OPTIONS_SCHEMA.properties\n ).publicOnly\n ).oneOf\n )[1],\n ),\n require: ((baseObj) => {\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */\n (baseObj),\n 'require',\n prop,\n );\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (OPTIONS_SCHEMA.properties).require,\n ),\n };\n};\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const opts = getOptions(context, settings);\n\n const {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n require: requireOption,\n } = opts;\n\n const publicOnly =\n\n /**\n * @type {{\n * [key: string]: boolean | undefined;\n * }}\n */ (\n opts.publicOnly\n );\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkJsDoc = (info, _handler, node) => {\n if (\n // Optimize\n minLineCount !== undefined || contexts.some((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n minLineCount: count,\n } = ctxt;\n return count !== undefined;\n })\n ) {\n /**\n * @param {undefined|import('../iterateJsdoc.js').Integer} count\n */\n const underMinLine = (count) => {\n return count !== undefined && count >\n (sourceCode.getText(node).match(/\\n/gv)?.length ?? 0) + 1;\n };\n\n if (underMinLine(minLineCount)) {\n return;\n }\n\n const {\n minLineCount: contextMinLineCount,\n } =\n /**\n * @type {{\n * context: string;\n * inlineCommentBlock: boolean;\n * minLineCount: number;\n * }}\n */ (contexts.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n context: ctx,\n } = ctxt;\n return ctx === (info.selector || node.type);\n })) || {};\n if (underMinLine(contextMinLineCount)) {\n return;\n }\n }\n\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n // For those who have options configured against ANY constructors (or\n // setters or getters) being reported\n if (exemptSpeciaMethods(\n {\n description: '',\n inlineTags: [],\n problems: [],\n source: [],\n tags: [],\n },\n node,\n context,\n [\n OPTIONS_SCHEMA,\n ],\n )) {\n return;\n }\n\n if (\n // Avoid reporting param-less, return-less functions (when\n // `exemptEmptyFunctions` option is set)\n exemptEmptyFunctions && info.isFunctionContext ||\n\n // Avoid reporting param-less, return-less constructor methods (when\n // `exemptEmptyConstructors` option is set)\n exemptEmptyConstructors && isConstructor(node)\n ) {\n const functionParameterNames = getFunctionParameterNames(node);\n if (!functionParameterNames.length && !hasReturnValue(node)) {\n return;\n }\n }\n\n if (isExemptedImplementer(node, sourceCode, context, settings)) {\n return;\n }\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n /** @type {ESLintOrTSNode|import('@typescript-eslint/types').TSESTree.Decorator} */\n let baseNode = getReducedASTNode(node, sourceCode);\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = decorator;\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }}\n */ (contexts.find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n })) || {};\n const insertion = (inlineCommentBlock ?\n `/** ${fixerMessage}` :\n `/**\\n${indent}*${fixerMessage}\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n insertion,\n );\n };\n\n const report = () => {\n const {\n start,\n } = /** @type {import('eslint').AST.SourceLocation} */ (node.loc);\n const loc = {\n end: {\n column: 0,\n line: start.line + 1,\n },\n start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n /** @type {RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const exported = exportParser.isUncommentedExport(node, sourceCode, opt, settings);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n /**\n * @param {string} prop\n * @returns {boolean}\n */\n const hasOption = (prop) => {\n return requireOption[prop] || contexts.some((ctxt) => {\n return typeof ctxt === 'object' ? ctxt.context === prop : ctxt === prop;\n });\n };\n\n return {\n ...getContextObject(\n enforcedContexts(context, [], settings),\n checkJsDoc,\n ),\n ArrowFunctionExpression (node) {\n if (!hasOption('ArrowFunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n ClassDeclaration (node) {\n if (!hasOption('ClassDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n ClassExpression (node) {\n if (!hasOption('ClassExpression')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n FunctionDeclaration (node) {\n if (!hasOption('FunctionDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n },\n\n FunctionExpression (node) {\n if (!hasOption('FunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n MethodDefinition (node) {\n if (!hasOption('MethodDefinition')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n selector: 'MethodDefinition',\n }, null, /** @type {import('eslint').Rule.Node} */ (node.value));\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: true,\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"requireJsdoc.cjs","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","_jsdocUtils","_jsdoccomment","e","__esModule","default","OPTIONS_SCHEMA","additionalProperties","properties","checkConstructors","type","checkGetters","anyOf","enum","checkSetters","contexts","items","context","inlineCommentBlock","minLineCount","enableFixer","exemptEmptyConstructors","exemptEmptyFunctions","fixerMessage","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getMethodOnInterface","interfaceName","methodName","scope","scp","identifiers","name","variables","identifier","interfaceDeclaration","parent","bodyItem","body","methodSig","key","upper","isExemptedImplementer","node","sourceCode","settings","implments","implements","impl","expression","interfaceMethodNode","getScope","comment","getJSDocComment","getOption","baseObject","option","options","getOptions","undefined","baseObj","prop","Object","keys","opt","_default","exports","create","getSourceCode","getSettings","opts","requireOption","checkJsDoc","info","_handler","some","ctxt","count","underMinLine","getText","match","length","contextMinLineCount","find","ctx","selector","jsDocNode","exemptSpeciaMethods","description","inlineTags","problems","source","tags","isFunctionContext","isConstructor","functionParameterNames","getFunctionParameterNames","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","loc","start","column","contxt","insertion","repeat","slice","insertTextBefore","report","end","line","messageId","Boolean","initModuleExports","initWindow","exported","exportParser","isUncommentedExport","hasOption","getContextObject","enforcedContexts","includes","value","meta","docs","category","recommended","url","fixable","messages","missingJsDoc","schema","module"],"sources":["../../src/rules/requireJsdoc.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n exemptSpeciaMethods,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n hasReturnValue,\n isConstructor,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getJSDocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {{\n * ancestorsOnly: boolean,\n * esm: boolean,\n * initModuleExports: boolean,\n * initWindow: boolean\n * }} RequireJsdocOpts\n */\n\n/**\n * @typedef {import('eslint').Rule.Node|\n * import('@typescript-eslint/types').TSESTree.Node} ESLintOrTSNode\n */\n\n/** @type {import('json-schema').JSONSchema4} */\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-setter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n checkSetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-getter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n minLineCount: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyConstructors: {\n default: false,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n fixerMessage: {\n default: '',\n type: 'string',\n },\n minLineCount: {\n type: 'integer',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\n/**\n * @param {string} interfaceName\n * @param {string} methodName\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {import('@typescript-eslint/types').TSESTree.TSMethodSignature|null}\n */\nconst getMethodOnInterface = (interfaceName, methodName, scope) => {\n let scp = scope;\n while (scp) {\n for (const {\n identifiers,\n name,\n } of scp.variables) {\n if (interfaceName !== name) {\n continue;\n }\n\n for (const identifier of identifiers) {\n const interfaceDeclaration = /** @type {import('@typescript-eslint/types').TSESTree.Identifier & {parent: import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration}} */ (\n identifier\n ).parent;\n /* c8 ignore next 3 -- TS */\n if (interfaceDeclaration.type !== 'TSInterfaceDeclaration') {\n continue;\n }\n\n for (const bodyItem of interfaceDeclaration.body.body) {\n const methodSig = /** @type {import('@typescript-eslint/types').TSESTree.TSMethodSignature} */ (\n bodyItem\n );\n if (methodName === /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n methodSig.key\n ).name) {\n return methodSig;\n }\n }\n }\n }\n\n scp = scp.upper;\n }\n\n return null;\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n */\nconst isExemptedImplementer = (node, sourceCode, context, settings) => {\n if (node.type === 'FunctionExpression' &&\n node.parent.type === 'MethodDefinition' &&\n node.parent.parent.type === 'ClassBody' &&\n node.parent.parent.parent.type === 'ClassDeclaration' &&\n 'implements' in node.parent.parent.parent\n ) {\n const implments = /** @type {import('@typescript-eslint/types').TSESTree.TSClassImplements[]} */ (\n node.parent.parent.parent.implements\n );\n\n const {\n name: methodName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.parent.key\n );\n\n for (const impl of implments) {\n const {\n name: interfaceName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n impl.expression\n );\n\n const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (\n (sourceCode.getScope &&\n /* c8 ignore next 3 */\n sourceCode.getScope(node)) ||\n // @ts-expect-error ESLint 8\n context.getScope()\n ));\n if (interfaceMethodNode) {\n // @ts-expect-error Ok\n const comment = getJSDocComment(sourceCode, interfaceMethodNode, settings);\n if (comment) {\n return true;\n }\n }\n }\n }\n\n return false;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4Object} baseObject\n * @param {string} option\n * @param {string} key\n * @returns {boolean|undefined}\n */\nconst getOption = (context, baseObject, option, key) => {\n if (context.options[0] && option in context.options[0] &&\n // Todo: boolean shouldn't be returning property, but\n // tests currently require\n (typeof context.options[0][option] === 'boolean' ||\n key in context.options[0][option])\n ) {\n return context.options[0][option][key];\n }\n\n return /** @type {{[key: string]: {default?: boolean|undefined}}} */ (\n baseObject.properties\n )[key].default;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {{\n * contexts: (string|{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * })[],\n * enableFixer: boolean,\n * exemptEmptyConstructors: boolean,\n * exemptEmptyFunctions: boolean,\n * fixerMessage: string,\n * minLineCount: undefined|import('../iterateJsdoc.js').Integer,\n * publicOnly: boolean|{[key: string]: boolean|undefined}\n * require: {[key: string]: boolean|undefined}\n * }}\n */\nconst getOptions = (context, settings) => {\n const {\n contexts = settings.contexts || [],\n enableFixer = true,\n exemptEmptyConstructors = true,\n exemptEmptyFunctions = false,\n fixerMessage = '',\n minLineCount = undefined,\n publicOnly,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */ (baseObj),\n 'publicOnly',\n prop,\n );\n\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n OPTIONS_SCHEMA.properties\n ).publicOnly\n ).oneOf\n )[1],\n ),\n require: ((baseObj) => {\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */\n (baseObj),\n 'require',\n prop,\n );\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (OPTIONS_SCHEMA.properties).require,\n ),\n };\n};\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const opts = getOptions(context, settings);\n\n const {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n require: requireOption,\n } = opts;\n\n const publicOnly =\n\n /**\n * @type {{\n * [key: string]: boolean | undefined;\n * }}\n */ (\n opts.publicOnly\n );\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkJsDoc = (info, _handler, node) => {\n if (\n // Optimize\n minLineCount !== undefined || contexts.some((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n minLineCount: count,\n } = ctxt;\n return count !== undefined;\n })\n ) {\n /**\n * @param {undefined|import('../iterateJsdoc.js').Integer} count\n */\n const underMinLine = (count) => {\n return count !== undefined && count >\n (sourceCode.getText(node).match(/\\n/gv)?.length ?? 0) + 1;\n };\n\n if (underMinLine(minLineCount)) {\n return;\n }\n\n const {\n minLineCount: contextMinLineCount,\n } =\n /**\n * @type {{\n * context: string;\n * inlineCommentBlock: boolean;\n * minLineCount: number;\n * }}\n */ (contexts.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n context: ctx,\n } = ctxt;\n return ctx === (info.selector || node.type);\n })) || {};\n if (underMinLine(contextMinLineCount)) {\n return;\n }\n }\n\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n // For those who have options configured against ANY constructors (or\n // setters or getters) being reported\n if (exemptSpeciaMethods(\n {\n description: '',\n inlineTags: [],\n problems: [],\n source: [],\n tags: [],\n },\n node,\n context,\n [\n OPTIONS_SCHEMA,\n ],\n )) {\n return;\n }\n\n if (\n // Avoid reporting param-less, return-less functions (when\n // `exemptEmptyFunctions` option is set)\n exemptEmptyFunctions && info.isFunctionContext ||\n\n // Avoid reporting param-less, return-less constructor methods (when\n // `exemptEmptyConstructors` option is set)\n exemptEmptyConstructors && isConstructor(node)\n ) {\n const functionParameterNames = getFunctionParameterNames(node);\n if (!functionParameterNames.length && !hasReturnValue(node)) {\n return;\n }\n }\n\n if (isExemptedImplementer(node, sourceCode, context, settings)) {\n return;\n }\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n /** @type {ESLintOrTSNode|import('@typescript-eslint/types').TSESTree.Decorator} */\n let baseNode = getReducedASTNode(node, sourceCode);\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = decorator;\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }}\n */ (contexts.find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n })) || {};\n const insertion = (inlineCommentBlock ?\n `/** ${fixerMessage}` :\n `/**\\n${indent}*${fixerMessage}\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n insertion,\n );\n };\n\n const report = () => {\n const {\n start,\n } = /** @type {import('eslint').AST.SourceLocation} */ (node.loc);\n const loc = {\n end: {\n column: 0,\n line: start.line + 1,\n },\n start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n /** @type {RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const exported = exportParser.isUncommentedExport(node, sourceCode, opt, settings);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n /**\n * @param {string} prop\n * @returns {boolean}\n */\n const hasOption = (prop) => {\n return requireOption[prop] || contexts.some((ctxt) => {\n return typeof ctxt === 'object' ? ctxt.context === prop : ctxt === prop;\n });\n };\n\n return {\n ...getContextObject(\n enforcedContexts(context, [], settings),\n checkJsDoc,\n ),\n ArrowFunctionExpression (node) {\n if (!hasOption('ArrowFunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n ClassDeclaration (node) {\n if (!hasOption('ClassDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n ClassExpression (node) {\n if (!hasOption('ClassExpression')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n FunctionDeclaration (node) {\n if (!hasOption('FunctionDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n },\n\n FunctionExpression (node) {\n if (!hasOption('FunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n MethodDefinition (node) {\n if (!hasOption('MethodDefinition')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n selector: 'MethodDefinition',\n }, null, /** @type {import('eslint').Rule.Node} */ (node.value));\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: true,\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "http://gajus.com"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@es-joy/jsdoccomment": "~0.
|
|
8
|
+
"@es-joy/jsdoccomment": "~0.53.0",
|
|
9
9
|
"are-docs-informative": "^0.0.2",
|
|
10
10
|
"comment-parser": "1.4.1",
|
|
11
11
|
"debug": "^4.4.1",
|
|
@@ -18,19 +18,19 @@
|
|
|
18
18
|
},
|
|
19
19
|
"description": "JSDoc linting rules for ESLint.",
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@babel/cli": "^7.
|
|
22
|
-
"@babel/core": "^7.
|
|
23
|
-
"@babel/eslint-parser": "^7.
|
|
24
|
-
"@babel/node": "^7.
|
|
21
|
+
"@babel/cli": "^7.28.3",
|
|
22
|
+
"@babel/core": "^7.28.3",
|
|
23
|
+
"@babel/eslint-parser": "^7.28.0",
|
|
24
|
+
"@babel/node": "^7.28.0",
|
|
25
25
|
"@babel/plugin-syntax-class-properties": "^7.12.13",
|
|
26
26
|
"@babel/plugin-transform-flow-strip-types": "^7.27.1",
|
|
27
|
-
"@babel/preset-env": "^7.
|
|
27
|
+
"@babel/preset-env": "^7.28.3",
|
|
28
28
|
"@es-joy/escodegen": "^3.5.1",
|
|
29
29
|
"@es-joy/jsdoc-eslint-parser": "^0.21.1",
|
|
30
30
|
"@hkdobrev/run-if-changed": "^0.6.3",
|
|
31
31
|
"@semantic-release/commit-analyzer": "^13.0.1",
|
|
32
|
-
"@semantic-release/github": "^11.0.
|
|
33
|
-
"@semantic-release/npm": "^12.0.
|
|
32
|
+
"@semantic-release/github": "^11.0.4",
|
|
33
|
+
"@semantic-release/npm": "^12.0.2",
|
|
34
34
|
"@types/chai": "^5.2.2",
|
|
35
35
|
"@types/debug": "^4.1.12",
|
|
36
36
|
"@types/eslint": "^9.6.1",
|
|
@@ -40,34 +40,34 @@
|
|
|
40
40
|
"@types/json-schema": "^7.0.15",
|
|
41
41
|
"@types/lodash.defaultsdeep": "^4.6.9",
|
|
42
42
|
"@types/mocha": "^10.0.10",
|
|
43
|
-
"@types/node": "^24.
|
|
43
|
+
"@types/node": "^24.2.1",
|
|
44
44
|
"@types/semver": "^7.7.0",
|
|
45
45
|
"@types/spdx-expression-parse": "^3.0.5",
|
|
46
|
-
"@typescript-eslint/types": "^8.
|
|
46
|
+
"@typescript-eslint/types": "^8.39.1",
|
|
47
47
|
"babel-plugin-add-module-exports": "^1.0.4",
|
|
48
48
|
"babel-plugin-istanbul": "^7.0.0",
|
|
49
49
|
"babel-plugin-transform-import-meta": "^2.3.3",
|
|
50
50
|
"c8": "^10.1.3",
|
|
51
51
|
"camelcase": "^8.0.0",
|
|
52
|
-
"chai": "^5.2.
|
|
52
|
+
"chai": "^5.2.1",
|
|
53
53
|
"decamelize": "^6.0.0",
|
|
54
|
-
"eslint": "9.
|
|
55
|
-
"eslint-config-canonical": "~44.9.
|
|
54
|
+
"eslint": "9.33.0",
|
|
55
|
+
"eslint-config-canonical": "~44.9.9",
|
|
56
56
|
"gitdown": "^4.1.1",
|
|
57
57
|
"glob": "^11.0.3",
|
|
58
|
-
"globals": "^16.
|
|
58
|
+
"globals": "^16.3.0",
|
|
59
59
|
"husky": "^9.1.7",
|
|
60
|
-
"jsdoc-type-pratt-parser": "^4.
|
|
60
|
+
"jsdoc-type-pratt-parser": "^4.8.0",
|
|
61
61
|
"json-schema": "^0.4.0",
|
|
62
|
-
"lint-staged": "^16.1.
|
|
62
|
+
"lint-staged": "^16.1.5",
|
|
63
63
|
"lodash.defaultsdeep": "^4.6.1",
|
|
64
|
-
"mocha": "^11.7.
|
|
64
|
+
"mocha": "^11.7.1",
|
|
65
65
|
"open-editor": "^5.1.0",
|
|
66
66
|
"replace": "^1.2.2",
|
|
67
67
|
"rimraf": "^6.0.1",
|
|
68
|
-
"semantic-release": "^24.2.
|
|
69
|
-
"typescript": "5.
|
|
70
|
-
"typescript-eslint": "^8.
|
|
68
|
+
"semantic-release": "^24.2.7",
|
|
69
|
+
"typescript": "5.9.2",
|
|
70
|
+
"typescript-eslint": "^8.39.1"
|
|
71
71
|
},
|
|
72
72
|
"engines": {
|
|
73
73
|
"node": ">=20.11.0"
|
|
@@ -154,5 +154,5 @@
|
|
|
154
154
|
"test-cov": "TIMING=1 c8 --reporter text pnpm run test-no-cov",
|
|
155
155
|
"test-index": "pnpm run test-no-cov test/rules/index.js"
|
|
156
156
|
},
|
|
157
|
-
"version": "54.
|
|
157
|
+
"version": "54.1.0"
|
|
158
158
|
}
|
package/src/iterateJsdoc.js
CHANGED
|
@@ -375,8 +375,9 @@ export default iterateJsdoc(({
|
|
|
375
375
|
})())
|
|
376
376
|
.concat(...getValidRuntimeIdentifiers(node && (
|
|
377
377
|
(sourceCode.getScope &&
|
|
378
|
-
/* c8 ignore next
|
|
378
|
+
/* c8 ignore next 3 */
|
|
379
379
|
sourceCode.getScope(node)) ||
|
|
380
|
+
// @ts-expect-error ESLint 8
|
|
380
381
|
context.getScope()
|
|
381
382
|
)))
|
|
382
383
|
.concat(
|
|
@@ -503,8 +504,9 @@ export default iterateJsdoc(({
|
|
|
503
504
|
} else if (markVariablesAsUsed && !extraTypes.includes(val)) {
|
|
504
505
|
if (sourceCode.markVariableAsUsed) {
|
|
505
506
|
sourceCode.markVariableAsUsed(val);
|
|
506
|
-
/* c8 ignore next
|
|
507
|
+
/* c8 ignore next 4 */
|
|
507
508
|
} else {
|
|
509
|
+
// @ts-expect-error ESLint 8
|
|
508
510
|
context.markVariableAsUsed(val);
|
|
509
511
|
}
|
|
510
512
|
}
|
|
@@ -250,8 +250,9 @@ const isExemptedImplementer = (node, sourceCode, context, settings) => {
|
|
|
250
250
|
|
|
251
251
|
const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (
|
|
252
252
|
(sourceCode.getScope &&
|
|
253
|
-
/* c8 ignore next
|
|
253
|
+
/* c8 ignore next 3 */
|
|
254
254
|
sourceCode.getScope(node)) ||
|
|
255
|
+
// @ts-expect-error ESLint 8
|
|
255
256
|
context.getScope()
|
|
256
257
|
));
|
|
257
258
|
if (interfaceMethodNode) {
|