{"version":3,"file":"requireAsteriskPrefix.cjs","names":["iterateJsdoc"],"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":[]}