{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-rewind/dist/cjs/index.cjs","../../index.ts"],"names":[],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-rewind/dist/cjs/index.cjs","sourcesContent":[null,"import type {\n Feature,\n Position,\n GeometryCollection,\n Geometry,\n LineString,\n MultiLineString,\n MultiPolygon,\n Polygon,\n FeatureCollection,\n} from \"geojson\";\nimport { clone } from \"@turf/clone\";\nimport { booleanClockwise } from \"@turf/boolean-clockwise\";\nimport { geomEach, featureEach } from \"@turf/meta\";\nimport { getCoords } from \"@turf/invariant\";\nimport { featureCollection, isObject } from \"@turf/helpers\";\nimport type { AllGeoJSON } from \"@turf/helpers\";\n\n/**\n * Rewind {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon} outer ring counterclockwise and inner rings clockwise (Uses {@link http://en.wikipedia.org/wiki/Shoelace_formula|Shoelace Formula}).\n *\n * @function\n * @param {GeoJSON} geojson input GeoJSON Polygon\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.reverse=false] enable reverse winding\n * @param {boolean} [options.mutate=false] allows GeoJSON input to be mutated (significant performance increase if true)\n * @returns {GeoJSON} rewind Polygon\n * @example\n * var polygon = turf.polygon([[[121, -29], [138, -29], [138, -18], [121, -18], [121, -29]]]);\n *\n * var rewind = turf.rewind(polygon);\n *\n * //addToMap\n * var addToMap = [rewind];\n */\nfunction rewind(\n geojson: T,\n options: {\n reverse?: boolean;\n mutate?: boolean;\n } = {}\n): Geometry | Feature | FeatureCollection {\n // Optional parameters\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n const mutate = options.mutate ?? false;\n const reverse = options.reverse ?? false;\n\n // validation\n if (!geojson) throw new Error(\" is required\");\n if (typeof reverse !== \"boolean\")\n throw new Error(\" must be a boolean\");\n if (typeof mutate !== \"boolean\")\n throw new Error(\" must be a boolean\");\n\n // Prevent input mutation if requested and necessary.\n if (!mutate && geojson.type !== \"Point\" && geojson.type !== \"MultiPoint\") {\n geojson = clone(geojson);\n }\n\n // Support Feature Collection or Geometry Collection\n const results: Feature[] = [];\n switch (geojson.type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"FeatureCollection\":\n featureEach(geojson, function (feature) {\n const rewoundFeature = rewindFeature(feature, reverse) as Feature;\n featureEach(rewoundFeature, function (result) {\n results.push(result);\n });\n });\n return featureCollection(results);\n }\n // Support Feature or Geometry Objects\n return rewindFeature(geojson, reverse);\n}\n\n/**\n * Rewind\n *\n * @private\n * @param {Geometry|Feature} geojson Geometry or Feature\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {Geometry|Feature} rewind Geometry or Feature\n */\nfunction rewindFeature(\n geojson: Geometry | GeometryCollection | Feature,\n reverse: boolean\n) {\n const type =\n geojson.type === \"Feature\" ? geojson.geometry.type : geojson.type;\n\n // Support all GeoJSON Geometry Objects\n switch (type) {\n case \"GeometryCollection\":\n geomEach(geojson, function (geometry) {\n rewindFeature(geometry, reverse);\n });\n return geojson;\n case \"LineString\":\n rewindLineString(getCoords(geojson as LineString), reverse);\n return geojson;\n case \"Polygon\":\n rewindPolygon(getCoords(geojson as Polygon), reverse);\n return geojson;\n case \"MultiLineString\":\n getCoords(geojson as MultiLineString).forEach(function (lineCoords) {\n rewindLineString(lineCoords, reverse);\n });\n return geojson;\n case \"MultiPolygon\":\n getCoords(geojson as MultiPolygon).forEach(function (lineCoords) {\n rewindPolygon(lineCoords, reverse);\n });\n return geojson;\n case \"Point\":\n case \"MultiPoint\":\n // noop\n return geojson;\n }\n}\n\n/**\n * Rewind LineString - outer ring clockwise\n *\n * @private\n * @param {Array>} coords GeoJSON LineString geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindLineString(coords: Position[], reverse: boolean) {\n if (booleanClockwise(coords) === reverse) coords.reverse();\n}\n\n/**\n * Rewind Polygon - outer ring counterclockwise and inner rings clockwise.\n *\n * @private\n * @param {Array>>} coords GeoJSON Polygon geometry coordinates\n * @param {Boolean} [reverse=false] enable reverse winding\n * @returns {void} mutates coordinates\n */\nfunction rewindPolygon(coords: Position[][], reverse: boolean) {\n // outer ring\n if (booleanClockwise(coords[0]) !== reverse) {\n coords[0].reverse();\n }\n // inner rings\n for (let i = 1; i < coords.length; i++) {\n if (booleanClockwise(coords[i]) === reverse) {\n coords[i].reverse();\n }\n }\n}\n\nexport { rewind };\nexport default rewind;\n"]}