{"version":3,"file":"well-known-parser15.cjs","sources":["../src/wktparser.ts"],"sourcesContent":["import { GEOMETRY_TYPES } from './constants';\nimport { Point } from './point';\n\nexport interface DimensionInfo {\n  hasZ?: boolean;\n  hasM?: boolean;\n}\n\nexport class WktParser {\n  value: string;\n  position: number;\n\n  constructor(value: string) {\n    this.value = value;\n    this.position = 0;\n  }\n\n  match(tokens: string[]): string | null {\n    this.skipWhitespaces();\n\n    for (let i = 0; i < tokens.length; i++) {\n      if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n        this.position += tokens[i].length;\n        return tokens[i];\n      }\n    }\n\n    return null;\n  }\n\n  matchRegex(tokens: RegExp[]): RegExpMatchArray | null {\n    this.skipWhitespaces();\n\n    for (let i = 0; i < tokens.length; i++) {\n      const match = this.value.substring(this.position).match(tokens[i]);\n\n      if (match) {\n        this.position += match[0].length;\n        return match;\n      }\n    }\n\n    return null;\n  }\n\n  isMatch(tokens: string[]): boolean {\n    this.skipWhitespaces();\n\n    for (let i = 0; i < tokens.length; i++) {\n      if (this.value.substring(this.position).indexOf(tokens[i]) === 0) {\n        this.position += tokens[i].length;\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  matchType(): string {\n    const geometryType = this.match([\n      GEOMETRY_TYPES.Point.wkt,\n      GEOMETRY_TYPES.LineString.wkt,\n      GEOMETRY_TYPES.Polygon.wkt,\n      GEOMETRY_TYPES.MultiPoint.wkt,\n      GEOMETRY_TYPES.MultiLineString.wkt,\n      GEOMETRY_TYPES.MultiPolygon.wkt,\n      GEOMETRY_TYPES.GeometryCollection.wkt\n    ]);\n\n    if (!geometryType) {\n      throw new Error('Expected geometry type');\n    }\n\n    return geometryType;\n  }\n\n  matchDimension(): DimensionInfo {\n    const dimension = this.match(['ZM', 'Z', 'M']);\n\n    switch (dimension) {\n      case 'ZM':\n        return { hasZ: true, hasM: true };\n      case 'Z':\n        return { hasZ: true, hasM: false };\n      case 'M':\n        return { hasZ: false, hasM: true };\n      default:\n        return { hasZ: false, hasM: false };\n    }\n  }\n\n  expectGroupStart(): void {\n    if (!this.isMatch(['('])) {\n      throw new Error('Expected group start');\n    }\n  }\n\n  expectGroupEnd(): void {\n    if (!this.isMatch([')'])) {\n      throw new Error('Expected group end');\n    }\n  }\n\n  matchCoordinate(options: DimensionInfo): Point {\n    let match: RegExpMatchArray | null;\n\n    if (options.hasZ && options.hasM) {\n      match = this.matchRegex([/^(\\S*)\\s+(\\S*)\\s+(\\S*)\\s+([^\\s,)]*)/]);\n    } else if (options.hasZ || options.hasM) {\n      match = this.matchRegex([/^(\\S*)\\s+(\\S*)\\s+([^\\s,)]*)/]);\n    } else {\n      match = this.matchRegex([/^(\\S*)\\s+([^\\s,)]*)/]);\n    }\n\n    if (!match) {\n      throw new Error('Expected coordinates');\n    }\n\n    if (options.hasZ && options.hasM) {\n      return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4]));\n    } else if (options.hasZ) {\n      return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), undefined);\n    } else if (options.hasM) {\n      return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3]));\n    } else {\n      return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, undefined);\n    }\n  }\n\n  matchCoordinates(options: DimensionInfo): Point[] {\n    const coordinates: Point[] = [];\n\n    do {\n      const startsWithBracket = this.isMatch(['(']);\n\n      coordinates.push(this.matchCoordinate(options));\n\n      if (startsWithBracket) {\n        this.expectGroupEnd();\n      }\n    } while (this.isMatch([',']));\n\n    return coordinates;\n  }\n\n  skipWhitespaces(): void {\n    while (this.position < this.value.length && this.value[this.position] === ' ') {\n      this.position++;\n    }\n  }\n}"],"names":["WktParser","value","tokens","i","match","geometryType","GEOMETRY_TYPES","options","Point","coordinates","startsWithBracket"],"mappings":"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"}