{"version":3,"file":"alignTransform.cjs","names":["_commentParser","require","rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","wrapIndent","disableWrapIndent","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","indentTag","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce","tagIndentMode","ret","_default","exports","default","module"],"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 * @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    tag,\n    name,\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    tag,\n    name,\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 * @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  tags,\n  indent,\n  preserveMainDescriptionPostDelimiter,\n  wrapIndent,\n  disableWrapIndent,\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+/u;\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      if (!disableWrapIndent && indentTag) {\n        tokens.postDelimiter += wrapIndent;\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":[]}