{"version":3,"sources":["/home/runner/work/turf/turf/packages/turf-mask/dist/cjs/index.cjs","../../index.ts"],"names":["mask"],"mappings":"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","file":"/home/runner/work/turf/turf/packages/turf-mask/dist/cjs/index.cjs","sourcesContent":[null,"import {\n Feature,\n FeatureCollection,\n Polygon,\n Position,\n MultiPolygon,\n} from \"geojson\";\nimport { polygon as createPolygon, multiPolygon } from \"@turf/helpers\";\nimport * as polyclip from \"polyclip-ts\";\nimport { clone } from \"@turf/clone\";\n\n/**\n * Takes polygons or multipolygons and an optional mask, and returns an exterior\n * ring polygon with holes.\n *\n * @function\n * @param {Polygon|MultiPolygon|Feature|FeatureCollection} polygon GeoJSON polygon used as interior rings or holes\n * @param {Polygon|Feature} [mask] GeoJSON polygon used as the exterior ring (if undefined, the world extent is used)\n * @param {Object} [options={}] Optional parameters\n * @param {boolean} [options.mutate=false] allows the `mask` GeoJSON input to be mutated (performance improvement if true)\n * @returns {Feature} Masked Polygon (exterior ring with holes)\n * @example\n * const polygon = turf.polygon([[[112, -21], [116, -36], [146, -39], [153, -24], [133, -10], [112, -21]]]);\n * const mask = turf.polygon([[[90, -55], [170, -55], [170, 10], [90, 10], [90, -55]]]);\n *\n * const masked = turf.mask(polygon, mask);\n *\n * //addToMap\n * const addToMap = [masked]\n */\nfunction mask(\n polygon: T | Feature | FeatureCollection,\n mask?: Polygon | Feature,\n options?: { mutate?: boolean }\n): Feature {\n const mutate = options?.mutate ?? false; // by default, do not mutate\n\n let maskTemplate = mask;\n if (mask && mutate === false) {\n // Clone mask if requested to avoid side effects\n maskTemplate = clone(mask);\n }\n\n // Define initial mask\n const maskPolygon = createMask(maskTemplate);\n\n let polygonOuters = null;\n if (polygon.type === \"FeatureCollection\") {\n polygonOuters = unionFc(polygon);\n } else if (polygon.type === \"Feature\") {\n // Need to cast below as Position[][] isn't quite as strict as Geom, even\n // though they should be equivalent.\n polygonOuters = createGeomFromPolygonClippingOutput(\n polyclip.union(polygon.geometry.coordinates as polyclip.Geom)\n );\n } else {\n // Geometry\n // Need to cast below as Position[][] isn't quite as strict as Geom, even\n // though they should be equivalent.\n polygonOuters = createGeomFromPolygonClippingOutput(\n polyclip.union(polygon.coordinates as polyclip.Geom)\n );\n }\n\n polygonOuters.geometry.coordinates.forEach(function (contour) {\n maskPolygon.geometry.coordinates.push(contour[0]);\n });\n\n return maskPolygon;\n}\n\nfunction unionFc(fc: FeatureCollection) {\n // Need to cast below as Position[][] isn't quite as strict as Geom, even\n // though they should be equivalent.\n\n // Stick with apply() below as spread operator degrades performance. Have\n // to disable prefer-spread lint rule though.\n /* eslint-disable prefer-spread */\n const unioned =\n fc.features.length === 2\n ? polyclip.union(\n fc.features[0].geometry.coordinates as polyclip.Geom,\n fc.features[1].geometry.coordinates as polyclip.Geom\n )\n : polyclip.union.apply(\n polyclip,\n fc.features.map(function (f) {\n return f.geometry.coordinates;\n }) as [polyclip.Geom, ...polyclip.Geom[]]\n );\n /* eslint-enable */\n return createGeomFromPolygonClippingOutput(unioned);\n}\n\nfunction createGeomFromPolygonClippingOutput(unioned: Position[][][]) {\n return multiPolygon(unioned);\n}\n\n/**\n * Create Mask Coordinates\n *\n * @private\n * @param {Feature} [mask] default to world if undefined\n * @returns {Feature} mask as a polygon\n */\nfunction createMask(mask: Feature | Polygon | undefined) {\n const world = [\n [\n [180, 90],\n [-180, 90],\n [-180, -90],\n [180, -90],\n [180, 90],\n ],\n ];\n let coordinates = world;\n if (mask) {\n if (mask.type === \"Feature\") {\n // polygon feature\n coordinates = mask.geometry.coordinates;\n } else {\n // polygon geometry\n coordinates = mask.coordinates;\n }\n }\n return createPolygon(coordinates);\n}\n\nexport { mask };\nexport default mask;\n"]}