{"version":3,"file":"validTypes.cjs","names":["parseNamePath","parseName","iterateJsdoc","tryParse","parse","traverse"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n  parse,\n  parseName,\n  parseNamePath,\n  traverse,\n  tryParse,\n} from '@es-joy/jsdoccomment';\n\nconst inlineTags = new Set([\n  // Typdoc\n  'include', 'includeCode',\n  // TSDoc\n  'inheritDoc',\n  'inheritdoc',\n  'label',\n  // JSDoc\n  'link',\n  'linkcode', 'linkplain',\n  'tutorial',\n]);\n\nconst asExpression = /as\\s+/v;\n\nconst suppressTypes = new Set([\n  // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n  // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n  'accessControls',\n  'checkDebuggerStatement',\n  'checkEs5InheritanceCorrectnessConditions',\n  'checkPrototypalTypes',\n  'checkRegExp',\n  'checkTypes',\n  'checkVars',\n  'closureClassChecks',\n  'closureDepMethodUsageChecks',\n  'const',\n  'constantProperty',\n  'dangerousUnrecognizedTypeError',\n  'deprecated',\n  'duplicate',\n  'es5Strict',\n  'externsValidation',\n  'extraProvide',\n  'extraRequire',\n  'globalThis',\n  'invalidCasts',\n  'lateProvide',\n  'legacyGoogScopeRequire',\n  'lintChecks',\n  'lintVarDeclarations',\n  'messageConventions',\n  'misplacedTypeAnnotation',\n  'missingOverride',\n  'missingPolyfill',\n  'missingProperties',\n  'missingProvide',\n  'missingRequire',\n  'missingReturn',\n  'missingSourcesWarnings',\n  'moduleLoad',\n  'msgDescriptions',\n  'nonStandardJsDocs',\n  'partialAlias',\n  'polymer',\n  'reportUnknownTypes',\n  'strictCheckTypes',\n  'strictMissingProperties',\n  'strictModuleDepCheck',\n  'strictPrimitiveOperators',\n  'suspiciousCode',\n\n  // Not documented in enum\n  'switch',\n  'transitionalSuspiciousCodeWarnings',\n  'undefinedNames',\n  'undefinedVars',\n  'underscore',\n  'unknownDefines',\n  'untranspilableFeatures',\n  'unusedLocalVariables',\n\n  // Not documented?\n  'unusedPrivateMembers',\n  'uselessCode',\n  'useOfGoogProvide',\n  'visibility',\n  'with',\n]);\n\n/**\n * @param {string} path\n * @param {import('jsdoc-type-pratt-parser').ParseMode|\"permissive\"} mode\n * @returns {boolean}\n */\nconst tryParsePathIgnoreError = (path, mode) => {\n  try {\n    parseNamePath(\n      path,\n      mode === 'permissive' ? 'jsdoc' : mode,\n      {\n        includeSpecial: true,\n      },\n    );\n\n    return true;\n  } catch {\n    // Keep the original error for including the whole type\n  }\n\n  return false;\n};\n\n/**\n * @param {string} name\n * @param {import('jsdoc-type-pratt-parser').ParseMode} mode\n * @returns {boolean}\n */\nconst tryParseNameIgnoreError = (name, mode) => {\n  try {\n    parseName(name, mode);\n\n    return true;\n  } catch {\n    // Keep the original error for including the whole type\n  }\n\n  return false;\n};\n\nexport default iterateJsdoc(({\n  context,\n  jsdoc,\n  report,\n  settings,\n  utils,\n// eslint-disable-next-line complexity\n}) => {\n  const {\n    allowEmptyNamepaths = false,\n  } = context.options[0] || {};\n  const {\n    mode,\n  } = settings;\n\n  for (const tag of jsdoc.tags) {\n    /**\n     * @param {string} namepath\n     * @param {string} [tagName]\n     * @returns {boolean}\n     */\n    const validNamepathParsing = function (namepath, tagName) {\n      if (\n        tryParsePathIgnoreError(namepath, mode)\n      ) {\n        return true;\n      }\n\n      let handled = false;\n\n      if (tagName) {\n        switch (tagName) {\n          case 'memberof':\n          case 'memberof!': {\n            const endChar = namepath.slice(-1);\n            if ([\n              '#', '.', '~',\n            ].includes(endChar)) {\n              handled = tryParsePathIgnoreError(namepath.slice(0, -1), mode);\n            }\n\n            break;\n          }\n\n          case 'module': case 'requires': {\n            if (!namepath.startsWith('module:')) {\n              handled = tryParsePathIgnoreError(`module:${namepath}`, mode);\n            }\n\n            break;\n          }\n\n          case 'prop':\n          case 'property': {\n            if (mode === 'jsdoc' && (/^\\d+$/v).test(namepath)) {\n              handled = true;\n            }\n\n            break;\n          }\n\n          case 'borrows': {\n            const startChar = namepath.charAt(0);\n            if ([\n              '#', '.', '~',\n            ].includes(startChar)) {\n              handled = tryParsePathIgnoreError(namepath.slice(1), mode);\n            }\n          }\n        }\n      }\n\n      if (!handled) {\n        report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n        return false;\n      }\n\n      return true;\n    };\n\n    /**\n     * @param {string} type\n     * @returns {boolean}\n     */\n    const validTypeParsing = function (type) {\n      let parsedTypes;\n      try {\n        if (mode === 'permissive') {\n          parsedTypes = tryParse(type, undefined, {\n            classContext: true,\n          });\n        } else {\n          parsedTypes = parse(type, mode, {\n            classContext: true,\n          });\n        }\n      } catch {\n        report(`Syntax error in type: ${type}`, null, tag);\n\n        return false;\n      }\n\n      if (mode === 'closure' || mode === 'typescript') {\n        traverse(parsedTypes, (node) => {\n          const {\n            type: typ,\n          } = node;\n\n          if (\n            (typ === 'JsdocTypeObjectField' || typ === 'JsdocTypeKeyValue') &&\n            node.right?.type === 'JsdocTypeNullable' &&\n            node.right?.meta?.position === 'suffix'\n          ) {\n            report(`Syntax error in type: ${node.right.type}`, null, tag);\n          }\n        });\n      }\n\n      return true;\n    };\n\n    if (tag.problems.length) {\n      const msg = tag.problems.reduce((str, {\n        message,\n      }) => {\n        return str + '; ' + message;\n      }, '').slice(2);\n      report(`Invalid name: ${msg}`, null, tag);\n      continue;\n    }\n\n    if (tag.tag === 'import') {\n      // A named import will look like a type, but not be valid; we also don't\n      //  need to check the name/namepath\n      continue;\n    }\n\n    if (tag.tag === 'borrows') {\n      const thisNamepath = /** @type {string} */ (\n        utils.getTagDescription(tag)\n      ).replace(asExpression, '')\n        .trim();\n\n      if (!asExpression.test(/** @type {string} */ (\n        utils.getTagDescription(tag)\n      )) || !thisNamepath) {\n        report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n        continue;\n      }\n\n      if (validNamepathParsing(thisNamepath, 'borrows')) {\n        const thatNamepath = tag.name;\n\n        validNamepathParsing(thatNamepath);\n      }\n\n      continue;\n    }\n\n    if (tag.tag === 'suppress' && mode === 'closure') {\n      let parsedTypes;\n\n      try {\n        parsedTypes = tryParse(tag.type);\n      } catch {\n        // Ignore\n      }\n\n      if (parsedTypes) {\n        traverse(parsedTypes, (node) => {\n          let type;\n          if ('value' in node && typeof node.value === 'string') {\n            type = node.value;\n          }\n\n          if (type !== undefined && !suppressTypes.has(type)) {\n            report(`Syntax error in suppress type: ${type}`, null, tag);\n          }\n        });\n      }\n    }\n\n    const otherModeMaps = /** @type {import('../jsdocUtils.js').ParserMode[]} */ ([\n      'jsdoc', 'typescript', 'closure', 'permissive',\n    ]).filter(\n      (mde) => {\n        return mde !== mode;\n      },\n    ).map((mde) => {\n      return utils.getTagStructureForMode(mde);\n    });\n\n    const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n    if (tagMightHaveNamePosition !== true && tag.name) {\n      const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n      report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n      continue;\n    }\n\n    // Documentation like `@returns {@link SomeType}` is technically ambiguous. Specifically it\n    // could either be intepreted as a type `\"@link SomeType\"` or a description `\"{@link SomeType}\"`.\n    // However this is a good heuristic.\n    if (tag.type.trim().startsWith('@')) {\n      tag.description = `{${tag.type}} ${tag.description}`;\n      tag.type = '';\n    }\n\n    const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n    if (mightHaveTypePosition !== true && tag.type) {\n      const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n      report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n      continue;\n    }\n\n    // REQUIRED NAME\n    const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n    // Don't handle `@param` here though it does require name as handled by\n    //  `require-param-name` (`@property` would similarly seem to require one,\n    //  but is handled by `require-property-name`)\n    if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n      'arg', 'argument', 'param',\n      'prop', 'property',\n    ].includes(tag.tag) &&\n      (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n    ) {\n      const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n      report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n      continue;\n    }\n\n    // REQUIRED TYPE\n    const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n    if (mustHaveTypePosition !== false && !tag.type &&\n      // Auto-added to settings and has own rule already, so don't duplicate\n      tag.tag !== 'next'\n    ) {\n      const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n      report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n      continue;\n    }\n\n    // REQUIRED TYPE OR NAME/NAMEPATH\n    const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n    if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n      const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n      report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n      continue;\n    }\n\n    // VALID TYPE\n    const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n    if (hasTypePosition && (tag.type !== 'const' || tag.tag !== 'type')) {\n      validTypeParsing(tag.type);\n    }\n\n    // VALID NAME/NAMEPATH\n    const hasNamepathPosition = (\n      tagMustHaveNamePosition !== false ||\n      utils.tagMightHaveNamepath(tag.tag)\n    ) && Boolean(tag.name);\n\n    if (hasNamepathPosition) {\n      if (mode !== 'jsdoc' && tag.tag === 'template') {\n        if (!tryParsePathIgnoreError(tag.name.trim(), mode)) {\n          for (const namepath of utils.parseClosureTemplateTag(tag)) {\n            validNamepathParsing(namepath);\n          }\n        }\n      } else {\n        validNamepathParsing(tag.name, tag.tag);\n      }\n    }\n\n    const hasNamePosition = utils.tagMightHaveName(tag.tag) &&\n      Boolean(tag.name);\n    if (\n      hasNamePosition &&\n      mode === 'typescript' &&\n      !tryParseNameIgnoreError(tag.name, mode)\n    ) {\n      report(`Syntax error in name: ${tag.name}`, null, tag);\n    } else if (hasNamePosition && mode !== 'typescript') {\n      validNamepathParsing(tag.name, tag.tag);\n    }\n\n    for (const inlineTag of tag.inlineTags) {\n      if (inlineTags.has(inlineTag.tag) && !inlineTag.text && !inlineTag.namepathOrURL) {\n        report(`Inline tag \"${inlineTag.tag}\" missing content`, null, tag);\n      }\n    }\n  }\n\n  for (const inlineTag of jsdoc.inlineTags) {\n    if (inlineTags.has(inlineTag.tag) && !inlineTag.text && !inlineTag.namepathOrURL) {\n      report(`Inline tag \"${inlineTag.tag}\" missing content`);\n    }\n  }\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Requires all types/namepaths to be valid JSDoc, Closure compiler, or TypeScript types (configurable in settings).',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/valid-types.md#repos-sticky-header',\n    },\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          allowEmptyNamepaths: {\n            default: false,\n            description: `Set to \\`false\\` to bulk disallow\nempty name paths with namepath groups 2 and 4 (these might often be\nexpected to have an accompanying name path, though they have some\nindicative value without one; these may also allow names to be defined\nin another manner elsewhere in the block); you can use\n\\`settings.jsdoc.structuredTags\\` with the \\`required\\` key set to \"name\" if you\nwish to require name paths on a tag-by-tag basis. Defaults to \\`true\\`.`,\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}