{"version":3,"file":"requireAsteriskPrefix.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","indent","jsdoc","utils","defaultRequireValue","tags","tagMap","options","source","always","never","currentTag","some","number","tokens","delimiter","description","end","tag","neverFix","postDelimiter","checkNever","checkValue","includes","reportJSDoc","column","line","alwaysFix","start","checkAlways","slice","any","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","items","module"],"sources":["../../src/rules/requireAsteriskPrefix.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n  context,\n  indent,\n  jsdoc,\n  utils,\n}) => {\n  const [\n    defaultRequireValue = 'always',\n    {\n      tags: tagMap = {},\n    } = {},\n  ] = context.options;\n\n  const {\n    source,\n  } = jsdoc;\n\n  const always = defaultRequireValue === 'always';\n  const never = defaultRequireValue === 'never';\n\n  /** @type {string} */\n  let currentTag;\n  source.some(({\n    number,\n    tokens,\n  }) => {\n    const {\n      delimiter,\n      description,\n      end,\n      tag,\n    } = tokens;\n\n    /**\n     * @returns {void}\n     */\n    const neverFix = () => {\n      tokens.delimiter = '';\n      tokens.postDelimiter = '';\n    };\n\n    /**\n     * @param {string} checkValue\n     * @returns {boolean}\n     */\n    const checkNever = (checkValue) => {\n      if (delimiter && delimiter !== '/**' && (\n        never && !tagMap.always?.includes(checkValue) ||\n        tagMap.never?.includes(checkValue)\n      )) {\n        utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n          column: 0,\n          line: number,\n        }, neverFix);\n\n        return true;\n      }\n\n      return false;\n    };\n\n    /**\n     * @returns {void}\n     */\n    const alwaysFix = () => {\n      if (!tokens.start) {\n        tokens.start = indent + ' ';\n      }\n\n      tokens.delimiter = '*';\n      tokens.postDelimiter = tag || description ? ' ' : '';\n    };\n\n    /**\n     * @param {string} checkValue\n     * @returns {boolean}\n     */\n    const checkAlways = (checkValue) => {\n      if (\n        !delimiter && (\n          always && !tagMap.never?.includes(checkValue) ||\n          tagMap.always?.includes(checkValue)\n        )\n      ) {\n        utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n          column: 0,\n          line: number,\n        }, alwaysFix);\n\n        return true;\n      }\n\n      return false;\n    };\n\n    if (tag) {\n      // Remove at sign\n      currentTag = tag.slice(1);\n    }\n\n    if (\n      // If this is the end but has a tag, the delimiter will also be\n      //  populated and will be safely ignored later\n      end && !tag\n    ) {\n      return false;\n    }\n\n    if (!currentTag) {\n      if (tagMap.any?.includes('*description')) {\n        return false;\n      }\n\n      if (checkNever('*description')) {\n        return true;\n      }\n\n      if (checkAlways('*description')) {\n        return true;\n      }\n\n      return false;\n    }\n\n    if (tagMap.any?.includes(currentTag)) {\n      return false;\n    }\n\n    if (checkNever(currentTag)) {\n      return true;\n    }\n\n    if (checkAlways(currentTag)) {\n      return true;\n    }\n\n    return false;\n  });\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description:\n        'Requires that each JSDoc line starts with an `*`.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-asterisk-prefix.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        description: `If it is \\`\"always\"\\` then a problem is raised when there is no asterisk\nprefix on a given JSDoc line. If it is \\`\"never\"\\` then a problem is raised\nwhen there is an asterisk present.\n\nThe default value is \\`\"always\"\\`. You may also set the default to \\`\"any\"\\`\nand use the \\`tags\\` option to apply to specific tags only.`,\n        enum: [\n          'always', 'never', 'any',\n        ],\n        type: 'string',\n      },\n      {\n        additionalProperties: false,\n        properties: {\n          tags: {\n            additionalProperties: false,\n            description: `If you want different values to apply to specific tags, you may use\nthe \\`tags\\` option object. The keys are \\`always\\`, \\`never\\`, or \\`any\\` and\nthe values are arrays of tag names or the special value \\`*description\\`\nwhich applies to the main JSDoc block description.\n\n\\`\\`\\`js\n{\n  'jsdoc/require-asterisk-prefix': ['error', 'always', {\n    tags: {\n      always: ['*description'],\n      any: ['example', 'license'],\n      never: ['copyright']\n    }\n  }]\n}\n\\`\\`\\``,\n            properties: {\n              always: {\n                description: `If it is \\`\"always\"\\` then a problem is raised when there is no asterisk\nprefix on a given JSDoc line.`,\n                items: {\n                  type: 'string',\n                },\n                type: 'array',\n              },\n              any: {\n                description: 'No problem is raised regardless of asterisk presence or non-presence.',\n                items: {\n                  type: 'string',\n                },\n                type: 'array',\n              },\n              never: {\n                description: `If it is \\`\"never\"\\` then a problem is raised\nwhen there is an asterisk present.`,\n                items: {\n                  type: 'string',\n                },\n                type: 'array',\n              },\n            },\n            type: 'object',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'layout',\n  },\n});\n"],"mappings":"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","ignoreList":[]}