{"version":3,"file":"checkValues.cjs","names":["iterateJsdoc","semver","spdxExpressionParse","parseImportsExports"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n  parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n  'class',\n  'constant',\n  'event',\n  'external',\n  'file',\n  'function',\n  'member',\n  'mixin',\n  'module',\n  'namespace',\n  'typedef',\n]);\n\nexport default iterateJsdoc(({\n  context,\n  report,\n  settings,\n  utils,\n}) => {\n  const options = context.options[0] || {};\n  const {\n    allowedAuthors = null,\n    allowedLicenses = null,\n    licensePattern = '/([^\\n\\r]*)/gv',\n    numericOnlyVariation = false,\n  } = options;\n\n  utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n    const version = /** @type {string} */ (\n      utils.getTagDescription(jsdocParameter)\n    ).trim();\n    if (!version) {\n      report(\n        `Missing JSDoc @${targetTagName} value.`,\n        null,\n        jsdocParameter,\n      );\n    } else if (!semver.valid(version)) {\n      report(\n        `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n        null,\n        jsdocParameter,\n      );\n    }\n  });\n\n  utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n    const kind = /** @type {string} */ (\n      utils.getTagDescription(jsdocParameter)\n    ).trim();\n    if (!kind) {\n      report(\n        `Missing JSDoc @${targetTagName} value.`,\n        null,\n        jsdocParameter,\n      );\n    } else if (!allowedKinds.has(kind)) {\n      report(\n        `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n        `must be one of: ${[\n          ...allowedKinds,\n        ].join(', ')}.`,\n        null,\n        jsdocParameter,\n      );\n    }\n  });\n\n  if (numericOnlyVariation) {\n    utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n      const variation = /** @type {string} */ (\n        utils.getTagDescription(jsdocParameter)\n      ).trim();\n      if (!variation) {\n        report(\n          `Missing JSDoc @${targetTagName} value.`,\n          null,\n          jsdocParameter,\n        );\n      } else if (\n        !Number.isInteger(Number(variation)) ||\n        Number(variation) <= 0\n      ) {\n        report(\n          `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n          null,\n          jsdocParameter,\n        );\n      }\n    });\n  }\n\n  utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n    const version = /** @type {string} */ (\n      utils.getTagDescription(jsdocParameter)\n    ).trim();\n    if (!version) {\n      report(\n        `Missing JSDoc @${targetTagName} value.`,\n        null,\n        jsdocParameter,\n      );\n    } else if (!semver.valid(version)) {\n      report(\n        `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n        null,\n        jsdocParameter,\n      );\n    }\n  });\n  utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n    const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n    const matches = /** @type {string} */ (\n      utils.getTagDescription(jsdocParameter)\n    ).matchAll(licenseRegex);\n    let positiveMatch = false;\n    for (const match of matches) {\n      const license = match[1] || match[0];\n      if (license) {\n        positiveMatch = true;\n      }\n\n      if (!license.trim()) {\n        // Avoid reporting again as empty match\n        if (positiveMatch) {\n          return;\n        }\n\n        report(\n          `Missing JSDoc @${targetTagName} value.`,\n          null,\n          jsdocParameter,\n        );\n      } else if (allowedLicenses) {\n        if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n          report(\n            `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n            null,\n            jsdocParameter,\n          );\n        }\n      } else {\n        try {\n          spdxExpressionParse(license);\n        } catch {\n          report(\n            `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n            null,\n            jsdocParameter,\n          );\n        }\n      }\n    }\n  });\n\n  if (settings.mode === 'typescript') {\n    utils.forEachPreferredTag('import', (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      if (importsExports.errors) {\n        report(\n          'Bad @import tag',\n          null,\n          tag,\n        );\n      }\n    });\n  }\n\n  utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n    const author = /** @type {string} */ (\n      utils.getTagDescription(jsdocParameter)\n    ).trim();\n    if (!author) {\n      report(\n        `Missing JSDoc @${targetTagName} value.`,\n        null,\n        jsdocParameter,\n      );\n    } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n      report(\n        `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n        null,\n        jsdocParameter,\n      );\n    }\n  });\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n    },\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          allowedAuthors: {\n            description: `An array of allowable author values. If absent, only non-whitespace will\nbe checked for.`,\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          allowedLicenses: {\n            anyOf: [\n              {\n                items: {\n                  type: 'string',\n                },\n                type: 'array',\n              },\n              {\n                type: 'boolean',\n              },\n            ],\n            description: `An array of allowable license values or \\`true\\` to allow any license text.\nIf present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).`,\n          },\n          licensePattern: {\n            description: `A string to be converted into a \\`RegExp\\` (with \\`v\\` flag) and whose first\nparenthetical grouping, if present, will match the portion of the license\ndescription to check (if no grouping is present, then the whole portion\nmatched will be used). Defaults to \\`/([^\\\\n\\\\r]*)/gv\\`, i.e., the SPDX expression\nis expected before any line breaks.\n\nNote that the \\`/\\` delimiters are optional, but necessary to add flags.\n\nDefaults to using the \\`v\\` flag, so to add your own flags, encapsulate\nyour expression as a string, but like a literal, e.g., \\`/^mit$/vi\\`.`,\n            type: 'string',\n          },\n          numericOnlyVariation: {\n            description: `Whether to enable validation that \\`@variation\\` must be a number. Defaults to\n\\`false\\`.`,\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}