{"version":3,"file":"alignTransform.cjs","names":["util"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n  // `comment-parser/primitives` export\n  util,\n} from 'comment-parser';\n\n/**\n * Detects if a line starts with a markdown list marker\n * Supports: -, *, numbered lists (1., 2., etc.)\n * This explicitly excludes hyphens that are part of JSDoc tag syntax\n * @param {string} text - The text to check\n * @param {boolean} isFirstLineOfTag - True if this is the first line (tag line)\n * @returns {boolean} - True if the text starts with a list marker\n */\nconst startsWithListMarker = (text, isFirstLineOfTag = false) => {\n  // On the first line of a tag, the hyphen is typically the JSDoc separator,\n  // not a list marker\n  if (isFirstLineOfTag) {\n    return false;\n  }\n\n  // Match lines that start with optional whitespace, then a list marker\n  // - or * followed by a space\n  // or a number followed by . or ) and a space\n  return /^\\s*(?:[\\-*]|\\d+(?:\\.|\\)))\\s+/v.test(text);\n};\n\n/**\n * @typedef {{\n *   hasNoTypes: boolean,\n *   maxNamedTagLength: import('./iterateJsdoc.js').Integer,\n *   maxUnnamedTagLength: import('./iterateJsdoc.js').Integer\n * }} TypelessInfo\n */\n\nconst {\n  rewireSource,\n} = util;\n\n/**\n * @typedef {{\n *   name: import('./iterateJsdoc.js').Integer,\n *   start: import('./iterateJsdoc.js').Integer,\n *   tag: import('./iterateJsdoc.js').Integer,\n *   type: import('./iterateJsdoc.js').Integer\n * }} Width\n */\n\n/** @type {Width} */\nconst zeroWidth = {\n  name: 0,\n  start: 0,\n  tag: 0,\n  type: 0,\n};\n\n/**\n * @param {string[]} tags\n * @param {import('./iterateJsdoc.js').Integer} index\n * @param {import('comment-parser').Line[]} source\n * @returns {boolean}\n */\nconst shouldAlign = (tags, index, source) => {\n  const tag = source[index].tokens.tag.replace('@', '');\n  const includesTag = tags.includes(tag);\n\n  if (includesTag) {\n    return true;\n  }\n\n  if (tag !== '') {\n    return false;\n  }\n\n  for (let iterator = index; iterator >= 0; iterator--) {\n    const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n    if (previousTag !== '') {\n      if (tags.includes(previousTag)) {\n        return true;\n      }\n\n      return false;\n    }\n  }\n\n  return true;\n};\n\n/**\n * @param {string[]} tags\n * @returns {(\n *   width: Width,\n *   line: {\n *     tokens: import('comment-parser').Tokens\n *   },\n *   index: import('./iterateJsdoc.js').Integer,\n *   source: import('comment-parser').Line[]\n * ) => Width}\n */\nconst getWidth = (tags) => {\n  return (width, {\n    tokens,\n  }, index, source) => {\n    if (!shouldAlign(tags, index, source)) {\n      return width;\n    }\n\n    return {\n      name: Math.max(width.name, tokens.name.length),\n      start: tokens.delimiter === '/**' ? tokens.start.length : width.start,\n      tag: Math.max(width.tag, tokens.tag.length),\n      type: Math.max(width.type, tokens.type.length),\n    };\n  };\n};\n\n/**\n * @param {{\n *   description: string;\n *   tags: import('comment-parser').Spec[];\n *   problems: import('comment-parser').Problem[];\n * }} fields\n * @returns {TypelessInfo}\n */\nconst getTypelessInfo = (fields) => {\n  const hasNoTypes = fields.tags.every(({\n    type,\n  }) => {\n    return !type;\n  });\n  const maxNamedTagLength = Math.max(...fields.tags.map(({\n    name,\n    tag,\n  }) => {\n    return name.length === 0 ? -1 : tag.length;\n  }).filter((length) => {\n    return length !== -1;\n  })) + 1;\n  const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n    name,\n    tag,\n  }) => {\n    return name.length === 0 ? tag.length : -1;\n  }).filter((length) => {\n    return length !== -1;\n  })) + 1;\n  return {\n    hasNoTypes,\n    maxNamedTagLength,\n    maxUnnamedTagLength,\n  };\n};\n\n/**\n * @param {import('./iterateJsdoc.js').Integer} len\n * @returns {string}\n */\nconst space = (len) => {\n  return ''.padStart(len, ' ');\n};\n\n/**\n * Check if a tag or any of its lines contain list markers\n * @param {import('./iterateJsdoc.js').Integer} index - Current line index\n * @param {import('comment-parser').Line[]} source - All source lines\n * @returns {{hasListMarker: boolean, tagStartIndex: import('./iterateJsdoc.js').Integer}}\n */\nconst checkForListMarkers = (index, source) => {\n  let hasListMarker = false;\n  let tagStartIndex = index;\n  while (tagStartIndex > 0 && source[tagStartIndex].tokens.tag === '') {\n    tagStartIndex--;\n  }\n\n  for (let idx = tagStartIndex; idx <= index; idx++) {\n    const isFirstLine = (idx === tagStartIndex);\n    if (source[idx]?.tokens?.description && startsWithListMarker(source[idx].tokens.description, isFirstLine)) {\n      hasListMarker = true;\n      break;\n    }\n  }\n\n  return {\n    hasListMarker,\n    tagStartIndex,\n  };\n};\n\n/**\n * Calculate extra indentation for list items relative to the first continuation line\n * @param {import('./iterateJsdoc.js').Integer} index - Current line index\n * @param {import('./iterateJsdoc.js').Integer} tagStartIndex - Index of the tag line\n * @param {import('comment-parser').Line[]} source - All source lines\n * @returns {string} - Extra indentation spaces\n */\nconst calculateListExtraIndent = (index, tagStartIndex, source) => {\n  // Find the first continuation line to use as baseline\n  let firstContinuationIndent = null;\n  for (let idx = tagStartIndex + 1; idx < source.length; idx++) {\n    if (source[idx].tokens.description && !source[idx].tokens.tag) {\n      firstContinuationIndent = source[idx].tokens.postDelimiter.length;\n      break;\n    }\n  }\n\n  // Calculate the extra indentation of current line relative to the first continuation line\n  const currentOriginalIndent = source[index].tokens.postDelimiter.length;\n  const extraIndent = firstContinuationIndent !== null && currentOriginalIndent > firstContinuationIndent ?\n    ' '.repeat(currentOriginalIndent - firstContinuationIndent) :\n    '';\n\n  return extraIndent;\n};\n\n/**\n * @param {{\n *   customSpacings: import('../src/rules/checkLineAlignment.js').CustomSpacings,\n *   tags: string[],\n *   indent: string,\n *   preserveMainDescriptionPostDelimiter: boolean,\n *   wrapIndent: string,\n *   disableWrapIndent: boolean,\n * }} cfg\n * @returns {(\n *   block: import('comment-parser').Block\n * ) => import('comment-parser').Block}\n */\nconst alignTransform = ({\n  customSpacings,\n  disableWrapIndent,\n  indent,\n  preserveMainDescriptionPostDelimiter,\n  tags,\n  wrapIndent,\n}) => {\n  let intoTags = false;\n  /** @type {Width} */\n  let width;\n\n  /**\n   * @param {import('comment-parser').Tokens} tokens\n   * @param {TypelessInfo} typelessInfo\n   * @returns {import('comment-parser').Tokens}\n   */\n  const alignTokens = (tokens, typelessInfo) => {\n    const nothingAfter = {\n      delim: false,\n      name: false,\n      tag: false,\n      type: false,\n    };\n\n    if (tokens.description === '') {\n      nothingAfter.name = true;\n      tokens.postName = '';\n\n      if (tokens.name === '') {\n        nothingAfter.type = true;\n        tokens.postType = '';\n\n        if (tokens.type === '') {\n          nothingAfter.tag = true;\n          tokens.postTag = '';\n\n          /* c8 ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n          if (tokens.tag === '') {\n            nothingAfter.delim = true;\n          }\n        }\n      }\n    }\n\n    let untypedNameAdjustment = 0;\n    let untypedTypeAdjustment = 0;\n    if (typelessInfo.hasNoTypes) {\n      nothingAfter.tag = true;\n      tokens.postTag = '';\n      if (tokens.name === '') {\n        untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n      } else {\n        untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n          Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n        untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n      }\n    }\n\n    // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n    if (tokens.tag === '' && tokens.type) {\n      return tokens;\n    }\n\n    const spacings = {\n      postDelimiter: customSpacings?.postDelimiter || 1,\n      postName: customSpacings?.postName || 1,\n      postTag: customSpacings?.postTag || 1,\n      postType: customSpacings?.postType || 1,\n    };\n\n    tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n    if (!nothingAfter.tag) {\n      tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n    }\n\n    if (!nothingAfter.type) {\n      tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n    }\n\n    if (!nothingAfter.name) {\n      // If post name is empty for all lines (name width 0), don't add post name spacing.\n      tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n    }\n\n    return tokens;\n  };\n\n  /**\n   * @param {import('comment-parser').Line} line\n   * @param {import('./iterateJsdoc.js').Integer} index\n   * @param {import('comment-parser').Line[]} source\n   * @param {TypelessInfo} typelessInfo\n   * @param {string|false} indentTag\n   * @returns {import('comment-parser').Line}\n   */\n  const update = (line, index, source, typelessInfo, indentTag) => {\n    /** @type {import('comment-parser').Tokens} */\n    const tokens = {\n      ...line.tokens,\n    };\n\n    if (tokens.tag !== '') {\n      intoTags = true;\n    }\n\n    const isEmpty =\n      tokens.tag === '' &&\n      tokens.name === '' &&\n      tokens.type === '' &&\n      tokens.description === '';\n\n    // dangling '*/'\n    if (tokens.end === '*/' && isEmpty) {\n      tokens.start = indent + ' ';\n\n      return {\n        ...line,\n        tokens,\n      };\n    }\n\n    switch (tokens.delimiter) {\n      case '*':\n        tokens.start = indent + ' ';\n        break;\n      case '/**':\n        tokens.start = indent;\n        break;\n      default:\n        tokens.delimiter = '';\n\n        // compensate delimiter\n        tokens.start = indent + '  ';\n    }\n\n    if (!intoTags) {\n      if (tokens.description === '') {\n        tokens.postDelimiter = '';\n      } else if (!preserveMainDescriptionPostDelimiter) {\n        tokens.postDelimiter = ' ';\n      }\n\n      return {\n        ...line,\n        tokens,\n      };\n    }\n\n    const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n    const hyphenSpacing = /^\\s*-\\s+/v;\n    tokens.description = tokens.description.replace(\n      hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n    );\n\n    // Not align.\n    if (shouldAlign(tags, index, source)) {\n      alignTokens(tokens, typelessInfo);\n\n      if (!disableWrapIndent && indentTag) {\n        const {\n          hasListMarker,\n          tagStartIndex,\n        } = checkForListMarkers(index, source);\n\n        if (hasListMarker && index > tagStartIndex) {\n          const extraIndent = calculateListExtraIndent(index, tagStartIndex, source);\n          tokens.postDelimiter += wrapIndent + extraIndent;\n        } else {\n          // Normal case: add wrapIndent after the aligned delimiter\n          tokens.postDelimiter += wrapIndent;\n        }\n      }\n    }\n\n    return {\n      ...line,\n      tokens,\n    };\n  };\n\n  return ({\n    source,\n    ...fields\n  }) => {\n    width = source.reduce(getWidth(tags), {\n      ...zeroWidth,\n    });\n\n    const typelessInfo = getTypelessInfo(fields);\n\n    let tagIndentMode = false;\n\n    return rewireSource({\n      ...fields,\n      source: source.map((line, index) => {\n        const indentTag = !disableWrapIndent && tagIndentMode && !line.tokens.tag && line.tokens.description;\n        const ret = update(line, index, source, typelessInfo, indentTag);\n\n        if (!disableWrapIndent && line.tokens.tag) {\n          tagIndentMode = true;\n        }\n\n        return ret;\n      }),\n    });\n  };\n};\n\nexport default alignTransform;\n"],"mappings":"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","ignoreList":[]}