{"version":3,"file":"requireParam.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","rootNamer","desiredRoots","currentIndex","name","idx","incremented","length","base","suffix","shift","_default","exports","iterateJsdoc","jsdoc","utils","context","avoidDocs","hasTag","autoIncrementBase","checkRestProperty","checkDestructured","checkDestructuredRoots","checkTypesPattern","enableFixer","enableRootFixer","enableRestElementFixer","unnamedRootBase","useDefaultObjectProperties","ignoreWhenAllParamsMissing","options","preferredTagName","getPreferredTagName","tagName","functionParameterNames","getFunctionParameterNames","jsdocParameterNames","getJsdocTagsDeep","shallowJsdocParameterNames","filter","tag","includes","map","checkTypesRegex","getRegexFromString","missingTags","flattenedRoots","flattenRoots","names","paramIndex","hasParamIndex","cur","dropPathSegmentQuotes","String","getParamIndex","setParamIndex","entries","findExpectedIndex","jsdocTags","indexAtFunctionParams","remainingRoots","slice","foundIndex","findIndex","newAdd","some","remainingRoot","Array","isArray","tags","tagLineCount","source","tokens","end","nextRootName","namer","thisOffset","functionParameterIdx","functionParameterName","inc","matchedJsdoc","rootName","type","search","hasRestElement","hasPropertyRest","rests","notCheckingNames","paramName","find","fpn","emptyParamIdx","push","remove","fullParamName","notCheckingName","paramType","comparePaths","undefined","startsWith","funcParamName","restElement","fix","createTokens","tagIndex","sourceIndex","spliceCount","number","delimiter","description","lineEnd","postDelimiter","postName","postTag","postType","start","splice","inlineTags","optional","problems","firstNumber","src","offset","expectedIdx","fixer","missingTag","makeMultiline","reportJSDoc","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","checkConstructors","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy","noTracking","module"],"sources":["../../src/rules/requireParam.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @typedef {[string, boolean, () => RootNamerReturn]} RootNamerReturn\n */\n\n/**\n * @param {string[]} desiredRoots\n * @param {number} currentIndex\n * @returns {RootNamerReturn}\n */\nconst rootNamer = (desiredRoots, currentIndex) => {\n  /** @type {string} */\n  let name;\n  let idx = currentIndex;\n  const incremented = desiredRoots.length <= 1;\n  if (incremented) {\n    const base = desiredRoots[0];\n    const suffix = idx++;\n    name = `${base}${suffix}`;\n  } else {\n    name = /** @type {string} */ (desiredRoots.shift());\n  }\n\n  return [\n    name,\n    incremented,\n    () => {\n      return rootNamer(desiredRoots, idx);\n    },\n  ];\n};\n\n/* eslint-disable complexity -- Temporary */\nexport default iterateJsdoc(({\n  jsdoc,\n  utils,\n  context,\n}) => {\n  /* eslint-enable complexity -- Temporary */\n  if (utils.avoidDocs()) {\n    return;\n  }\n\n  // Param type is specified by type in @type\n  if (utils.hasTag('type')) {\n    return;\n  }\n\n  const {\n    autoIncrementBase = 0,\n    checkRestProperty = false,\n    checkDestructured = true,\n    checkDestructuredRoots = true,\n    checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n    enableFixer = true,\n    enableRootFixer = true,\n    enableRestElementFixer = true,\n    unnamedRootBase = [\n      'root',\n    ],\n    useDefaultObjectProperties = false,\n    ignoreWhenAllParamsMissing = false,\n  } = context.options[0] || {};\n\n  const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({\n    tagName: 'param',\n  }));\n  if (!preferredTagName) {\n    return;\n  }\n\n  const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n  if (!functionParameterNames.length) {\n    return;\n  }\n\n  const jsdocParameterNames =\n    /**\n     * @type {{\n     *   idx: import('../iterateJsdoc.js').Integer;\n     *   name: string;\n     *   type: string;\n     * }[]}\n     */ (utils.getJsdocTagsDeep(preferredTagName));\n\n  if (ignoreWhenAllParamsMissing && !jsdocParameterNames.length) {\n    return;\n  }\n\n  const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {\n    return !tag.name.includes('.');\n  }).map((tag, idx) => {\n    return {\n      ...tag,\n      idx,\n    };\n  });\n\n  const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n  /**\n   * @type {{\n   *   functionParameterIdx: import('../iterateJsdoc.js').Integer,\n   *   functionParameterName: string,\n   *   inc: boolean|undefined,\n   *   remove?: true,\n   *   type?: string|undefined\n   * }[]}\n   */\n  const missingTags = [];\n  const flattenedRoots = utils.flattenRoots(functionParameterNames).names;\n\n  /**\n   * @type {{\n   *   [key: string]: import('../iterateJsdoc.js').Integer\n   * }}\n   */\n  const paramIndex = {};\n\n  /**\n   * @param {string} cur\n   * @returns {boolean}\n   */\n  const hasParamIndex = (cur) => {\n    return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;\n  };\n\n  /**\n   *\n   * @param {string|number|undefined} cur\n   * @returns {import('../iterateJsdoc.js').Integer}\n   */\n  const getParamIndex = (cur) => {\n    return paramIndex[utils.dropPathSegmentQuotes(String(cur))];\n  };\n\n  /**\n   *\n   * @param {string} cur\n   * @param {import('../iterateJsdoc.js').Integer} idx\n   * @returns {void}\n   */\n  const setParamIndex = (cur, idx) => {\n    paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;\n  };\n\n  for (const [\n    idx,\n    cur,\n  ] of flattenedRoots.entries()) {\n    setParamIndex(cur, idx);\n  }\n\n  /**\n   *\n   * @param {(import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n   *   newAdd?: boolean\n   * })[]} jsdocTags\n   * @param {import('../iterateJsdoc.js').Integer} indexAtFunctionParams\n   * @returns {import('../iterateJsdoc.js').Integer}\n   */\n  const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {\n    const remainingRoots = functionParameterNames.slice(indexAtFunctionParams || 0);\n    const foundIndex = jsdocTags.findIndex(({\n      name,\n      newAdd,\n    }) => {\n      return !newAdd && remainingRoots.some((remainingRoot) => {\n        if (Array.isArray(remainingRoot)) {\n          return (\n            /**\n             * @type {import('../jsdocUtils.js').FlattendRootInfo & {\n             *   annotationParamName?: string|undefined;\n             * }}\n             */ (remainingRoot[1]).names.includes(name)\n          );\n        }\n\n        if (typeof remainingRoot === 'object') {\n          return name === remainingRoot.name;\n        }\n\n        return name === remainingRoot;\n      });\n    });\n\n    const tags = foundIndex > -1 ?\n      jsdocTags.slice(0, foundIndex) :\n      jsdocTags.filter(({\n        tag,\n      }) => {\n        return tag === preferredTagName;\n      });\n\n    let tagLineCount = 0;\n    for (const {\n      source,\n    } of tags) {\n      for (const {\n        tokens: {\n          end,\n        },\n      } of source) {\n        if (!end) {\n          tagLineCount++;\n        }\n      }\n    }\n\n    return tagLineCount;\n  };\n\n  let [\n    nextRootName,\n    incremented,\n    namer,\n  ] = rootNamer([\n    ...unnamedRootBase,\n  ], autoIncrementBase);\n\n  const thisOffset = functionParameterNames[0] === 'this' ? 1 : 0;\n\n  for (const [\n    functionParameterIdx,\n    functionParameterName,\n  ] of functionParameterNames.entries()) {\n\n    let inc;\n    if (Array.isArray(functionParameterName)) {\n      const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx - thisOffset];\n\n      /** @type {string} */\n      let rootName;\n      if (functionParameterName[0]) {\n        rootName = functionParameterName[0];\n      } else if (matchedJsdoc && matchedJsdoc.name) {\n        rootName = matchedJsdoc.name;\n        if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {\n          continue;\n        }\n      } else {\n        rootName = nextRootName;\n        inc = incremented;\n      }\n      [\n        nextRootName,\n        incremented,\n        namer,\n      ] = namer();\n\n      const {\n        hasRestElement,\n        hasPropertyRest,\n        rests,\n        names,\n      } = /**\n           * @type {import('../jsdocUtils.js').FlattendRootInfo & {\n           *   annotationParamName?: string | undefined;\n           * }}\n           */ (functionParameterName[1]);\n      const notCheckingNames = [];\n      if (!enableRestElementFixer && hasRestElement) {\n        continue;\n      }\n\n      if (!checkDestructuredRoots) {\n        continue;\n      }\n\n      for (const [\n        idx,\n        paramName,\n      ] of names.entries()) {\n        // Add root if the root name is not in the docs (and is not already\n        //  in the tags to be fixed)\n        if (!jsdocParameterNames.find(({\n          name,\n        }) => {\n          return name === rootName;\n        }) && !missingTags.find(({\n          functionParameterName: fpn,\n        }) => {\n          return fpn === rootName;\n        })) {\n          const emptyParamIdx = jsdocParameterNames.findIndex(({\n            name,\n          }) => {\n            return !name;\n          });\n\n          if (emptyParamIdx > -1) {\n            missingTags.push({\n              functionParameterIdx: emptyParamIdx,\n              functionParameterName: rootName,\n              inc,\n              remove: true,\n            });\n          } else {\n            missingTags.push({\n              functionParameterIdx: hasParamIndex(rootName) ?\n                getParamIndex(rootName) :\n                getParamIndex(paramName),\n              functionParameterName: rootName,\n              inc,\n            });\n          }\n        }\n\n        if (!checkDestructured) {\n          continue;\n        }\n\n        if (!checkRestProperty && rests[idx]) {\n          continue;\n        }\n\n        const fullParamName = `${rootName}.${paramName}`;\n\n        const notCheckingName = jsdocParameterNames.find(({\n          name,\n          type: paramType,\n        }) => {\n          return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';\n        });\n\n        if (notCheckingName !== undefined) {\n          notCheckingNames.push(notCheckingName.name);\n        }\n\n        if (notCheckingNames.find((name) => {\n          return fullParamName.startsWith(name);\n        })) {\n          continue;\n        }\n\n        if (jsdocParameterNames && !jsdocParameterNames.find(({\n          name,\n        }) => {\n          return utils.comparePaths(name)(fullParamName);\n        })) {\n          missingTags.push({\n            functionParameterIdx: getParamIndex(\n              functionParameterName[0] ? fullParamName : paramName,\n            ),\n            functionParameterName: fullParamName,\n            inc,\n            type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,\n          });\n        }\n      }\n\n      continue;\n    }\n\n    /** @type {string} */\n    let funcParamName;\n    let type;\n    if (typeof functionParameterName === 'object') {\n      if (!enableRestElementFixer && functionParameterName.restElement) {\n        continue;\n      }\n\n      funcParamName = /** @type {string} */ (functionParameterName.name);\n      type = '{...any}';\n    } else {\n      funcParamName = /** @type {string} */ (functionParameterName);\n    }\n\n    if (jsdocParameterNames && !jsdocParameterNames.find(({\n      name,\n    }) => {\n      return name === funcParamName;\n    }) && funcParamName !== 'this') {\n      missingTags.push({\n        functionParameterIdx: getParamIndex(funcParamName),\n        functionParameterName: funcParamName,\n        inc,\n        type,\n      });\n    }\n  }\n\n  /**\n   *\n   * @param {{\n   *   functionParameterIdx: import('../iterateJsdoc.js').Integer,\n   *   functionParameterName: string,\n   *   remove?: true,\n   *   inc?: boolean,\n   *   type?: string\n   * }} cfg\n   */\n  const fix = ({\n    functionParameterIdx,\n    functionParameterName,\n    remove,\n    inc,\n    type,\n  }) => {\n    if (inc && !enableRootFixer) {\n      return;\n    }\n\n    /**\n     *\n     * @param {import('../iterateJsdoc.js').Integer} tagIndex\n     * @param {import('../iterateJsdoc.js').Integer} sourceIndex\n     * @param {import('../iterateJsdoc.js').Integer} spliceCount\n     * @returns {void}\n     */\n    const createTokens = (tagIndex, sourceIndex, spliceCount) => {\n      // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);\n      const tokens = {\n        number: sourceIndex + 1,\n        source: '',\n        tokens: {\n          delimiter: '*',\n          description: '',\n          end: '',\n          lineEnd: '',\n          name: functionParameterName,\n          newAdd: true,\n          postDelimiter: ' ',\n          postName: '',\n          postTag: ' ',\n          postType: type ? ' ' : '',\n          start: jsdoc.source[sourceIndex].tokens.start,\n          tag: `@${preferredTagName}`,\n          type: type ?? '',\n        },\n      };\n\n      /**\n       * @type {(import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n       *   newAdd?: true\n       * })[]}\n       */ (jsdoc.tags).splice(tagIndex, spliceCount, {\n        description: '',\n        inlineTags: [],\n        name: functionParameterName,\n        newAdd: true,\n        optional: false,\n        problems: [],\n        source: [\n          tokens,\n        ],\n        tag: preferredTagName,\n        type: type ?? '',\n      });\n      const firstNumber = jsdoc.source[0].number;\n      jsdoc.source.splice(sourceIndex, spliceCount, tokens);\n      for (const [\n        idx,\n        src,\n      ] of jsdoc.source.slice(sourceIndex).entries()) {\n        src.number = firstNumber + sourceIndex + idx;\n      }\n    };\n\n    const offset = jsdoc.source.findIndex(({\n      tokens: {\n        tag,\n        end,\n      },\n    }) => {\n      return tag || end;\n    });\n    if (remove) {\n      createTokens(functionParameterIdx, offset + functionParameterIdx, 1);\n    } else {\n      const expectedIdx = findExpectedIndex(jsdoc.tags, functionParameterIdx);\n      createTokens(expectedIdx, offset + expectedIdx, 0);\n    }\n  };\n\n  /**\n   * @returns {void}\n   */\n  const fixer = () => {\n    for (const missingTag of missingTags) {\n      fix(missingTag);\n    }\n  };\n\n  if (missingTags.length && jsdoc.source.length === 1) {\n    utils.makeMultiline();\n  }\n\n  for (const {\n    functionParameterName,\n  } of missingTags) {\n    utils.reportJSDoc(\n      `Missing JSDoc @${preferredTagName} \"${functionParameterName}\" declaration.`,\n      null,\n      enableFixer ? fixer : null,\n    );\n  }\n}, {\n  contextDefaults: true,\n  meta: {\n    docs: {\n      description: 'Requires that all function parameters are documented.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          autoIncrementBase: {\n            default: 0,\n            type: 'integer',\n          },\n          checkConstructors: {\n            default: true,\n            type: 'boolean',\n          },\n          checkDestructured: {\n            default: true,\n            type: 'boolean',\n          },\n          checkDestructuredRoots: {\n            default: true,\n            type: 'boolean',\n          },\n          checkGetters: {\n            default: false,\n            type: 'boolean',\n          },\n          checkRestProperty: {\n            default: false,\n            type: 'boolean',\n          },\n          checkSetters: {\n            default: false,\n            type: 'boolean',\n          },\n          checkTypesPattern: {\n            type: 'string',\n          },\n          contexts: {\n            items: {\n              anyOf: [\n                {\n                  type: 'string',\n                },\n                {\n                  additionalProperties: false,\n                  properties: {\n                    comment: {\n                      type: 'string',\n                    },\n                    context: {\n                      type: 'string',\n                    },\n                  },\n                  type: 'object',\n                },\n              ],\n            },\n            type: 'array',\n          },\n          enableFixer: {\n            type: 'boolean',\n          },\n          enableRestElementFixer: {\n            type: 'boolean',\n          },\n          enableRootFixer: {\n            type: 'boolean',\n          },\n          exemptedBy: {\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          ignoreWhenAllParamsMissing: {\n            type: 'boolean',\n          },\n          unnamedRootBase: {\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          useDefaultObjectProperties: {\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n\n  // We cannot cache comment nodes as the contexts may recur with the\n  //  same comment node but a different JS node, and we may need the different\n  //  JS node to ensure we iterate its context\n  noTracking: true,\n});\n"],"mappings":"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","ignoreList":[]}