{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-boolean-point-on-line/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-boolean-point-on-line/dist/cjs/index.cjs","sourcesContent":[null,"import { Feature, LineString } from \"geojson\";\nimport { Coord } from \"@turf/helpers\";\nimport { getCoord, getCoords } from \"@turf/invariant\";\n\n/**\n * Returns true if a point is on a line. Accepts a optional parameter to ignore the\n * start and end vertices of the linestring.\n *\n * @function\n * @param {Coord} pt GeoJSON Point\n * @param {Feature<LineString>} line GeoJSON LineString\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices.\n * @param {number} [options.epsilon] Fractional number to compare with the cross product result. Useful for dealing with floating points such as lng/lat points\n * @returns {boolean} true/false\n * @example\n * var pt = turf.point([0, 0]);\n * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]);\n * var isPointOnLine = turf.booleanPointOnLine(pt, line);\n * //=true\n */\nfunction booleanPointOnLine(\n  pt: Coord,\n  line: Feature<LineString> | LineString,\n  options: {\n    ignoreEndVertices?: boolean;\n    epsilon?: number;\n  } = {}\n): boolean {\n  // Normalize inputs\n  const ptCoords = getCoord(pt);\n  const lineCoords = getCoords(line);\n\n  // Main\n  for (let i = 0; i < lineCoords.length - 1; i++) {\n    let ignoreBoundary: boolean | string = false;\n    if (options.ignoreEndVertices) {\n      if (i === 0) {\n        ignoreBoundary = \"start\";\n      }\n      if (i === lineCoords.length - 2) {\n        ignoreBoundary = \"end\";\n      }\n      if (i === 0 && i + 1 === lineCoords.length - 1) {\n        ignoreBoundary = \"both\";\n      }\n    }\n    if (\n      isPointOnLineSegment(\n        lineCoords[i],\n        lineCoords[i + 1],\n        ptCoords,\n        ignoreBoundary,\n        typeof options.epsilon === \"undefined\" ? null : options.epsilon\n      )\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\n// See http://stackoverflow.com/a/4833823/1979085\n// See https://stackoverflow.com/a/328122/1048847\n/**\n * @private\n * @param {Position} lineSegmentStart coord pair of start of line\n * @param {Position} lineSegmentEnd coord pair of end of line\n * @param {Position} pt coord pair of point to check\n * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends.\n * @param {number} epsilon Fractional number to compare with the cross product result. Useful for dealing with floating points such as lng/lat points\n * If true which end to ignore.\n * @returns {boolean} true/false\n */\nfunction isPointOnLineSegment(\n  lineSegmentStart: number[],\n  lineSegmentEnd: number[],\n  pt: number[],\n  excludeBoundary: string | boolean,\n  epsilon: number | null\n): boolean {\n  const x = pt[0];\n  const y = pt[1];\n  const x1 = lineSegmentStart[0];\n  const y1 = lineSegmentStart[1];\n  const x2 = lineSegmentEnd[0];\n  const y2 = lineSegmentEnd[1];\n  const dxc = pt[0] - x1;\n  const dyc = pt[1] - y1;\n  const dxl = x2 - x1;\n  const dyl = y2 - y1;\n  const cross = dxc * dyl - dyc * dxl;\n  if (epsilon !== null) {\n    if (Math.abs(cross) > epsilon) {\n      return false;\n    }\n  } else if (cross !== 0) {\n    return false;\n  }\n\n  // Special cases for zero length lines\n  // https://github.com/Turfjs/turf/issues/2750\n  if (Math.abs(dxl) === Math.abs(dyl) && Math.abs(dxl) === 0) {\n    // Zero length line.\n    if (excludeBoundary) {\n      // To be on a zero length line pt has to be on the start (and end), BUT we\n      // are excluding start and end from possible matches.\n      return false;\n    }\n    if (pt[0] === lineSegmentStart[0] && pt[1] === lineSegmentStart[1]) {\n      // If point is same as start (and end) it's on the line segment\n      return true;\n    } else {\n      // Otherwise point is somewhere else\n      return false;\n    }\n  }\n\n  if (!excludeBoundary) {\n    if (Math.abs(dxl) >= Math.abs(dyl)) {\n      return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1;\n    }\n    return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1;\n  } else if (excludeBoundary === \"start\") {\n    if (Math.abs(dxl) >= Math.abs(dyl)) {\n      return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1;\n    }\n    return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1;\n  } else if (excludeBoundary === \"end\") {\n    if (Math.abs(dxl) >= Math.abs(dyl)) {\n      return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1;\n    }\n    return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1;\n  } else if (excludeBoundary === \"both\") {\n    if (Math.abs(dxl) >= Math.abs(dyl)) {\n      return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1;\n    }\n    return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1;\n  }\n  return false;\n}\n\nexport { booleanPointOnLine };\nexport default booleanPointOnLine;\n"]}