{"version":3,"file":"getMergeConflictLineTypes.js","names":["stack: MergeConflictFrame[]","regions: MergeConflictRegion[]"],"sources":["../../src/utils/getMergeConflictLineTypes.ts"],"sourcesContent":["import {\n  MERGE_CONFLICT_BASE_MARKER_REGEX,\n  MERGE_CONFLICT_END_MARKER_REGEX,\n  MERGE_CONFLICT_SEPARATOR_MARKER_REGEX,\n  MERGE_CONFLICT_START_MARKER_REGEX,\n} from '../constants';\nimport type { MergeConflictRegion } from '../types';\n\nexport type MergeConflictLineType =\n  | 'none'\n  | 'marker-start'\n  | 'marker-base'\n  | 'marker-separator'\n  | 'marker-end'\n  | 'current'\n  | 'base'\n  | 'incoming';\n\ntype MergeConflictStage = 'current' | 'base' | 'incoming';\n\ninterface MergeConflictFrame {\n  stage: MergeConflictStage;\n  startLineIndex: number;\n  baseMarkerLineIndex?: number;\n  separatorLineIndex?: number;\n}\n\nexport interface MergeConflictParseResult {\n  lineTypes: MergeConflictLineType[];\n  regions: MergeConflictRegion[];\n}\n\nfunction trimLineEnding(line: string): string {\n  return line.replace(/(?:\\r\\n|\\n|\\r)$/, '');\n}\n\nexport function getMergeConflictLineTypes(\n  lines: string[]\n): MergeConflictLineType[] {\n  return getMergeConflictParseResult(lines).lineTypes;\n}\n\nexport function getMergeConflictParseResult(\n  lines: string[]\n): MergeConflictParseResult {\n  return parseMergeConflicts(lines);\n}\n\nexport function getMergeConflictActionLineNumber(\n  conflict: MergeConflictRegion\n): number {\n  return Math.max(1, conflict.startLineNumber - 1);\n}\n\nfunction parseMergeConflicts(lines: string[]): MergeConflictParseResult {\n  const lineTypes = new Array<MergeConflictLineType>(lines.length);\n  const stack: MergeConflictFrame[] = [];\n  const regions: MergeConflictRegion[] = [];\n\n  for (let index = 0; index < lines.length; index++) {\n    const line = trimLineEnding(lines[index]);\n\n    if (MERGE_CONFLICT_START_MARKER_REGEX.test(line)) {\n      stack.push({ stage: 'current', startLineIndex: index });\n      lineTypes[index] = 'marker-start';\n      continue;\n    }\n\n    const frame = stack.at(-1);\n    if (frame == null) {\n      lineTypes[index] = 'none';\n      continue;\n    }\n\n    if (MERGE_CONFLICT_BASE_MARKER_REGEX.test(line)) {\n      frame.stage = 'base';\n      frame.baseMarkerLineIndex = index;\n      lineTypes[index] = 'marker-base';\n      continue;\n    }\n\n    if (MERGE_CONFLICT_SEPARATOR_MARKER_REGEX.test(line)) {\n      frame.stage = 'incoming';\n      frame.separatorLineIndex = index;\n      lineTypes[index] = 'marker-separator';\n      continue;\n    }\n\n    if (MERGE_CONFLICT_END_MARKER_REGEX.test(line)) {\n      const completedFrame = stack.pop();\n      lineTypes[index] = 'marker-end';\n      if (completedFrame?.separatorLineIndex != null) {\n        const conflictIndex = regions.length;\n        regions.push({\n          conflictIndex,\n          startLineIndex: completedFrame.startLineIndex,\n          startLineNumber: completedFrame.startLineIndex + 1,\n          separatorLineIndex: completedFrame.separatorLineIndex,\n          separatorLineNumber: completedFrame.separatorLineIndex + 1,\n          endLineIndex: index,\n          endLineNumber: index + 1,\n          baseMarkerLineIndex: completedFrame.baseMarkerLineIndex,\n          baseMarkerLineNumber:\n            completedFrame.baseMarkerLineIndex != null\n              ? completedFrame.baseMarkerLineIndex + 1\n              : undefined,\n        });\n      }\n      continue;\n    }\n\n    lineTypes[index] = frame.stage;\n  }\n\n  return { lineTypes, regions };\n}\n"],"mappings":";;;AAgCA,SAAS,eAAe,MAAsB;AAC5C,QAAO,KAAK,QAAQ,mBAAmB,GAAG;;AAG5C,SAAgB,0BACd,OACyB;AACzB,QAAO,4BAA4B,MAAM,CAAC;;AAG5C,SAAgB,4BACd,OAC0B;AAC1B,QAAO,oBAAoB,MAAM;;AAGnC,SAAgB,iCACd,UACQ;AACR,QAAO,KAAK,IAAI,GAAG,SAAS,kBAAkB,EAAE;;AAGlD,SAAS,oBAAoB,OAA2C;CACtE,MAAM,YAAY,IAAI,MAA6B,MAAM,OAAO;CAChE,MAAMA,QAA8B,EAAE;CACtC,MAAMC,UAAiC,EAAE;AAEzC,MAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EACjD,MAAM,OAAO,eAAe,MAAM,OAAO;AAEzC,MAAI,kCAAkC,KAAK,KAAK,EAAE;AAChD,SAAM,KAAK;IAAE,OAAO;IAAW,gBAAgB;IAAO,CAAC;AACvD,aAAU,SAAS;AACnB;;EAGF,MAAM,QAAQ,MAAM,GAAG,GAAG;AAC1B,MAAI,SAAS,MAAM;AACjB,aAAU,SAAS;AACnB;;AAGF,MAAI,iCAAiC,KAAK,KAAK,EAAE;AAC/C,SAAM,QAAQ;AACd,SAAM,sBAAsB;AAC5B,aAAU,SAAS;AACnB;;AAGF,MAAI,sCAAsC,KAAK,KAAK,EAAE;AACpD,SAAM,QAAQ;AACd,SAAM,qBAAqB;AAC3B,aAAU,SAAS;AACnB;;AAGF,MAAI,gCAAgC,KAAK,KAAK,EAAE;GAC9C,MAAM,iBAAiB,MAAM,KAAK;AAClC,aAAU,SAAS;AACnB,OAAI,gBAAgB,sBAAsB,MAAM;IAC9C,MAAM,gBAAgB,QAAQ;AAC9B,YAAQ,KAAK;KACX;KACA,gBAAgB,eAAe;KAC/B,iBAAiB,eAAe,iBAAiB;KACjD,oBAAoB,eAAe;KACnC,qBAAqB,eAAe,qBAAqB;KACzD,cAAc;KACd,eAAe,QAAQ;KACvB,qBAAqB,eAAe;KACpC,sBACE,eAAe,uBAAuB,OAClC,eAAe,sBAAsB,IACrC;KACP,CAAC;;AAEJ;;AAGF,YAAU,SAAS,MAAM;;AAG3B,QAAO;EAAE;EAAW;EAAS"}