function isBreakable(path, value, proseWrap, isLink) {
  if (
    proseWrap !== "always" ||
    path.hasAncestor((node) => SINGLE_LINE_NODE_TYPES.has(node.type))
  ) {
    return false;
  }

  if (isLink) {
    return value !== "";
  }

  /** @type {AdjacentNodes} */
  const { previous, next } = path;

  // [1]: We will make a breaking change to the rule to convert spaces between
  //      a Chinese or Japanese character and another character in the future.
  //      Such a space must have been always interchangeable with a line break.
  //      https://wpt.fyi/results/css/css-text/line-breaking?label=master&label=experimental&aligned&q=segment-break-transformation-rules-
  // [2]: we should not break lines even between Chinese/Japanese characters because Chrome & Safari replaces "\n" between such characters with " " now.
  // [3]: Hangul (Korean) must simulate Latin words; see https://github.com/prettier/prettier/issues/6516
  //      [printable][""][Hangul] & vice versa => Don't break
  //      [printable][\n][Hangul] will be interchangeable to [printable][" "][Hangul] in the future
  //      (will be compatible with Firefox's behavior)

  if (!previous || !next) {
    // empty side is Latin ASCII symbol (e.g. *, [, ], or `)
    // value is " " or "\n" (not "")
    // [1] & [2]? No, it's the only exception because " " & "\n" have been always interchangeable only here
    return true;
  }

  if (value === "") {
    // [1] & [2] & [3]
    // At least either of previous or next is non-Latin (=CJK)
    return false;
  }

  if (
    // See the same product terms as the following in lineBreakCanBeConvertedToSpace
    // The behavior is consistent between browsers and Prettier in that line breaks between Korean and Chinese/Japanese letters are equivalent to spaces.
    // Currently, [CJK punctuation][\n][Hangul] is interchangeable to [CJK punctuation][""][Hangul],
    // but this is not compatible with Firefox's behavior.
    // Will be changed to [CJK punctuation][" "][Hangul] in the future
    (previous.kind === KIND_K_LETTER && next.kind === KIND_CJ_LETTER) ||
    (next.kind === KIND_K_LETTER && previous.kind === KIND_CJ_LETTER)
  ) {
    return true;
  }

  // [1] & [2]
  if (previous.isCJ || next.isCJ) {
    return false;
  }

  return true;
}
Check whether whitespace can be printed as a line break.

@param {AstPath} path
@param {WhitespaceValue} value
@param {ProseWrap} proseWrap
@param {boolean} isLink
@returns {boolean}