{"version":3,"sources":["../../src/errors/error-range-utils.ts"],"sourcesContent":["import { Position } from \"../core/positions\";\r\nimport PositionRange from \"../core/positions\";\r\nimport Token from \"../parser/tokenizer/tokens\";\r\nimport IOError from \"./io-error\";\r\n\r\n/**\r\n * Utility functions for creating proper error ranges across tokenizer, parser, and validator.\r\n *\r\n * Industry-standard approach (TypeScript, Roslyn, rust-analyzer):\r\n * 1. Single-token errors: Highlight the specific problematic token\r\n * 2. Construct errors: Span entire construct (from opening to expected closing)\r\n * 3. Validation errors: Highlight the exact value that failed validation\r\n * 4. Unclosed/unterminated: From start to end of input or boundary\r\n */\r\n\r\n/**\r\n * Creates a PositionRange from a single token.\r\n * Use for: Invalid characters, unexpected tokens, type mismatches.\r\n *\r\n * @param token - The token to create range from\r\n * @returns PositionRange spanning the token\r\n */\r\nexport function singleTokenRange(token: Token): PositionRange {\r\n  return {\r\n    getStartPos: () => token.getStartPos(),\r\n    getEndPos: () => token.getEndPos()\r\n  };\r\n}\r\n\r\n/**\r\n * Creates a PositionRange spanning multiple tokens.\r\n * Use for: Multi-token expressions, schema definitions.\r\n *\r\n * @param startToken - First token of the range\r\n * @param endToken - Last token of the range\r\n * @returns PositionRange spanning from start to end\r\n */\r\nexport function tokenSpanRange(startToken: Token, endToken: Token): PositionRange {\r\n  return {\r\n    getStartPos: () => startToken.getStartPos(),\r\n    getEndPos: () => endToken.getEndPos()\r\n  };\r\n}\r\n\r\n/**\r\n * Creates a PositionRange for unclosed constructs (strings, arrays, objects).\r\n * Industry standard: Span from opening delimiter to where closing should be.\r\n *\r\n * @param startToken - Opening delimiter token (\", [, {, etc.)\r\n * @param currentPos - Current position when error detected\r\n * @returns PositionRange spanning the unclosed construct\r\n */\r\nexport function unclosedConstructRange(\r\n  startToken: Token,\r\n  currentPos: Position\r\n): PositionRange {\r\n  return {\r\n    getStartPos: () => startToken.getStartPos(),\r\n    getEndPos: () => currentPos\r\n  };\r\n}\r\n\r\n/**\r\n * Creates a PositionRange for construct with explicit start and end positions.\r\n * Use for: Validation errors on specific values, type mismatches.\r\n *\r\n * @param startPos - Start position\r\n * @param endPos - End position\r\n * @returns PositionRange spanning the positions\r\n */\r\nexport function positionSpanRange(startPos: Position, endPos: Position): PositionRange {\r\n  return {\r\n    getStartPos: () => startPos,\r\n    getEndPos: () => endPos\r\n  };\r\n}\r\n\r\n/**\r\n * Sets the position range on an error object.\r\n * Automatically updates the error message to include position.\r\n *\r\n * @param error - The error to set range on\r\n * @param range - The position range\r\n * @returns The error (for chaining)\r\n */\r\nexport function setErrorRange<T extends IOError>(error: T, range: PositionRange): T {\r\n  error.positionRange = range;\r\n  return error;\r\n}\r\n\r\n/**\r\n * Creates a PositionRange from a start token to end of available content.\r\n * Use for: Unterminated strings, unclosed brackets at EOF.\r\n *\r\n * @param startToken - Opening token\r\n * @param lastPos - Last valid position in the input\r\n * @returns PositionRange from start to last position\r\n */\r\nexport function toEndOfInputRange(\r\n  startToken: Token,\r\n  lastPos: Position\r\n): PositionRange {\r\n  return {\r\n    getStartPos: () => startToken.getStartPos(),\r\n    getEndPos: () => lastPos\r\n  };\r\n}\r\n\r\n/**\r\n * Helper to create a Position object.\r\n *\r\n * @param pos - Absolute position\r\n * @param row - Line number (1-based)\r\n * @param col - Column number (1-based)\r\n * @returns Position object\r\n */\r\nexport function createPosition(pos: number, row: number, col: number): Position {\r\n  return { pos, row, col };\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBO,SAAS,iBAAiB,OAA6B;AAC5D,SAAO;AAAA,IACL,aAAa,MAAM,MAAM,YAAY;AAAA,IACrC,WAAW,MAAM,MAAM,UAAU;AAAA,EACnC;AACF;AAUO,SAAS,eAAe,YAAmB,UAAgC;AAChF,SAAO;AAAA,IACL,aAAa,MAAM,WAAW,YAAY;AAAA,IAC1C,WAAW,MAAM,SAAS,UAAU;AAAA,EACtC;AACF;AAUO,SAAS,uBACd,YACA,YACe;AACf,SAAO;AAAA,IACL,aAAa,MAAM,WAAW,YAAY;AAAA,IAC1C,WAAW,MAAM;AAAA,EACnB;AACF;AAUO,SAAS,kBAAkB,UAAoB,QAAiC;AACrF,SAAO;AAAA,IACL,aAAa,MAAM;AAAA,IACnB,WAAW,MAAM;AAAA,EACnB;AACF;AAUO,SAAS,cAAiC,OAAU,OAAyB;AAClF,QAAM,gBAAgB;AACtB,SAAO;AACT;AAUO,SAAS,kBACd,YACA,SACe;AACf,SAAO;AAAA,IACL,aAAa,MAAM,WAAW,YAAY;AAAA,IAC1C,WAAW,MAAM;AAAA,EACnB;AACF;AAUO,SAAS,eAAe,KAAa,KAAa,KAAuB;AAC9E,SAAO,EAAE,KAAK,KAAK,IAAI;AACzB;","names":[]}