{"version":3,"file":"validTypes.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","inlineTags","Set","asExpression","suppressTypes","tryParsePathIgnoreError","path","mode","parseNamePath","includeSpecial","tryParseNameIgnoreError","name","parseName","_default","exports","iterateJsdoc","context","jsdoc","report","settings","utils","allowEmptyNamepaths","options","tag","tags","validNamepathParsing","namepath","tagName","handled","endChar","slice","includes","startsWith","test","startChar","charAt","validTypeParsing","type","parsedTypes","tryParse","undefined","classContext","parse","traverse","node","typ","right","meta","position","problems","length","msg","reduce","str","message","thisNamepath","getTagDescription","replace","trim","thatNamepath","value","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","description","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","hasNamePosition","tagMightHaveName","inlineTag","text","namepathOrURL","iterateAllJsdocs","docs","url","schema","additionalProperties","properties","module"],"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(\n          // May be an issue with the commas of\n          //   `utils.parseClosureTemplateTag`, so first try a raw\n          //   value; we really need a proper parser instead, however.\n          tag.name.trim().replace(/^\\[?(?<name>.*?)=.*$/v, '$<name>'),\n          mode,\n        )) {\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":[]}