{"version":3,"file":"typeFormatting.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","digitRegex","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","arrayBrackets","enableFixer","genericDot","objectFieldIndent","objectFieldQuote","objectFieldSeparator","objectFieldSeparatorOptionalLinebreak","objectFieldSeparatorTrailingPunctuation","separatorForSingleObjectField","stringQuotes","typeBracketSpacing","unionSpacing","options","mode","checkTypeFormats","tag","potentialType","type","parsedType","tryParseType","parseType","fix","typeLines","stringify","split","firstTypeLine","shift","lastTypeLine","pop","beginNameOrDescIdx","source","findIndex","tokens","name","description","nameAndDesc","slice","initialNumber","number","src","length","end","postName","postType","undefined","map","typeLine","idx","delimiter","postTag","start","push","firstTagIdx","tg","initialEndSource","find","tags","flatMap","at","errorMessages","startsWith","endsWith","test","traverse","nde","errorMessage","typeNode","left","value","meta","brackets","dot","separator","propertyIndent","trailingPunctuation","replace","key","quote","spacing","differentResult","reportJSDoc","getPresentTags","iterateAllJsdocs","docs","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/typeFormatting.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n  parse as parseType,\n  stringify,\n  traverse,\n  tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nconst digitRegex = (/^(\\d+(\\.\\d*)?|\\.\\d+)([eE][\\-+]?\\d+)?$/v);\n\nexport default iterateJsdoc(({\n  context,\n  indent,\n  jsdoc,\n  settings,\n  utils,\n}) => {\n  const {\n    arrayBrackets = 'square',\n    enableFixer = true,\n    genericDot = false,\n    objectFieldIndent = '',\n    objectFieldQuote = null,\n    objectFieldSeparator = 'comma',\n    objectFieldSeparatorOptionalLinebreak = true,\n    objectFieldSeparatorTrailingPunctuation = false,\n    // propertyQuotes = null,\n    separatorForSingleObjectField = false,\n    stringQuotes = 'single',\n    typeBracketSpacing = '',\n    unionSpacing = ' ',\n  } = context.options[0] || {};\n\n  const {\n    mode,\n  } = settings;\n\n  /**\n   * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n   */\n  const checkTypeFormats = (tag) => {\n    const potentialType = tag.type;\n    let parsedType;\n    try {\n      parsedType = mode === 'permissive' ?\n        tryParseType(/** @type {string} */ (potentialType)) :\n        parseType(/** @type {string} */ (potentialType), mode);\n    } catch {\n      return;\n    }\n\n    const fix = () => {\n      const typeLines = stringify(parsedType).split('\\n');\n      const firstTypeLine = typeLines.shift();\n      const lastTypeLine = typeLines.pop();\n\n      const beginNameOrDescIdx = tag.source.findIndex(({\n        tokens,\n      }) => {\n        return tokens.name || tokens.description;\n      });\n\n      const nameAndDesc = beginNameOrDescIdx === -1 ?\n        null :\n        tag.source.slice(beginNameOrDescIdx);\n\n      const initialNumber = tag.source[0].number;\n      const src = [\n        // Get inevitably present tag from first `tag.source`\n        {\n          number: initialNumber,\n          source: '',\n          tokens: {\n            ...tag.source[0].tokens,\n            ...(typeLines.length || lastTypeLine ? {\n              end: '',\n              name: '',\n              postName: '',\n              postType: '',\n            } : {}),\n            type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''),\n          },\n        },\n        // Get any intervening type lines\n        ...(typeLines.length ? typeLines.map((typeLine, idx) => {\n          return {\n            number: initialNumber + idx + 1,\n            source: '',\n            tokens: {\n              // Grab any delimiter info from first item\n              ...tag.source[0].tokens,\n              delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter,\n              end: '',\n              name: '',\n              postName: '',\n              postTag: '',\n              postType: '',\n              start: indent + ' ',\n              tag: '',\n              type: typeLine,\n            },\n          };\n        }) : []),\n      ];\n\n      // Merge any final type line and name and description\n      if (\n        // Name and description may be already included if present with the tag\n        nameAndDesc && beginNameOrDescIdx > 0\n      ) {\n        src.push({\n          number: src.length + 1,\n          source: '',\n          tokens: {\n            ...nameAndDesc[0].tokens,\n            type: lastTypeLine + typeBracketSpacing + '}',\n          },\n        });\n\n        if (\n          // Get any remaining description lines\n          nameAndDesc.length > 1\n        ) {\n          src.push(\n            ...nameAndDesc.slice(1).map(({\n              source,\n              tokens,\n            }, idx) => {\n              return {\n                number: src.length + idx + 2,\n                source,\n                tokens,\n              };\n            }),\n          );\n        }\n      } else if (nameAndDesc) {\n        if (lastTypeLine) {\n          src.push({\n            number: src.length + 1,\n            source: '',\n            tokens: {\n              ...nameAndDesc[0].tokens,\n              delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter,\n              postTag: '',\n              start: indent + ' ',\n              tag: '',\n              type: lastTypeLine + typeBracketSpacing + '}',\n            },\n          });\n        }\n\n        if (\n          // Get any remaining description lines\n          nameAndDesc.length > 1\n        ) {\n          src.push(\n            ...nameAndDesc.slice(1).map(({\n              source,\n              tokens,\n            }, idx) => {\n              return {\n                number: src.length + idx + 2,\n                source,\n                tokens,\n              };\n            }),\n          );\n        }\n      }\n\n      tag.source = src;\n\n      // Properly rewire `jsdoc.source`\n      const firstTagIdx = jsdoc.source.findIndex(({\n        tokens: {\n          tag: tg,\n        },\n      }) => {\n        return tg;\n      });\n\n      const initialEndSource = jsdoc.source.find(({\n        tokens: {\n          end,\n        },\n      }) => {\n        return end;\n      });\n\n      jsdoc.source = [\n        ...jsdoc.source.slice(0, firstTagIdx),\n        ...jsdoc.tags.flatMap(({\n          source,\n        }) => {\n          return source;\n        }),\n      ];\n\n      if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) {\n        jsdoc.source.push(initialEndSource);\n      }\n    };\n\n    /** @type {string[]} */\n    const errorMessages = [];\n\n    if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) {\n      errorMessages.push(`Must have initial and final \"${typeBracketSpacing}\" spacing`);\n    } else if (!typeBracketSpacing && ((/^\\s/v).test(tag.type) || (/\\s$/v).test(tag.type))) {\n      errorMessages.push('Must have no initial spacing');\n    }\n\n    // eslint-disable-next-line complexity -- Todo\n    traverse(parsedType, (nde) => {\n      let errorMessage = '';\n\n      switch (nde.type) {\n        case 'JsdocTypeGeneric': {\n          const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde);\n          if ('value' in typeNode.left && typeNode.left.value === 'Array') {\n            if (typeNode.meta.brackets !== arrayBrackets) {\n              typeNode.meta.brackets = arrayBrackets;\n              errorMessage = `Array bracket style should be ${arrayBrackets}`;\n            }\n          } else if (typeNode.meta.dot !== genericDot) {\n            typeNode.meta.dot = genericDot;\n            errorMessage = `Dot usage should be ${genericDot}`;\n          }\n\n          break;\n        }\n\n        case 'JsdocTypeObject': {\n          const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde);\n          /* c8 ignore next -- Guard */\n          const separator = typeNode.meta.separator ?? 'comma';\n          if (\n            (separator !== objectFieldSeparator &&\n              (!objectFieldSeparatorOptionalLinebreak ||\n                !(objectFieldSeparator.endsWith('-linebreak') &&\n                  objectFieldSeparator.startsWith(separator)))) ||\n            (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField ||\n            ((typeNode.meta.propertyIndent ?? '') !== objectFieldIndent &&\n              separator.endsWith('-linebreak')) ||\n            (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation\n          ) {\n            typeNode.meta.separator = objectFieldSeparatorOptionalLinebreak && !separator.endsWith('and-linebreak') ?\n              objectFieldSeparator.replace(/-and-linebreak$/v, '') :\n              objectFieldSeparator;\n            typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;\n            typeNode.meta.propertyIndent = objectFieldIndent;\n            typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;\n            errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;\n          }\n\n          break;\n        }\n\n        case 'JsdocTypeObjectField': {\n          const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde);\n          if ((objectFieldQuote ||\n            (typeof typeNode.key === 'string' &&\n              (\n                (/^[\\p{ID_Start}$_][\\p{ID_Continue}$\\u200C\\u200D]*$/v).test(typeNode.key) ||\n                digitRegex.test(typeNode.key)\n              )\n            )) &&\n            typeNode.meta.quote !== (objectFieldQuote ?? undefined) &&\n            (typeof typeNode.key !== 'string' ||\n                !digitRegex.test(typeNode.key))\n          ) {\n            typeNode.meta.quote = objectFieldQuote ?? undefined;\n            errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`;\n          }\n\n          break;\n        }\n\n        // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524\n        // case 'JsdocTypeProperty': {\n        //   const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde);\n\n        //   if ((propertyQuotes ||\n        //     (typeof typeNode.value === 'string' && !(/\\s/v).test(typeNode.value))) &&\n        //     typeNode.meta.quote !== (propertyQuotes ?? undefined)\n        //   ) {\n        //     typeNode.meta.quote = propertyQuotes ?? undefined;\n        //     errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`;\n        //   }\n\n        //   break;\n        // }\n\n        case 'JsdocTypeStringValue': {\n          const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde);\n          if (typeNode.meta.quote !== stringQuotes) {\n            typeNode.meta.quote = stringQuotes;\n            errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;\n          }\n\n          break;\n        }\n\n        case 'JsdocTypeUnion': {\n          const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde);\n          /* c8 ignore next -- Guard */\n          if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) {\n            typeNode.meta = {\n              spacing: unionSpacing,\n            };\n            errorMessage = `Inconsistent \"${unionSpacing}\" union spacing usage`;\n          }\n\n          break;\n        }\n\n        default:\n          break;\n      }\n\n      if (errorMessage) {\n        errorMessages.push(errorMessage);\n      }\n    });\n\n    const differentResult = tag.type !==\n      typeBracketSpacing + stringify(parsedType) + typeBracketSpacing;\n\n    if (errorMessages.length && differentResult) {\n      for (const errorMessage of errorMessages) {\n        utils.reportJSDoc(\n          errorMessage, tag, enableFixer ? fix : null,\n        );\n      }\n    // Stringification may have been equal previously (and thus no error reported)\n    //   because the stringification doesn't preserve everything\n    } else if (differentResult) {\n      utils.reportJSDoc(\n        'There was an error with type formatting', tag, enableFixer ? fix : null,\n      );\n    }\n  };\n\n  const tags = utils.getPresentTags([\n    'param',\n    'property',\n    'returns',\n    'this',\n    'throws',\n    'type',\n    'typedef',\n    'yields',\n  ]);\n  for (const tag of tags) {\n    if (tag.type) {\n      checkTypeFormats(tag);\n    }\n  }\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Formats JSDoc type values.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/type-formatting.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          arrayBrackets: {\n            description: 'Determines how array generics are represented. Set to `angle` for the style `Array<type>` or `square` for the style `type[]`. Defaults to \"square\".',\n            enum: [\n              'angle',\n              'square',\n            ],\n            type: 'string',\n          },\n          enableFixer: {\n            description: 'Whether to enable the fixer. Defaults to `true`.',\n            type: 'boolean',\n          },\n          genericDot: {\n            description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.<AnotherType>`). Defaults to `false`.',\n            type: 'boolean',\n          },\n          objectFieldIndent: {\n            description: `A string indicating the whitespace to be added on each line preceding an\nobject property-value field. Defaults to the empty string.`,\n            type: 'string',\n          },\n          objectFieldQuote: {\n            description: `Whether and how object field properties should be quoted (e.g., \\`{\"a\": string}\\`).\nSet to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\nrequired due to special characters within the field). Digits will be kept as is,\nregardless of setting (they can either represent a digit or a string digit).`,\n            enum: [\n              'double',\n              'single',\n              null,\n            ],\n          },\n          objectFieldSeparator: {\n            description: `For object properties, specify whether a \"semicolon\", \"comma\", \"linebreak\",\n\"semicolon-and-linebreak\", or \"comma-and-linebreak\" should be used after\neach object property-value pair.\n\nDefaults to \\`\"comma\"\\`.`,\n            enum: [\n              'comma',\n              'comma-and-linebreak',\n              'linebreak',\n              'semicolon',\n              'semicolon-and-linebreak',\n            ],\n            type: 'string',\n          },\n          objectFieldSeparatorOptionalLinebreak: {\n            description: `Whether \\`objectFieldSeparator\\` set to \\`\"semicolon-and-linebreak\"\\` or\n\\`\"comma-and-linebreak\"\\` should be allowed to optionally drop the linebreak.\n\nDefaults to \\`true\\`.`,\n            type: 'boolean',\n          },\n          objectFieldSeparatorTrailingPunctuation: {\n            description: `If \\`separatorForSingleObjectField\\` is not in effect (i.e., if it is \\`false\\`\nor there are multiple property-value object fields present), this property\nwill determine whether to add punctuation corresponding to the\n\\`objectFieldSeparator\\` (e.g., a semicolon) to the final object field.\nDefaults to \\`false\\`.`,\n            type: 'boolean',\n          },\n          //           propertyQuotes: {\n          //             description: `Whether and how namepath properties should be quoted (e.g., \\`ab.\"cd\".\"ef\"\\`).\n          // Set to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\n          // required due to whitespace within the property).`,\n          //             enum: [\n          //               'double',\n          //               'single',\n          //               null,\n          //             ],\n          //           },\n          separatorForSingleObjectField: {\n            description: `Whether to apply the \\`objectFieldSeparator\\` (e.g., a semicolon) when there\nis only one property-value object field present. Defaults to \\`false\\`.`,\n            type: 'boolean',\n          },\n          stringQuotes: {\n            description: `How string literals should be quoted (e.g., \\`\"abc\"\\`). Set to \\`single\\`\nor \\`double\\`. Defaults to 'single'.`,\n            enum: [\n              'double',\n              'single',\n            ],\n            type: 'string',\n          },\n          typeBracketSpacing: {\n            description: `A string of spaces that will be added immediately after the type's initial\ncurly bracket and immediately before its ending curly bracket. Defaults\nto the empty string.`,\n            type: 'string',\n          },\n          unionSpacing: {\n            description: 'Determines the spacing to add to unions (`|`). Defaults to a single space (`\" \"`).',\n            type: 'string',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}