@kalisio/common-geospatial 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +516 -2285
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -4
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/foundation/axes.js","../src/foundation/locale.js","../src/foundation/directions.js","../src/foundation/coordinate-formats/dd.js","../src/foundation/coordinate-formats/ddm.js","../src/foundation/coordinate-formats/ddm-aero.js","../src/foundation/coordinate-formats/dms.js","../src/foundation/coordinate-formats/converter.js","../src/foundation/coordinate-formats/index.js","../src/foundation/coordinate.js","../src/foundation/position.js","../src/operators/is-like/bbox.js","../src/operators/is-like/crs.js","../src/operators/is-like/geometry.js","../src/operators/is-like/geojson.js","../src/operators/is-like/position.js","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/_dnt.shims.js","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/logger.js","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/nodeUtil.cjs","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/formatter.js","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/fs.cjs","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/filesink.web.js","../../../node_modules/.pnpm/@logtape+logtape@0.7.2/node_modules/@logtape/logtape/esm/filesink.node.js","../../../node_modules/.pnpm/heap-js@2.7.1/node_modules/heap-js/dist/heap-js.es5.js","../src/operators/simplify/visvalingam-whyatt.js","../src/operators/simplify/geometry.js","../src/operators/simplify/geojson.js","../src/operators/truncate/bbox.js","../../../node_modules/.pnpm/@turf+helpers@7.3.5/node_modules/@turf/helpers/dist/esm/index.js","../../../node_modules/.pnpm/@turf+meta@7.3.5/node_modules/@turf/meta/dist/esm/index.js","../../../node_modules/.pnpm/@turf+truncate@7.3.5/node_modules/@turf/truncate/dist/esm/index.js","../src/operators/truncate/geometry.js","../src/operators/truncate/geojson.js","../src/operators/truncate/position.js","../src/operators/validate/position.js","../src/operators/validate/bbox.js","../src/operators/validate/crs.js","../../../node_modules/.pnpm/@turf+invariant@7.3.5/node_modules/@turf/invariant/dist/esm/index.js","../../../node_modules/.pnpm/@turf+boolean-clockwise@7.3.5/node_modules/@turf/boolean-clockwise/dist/esm/index.js","../../../node_modules/.pnpm/@turf+kinks@7.3.5/node_modules/@turf/kinks/dist/esm/index.js","../src/operators/validate/utils.js","../src/operators/validate/geometry.js","../src/operators/validate/geojson.js"],"sourcesContent":["import { assert, is } from '@kalisio/common-core'\n\nexport const AXES = {\n LATITUDE: 'LAT',\n LONGITUDE: 'LON',\n ALTITUDE: 'ALT'\n}\n\nexport function isAxis (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return Object.values(AXES).includes(axis)\n}\n\nexport function isLatitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.LATITUDE\n}\n\nexport function isLongitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.LONGITUDE\n}\n\nexport function isAltitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.ALTITUDE\n}\n","import { assert, is, has, conform } from '@kalisio/common-core'\nimport fr from './locales/fr.json'\nimport en from './locales/en.json'\n\nconst LOCALE_SCHEMA = {\n DIRECTIONS: {\n NORTH: { label: is.string, symbol: is.string },\n SOUTH: { label: is.string, symbol: is.string },\n EAST: { label: is.string, symbol: is.string },\n WEST: { label: is.string, symbol: is.string }\n }\n}\n\nconst LOCALES = {\n en,\n fr\n}\n\nlet CURRENT_LOCALE = 'en'\n\nexport function listLocales () {\n return Object.keys(LOCALES)\n}\n\nexport function registerLocale (code, content) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => !has.key(LOCALES, v), message: 'locale already registered' },\n { value: content, validator: is.plainObject, message: 'content must be an object' },\n { value: content, validator: (v) => conform.schema(v, LOCALE_SCHEMA), message: 'content does not conform to schema' }\n ])\n LOCALES[code] = content\n}\n\nexport function setLocale (code) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => has.key(LOCALES, v), message: 'code is unknown' }\n ])\n CURRENT_LOCALE = code\n}\n\nexport function getLocale () {\n return {\n code: CURRENT_LOCALE,\n content: LOCALES[CURRENT_LOCALE]\n }\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { getLocale } from './locale.js'\nimport { AXES, isLatitude, isLongitude, isAxis } from './axes.js'\n\nfunction getAll () {\n return getLocale().content.DIRECTIONS\n}\n\nfunction isDirectionOf (type, dir) {\n const all = getAll()\n const label = all[type].label.toUpperCase()\n const symbol = all[type].symbol.toUpperCase()\n return dir.toUpperCase() === label || dir.toUpperCase() === symbol\n}\n\nexport function getDirections (axis = null) {\n const directions = getAll()\n if (is.defined(axis)) {\n assert.that(axis, isAxis, 'axis must be a valid axis')\n if (isLatitude(axis)) return [directions.SOUTH, directions.NORTH]\n if (isLongitude(axis)) return [directions.EAST, directions.WEST]\n return []\n }\n return [directions.SOUTH, directions.NORTH, directions.EAST, directions.WEST]\n}\n\nexport function getNorth () { return getAll().NORTH }\nexport function getSouth () { return getAll().SOUTH }\nexport function getEast () { return getAll().EAST }\nexport function getWest () { return getAll().WEST }\n\nexport function isDirection (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isNorth(dir) || isSouth(dir) || isEast(dir) || isWest(dir)\n}\n\nexport function isNorth (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('NORTH', dir)\n}\n\nexport function isSouth (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('SOUTH', dir)\n}\n\nexport function isEast (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('EAST', dir)\n}\n\nexport function isWest (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('WEST', dir)\n}\n\nexport function getDirectionAxis (dir) {\n assert.that(dir, isDirection, 'dir must be a direction')\n if (isWest(dir) || isEast(dir)) return AXES.LONGITUDE\n return AXES.LATITUDE\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\n\nconst SCHEMA = {\n degrees: is.number,\n direction: optional(isDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3}(?:\\.\\d+)?)°?$/\nconst REGEX_DIR = /^(\\d{1,3}(?:\\.\\d+)?)°?([NSEW])$/\n\nexport function DD (dd) {\n let _degrees = null\n let _direction = null\n\n if (is.plainObject(dd) && conform.schema(dd, SCHEMA)) {\n if (is.defined(dd.direction)) {\n if (dd.degrees >= 0) {\n _degrees = dd.degrees\n _direction = dd.direction\n }\n } else {\n _degrees = dd.degrees\n }\n } else if (is.string(dd)) {\n const pattern = dd.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(REGEX_DIR)\n if (match) {\n _degrees = parseFloat(match[1])\n _direction = match[2] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get direction () { return _direction },\n get format () { return 'DD' },\n\n isValid () {\n return is.number(_degrees)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees.toFixed(decimalPlaces)}°`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees, direction: _direction })\n }\n }\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.integer,\n minutes: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: optional(isDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3})°(\\d{1,2}(?:\\.\\d+)?)'?$/\nconst REGEX_DIR = /^(\\d{1,3})°(\\d{1,2}(?:\\.\\d+)?)'?([NSEW])$/\n\nexport function DDM (ddm) {\n let _degrees = null\n let _minutes = null\n let _direction = null\n\n if (is.plainObject(ddm) && conform.schema(ddm, SCHEMA)) {\n if (is.defined(ddm.direction)) {\n if (ddm.degrees >= 0) {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n _direction = ddm.direction\n }\n } else {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n }\n } else if (is.string(ddm)) {\n const pattern = ddm.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(REGEX_DIR)\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2])\n _direction = match[3] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get direction () { return _direction },\n get format () { return 'DDM' },\n\n isValid () {\n return is.integer(_degrees) && is.inRangeExclusiveMax(_minutes, 0, 60)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees}° ${_minutes.toFixed(decimalPlaces)}'`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60, direction: _direction })\n }\n }\n}\n","import { is, conform } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.nonNegativeInteger,\n minutes: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: isDirection\n}\n\nconst REGEX_LAT = /^(\\d{2})(\\d{3})([NS])$/\nconst REGEX_LON = /^(\\d{3})(\\d{3})([EW])$/\n\nexport function DDMAero (ddm) {\n let _degrees = null\n let _minutes = null\n let _direction = null\n\n if (is.plainObject(ddm) && conform.schema(ddm, SCHEMA)) {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n _direction = ddm.direction\n } else if (is.string(ddm)) {\n const pattern = ddm.trim()\n const match = pattern.match(REGEX_LAT) ?? pattern.match(REGEX_LON)\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2]) / 10\n _direction = match[3]\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get direction () { return _direction },\n get format () { return 'DDM_AERO' },\n\n isValid () {\n return is.nonNegativeInteger(_degrees) &&\n is.inRangeExclusiveMax(_minutes, 0, 60) &&\n isDirection(_direction)\n },\n\n toString () {\n if (!this.isValid()) return ''\n const isLon = _direction === 'E' || _direction === 'W'\n const deg = String(_degrees).padStart(isLon ? 3 : 2, '0')\n const min = Math.floor(_minutes * 10).toString().padStart(3, '0')\n return `${deg}${min}${_direction}`\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60, direction: _direction })\n }\n }\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.integer,\n minutes: (v) => is.integer(v) && is.inRange(v, 0, 59),\n seconds: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: optional(isDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3})°(\\d{1,2})'(\\d{1,2}(?:\\.\\d+)?)\"?$/\nconst REGEX_DIR = /^(\\d{1,3})°(\\d{1,2})'(\\d{1,2}(?:\\.\\d+)?)\"?([NSEW])$/\n\nexport function DMS (dms) {\n let _degrees = null\n let _minutes = null\n let _seconds = null\n let _direction = null\n\n if (is.plainObject(dms) && conform.schema(dms, SCHEMA)) {\n if (is.defined(dms.direction)) {\n if (dms.degrees >= 0) {\n _degrees = dms.degrees\n _minutes = dms.minutes\n _seconds = dms.seconds\n _direction = dms.direction\n }\n } else {\n _degrees = dms.degrees\n _minutes = dms.minutes\n _seconds = dms.seconds\n }\n } else if (is.string(dms)) {\n const pattern = dms.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(REGEX_DIR)\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2])\n _seconds = parseFloat(match[3])\n _direction = match[4] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get seconds () { return _seconds },\n get direction () { return _direction },\n get format () { return 'DMS' },\n\n isValid () {\n return is.integer(_degrees) &&\n is.integer(_minutes) && is.inRange(_minutes, 0, 59) &&\n is.inRangeExclusiveMax(_seconds, 0, 60)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees}° ${_minutes}' ${_seconds.toFixed(decimalPlaces)}\"`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60 + _seconds / 3600, direction: _direction })\n }\n }\n}\n","import { assert } from '@kalisio/common-core'\nimport { DDM } from './ddm.js'\nimport { DDMAero } from './ddm-aero.js'\nimport { DMS } from './dms.js'\n\nfunction decimalToDDM (dd) {\n const degrees = Math.floor(dd.degrees)\n const minutes = (dd.degrees - degrees) * 60\n return { degrees, minutes, direction: dd.direction }\n}\n\nfunction decimalToDMS (dd) {\n const degrees = Math.floor(dd.degrees)\n const minutesDecimal = (dd.degrees - degrees) * 60\n const minutes = Math.floor(minutesDecimal)\n const seconds = (minutesDecimal - minutes) * 60\n return { degrees, minutes, seconds, direction: dd.direction }\n}\n\nexport const converter = {\n DD: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n return dd\n },\n\n DDM: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, direction } = decimalToDDM(dd)\n return DDM(direction ? { degrees, minutes, direction } : { degrees, minutes })\n },\n\n DMS: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, seconds, direction } = decimalToDMS(dd)\n return DMS(direction ? { degrees, minutes, seconds, direction } : { degrees, minutes, seconds })\n },\n\n DDM_AERO: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, direction } = decimalToDDM(dd)\n return DDMAero({ degrees, minutes, direction })\n }\n}\n","import { DD } from './dd.js'\nimport { DDM } from './ddm.js'\nimport { DDMAero } from './ddm-aero.js'\nimport { DMS } from './dms.js'\nexport * from './converter.js'\n\nexport const COORDINATE_FORMATS = {\n DD: 'DD',\n DDM: 'DDM',\n DDM_AERO: 'DDM_AERO',\n DMS: 'DMS'\n}\n\nexport const COORDINATE_MODELS = {\n DD,\n DDM,\n DDM_AERO: DDMAero,\n DMS\n}\n","import { assert, is, has } from '@kalisio/common-core'\nimport { AXES, isLatitude, isLongitude } from './axes.js'\nimport { isDirection, getDirectionAxis } from './directions.js'\nimport { COORDINATE_FORMATS, COORDINATE_MODELS, converter } from './coordinate-formats'\nexport { COORDINATE_FORMATS, COORDINATE_MODELS } from './coordinate-formats'\n\nexport const COORDINATE_TRUNCATION_FACTORS = Array.from({ length: 9 }, (_, i) => 10 ** i)\n\nexport function guessCoordinateAxis (coord, dir) {\n assert.that(coord, is.number, 'coord must be a number')\n if (is.defined(dir)) {\n assert.that(dir, isDirection, 'dir must be a direction')\n return getDirectionAxis(dir)\n }\n if (Math.abs(coord) > 90) return AXES.LONGITUDE\n return undefined\n}\n\nexport function getCoordinatePrecision (coord) {\n assert.that(coord, is.number, 'coord must be a number')\n const str = coord.toExponential()\n const [base, exp] = str.split('e').map(Number)\n const decimalsInBase = (base.toString().split('.')[1] || '').length\n return Math.max(0, decimalsInBase - exp)\n}\n\nexport function truncateCoordinate (coord, precision = 7) {\n assert.all([\n { value: coord, validator: is.number, message: 'coord must be a number' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n return Math.round(coord * factor) / factor\n}\n\nexport function normalizeCoordinate (coord, axis) {\n assert.all([\n { value: coord, validator: is.number, message: 'coord must be a number' },\n { value: axis, validator: (v) => isLongitude(v) || isLatitude(v), message: 'axis must be either a longitude or latitude' }\n ])\n if (isLatitude(axis)) {\n return Math.max(-90, Math.min(90, coord))\n }\n let lon = ((coord + 180) % 360 + 360) % 360 - 180\n if (lon === -180) lon = 180\n if (Object.is(lon, -0)) lon = 0\n return lon\n}\n\nexport function convertCoordinate (from, to) {\n assert.all([\n { value: from, validator: (v) => is.defined(v) && v.isValid(), message: 'from must be a valid coordinate' },\n { value: to, validator: (v) => has.key(converter, v), message: `unknown format: ${to}` }\n ])\n const dd = from.format === COORDINATE_FORMATS.DD ? from : from.toDecimal()\n if (!dd.isValid()) return null\n if (to === COORDINATE_FORMATS.DD) {\n return dd\n }\n return converter[to](dd)\n}\n\nexport function parseCoordinate (pattern) {\n assert.that(pattern, is.nonEmptyString, 'pattern must be a non empty string')\n for (const format of Object.keys(COORDINATE_FORMATS)) {\n const coord = COORDINATE_MODELS[format](pattern)\n if (coord.isValid()) return coord\n }\n return null\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { AXES } from './axes.js'\nimport { isWest, isSouth } from './directions.js'\nimport { guessCoordinateAxis, parseCoordinate } from './coordinate.js'\n\nexport function parsePosition (pattern) {\n assert.that(pattern, (v) => is.nonEmptyString(v), 'pattern must be a non-empty string')\n const parts = pattern.split(/[,;|]/)\n if (parts.length !== 2) return null\n const [first, second] = parts.map(parseCoordinate)\n if (!first || !second) return null\n const firstDD = first.toDecimal()\n const secondDD = second.toDecimal()\n const firstAxis = guessCoordinateAxis(firstDD.degrees, firstDD.direction)\n const secondAxis = guessCoordinateAxis(secondDD.degrees, secondDD.direction)\n // Apply signedDegrees based on direction\n const signedDegrees = (dd) => {\n const { degrees, direction } = dd\n if (!direction) return degrees\n return (isWest(direction) || isSouth(direction)) ? -degrees : degrees\n }\n if (firstAxis === AXES.LONGITUDE && secondAxis === AXES.LATITUDE) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (secondAxis === AXES.LONGITUDE && firstAxis === AXES.LATITUDE) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (firstAxis === AXES.LONGITUDE && !secondAxis) return [signedDegrees(firstDD), secondDD]\n if (firstAxis === AXES.LATITUDE && !secondAxis) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (secondAxis === AXES.LONGITUDE && !firstAxis) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (secondAxis === AXES.LATITUDE && !firstAxis) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (!firstAxis && !secondAxis) {\n return [\n [signedDegrees(firstDD), signedDegrees(secondDD)],\n [signedDegrees(secondDD), signedDegrees(firstDD)]\n ]\n }\n}\n","import { is } from '@kalisio/common-core'\n\nexport function isLikeBBox (object) {\n if (!is.arrayOfLength(object, 4) && !is.arrayOfLength(object, 6)) return false\n return object.every(is.number)\n}\n","import { is } from '@kalisio/common-core'\n\nexport const CRS_TYPES = {\n NAME: 'name',\n LINK: 'link'\n}\n\nexport function isLikeCRS (object) {\n if (!is.plainObject(object)) return false\n if (object.type === CRS_TYPES.NAME) {\n return is.nonEmptyString(object.properties?.name)\n }\n if (object.type === CRS_TYPES.LINK) {\n return is.nonEmptyString(object.properties?.href)\n }\n return false\n}\n","import { is } from '@kalisio/common-core'\n\nexport const GEOMETRY_TYPES = {\n POINT: 'Point',\n MULTI_POINT: 'MultiPoint',\n LINESTRING: 'LineString',\n MULTI_LINESTRING: 'MultiLineString',\n POLYGON: 'Polygon',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection'\n}\n\nexport function isLikeGeometry (object) {\n if (!is.plainObject(object)) return false\n if (!is.oneOf(object.type, Object.values(GEOMETRY_TYPES))) return false\n if (object.type === GEOMETRY_TYPES.GEOMETRY_COLLECTION) {\n return is.array(object.geometries)\n }\n return is.array(object.coordinates)\n}\n","import { is } from '@kalisio/common-core'\nimport { isLikeGeometry } from './geometry.js'\n\nexport const FEATURE_TYPES = {\n FEATURE: 'Feature',\n FEATURE_COLLECTION: 'FeatureCollection'\n}\n\nexport function isLikeFeature (object) {\n if (!is.plainObject(object)) return false\n return FEATURE_TYPES.FEATURE === object.type\n}\n\nexport function isLikeFeatureCollection (object) {\n if (!is.plainObject(object)) return false\n if (object.type !== FEATURE_TYPES.FEATURE_COLLECTION) return false\n return is.array(object.features)\n}\n\nexport function isLikeGeoJson (object) {\n if (!is.plainObject(object)) return false\n if (isLikeGeometry(object)) return true\n if (isLikeFeature(object)) return true\n return isLikeFeatureCollection(object)\n}\n","import { is } from '@kalisio/common-core'\n\nexport function isLikePosition (object) {\n if (!is.arrayOfLengthBetween(object, 2, 3)) return false\n return object.every(is.number)\n}\n","const dntGlobals = {};\nexport const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);\nfunction createMergeProxy(baseObj, extObj) {\n return new Proxy(baseObj, {\n get(_target, prop, _receiver) {\n if (prop in extObj) {\n return extObj[prop];\n }\n else {\n return baseObj[prop];\n }\n },\n set(_target, prop, value) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n baseObj[prop] = value;\n return true;\n },\n deleteProperty(_target, prop) {\n let success = false;\n if (prop in extObj) {\n delete extObj[prop];\n success = true;\n }\n if (prop in baseObj) {\n delete baseObj[prop];\n success = true;\n }\n return success;\n },\n ownKeys(_target) {\n const baseKeys = Reflect.ownKeys(baseObj);\n const extKeys = Reflect.ownKeys(extObj);\n const extKeysSet = new Set(extKeys);\n return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];\n },\n defineProperty(_target, prop, desc) {\n if (prop in extObj) {\n delete extObj[prop];\n }\n Reflect.defineProperty(baseObj, prop, desc);\n return true;\n },\n getOwnPropertyDescriptor(_target, prop) {\n if (prop in extObj) {\n return Reflect.getOwnPropertyDescriptor(extObj, prop);\n }\n else {\n return Reflect.getOwnPropertyDescriptor(baseObj, prop);\n }\n },\n has(_target, prop) {\n return prop in extObj || prop in baseObj;\n },\n });\n}\n","import * as dntShim from \"./_dnt.shims.js\";\n/**\n * Get a logger with the given category.\n *\n * ```typescript\n * const logger = getLogger([\"my-app\"]);\n * ```\n *\n * @param category The category of the logger. It can be a string or an array\n * of strings. If it is a string, it is equivalent to an array\n * with a single element.\n * @returns The logger.\n */\nexport function getLogger(category = []) {\n return LoggerImpl.getLogger(category);\n}\n/**\n * The symbol for the global root logger.\n */\nconst globalRootLoggerSymbol = Symbol.for(\"logtape.rootLogger\");\n/**\n * A logger implementation. Do not use this directly; use {@link getLogger}\n * instead. This class is exported for testing purposes.\n */\nexport class LoggerImpl {\n static getLogger(category = []) {\n let rootLogger = globalRootLoggerSymbol in dntShim.dntGlobalThis\n ? (dntShim.dntGlobalThis[globalRootLoggerSymbol] ??\n null)\n : null;\n if (rootLogger == null) {\n rootLogger = new LoggerImpl(null, []);\n dntShim.dntGlobalThis[globalRootLoggerSymbol] =\n rootLogger;\n }\n if (typeof category === \"string\")\n return rootLogger.getChild(category);\n if (category.length === 0)\n return rootLogger;\n return rootLogger.getChild(category);\n }\n constructor(parent, category) {\n Object.defineProperty(this, \"parent\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"children\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"category\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"sinks\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"parentSinks\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: \"inherit\"\n });\n Object.defineProperty(this, \"filters\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"contextLocalStorage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.parent = parent;\n this.children = {};\n this.category = category;\n this.sinks = [];\n this.filters = [];\n }\n getChild(subcategory) {\n const name = typeof subcategory === \"string\" ? subcategory : subcategory[0];\n const childRef = this.children[name];\n let child = childRef instanceof LoggerImpl\n ? childRef\n : childRef?.deref();\n if (child == null) {\n child = new LoggerImpl(this, [...this.category, name]);\n this.children[name] = \"WeakRef\" in dntShim.dntGlobalThis\n ? new WeakRef(child)\n : child;\n }\n if (typeof subcategory === \"string\" || subcategory.length === 1) {\n return child;\n }\n return child.getChild(subcategory.slice(1));\n }\n /**\n * Reset the logger. This removes all sinks and filters from the logger.\n */\n reset() {\n while (this.sinks.length > 0)\n this.sinks.shift();\n this.parentSinks = \"inherit\";\n while (this.filters.length > 0)\n this.filters.shift();\n }\n /**\n * Reset the logger and all its descendants. This removes all sinks and\n * filters from the logger and all its descendants.\n */\n resetDescendants() {\n for (const child of Object.values(this.children)) {\n const logger = child instanceof LoggerImpl ? child : child.deref();\n if (logger != null)\n logger.resetDescendants();\n }\n this.reset();\n }\n with(properties) {\n return new LoggerCtx(this, { ...properties });\n }\n filter(record) {\n for (const filter of this.filters) {\n if (!filter(record))\n return false;\n }\n if (this.filters.length < 1)\n return this.parent?.filter(record) ?? true;\n return true;\n }\n *getSinks() {\n if (this.parent != null && this.parentSinks === \"inherit\") {\n for (const sink of this.parent.getSinks())\n yield sink;\n }\n for (const sink of this.sinks)\n yield sink;\n }\n emit(record, bypassSinks) {\n if (!this.filter(record))\n return;\n for (const sink of this.getSinks()) {\n if (bypassSinks?.has(sink))\n continue;\n try {\n sink(record);\n }\n catch (error) {\n const bypassSinks2 = new Set(bypassSinks);\n bypassSinks2.add(sink);\n metaLogger.log(\"fatal\", \"Failed to emit a log record to sink {sink}: {error}\", { sink, error, record }, bypassSinks2);\n }\n }\n }\n log(level, rawMessage, properties, bypassSinks) {\n const implicitContext = LoggerImpl.getLogger().contextLocalStorage?.getStore() ?? {};\n let cachedProps = undefined;\n const record = typeof properties === \"function\"\n ? {\n category: this.category,\n level,\n timestamp: Date.now(),\n get message() {\n return parseMessageTemplate(rawMessage, this.properties);\n },\n rawMessage,\n get properties() {\n if (cachedProps == null) {\n cachedProps = {\n ...implicitContext,\n ...properties(),\n };\n }\n return cachedProps;\n },\n }\n : {\n category: this.category,\n level,\n timestamp: Date.now(),\n message: parseMessageTemplate(rawMessage, {\n ...implicitContext,\n ...properties,\n }),\n rawMessage,\n properties: { ...implicitContext, ...properties },\n };\n this.emit(record, bypassSinks);\n }\n logLazily(level, callback, properties = {}) {\n const implicitContext = LoggerImpl.getLogger().contextLocalStorage?.getStore() ?? {};\n let rawMessage = undefined;\n let msg = undefined;\n function realizeMessage() {\n if (msg == null || rawMessage == null) {\n msg = callback((tpl, ...values) => {\n rawMessage = tpl;\n return renderMessage(tpl, values);\n });\n if (rawMessage == null)\n throw new TypeError(\"No log record was made.\");\n }\n return [msg, rawMessage];\n }\n this.emit({\n category: this.category,\n level,\n get message() {\n return realizeMessage()[0];\n },\n get rawMessage() {\n return realizeMessage()[1];\n },\n timestamp: Date.now(),\n properties: { ...implicitContext, ...properties },\n });\n }\n logTemplate(level, messageTemplate, values, properties = {}) {\n const implicitContext = LoggerImpl.getLogger().contextLocalStorage?.getStore() ?? {};\n this.emit({\n category: this.category,\n level,\n message: renderMessage(messageTemplate, values),\n rawMessage: messageTemplate,\n timestamp: Date.now(),\n properties: { ...implicitContext, ...properties },\n });\n }\n debug(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"debug\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"debug\", message);\n }\n else {\n this.logTemplate(\"debug\", message, values);\n }\n }\n info(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"info\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"info\", message);\n }\n else {\n this.logTemplate(\"info\", message, values);\n }\n }\n warn(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"warning\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"warning\", message);\n }\n else {\n this.logTemplate(\"warning\", message, values);\n }\n }\n error(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"error\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"error\", message);\n }\n else {\n this.logTemplate(\"error\", message, values);\n }\n }\n fatal(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"fatal\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"fatal\", message);\n }\n else {\n this.logTemplate(\"fatal\", message, values);\n }\n }\n}\n/**\n * A logger implementation with contextual properties. Do not use this\n * directly; use {@link Logger.with} instead. This class is exported\n * for testing purposes.\n */\nexport class LoggerCtx {\n constructor(logger, properties) {\n Object.defineProperty(this, \"logger\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"properties\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.logger = logger;\n this.properties = properties;\n }\n get category() {\n return this.logger.category;\n }\n get parent() {\n return this.logger.parent;\n }\n getChild(subcategory) {\n return this.logger.getChild(subcategory).with(this.properties);\n }\n with(properties) {\n return new LoggerCtx(this.logger, { ...this.properties, ...properties });\n }\n log(level, message, properties, bypassSinks) {\n this.logger.log(level, message, typeof properties === \"function\"\n ? () => ({\n ...this.properties,\n ...properties(),\n })\n : { ...this.properties, ...properties }, bypassSinks);\n }\n logLazily(level, callback) {\n this.logger.logLazily(level, callback, this.properties);\n }\n logTemplate(level, messageTemplate, values) {\n this.logger.logTemplate(level, messageTemplate, values, this.properties);\n }\n debug(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"debug\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"debug\", message);\n }\n else {\n this.logTemplate(\"debug\", message, values);\n }\n }\n info(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"info\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"info\", message);\n }\n else {\n this.logTemplate(\"info\", message, values);\n }\n }\n warn(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"warning\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"warning\", message);\n }\n else {\n this.logTemplate(\"warning\", message, values);\n }\n }\n error(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"error\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"error\", message);\n }\n else {\n this.logTemplate(\"error\", message, values);\n }\n }\n fatal(message, ...values) {\n if (typeof message === \"string\") {\n this.log(\"fatal\", message, (values[0] ?? {}));\n }\n else if (typeof message === \"function\") {\n this.logLazily(\"fatal\", message);\n }\n else {\n this.logTemplate(\"fatal\", message, values);\n }\n }\n}\n/**\n * The meta logger. It is a logger with the category `[\"logtape\", \"meta\"]`.\n */\nconst metaLogger = LoggerImpl.getLogger([\"logtape\", \"meta\"]);\n/**\n * Parse a message template into a message template array and a values array.\n * @param template The message template.\n * @param properties The values to replace placeholders with.\n * @returns The message template array and the values array.\n */\nexport function parseMessageTemplate(template, properties) {\n const message = [];\n let part = \"\";\n for (let i = 0; i < template.length; i++) {\n const char = template.charAt(i);\n const nextChar = template.charAt(i + 1);\n if (char === \"{\" && nextChar === \"{\") {\n // Escaped { character\n part = part + char;\n i++;\n }\n else if (char === \"}\" && nextChar === \"}\") {\n // Escaped } character\n part = part + char;\n i++;\n }\n else if (char === \"{\") {\n // Start of a placeholder\n message.push(part);\n part = \"\";\n }\n else if (char === \"}\") {\n // End of a placeholder\n let prop;\n if (part.match(/^\\s|\\s$/)) {\n prop = part in properties ? properties[part] : properties[part.trim()];\n }\n else {\n prop = properties[part];\n }\n message.push(prop);\n part = \"\";\n }\n else {\n // Default case\n part = part + char;\n }\n }\n message.push(part);\n return message;\n}\n/**\n * Render a message template with values.\n * @param template The message template.\n * @param values The message template values.\n * @returns The message template values interleaved between the substitution\n * values.\n */\nexport function renderMessage(template, values) {\n const args = [];\n for (let i = 0; i < template.length; i++) {\n args.push(template[i]);\n if (i < values.length)\n args.push(values[i]);\n }\n return args;\n}\n","let util = null;\nif (\n typeof window === \"undefined\" && (\n \"process\" in globalThis && \"versions\" in globalThis.process &&\n \"node\" in globalThis.process.versions &&\n typeof globalThis.caches === \"undefined\" &&\n typeof globalThis.addEventListener !== \"function\" ||\n \"Bun\" in globalThis\n )\n) {\n try {\n // Intentionally confuse static analysis of bundlers:\n const $require = [require];\n util = $require[0](`${[\"node\", \"util\"].join(\":\")}`);\n } catch {\n util = null;\n }\n}\n\nmodule.exports = util;\n","import util from \"./nodeUtil.js\";\n/**\n * The severity level abbreviations.\n */\nconst levelAbbreviations = {\n \"debug\": \"DBG\",\n \"info\": \"INF\",\n \"warning\": \"WRN\",\n \"error\": \"ERR\",\n \"fatal\": \"FTL\",\n};\n/**\n * A platform-specific inspect function. In Deno, this is {@link Deno.inspect},\n * and in Node.js/Bun it is `util.inspect()`. If neither is available, it\n * falls back to {@link JSON.stringify}.\n *\n * @param value The value to inspect.\n * @param options The options for inspecting the value.\n * If `colors` is `true`, the output will be ANSI-colored.\n * @returns The string representation of the value.\n */\nconst inspect = \n// @ts-ignore: Deno global\n// dnt-shim-ignore\n\"Deno\" in globalThis && \"inspect\" in globalThis.Deno &&\n // @ts-ignore: Deno global\n // dnt-shim-ignore\n typeof globalThis.Deno.inspect === \"function\"\n ? (v, opts) => \n // @ts-ignore: Deno global\n // dnt-shim-ignore\n globalThis.Deno.inspect(v, {\n strAbbreviateSize: Infinity,\n iterableLimit: Infinity,\n ...opts,\n })\n // @ts-ignore: Node.js global\n // dnt-shim-ignore\n : util != null && \"inspect\" in util && typeof util.inspect === \"function\"\n ? (v, opts) => \n // @ts-ignore: Node.js global\n // dnt-shim-ignore\n util.inspect(v, {\n maxArrayLength: Infinity,\n maxStringLength: Infinity,\n ...opts,\n })\n : (v) => JSON.stringify(v);\n/**\n * Get a text formatter with the specified options. Although it's flexible\n * enough to create a custom formatter, if you want more control, you can\n * create a custom formatter that satisfies the {@link TextFormatter} type\n * instead.\n *\n * For more information on the options, see {@link TextFormatterOptions}.\n *\n * By default, the formatter formats log records as follows:\n *\n * ```\n * 2023-11-14 22:13:20.000 +00:00 [INF] category·subcategory: Hello, world!\n * ```\n * @param options The options for the text formatter.\n * @returns The text formatter.\n * @since 0.6.0\n */\nexport function getTextFormatter(options = {}) {\n const timestampRenderer = options.timestamp == null || options.timestamp === \"date-time-timezone\"\n ? (ts) => new Date(ts).toISOString().replace(\"T\", \" \").replace(\"Z\", \" +00:00\")\n : options.timestamp === \"date-time-tz\"\n ? (ts) => new Date(ts).toISOString().replace(\"T\", \" \").replace(\"Z\", \" +00\")\n : options.timestamp === \"date-time\"\n ? (ts) => new Date(ts).toISOString().replace(\"T\", \" \").replace(\"Z\", \"\")\n : options.timestamp === \"time-timezone\"\n ? (ts) => new Date(ts).toISOString().replace(/.*T/, \"\").replace(\"Z\", \" +00:00\")\n : options.timestamp === \"time-tz\"\n ? (ts) => new Date(ts).toISOString().replace(/.*T/, \"\").replace(\"Z\", \" +00\")\n : options.timestamp === \"time\"\n ? (ts) => new Date(ts).toISOString().replace(/.*T/, \"\").replace(\"Z\", \"\")\n : options.timestamp === \"date\"\n ? (ts) => new Date(ts).toISOString().replace(/T.*/, \"\")\n : options.timestamp === \"rfc3339\"\n ? (ts) => new Date(ts).toISOString()\n : options.timestamp;\n const categorySeparator = options.category ?? \"·\";\n const valueRenderer = options.value ?? inspect;\n const levelRenderer = options.level == null || options.level === \"ABBR\"\n ? (level) => levelAbbreviations[level]\n : options.level === \"abbr\"\n ? (level) => levelAbbreviations[level].toLowerCase()\n : options.level === \"FULL\"\n ? (level) => level.toUpperCase()\n : options.level === \"full\"\n ? (level) => level\n : options.level === \"L\"\n ? (level) => level.charAt(0).toUpperCase()\n : options.level === \"l\"\n ? (level) => level.charAt(0)\n : options.level;\n const formatter = options.format ??\n (({ timestamp, level, category, message }) => `${timestamp} [${level}] ${category}: ${message}`);\n return (record) => {\n let message = \"\";\n for (let i = 0; i < record.message.length; i++) {\n if (i % 2 === 0)\n message += record.message[i];\n else\n message += valueRenderer(record.message[i]);\n }\n const timestamp = timestampRenderer(record.timestamp);\n const level = levelRenderer(record.level);\n const category = typeof categorySeparator === \"function\"\n ? categorySeparator(record.category)\n : record.category.join(categorySeparator);\n const values = {\n timestamp,\n level,\n category,\n message,\n record,\n };\n return `${formatter(values)}\\n`;\n };\n}\n/**\n * The default text formatter. This formatter formats log records as follows:\n *\n * ```\n * 2023-11-14 22:13:20.000 +00:00 [INF] category·subcategory: Hello, world!\n * ```\n *\n * @param record The log record to format.\n * @returns The formatted log record.\n */\nexport const defaultTextFormatter = getTextFormatter();\nconst RESET = \"\\x1b[0m\";\nconst ansiColors = {\n black: \"\\x1b[30m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n};\nconst ansiStyles = {\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n italic: \"\\x1b[3m\",\n underline: \"\\x1b[4m\",\n strikethrough: \"\\x1b[9m\",\n};\nconst defaultLevelColors = {\n debug: \"blue\",\n info: \"green\",\n warning: \"yellow\",\n error: \"red\",\n fatal: \"magenta\",\n};\n/**\n * Get an ANSI color formatter with the specified options.\n *\n * \n * @param option The options for the ANSI color formatter.\n * @returns The ANSI color formatter.\n * @since 0.6.0\n */\nexport function getAnsiColorFormatter(options = {}) {\n const format = options.format;\n const timestampStyle = typeof options.timestampStyle === \"undefined\"\n ? \"dim\"\n : options.timestampStyle;\n const timestampColor = options.timestampColor ?? null;\n const timestampPrefix = `${timestampStyle == null ? \"\" : ansiStyles[timestampStyle]}${timestampColor == null ? \"\" : ansiColors[timestampColor]}`;\n const timestampSuffix = timestampStyle == null && timestampColor == null\n ? \"\"\n : RESET;\n const levelStyle = typeof options.levelStyle === \"undefined\"\n ? \"bold\"\n : options.levelStyle;\n const levelColors = options.levelColors ?? defaultLevelColors;\n const categoryStyle = typeof options.categoryStyle === \"undefined\"\n ? \"dim\"\n : options.categoryStyle;\n const categoryColor = options.categoryColor ?? null;\n const categoryPrefix = `${categoryStyle == null ? \"\" : ansiStyles[categoryStyle]}${categoryColor == null ? \"\" : ansiColors[categoryColor]}`;\n const categorySuffix = categoryStyle == null && categoryColor == null\n ? \"\"\n : RESET;\n return getTextFormatter({\n timestamp: \"date-time-tz\",\n value(value) {\n return inspect(value, { colors: true });\n },\n ...options,\n format({ timestamp, level, category, message, record }) {\n const levelColor = levelColors[record.level];\n timestamp = `${timestampPrefix}${timestamp}${timestampSuffix}`;\n level = `${levelStyle == null ? \"\" : ansiStyles[levelStyle]}${levelColor == null ? \"\" : ansiColors[levelColor]}${level}${levelStyle == null && levelColor == null ? \"\" : RESET}`;\n return format == null\n ? `${timestamp} ${level} ${categoryPrefix}${category}:${categorySuffix} ${message}`\n : format({\n timestamp,\n level,\n category: `${categoryPrefix}${category}${categorySuffix}`,\n message,\n record,\n });\n },\n });\n}\n/**\n * A text formatter that uses ANSI colors to format log records.\n *\n * \n *\n * @param record The log record to format.\n * @returns The formatted log record.\n * @since 0.5.0\n */\nexport const ansiColorFormatter = getAnsiColorFormatter();\n/**\n * The styles for the log level in the console.\n */\nconst logLevelStyles = {\n \"debug\": \"background-color: gray; color: white;\",\n \"info\": \"background-color: white; color: black;\",\n \"warning\": \"background-color: orange; color: black;\",\n \"error\": \"background-color: red; color: white;\",\n \"fatal\": \"background-color: maroon; color: white;\",\n};\n/**\n * The default console formatter.\n *\n * @param record The log record to format.\n * @returns The formatted log record, as an array of arguments for\n * {@link console.log}.\n */\nexport function defaultConsoleFormatter(record) {\n let msg = \"\";\n const values = [];\n for (let i = 0; i < record.message.length; i++) {\n if (i % 2 === 0)\n msg += record.message[i];\n else {\n msg += \"%o\";\n values.push(record.message[i]);\n }\n }\n const date = new Date(record.timestamp);\n const time = `${date.getUTCHours().toString().padStart(2, \"0\")}:${date.getUTCMinutes().toString().padStart(2, \"0\")}:${date.getUTCSeconds().toString().padStart(2, \"0\")}.${date.getUTCMilliseconds().toString().padStart(3, \"0\")}`;\n return [\n `%c${time} %c${levelAbbreviations[record.level]}%c %c${record.category.join(\"\\xb7\")} %c${msg}`,\n \"color: gray;\",\n logLevelStyles[record.level],\n \"background-color: default;\",\n \"color: gray;\",\n \"color: default;\",\n ...values,\n ];\n}\n","let fs = null;\nif (\n typeof window === \"undefined\" && (\n \"process\" in globalThis && \"versions\" in globalThis.process &&\n \"node\" in globalThis.process.versions &&\n typeof globalThis.caches === \"undefined\" &&\n typeof globalThis.addEventListener !== \"function\" ||\n \"Bun\" in globalThis\n )\n) {\n try {\n // Intentionally confuse static analysis of bundlers:\n const $require = [require];\n fs = $require[0](`${[\"node\", \"fs\"].join(\":\")}`);\n } catch {\n fs = null;\n }\n}\n\nmodule.exports = fs;\n","function notImplemented() {\n throw new Error(\"File sink is not available in the browser.\");\n}\n/**\n * A browser-specific file sink driver. All methods throw an error.\n */\nexport const webDriver = {\n openSync: notImplemented,\n writeSync: notImplemented,\n flushSync: notImplemented,\n closeSync: notImplemented,\n statSync: notImplemented,\n renameSync: notImplemented,\n};\n","import * as dntShim from \"./_dnt.shims.js\";\n// @ts-ignore: a trick to avoid module resolution error on non-Node.js environ\nimport fsMod from \"./fs.js\";\nimport { webDriver } from \"./filesink.web.js\";\nimport { getFileSink as getBaseFileSink, getRotatingFileSink as getBaseRotatingFileSink, } from \"./sink.js\";\n// @ts-ignore: a trick to avoid module resolution error on non-Node.js environ\nconst fs = fsMod;\n/**\n * A Node.js-specific file sink driver.\n */\nexport const nodeDriver = fs == null\n ? webDriver\n : {\n openSync(path) {\n return fs.openSync(path, \"a\");\n },\n writeSync: fs.writeSync,\n flushSync: fs.fsyncSync,\n closeSync: fs.closeSync,\n statSync: fs.statSync,\n renameSync: fs.renameSync,\n };\n/**\n * Get a file sink.\n *\n * Note that this function is unavailable in the browser.\n *\n * @param path A path to the file to write to.\n * @param options The options for the sink.\n * @returns A sink that writes to the file. The sink is also a disposable\n * object that closes the file when disposed.\n */\nexport function getFileSink(path, options = {}) {\n if (\"document\" in dntShim.dntGlobalThis) {\n return getBaseFileSink(path, { ...options, ...webDriver });\n }\n return getBaseFileSink(path, { ...options, ...nodeDriver });\n}\n/**\n * Get a rotating file sink.\n *\n * This sink writes log records to a file, and rotates the file when it reaches\n * the `maxSize`. The rotated files are named with the original file name\n * followed by a dot and a number, starting from 1. The number is incremented\n * for each rotation, and the maximum number of files to keep is `maxFiles`.\n *\n * Note that this function is unavailable in the browser.\n *\n * @param path A path to the file to write to.\n * @param options The options for the sink and the file driver.\n * @returns A sink that writes to the file. The sink is also a disposable\n * object that closes the file when disposed.\n */\nexport function getRotatingFileSink(path, options = {}) {\n if (\"document\" in dntShim.dntGlobalThis) {\n return getBaseRotatingFileSink(path, { ...options, ...webDriver });\n }\n return getBaseRotatingFileSink(path, { ...options, ...nodeDriver });\n}\n// cSpell: ignore filesink\n","var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator$1 = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read$1 = (undefined && undefined.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray$1 = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar __values = (undefined && undefined.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\n/**\n * Heap\n * @type {Class}\n */\nvar HeapAsync = /** @class */ (function () {\n /**\n * Heap instance constructor.\n * @param {Function} compare Optional comparison function, defaults to Heap.minComparator<number>\n */\n function HeapAsync(compare) {\n if (compare === void 0) { compare = HeapAsync.minComparator; }\n var _this = this;\n this.compare = compare;\n this.heapArray = [];\n this._limit = 0;\n /**\n * Alias of add\n */\n this.offer = this.add;\n /**\n * Alias of peek\n */\n this.element = this.peek;\n /**\n * Alias of pop\n */\n this.poll = this.pop;\n /**\n * Returns the inverse to the comparison function.\n * @return {Number}\n */\n this._invertedCompare = function (a, b) {\n return _this.compare(a, b).then(function (res) { return -1 * res; });\n };\n }\n /*\n Static methods\n */\n /**\n * Gets children indices for given index.\n * @param {Number} idx Parent index\n * @return {Array(Number)} Array of children indices\n */\n HeapAsync.getChildrenIndexOf = function (idx) {\n return [idx * 2 + 1, idx * 2 + 2];\n };\n /**\n * Gets parent index for given index.\n * @param {Number} idx Children index\n * @return {Number | undefined} Parent index, -1 if idx is 0\n */\n HeapAsync.getParentIndexOf = function (idx) {\n if (idx <= 0) {\n return -1;\n }\n var whichChildren = idx % 2 ? 1 : 2;\n return Math.floor((idx - whichChildren) / 2);\n };\n /**\n * Gets sibling index for given index.\n * @param {Number} idx Children index\n * @return {Number | undefined} Sibling index, -1 if idx is 0\n */\n HeapAsync.getSiblingIndexOf = function (idx) {\n if (idx <= 0) {\n return -1;\n }\n var whichChildren = idx % 2 ? 1 : -1;\n return idx + whichChildren;\n };\n /**\n * Min heap comparison function, default.\n * @param {any} a First element\n * @param {any} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n HeapAsync.minComparator = function (a, b) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n if (a > b) {\n return [2 /*return*/, 1];\n }\n else if (a < b) {\n return [2 /*return*/, -1];\n }\n else {\n return [2 /*return*/, 0];\n }\n });\n });\n };\n /**\n * Max heap comparison function.\n * @param {any} a First element\n * @param {any} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n HeapAsync.maxComparator = function (a, b) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n if (b > a) {\n return [2 /*return*/, 1];\n }\n else if (b < a) {\n return [2 /*return*/, -1];\n }\n else {\n return [2 /*return*/, 0];\n }\n });\n });\n };\n /**\n * Min number heap comparison function, default.\n * @param {Number} a First element\n * @param {Number} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n HeapAsync.minComparatorNumber = function (a, b) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n return [2 /*return*/, a - b];\n });\n });\n };\n /**\n * Max number heap comparison function.\n * @param {Number} a First element\n * @param {Number} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n HeapAsync.maxComparatorNumber = function (a, b) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n return [2 /*return*/, b - a];\n });\n });\n };\n /**\n * Default equality function.\n * @param {any} a First element\n * @param {any} b Second element\n * @return {Boolean} True if equal, false otherwise\n */\n HeapAsync.defaultIsEqual = function (a, b) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n return [2 /*return*/, a === b];\n });\n });\n };\n /**\n * Prints a heap.\n * @param {HeapAsync} heap Heap to be printed\n * @returns {String}\n */\n HeapAsync.print = function (heap) {\n function deep(i) {\n var pi = HeapAsync.getParentIndexOf(i);\n return Math.floor(Math.log2(pi + 1));\n }\n function repeat(str, times) {\n var out = '';\n for (; times > 0; --times) {\n out += str;\n }\n return out;\n }\n var node = 0;\n var lines = [];\n var maxLines = deep(heap.length - 1) + 2;\n var maxLength = 0;\n while (node < heap.length) {\n var i = deep(node) + 1;\n if (node === 0) {\n i = 0;\n }\n // Text representation\n var nodeText = String(heap.get(node));\n if (nodeText.length > maxLength) {\n maxLength = nodeText.length;\n }\n // Add to line\n lines[i] = lines[i] || [];\n lines[i].push(nodeText);\n node += 1;\n }\n return lines\n .map(function (line, i) {\n var times = Math.pow(2, maxLines - i) - 1;\n return (repeat(' ', Math.floor(times / 2) * maxLength) +\n line\n .map(function (el) {\n // centered\n var half = (maxLength - el.length) / 2;\n return repeat(' ', Math.ceil(half)) + el + repeat(' ', Math.floor(half));\n })\n .join(repeat(' ', times * maxLength)));\n })\n .join('\\n');\n };\n /*\n Python style\n */\n /**\n * Converts an array into an array-heap, in place\n * @param {Array} arr Array to be modified\n * @param {Function} compare Optional compare function\n * @return {HeapAsync} For convenience, it returns a Heap instance\n */\n HeapAsync.heapify = function (arr, compare) {\n return __awaiter(this, void 0, void 0, function () {\n var heap;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n heap = new HeapAsync(compare);\n heap.heapArray = arr;\n return [4 /*yield*/, heap.init()];\n case 1:\n _a.sent();\n return [2 /*return*/, heap];\n }\n });\n });\n };\n /**\n * Extract the peek of an array-heap\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {Function} compare Optional compare function\n * @return {any} Returns the extracted peek\n */\n HeapAsync.heappop = function (heapArr, compare) {\n var heap = new HeapAsync(compare);\n heap.heapArray = heapArr;\n return heap.pop();\n };\n /**\n * Pushes a item into an array-heap\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {any} item Item to push\n * @param {Function} compare Optional compare function\n */\n HeapAsync.heappush = function (heapArr, item, compare) {\n return __awaiter(this, void 0, void 0, function () {\n var heap;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n heap = new HeapAsync(compare);\n heap.heapArray = heapArr;\n return [4 /*yield*/, heap.push(item)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Push followed by pop, faster\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {any} item Item to push\n * @param {Function} compare Optional compare function\n * @return {any} Returns the extracted peek\n */\n HeapAsync.heappushpop = function (heapArr, item, compare) {\n var heap = new HeapAsync(compare);\n heap.heapArray = heapArr;\n return heap.pushpop(item);\n };\n /**\n * Replace peek with item\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {any} item Item as replacement\n * @param {Function} compare Optional compare function\n * @return {any} Returns the extracted peek\n */\n HeapAsync.heapreplace = function (heapArr, item, compare) {\n var heap = new HeapAsync(compare);\n heap.heapArray = heapArr;\n return heap.replace(item);\n };\n /**\n * Return the `n` most valuable elements of a heap-like Array\n * @param {Array} heapArr Array, should be an array-heap\n * @param {number} n Max number of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n HeapAsync.heaptop = function (heapArr, n, compare) {\n if (n === void 0) { n = 1; }\n var heap = new HeapAsync(compare);\n heap.heapArray = heapArr;\n return heap.top(n);\n };\n /**\n * Return the `n` least valuable elements of a heap-like Array\n * @param {Array} heapArr Array, should be an array-heap\n * @param {number} n Max number of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n HeapAsync.heapbottom = function (heapArr, n, compare) {\n if (n === void 0) { n = 1; }\n var heap = new HeapAsync(compare);\n heap.heapArray = heapArr;\n return heap.bottom(n);\n };\n /**\n * Return the `n` most valuable elements of an iterable\n * @param {number} n Max number of elements\n * @param {Iterable} Iterable Iterable list of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n HeapAsync.nlargest = function (n, iterable, compare) {\n return __awaiter(this, void 0, void 0, function () {\n var heap;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n heap = new HeapAsync(compare);\n heap.heapArray = __spreadArray$1([], __read$1(iterable), false);\n return [4 /*yield*/, heap.init()];\n case 1:\n _a.sent();\n return [2 /*return*/, heap.top(n)];\n }\n });\n });\n };\n /**\n * Return the `n` least valuable elements of an iterable\n * @param {number} n Max number of elements\n * @param {Iterable} Iterable Iterable list of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n HeapAsync.nsmallest = function (n, iterable, compare) {\n return __awaiter(this, void 0, void 0, function () {\n var heap;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n heap = new HeapAsync(compare);\n heap.heapArray = __spreadArray$1([], __read$1(iterable), false);\n return [4 /*yield*/, heap.init()];\n case 1:\n _a.sent();\n return [2 /*return*/, heap.bottom(n)];\n }\n });\n });\n };\n /*\n Instance methods\n */\n /**\n * Adds an element to the heap. Aliases: `offer`.\n * Same as: push(element)\n * @param {any} element Element to be added\n * @return {Boolean} true\n */\n HeapAsync.prototype.add = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._sortNodeUp(this.heapArray.push(element) - 1)];\n case 1:\n _a.sent();\n this._applyLimit();\n return [2 /*return*/, true];\n }\n });\n });\n };\n /**\n * Adds an array of elements to the heap.\n * Similar as: push(element, element, ...).\n * @param {Array} elements Elements to be added\n * @return {Boolean} true\n */\n HeapAsync.prototype.addAll = function (elements) {\n return __awaiter(this, void 0, void 0, function () {\n var i, l;\n var _a;\n return __generator$1(this, function (_b) {\n switch (_b.label) {\n case 0:\n i = this.length;\n (_a = this.heapArray).push.apply(_a, __spreadArray$1([], __read$1(elements), false));\n l = this.length;\n _b.label = 1;\n case 1:\n if (!(i < l)) return [3 /*break*/, 4];\n return [4 /*yield*/, this._sortNodeUp(i)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3:\n ++i;\n return [3 /*break*/, 1];\n case 4:\n this._applyLimit();\n return [2 /*return*/, true];\n }\n });\n });\n };\n /**\n * Return the bottom (lowest value) N elements of the heap.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n HeapAsync.prototype.bottom = function () {\n return __awaiter(this, arguments, void 0, function (n) {\n if (n === void 0) { n = 1; }\n return __generator$1(this, function (_a) {\n if (this.heapArray.length === 0 || n <= 0) {\n // Nothing to do\n return [2 /*return*/, []];\n }\n else if (this.heapArray.length === 1) {\n // Just the peek\n return [2 /*return*/, [this.heapArray[0]]];\n }\n else if (n >= this.heapArray.length) {\n // The whole heap\n return [2 /*return*/, __spreadArray$1([], __read$1(this.heapArray), false)];\n }\n else {\n // Some elements\n return [2 /*return*/, this._bottomN_push(~~n)];\n }\n });\n });\n };\n /**\n * Check if the heap is sorted, useful for testing purposes.\n * @return {Undefined | Element} Returns an element if something wrong is found, otherwise it's undefined\n */\n HeapAsync.prototype.check = function () {\n return __awaiter(this, void 0, void 0, function () {\n var j, el, children, children_1, children_1_1, ch, e_1_1;\n var e_1, _a;\n return __generator$1(this, function (_b) {\n switch (_b.label) {\n case 0:\n j = 0;\n _b.label = 1;\n case 1:\n if (!(j < this.heapArray.length)) return [3 /*break*/, 10];\n el = this.heapArray[j];\n children = this.getChildrenOf(j);\n _b.label = 2;\n case 2:\n _b.trys.push([2, 7, 8, 9]);\n children_1 = (e_1 = void 0, __values(children)), children_1_1 = children_1.next();\n _b.label = 3;\n case 3:\n if (!!children_1_1.done) return [3 /*break*/, 6];\n ch = children_1_1.value;\n return [4 /*yield*/, this.compare(el, ch)];\n case 4:\n if ((_b.sent()) > 0) {\n return [2 /*return*/, el];\n }\n _b.label = 5;\n case 5:\n children_1_1 = children_1.next();\n return [3 /*break*/, 3];\n case 6: return [3 /*break*/, 9];\n case 7:\n e_1_1 = _b.sent();\n e_1 = { error: e_1_1 };\n return [3 /*break*/, 9];\n case 8:\n try {\n if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);\n }\n finally { if (e_1) throw e_1.error; }\n return [7 /*endfinally*/];\n case 9:\n ++j;\n return [3 /*break*/, 1];\n case 10: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Remove all of the elements from this heap.\n */\n HeapAsync.prototype.clear = function () {\n this.heapArray = [];\n };\n /**\n * Clone this heap\n * @return {HeapAsync}\n */\n HeapAsync.prototype.clone = function () {\n var cloned = new HeapAsync(this.comparator());\n cloned.heapArray = this.toArray();\n cloned._limit = this._limit;\n return cloned;\n };\n /**\n * Returns the comparison function.\n * @return {Function}\n */\n HeapAsync.prototype.comparator = function () {\n return this.compare;\n };\n /**\n * Returns true if this queue contains the specified element.\n * @param {any} o Element to be found\n * @param {Function} fn Optional comparison function, receives (element, needle)\n * @return {Boolean}\n */\n HeapAsync.prototype.contains = function (o_1) {\n return __awaiter(this, arguments, void 0, function (o, fn) {\n var _a, _b, el, e_2_1;\n var e_2, _c;\n if (fn === void 0) { fn = HeapAsync.defaultIsEqual; }\n return __generator$1(this, function (_d) {\n switch (_d.label) {\n case 0:\n _d.trys.push([0, 5, 6, 7]);\n _a = __values(this.heapArray), _b = _a.next();\n _d.label = 1;\n case 1:\n if (!!_b.done) return [3 /*break*/, 4];\n el = _b.value;\n return [4 /*yield*/, fn(el, o)];\n case 2:\n if (_d.sent()) {\n return [2 /*return*/, true];\n }\n _d.label = 3;\n case 3:\n _b = _a.next();\n return [3 /*break*/, 1];\n case 4: return [3 /*break*/, 7];\n case 5:\n e_2_1 = _d.sent();\n e_2 = { error: e_2_1 };\n return [3 /*break*/, 7];\n case 6:\n try {\n if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n }\n finally { if (e_2) throw e_2.error; }\n return [7 /*endfinally*/];\n case 7: return [2 /*return*/, false];\n }\n });\n });\n };\n /**\n * Initialise a heap, sorting nodes\n * @param {Array} array Optional initial state array\n */\n HeapAsync.prototype.init = function (array) {\n return __awaiter(this, void 0, void 0, function () {\n var i;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (array) {\n this.heapArray = __spreadArray$1([], __read$1(array), false);\n }\n i = HeapAsync.getParentIndexOf(this.length - 1);\n _a.label = 1;\n case 1:\n if (!(i >= 0)) return [3 /*break*/, 4];\n return [4 /*yield*/, this._sortNodeDown(i)];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3:\n --i;\n return [3 /*break*/, 1];\n case 4:\n this._applyLimit();\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Test if the heap has no elements.\n * @return {Boolean} True if no elements on the heap\n */\n HeapAsync.prototype.isEmpty = function () {\n return this.length === 0;\n };\n /**\n * Get the leafs of the tree (no children nodes)\n */\n HeapAsync.prototype.leafs = function () {\n if (this.heapArray.length === 0) {\n return [];\n }\n var pi = HeapAsync.getParentIndexOf(this.heapArray.length - 1);\n return this.heapArray.slice(pi + 1);\n };\n Object.defineProperty(HeapAsync.prototype, \"length\", {\n /**\n * Length of the heap.\n * @return {Number}\n */\n get: function () {\n return this.heapArray.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HeapAsync.prototype, \"limit\", {\n /**\n * Get length limit of the heap.\n * @return {Number}\n */\n get: function () {\n return this._limit;\n },\n /**\n * Set length limit of the heap.\n * @return {Number}\n */\n set: function (_l) {\n this._limit = ~~_l;\n this._applyLimit();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Top node. Aliases: `element`.\n * Same as: `top(1)[0]`\n * @return {any} Top node\n */\n HeapAsync.prototype.peek = function () {\n return this.heapArray[0];\n };\n /**\n * Extract the top node (root). Aliases: `poll`.\n * @return {any} Extracted top node, undefined if empty\n */\n HeapAsync.prototype.pop = function () {\n return __awaiter(this, void 0, void 0, function () {\n var last;\n return __generator$1(this, function (_a) {\n last = this.heapArray.pop();\n if (this.length > 0 && last !== undefined) {\n return [2 /*return*/, this.replace(last)];\n }\n return [2 /*return*/, last];\n });\n });\n };\n /**\n * Pushes element(s) to the heap.\n * @param {...any} elements Elements to insert\n * @return {Boolean} True if elements are present\n */\n HeapAsync.prototype.push = function () {\n var elements = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n elements[_i] = arguments[_i];\n }\n return __awaiter(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n if (elements.length < 1) {\n return [2 /*return*/, false];\n }\n else if (elements.length === 1) {\n return [2 /*return*/, this.add(elements[0])];\n }\n else {\n return [2 /*return*/, this.addAll(elements)];\n }\n });\n });\n };\n /**\n * Same as push & pop in sequence, but faster\n * @param {any} element Element to insert\n * @return {any} Extracted top node\n */\n HeapAsync.prototype.pushpop = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n return __generator$1(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this.compare(this.heapArray[0], element)];\n case 1:\n if (!((_b.sent()) < 0)) return [3 /*break*/, 3];\n _a = __read$1([this.heapArray[0], element], 2), element = _a[0], this.heapArray[0] = _a[1];\n return [4 /*yield*/, this._sortNodeDown(0)];\n case 2:\n _b.sent();\n _b.label = 3;\n case 3: return [2 /*return*/, element];\n }\n });\n });\n };\n /**\n * Remove an element from the heap.\n * @param {any} o Element to be found\n * @param {Function} fn Optional function to compare\n * @return {Boolean} True if the heap was modified\n */\n HeapAsync.prototype.remove = function (o_1) {\n return __awaiter(this, arguments, void 0, function (o, fn) {\n var queue, idx, children;\n var _this = this;\n if (fn === void 0) { fn = HeapAsync.defaultIsEqual; }\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.heapArray.length)\n return [2 /*return*/, false];\n if (!(o === undefined)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.pop()];\n case 1:\n _a.sent();\n return [2 /*return*/, true];\n case 2:\n queue = [0];\n _a.label = 3;\n case 3:\n if (!queue.length) return [3 /*break*/, 13];\n idx = queue.shift();\n return [4 /*yield*/, fn(this.heapArray[idx], o)];\n case 4:\n if (!_a.sent()) return [3 /*break*/, 11];\n if (!(idx === 0)) return [3 /*break*/, 6];\n return [4 /*yield*/, this.pop()];\n case 5:\n _a.sent();\n return [3 /*break*/, 10];\n case 6:\n if (!(idx === this.heapArray.length - 1)) return [3 /*break*/, 7];\n this.heapArray.pop();\n return [3 /*break*/, 10];\n case 7:\n this.heapArray.splice(idx, 1, this.heapArray.pop());\n return [4 /*yield*/, this._sortNodeUp(idx)];\n case 8:\n _a.sent();\n return [4 /*yield*/, this._sortNodeDown(idx)];\n case 9:\n _a.sent();\n _a.label = 10;\n case 10: return [2 /*return*/, true];\n case 11:\n children = HeapAsync.getChildrenIndexOf(idx).filter(function (c) { return c < _this.heapArray.length; });\n queue.push.apply(queue, __spreadArray$1([], __read$1(children), false));\n _a.label = 12;\n case 12: return [3 /*break*/, 3];\n case 13: return [2 /*return*/, false];\n }\n });\n });\n };\n /**\n * Pop the current peek value, and add the new item.\n * @param {any} element Element to replace peek\n * @return {any} Old peek\n */\n HeapAsync.prototype.replace = function (element) {\n return __awaiter(this, void 0, void 0, function () {\n var peek;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n peek = this.heapArray[0];\n this.heapArray[0] = element;\n return [4 /*yield*/, this._sortNodeDown(0)];\n case 1:\n _a.sent();\n return [2 /*return*/, peek];\n }\n });\n });\n };\n /**\n * Size of the heap\n * @return {Number}\n */\n HeapAsync.prototype.size = function () {\n return this.length;\n };\n /**\n * Return the top (highest value) N elements of the heap.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n HeapAsync.prototype.top = function () {\n return __awaiter(this, arguments, void 0, function (n) {\n if (n === void 0) { n = 1; }\n return __generator$1(this, function (_a) {\n if (this.heapArray.length === 0 || n <= 0) {\n // Nothing to do\n return [2 /*return*/, []];\n }\n else if (this.heapArray.length === 1 || n === 1) {\n // Just the peek\n return [2 /*return*/, [this.heapArray[0]]];\n }\n else if (n >= this.heapArray.length) {\n // The whole peek\n return [2 /*return*/, __spreadArray$1([], __read$1(this.heapArray), false)];\n }\n else {\n // Some elements\n return [2 /*return*/, this._topN_push(~~n)];\n }\n });\n });\n };\n /**\n * Clone the heap's internal array\n * @return {Array}\n */\n HeapAsync.prototype.toArray = function () {\n return __spreadArray$1([], __read$1(this.heapArray), false);\n };\n /**\n * String output, call to Array.prototype.toString()\n * @return {String}\n */\n HeapAsync.prototype.toString = function () {\n return this.heapArray.toString();\n };\n /**\n * Get the element at the given index.\n * @param {Number} i Index to get\n * @return {any} Element at that index\n */\n HeapAsync.prototype.get = function (i) {\n return this.heapArray[i];\n };\n /**\n * Get the elements of these node's children\n * @param {Number} idx Node index\n * @return {Array(any)} Children elements\n */\n HeapAsync.prototype.getChildrenOf = function (idx) {\n var _this = this;\n return HeapAsync.getChildrenIndexOf(idx)\n .map(function (i) { return _this.heapArray[i]; })\n .filter(function (e) { return e !== undefined; });\n };\n /**\n * Get the element of this node's parent\n * @param {Number} idx Node index\n * @return {any} Parent element\n */\n HeapAsync.prototype.getParentOf = function (idx) {\n var pi = HeapAsync.getParentIndexOf(idx);\n return this.heapArray[pi];\n };\n /**\n * Iterator interface\n */\n HeapAsync.prototype[Symbol.iterator] = function () {\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.length) return [3 /*break*/, 2];\n return [4 /*yield*/, this.pop()];\n case 1:\n _a.sent();\n return [3 /*break*/, 0];\n case 2: return [2 /*return*/];\n }\n });\n };\n /**\n * Returns an iterator. To comply with Java interface.\n */\n HeapAsync.prototype.iterator = function () {\n return this;\n };\n /**\n * Limit heap size if needed\n */\n HeapAsync.prototype._applyLimit = function () {\n if (this._limit && this._limit < this.heapArray.length) {\n var rm = this.heapArray.length - this._limit;\n // It's much faster than splice\n while (rm) {\n this.heapArray.pop();\n --rm;\n }\n }\n };\n /**\n * Return the bottom (lowest value) N elements of the heap, without corner cases, unsorted\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n HeapAsync.prototype._bottomN_push = function (n) {\n return __awaiter(this, void 0, void 0, function () {\n var bottomHeap, startAt, parentStartAt, indices, i, arr, i;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n bottomHeap = new HeapAsync(this.compare);\n bottomHeap.limit = n;\n bottomHeap.heapArray = this.heapArray.slice(-n);\n return [4 /*yield*/, bottomHeap.init()];\n case 1:\n _a.sent();\n startAt = this.heapArray.length - 1 - n;\n parentStartAt = HeapAsync.getParentIndexOf(startAt);\n indices = [];\n for (i = startAt; i > parentStartAt; --i) {\n indices.push(i);\n }\n arr = this.heapArray;\n _a.label = 2;\n case 2:\n if (!indices.length) return [3 /*break*/, 6];\n i = indices.shift();\n return [4 /*yield*/, this.compare(arr[i], bottomHeap.peek())];\n case 3:\n if (!((_a.sent()) > 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, bottomHeap.replace(arr[i])];\n case 4:\n _a.sent();\n if (i % 2) {\n indices.push(HeapAsync.getParentIndexOf(i));\n }\n _a.label = 5;\n case 5: return [3 /*break*/, 2];\n case 6: return [2 /*return*/, bottomHeap.toArray()];\n }\n });\n });\n };\n /**\n * Move a node to a new index, switching places\n * @param {Number} j First node index\n * @param {Number} k Another node index\n */\n HeapAsync.prototype._moveNode = function (j, k) {\n var temp = this.heapArray[j];\n this.heapArray[j] = this.heapArray[k];\n this.heapArray[k] = temp;\n };\n /**\n * Move a node down the tree (to the leaves) to find a place where the heap is sorted.\n * @param {Number} i Index of the node\n */\n HeapAsync.prototype._sortNodeDown = function (i) {\n return __awaiter(this, void 0, void 0, function () {\n var length, originalIndex, value, left, right, best, _a;\n return __generator$1(this, function (_b) {\n switch (_b.label) {\n case 0:\n length = this.heapArray.length;\n originalIndex = i;\n value = this.heapArray[i];\n left = 2 * i + 1;\n _b.label = 1;\n case 1:\n if (!(left < length)) return [3 /*break*/, 5];\n right = left + 1;\n _a = right >= length;\n if (_a) return [3 /*break*/, 3];\n return [4 /*yield*/, this.compare(this.heapArray[left], this.heapArray[right])];\n case 2:\n _a = (_b.sent()) < 0;\n _b.label = 3;\n case 3:\n best = _a ? left\n : right;\n return [4 /*yield*/, this.compare(this.heapArray[best], value)];\n case 4:\n if ((_b.sent()) < 0) {\n this.heapArray[i] = this.heapArray[best];\n i = best;\n left = 2 * i + 1;\n }\n else\n return [3 /*break*/, 5];\n return [3 /*break*/, 1];\n case 5:\n if (i !== originalIndex) {\n this.heapArray[i] = value;\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Move a node up the tree (to the root) to find a place where the heap is sorted.\n * @param {Number} i Index of the node\n */\n HeapAsync.prototype._sortNodeUp = function (i) {\n return __awaiter(this, void 0, void 0, function () {\n var value, originalIndex, pi;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n value = this.heapArray[i];\n originalIndex = i;\n _a.label = 1;\n case 1:\n if (!(i > 0)) return [3 /*break*/, 3];\n pi = HeapAsync.getParentIndexOf(i);\n return [4 /*yield*/, this.compare(value, this.heapArray[pi])];\n case 2:\n if ((_a.sent()) < 0) {\n this.heapArray[i] = this.heapArray[pi];\n i = pi;\n }\n else\n return [3 /*break*/, 3];\n return [3 /*break*/, 1];\n case 3:\n if (i !== originalIndex) {\n this.heapArray[i] = value;\n }\n return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n * Implementation: push.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n HeapAsync.prototype._topN_push = function (n) {\n return __awaiter(this, void 0, void 0, function () {\n var topHeap, indices, arr, i;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n topHeap = new HeapAsync(this._invertedCompare);\n topHeap.limit = n;\n indices = [0];\n arr = this.heapArray;\n _a.label = 1;\n case 1:\n if (!indices.length) return [3 /*break*/, 7];\n i = indices.shift();\n if (!(i < arr.length)) return [3 /*break*/, 6];\n if (!(topHeap.length < n)) return [3 /*break*/, 3];\n return [4 /*yield*/, topHeap.push(arr[i])];\n case 2:\n _a.sent();\n indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i)), false));\n return [3 /*break*/, 6];\n case 3: return [4 /*yield*/, this.compare(arr[i], topHeap.peek())];\n case 4:\n if (!((_a.sent()) < 0)) return [3 /*break*/, 6];\n return [4 /*yield*/, topHeap.replace(arr[i])];\n case 5:\n _a.sent();\n indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i)), false));\n _a.label = 6;\n case 6: return [3 /*break*/, 1];\n case 7: return [2 /*return*/, topHeap.toArray()];\n }\n });\n });\n };\n /**\n * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n * Implementation: init + push.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n HeapAsync.prototype._topN_fill = function (n) {\n return __awaiter(this, void 0, void 0, function () {\n var heapArray, topHeap, branch, indices, i, i;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n heapArray = this.heapArray;\n topHeap = new HeapAsync(this._invertedCompare);\n topHeap.limit = n;\n topHeap.heapArray = heapArray.slice(0, n);\n return [4 /*yield*/, topHeap.init()];\n case 1:\n _a.sent();\n branch = HeapAsync.getParentIndexOf(n - 1) + 1;\n indices = [];\n for (i = branch; i < n; ++i) {\n indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i).filter(function (l) { return l < heapArray.length; })), false));\n }\n if ((n - 1) % 2) {\n indices.push(n);\n }\n _a.label = 2;\n case 2:\n if (!indices.length) return [3 /*break*/, 6];\n i = indices.shift();\n if (!(i < heapArray.length)) return [3 /*break*/, 5];\n return [4 /*yield*/, this.compare(heapArray[i], topHeap.peek())];\n case 3:\n if (!((_a.sent()) < 0)) return [3 /*break*/, 5];\n return [4 /*yield*/, topHeap.replace(heapArray[i])];\n case 4:\n _a.sent();\n indices.push.apply(indices, __spreadArray$1([], __read$1(HeapAsync.getChildrenIndexOf(i)), false));\n _a.label = 5;\n case 5: return [3 /*break*/, 2];\n case 6: return [2 /*return*/, topHeap.toArray()];\n }\n });\n });\n };\n /**\n * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n * Implementation: heap.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n HeapAsync.prototype._topN_heap = function (n) {\n return __awaiter(this, void 0, void 0, function () {\n var topHeap, result, i, _a, _b;\n return __generator$1(this, function (_c) {\n switch (_c.label) {\n case 0:\n topHeap = this.clone();\n result = [];\n i = 0;\n _c.label = 1;\n case 1:\n if (!(i < n)) return [3 /*break*/, 4];\n _b = (_a = result).push;\n return [4 /*yield*/, topHeap.pop()];\n case 2:\n _b.apply(_a, [(_c.sent())]);\n _c.label = 3;\n case 3:\n ++i;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/, result];\n }\n });\n });\n };\n /**\n * Return index of the top element\n * @param list\n */\n HeapAsync.prototype._topIdxOf = function (list) {\n return __awaiter(this, void 0, void 0, function () {\n var idx, top, i, comp;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!list.length) {\n return [2 /*return*/, -1];\n }\n idx = 0;\n top = list[idx];\n i = 1;\n _a.label = 1;\n case 1:\n if (!(i < list.length)) return [3 /*break*/, 4];\n return [4 /*yield*/, this.compare(list[i], top)];\n case 2:\n comp = _a.sent();\n if (comp < 0) {\n idx = i;\n top = list[i];\n }\n _a.label = 3;\n case 3:\n ++i;\n return [3 /*break*/, 1];\n case 4: return [2 /*return*/, idx];\n }\n });\n });\n };\n /**\n * Return the top element\n * @param list\n */\n HeapAsync.prototype._topOf = function () {\n var list = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n list[_i] = arguments[_i];\n }\n return __awaiter(this, void 0, void 0, function () {\n var heap;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n heap = new HeapAsync(this.compare);\n return [4 /*yield*/, heap.init(list)];\n case 1:\n _a.sent();\n return [2 /*return*/, heap.peek()];\n }\n });\n });\n };\n return HeapAsync;\n}());\n\nvar __generator = (undefined && undefined.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (undefined && undefined.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (undefined && undefined.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nvar toInt = function (n) { return ~~n; };\n/**\n * Heap\n * @type {Class}\n */\nvar Heap = /** @class */ (function () {\n /**\n * Heap instance constructor.\n * @param {Function} compare Optional comparison function, defaults to Heap.minComparator<number>\n */\n function Heap(compare) {\n if (compare === void 0) { compare = Heap.minComparator; }\n var _this = this;\n this.compare = compare;\n this.heapArray = [];\n this._limit = 0;\n /**\n * Alias of {@link add}\n * @see add\n */\n this.offer = this.add;\n /**\n * Alias of {@link peek}\n * @see peek\n */\n this.element = this.peek;\n /**\n * Alias of {@link pop}\n * @see pop\n */\n this.poll = this.pop;\n /**\n * Alias of {@link clear}\n * @see clear\n */\n this.removeAll = this.clear;\n /**\n * Returns the inverse to the comparison function.\n * @return {Function}\n */\n this._invertedCompare = function (a, b) {\n return -1 * _this.compare(a, b);\n };\n }\n /*\n Static methods\n */\n /**\n * Gets children indices for given index.\n * @param {Number} idx Parent index\n * @return {Array(Number)} Array of children indices\n */\n Heap.getChildrenIndexOf = function (idx) {\n return [idx * 2 + 1, idx * 2 + 2];\n };\n /**\n * Gets parent index for given index.\n * @param {Number} idx Children index\n * @return {Number | undefined} Parent index, -1 if idx is 0\n */\n Heap.getParentIndexOf = function (idx) {\n if (idx <= 0) {\n return -1;\n }\n return (idx - 1) >> 1;\n };\n /**\n * Gets sibling index for given index.\n * @param {Number} idx Children index\n * @return {Number | undefined} Sibling index, -1 if idx is 0\n */\n Heap.getSiblingIndexOf = function (idx) {\n if (idx <= 0) {\n return -1;\n }\n var whichChildren = idx % 2 ? 1 : -1;\n return idx + whichChildren;\n };\n /**\n * Min heap comparison function, default.\n * @param {any} a First element\n * @param {any} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n Heap.minComparator = function (a, b) {\n if (a > b) {\n return 1;\n }\n else if (a < b) {\n return -1;\n }\n else {\n return 0;\n }\n };\n /**\n * Max heap comparison function.\n * @param {any} a First element\n * @param {any} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n Heap.maxComparator = function (a, b) {\n if (b > a) {\n return 1;\n }\n else if (b < a) {\n return -1;\n }\n else {\n return 0;\n }\n };\n /**\n * Min number heap comparison function, default.\n * @param {Number} a First element\n * @param {Number} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n Heap.minComparatorNumber = function (a, b) {\n return a - b;\n };\n /**\n * Max number heap comparison function.\n * @param {Number} a First element\n * @param {Number} b Second element\n * @return {Number} 0 if they're equal, positive if `a` goes up, negative if `b` goes up\n */\n Heap.maxComparatorNumber = function (a, b) {\n return b - a;\n };\n /**\n * Default equality function.\n * @param {any} a First element\n * @param {any} b Second element\n * @return {Boolean} True if equal, false otherwise\n */\n Heap.defaultIsEqual = function (a, b) {\n return a === b;\n };\n /**\n * Prints a heap.\n * @param {Heap} heap Heap to be printed\n * @returns {String}\n */\n Heap.print = function (heap) {\n function deep(i) {\n var pi = Heap.getParentIndexOf(i);\n return Math.floor(Math.log2(pi + 1));\n }\n function repeat(str, times) {\n var out = '';\n for (; times > 0; --times) {\n out += str;\n }\n return out;\n }\n var node = 0;\n var lines = [];\n var maxLines = deep(heap.length - 1) + 2;\n var maxLength = 0;\n while (node < heap.length) {\n var i = deep(node) + 1;\n if (node === 0) {\n i = 0;\n }\n // Text representation\n var nodeText = String(heap.get(node));\n if (nodeText.length > maxLength) {\n maxLength = nodeText.length;\n }\n // Add to line\n lines[i] = lines[i] || [];\n lines[i].push(nodeText);\n node += 1;\n }\n return lines\n .map(function (line, i) {\n var times = Math.pow(2, maxLines - i) - 1;\n return (repeat(' ', Math.floor(times / 2) * maxLength) +\n line\n .map(function (el) {\n // centered\n var half = (maxLength - el.length) / 2;\n return repeat(' ', Math.ceil(half)) + el + repeat(' ', Math.floor(half));\n })\n .join(repeat(' ', times * maxLength)));\n })\n .join('\\n');\n };\n /*\n Python style\n */\n /**\n * Converts an array into an array-heap, in place\n * @param {Array} arr Array to be modified\n * @param {Function} compare Optional compare function\n * @return {Heap} For convenience, it returns a Heap instance\n */\n Heap.heapify = function (arr, compare) {\n var heap = new Heap(compare);\n heap.heapArray = arr;\n heap.init();\n return heap;\n };\n /**\n * Extract the peek of an array-heap\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {Function} compare Optional compare function\n * @return {any} Returns the extracted peek\n */\n Heap.heappop = function (heapArr, compare) {\n var heap = new Heap(compare);\n heap.heapArray = heapArr;\n return heap.pop();\n };\n /**\n * Pushes a item into an array-heap\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {any} item Item to push\n * @param {Function} compare Optional compare function\n */\n Heap.heappush = function (heapArr, item, compare) {\n var heap = new Heap(compare);\n heap.heapArray = heapArr;\n heap.push(item);\n };\n /**\n * Push followed by pop, faster\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {any} item Item to push\n * @param {Function} compare Optional compare function\n * @return {any} Returns the extracted peek\n */\n Heap.heappushpop = function (heapArr, item, compare) {\n var heap = new Heap(compare);\n heap.heapArray = heapArr;\n return heap.pushpop(item);\n };\n /**\n * Replace peek with item\n * @param {Array} heapArr Array to be modified, should be a heap\n * @param {any} item Item as replacement\n * @param {Function} compare Optional compare function\n * @return {any} Returns the extracted peek\n */\n Heap.heapreplace = function (heapArr, item, compare) {\n var heap = new Heap(compare);\n heap.heapArray = heapArr;\n return heap.replace(item);\n };\n /**\n * Return the `n` most valuable elements of a heap-like Array\n * @param {Array} heapArr Array, should be an array-heap\n * @param {number} n Max number of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n Heap.heaptop = function (heapArr, n, compare) {\n if (n === void 0) { n = 1; }\n var heap = new Heap(compare);\n heap.heapArray = heapArr;\n return heap.top(n);\n };\n /**\n * Return the `n` least valuable elements of a heap-like Array\n * @param {Array} heapArr Array, should be an array-heap\n * @param {number} n Max number of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n Heap.heapbottom = function (heapArr, n, compare) {\n if (n === void 0) { n = 1; }\n var heap = new Heap(compare);\n heap.heapArray = heapArr;\n return heap.bottom(n);\n };\n /**\n * Return the `n` most valuable elements of an iterable\n * @param {number} n Max number of elements\n * @param {Iterable} Iterable Iterable list of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n Heap.nlargest = function (n, iterable, compare) {\n var heap = new Heap(compare);\n heap.heapArray = __spreadArray([], __read(iterable), false);\n heap.init();\n return heap.top(n);\n };\n /**\n * Return the `n` least valuable elements of an iterable\n * @param {number} n Max number of elements\n * @param {Iterable} Iterable Iterable list of elements\n * @param {Function} compare Optional compare function\n * @return {any} Elements\n */\n Heap.nsmallest = function (n, iterable, compare) {\n var heap = new Heap(compare);\n heap.heapArray = __spreadArray([], __read(iterable), false);\n heap.init();\n return heap.bottom(n);\n };\n /*\n Instance methods\n */\n /**\n * Adds an element to the heap. Aliases: {@link offer}.\n * Same as: {@link push}(element).\n * @param {any} element Element to be added\n * @return {Boolean} true\n */\n Heap.prototype.add = function (element) {\n this._sortNodeUp(this.heapArray.push(element) - 1);\n this._applyLimit();\n return true;\n };\n /**\n * Adds an array of elements to the heap.\n * Similar as: {@link push}(element, element, ...).\n * @param {Array} elements Elements to be added\n * @return {Boolean} true\n */\n Heap.prototype.addAll = function (elements) {\n var _a;\n var i = this.length;\n (_a = this.heapArray).push.apply(_a, __spreadArray([], __read(elements), false));\n for (var l = this.length; i < l; ++i) {\n this._sortNodeUp(i);\n }\n this._applyLimit();\n return true;\n };\n /**\n * Return the bottom (lowest value) N elements of the heap.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n Heap.prototype.bottom = function (n) {\n if (n === void 0) { n = 1; }\n if (this.heapArray.length === 0 || n <= 0) {\n // Nothing to do\n return [];\n }\n else if (this.heapArray.length === 1) {\n // Just the peek\n return [this.heapArray[0]];\n }\n else if (n >= this.heapArray.length) {\n // The whole heap\n return __spreadArray([], __read(this.heapArray), false);\n }\n else {\n // Some elements\n return this._bottomN_push(~~n);\n }\n };\n /**\n * Check if the heap is sorted, useful for testing purposes.\n * @return {Undefined | Element} Returns an element if something wrong is found, otherwise it's undefined\n */\n Heap.prototype.check = function () {\n var _this = this;\n return this.heapArray.find(function (el, j) { return !!_this.getChildrenOf(j).find(function (ch) { return _this.compare(el, ch) > 0; }); });\n };\n /**\n * Remove all of the elements from this heap.\n */\n Heap.prototype.clear = function () {\n this.heapArray = [];\n };\n /**\n * Clone this heap\n * @return {Heap}\n */\n Heap.prototype.clone = function () {\n var cloned = new Heap(this.comparator());\n cloned.heapArray = this.toArray();\n cloned._limit = this._limit;\n return cloned;\n };\n /**\n * Returns the comparison function.\n * @return {Function}\n */\n Heap.prototype.comparator = function () {\n return this.compare;\n };\n /**\n * Returns true if this queue contains the specified element.\n * @param {any} o Element to be found\n * @param {Function} callbackFn Optional comparison function, receives (element, needle)\n * @return {Boolean}\n */\n Heap.prototype.contains = function (o, callbackFn) {\n if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n return this.indexOf(o, callbackFn) !== -1;\n };\n /**\n * Initialize a heap, sorting nodes\n * @param {Array} array Optional initial state array\n */\n Heap.prototype.init = function (array) {\n if (array) {\n this.heapArray = __spreadArray([], __read(array), false);\n }\n for (var i = Heap.getParentIndexOf(this.length - 1); i >= 0; --i) {\n this._sortNodeDown(i);\n }\n this._applyLimit();\n };\n /**\n * Test if the heap has no elements.\n * @return {Boolean} True if no elements on the heap\n */\n Heap.prototype.isEmpty = function () {\n return this.length === 0;\n };\n /**\n * Get the index of the first occurrence of the element in the heap (using the comparator).\n * @param {any} element Element to be found\n * @param {Function} callbackFn Optional comparison function, receives (element, needle)\n * @return {Number} Index or -1 if not found\n */\n Heap.prototype.indexOf = function (element, callbackFn) {\n if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n if (this.heapArray.length === 0) {\n return -1;\n }\n var indexes = [];\n var currentIndex = 0;\n while (currentIndex < this.heapArray.length) {\n var currentElement = this.heapArray[currentIndex];\n if (callbackFn(currentElement, element)) {\n return currentIndex;\n }\n else if (this.compare(currentElement, element) <= 0) {\n indexes.push.apply(indexes, __spreadArray([], __read(Heap.getChildrenIndexOf(currentIndex)), false));\n }\n currentIndex = indexes.shift() || this.heapArray.length;\n }\n return -1;\n };\n /**\n * Get the indexes of the every occurrence of the element in the heap (using the comparator).\n * @param {any} element Element to be found\n * @param {Function} callbackFn Optional comparison function, receives (element, needle)\n * @return {Array} Array of indexes or empty array if not found\n */\n Heap.prototype.indexOfEvery = function (element, callbackFn) {\n if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n if (this.heapArray.length === 0) {\n return [];\n }\n var indexes = [];\n var foundIndexes = [];\n var currentIndex = 0;\n while (currentIndex < this.heapArray.length) {\n var currentElement = this.heapArray[currentIndex];\n if (callbackFn(currentElement, element)) {\n foundIndexes.push(currentIndex);\n indexes.push.apply(indexes, __spreadArray([], __read(Heap.getChildrenIndexOf(currentIndex)), false));\n }\n else if (this.compare(currentElement, element) <= 0) {\n indexes.push.apply(indexes, __spreadArray([], __read(Heap.getChildrenIndexOf(currentIndex)), false));\n }\n currentIndex = indexes.shift() || this.heapArray.length;\n }\n return foundIndexes;\n };\n /**\n * Get the leafs of the tree (no children nodes).\n * See also: {@link getChildrenOf} and {@link bottom}.\n * @return {Array}\n * @see getChildrenOf\n * @see bottom\n */\n Heap.prototype.leafs = function () {\n if (this.heapArray.length === 0) {\n return [];\n }\n var pi = Heap.getParentIndexOf(this.heapArray.length - 1);\n return this.heapArray.slice(pi + 1);\n };\n Object.defineProperty(Heap.prototype, \"length\", {\n /**\n * Length of the heap. Aliases: {@link size}.\n * @return {Number}\n * @see size\n */\n get: function () {\n return this.heapArray.length;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(Heap.prototype, \"limit\", {\n /**\n * Get length limit of the heap.\n * Use {@link setLimit} or {@link limit} to set the limit.\n * @return {Number}\n * @see setLimit\n */\n get: function () {\n return this._limit;\n },\n /**\n * Set length limit of the heap. Same as using {@link setLimit}.\n * @description If the heap is longer than the limit, the needed amount of leafs are removed.\n * @param {Number} _l Limit, defaults to 0 (no limit). Negative, Infinity, or NaN values set the limit to 0.\n * @see setLimit\n */\n set: function (_l) {\n if (_l < 0 || isNaN(_l)) {\n // NaN, negative, and Infinity are treated as 0\n this._limit = 0;\n }\n else {\n // truncating a floating-point number to an integer\n this._limit = ~~_l;\n }\n this._applyLimit();\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Set length limit of the heap.\n * Same as assigning to {@link limit} but returns NaN if the value was invalid.\n * @param {Number} _l Limit. Negative, Infinity, or NaN values set the limit to 0.\n * @return {Number} The limit or NaN if the value was negative, or NaN.\n * @see limit\n */\n Heap.prototype.setLimit = function (_l) {\n this.limit = _l;\n if (_l < 0 || isNaN(_l)) {\n return NaN;\n }\n else {\n return this._limit;\n }\n };\n /**\n * Top node. Aliases: {@link element}.\n * Same as: {@link top}(1)[0].\n * @return {any} Top node\n * @see top\n */\n Heap.prototype.peek = function () {\n return this.heapArray[0];\n };\n /**\n * Extract the top node (root). Aliases: {@link poll}.\n * @return {any} Extracted top node, undefined if empty\n */\n Heap.prototype.pop = function () {\n var last = this.heapArray.pop();\n if (this.length > 0 && last !== undefined) {\n return this.replace(last);\n }\n return last;\n };\n /**\n * Pushes element(s) to the heap.\n * See also: {@link add} and {@link addAll}.\n * @param {...any} elements Elements to insert\n * @return {Boolean} True if elements are present\n */\n Heap.prototype.push = function () {\n var elements = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n elements[_i] = arguments[_i];\n }\n if (elements.length < 1) {\n return false;\n }\n else if (elements.length === 1) {\n return this.add(elements[0]);\n }\n else {\n return this.addAll(elements);\n }\n };\n /**\n * Same as push & pop in sequence, but faster\n * @param {any} element Element to insert\n * @return {any} Extracted top node\n */\n Heap.prototype.pushpop = function (element) {\n var _a;\n if (this.compare(this.heapArray[0], element) < 0) {\n _a = __read([this.heapArray[0], element], 2), element = _a[0], this.heapArray[0] = _a[1];\n this._sortNodeDown(0);\n }\n return element;\n };\n /**\n * Remove the first occurrence of an element from the heap.\n * @param {any} o Element to be found\n * @param {Function} callbackFn Optional equality function, receives (element, needle)\n * @return {Boolean} True if the heap was modified\n */\n Heap.prototype.remove = function (o, callbackFn) {\n var _this = this;\n if (callbackFn === void 0) { callbackFn = Heap.defaultIsEqual; }\n if (!this.heapArray.length)\n return false;\n if (o === undefined) {\n this.pop();\n return true;\n }\n var queue = [0];\n while (queue.length) {\n var idx = queue.shift();\n if (callbackFn(this.heapArray[idx], o)) {\n if (idx === 0) {\n this.pop();\n }\n else if (idx === this.heapArray.length - 1) {\n this.heapArray.pop();\n }\n else {\n this.heapArray.splice(idx, 1, this.heapArray.pop());\n this._sortNodeUp(idx);\n this._sortNodeDown(idx);\n }\n return true;\n }\n else if (this.compare(this.heapArray[idx], o) <= 0) {\n var children = Heap.getChildrenIndexOf(idx).filter(function (c) { return c < _this.heapArray.length; });\n queue.push.apply(queue, __spreadArray([], __read(children), false));\n }\n }\n return false;\n };\n /**\n * Pop the current peek value, and add the new item.\n * @param {any} element Element to replace peek\n * @return {any} Old peek\n */\n Heap.prototype.replace = function (element) {\n var peek = this.heapArray[0];\n this.heapArray[0] = element;\n this._sortNodeDown(0);\n return peek;\n };\n /**\n * Size of the heap\n * @return {Number}\n */\n Heap.prototype.size = function () {\n return this.length;\n };\n /**\n * Return the top (highest value) N elements of the heap.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n Heap.prototype.top = function (n) {\n if (n === void 0) { n = 1; }\n if (this.heapArray.length === 0 || n <= 0) {\n // Nothing to do\n return [];\n }\n else if (this.heapArray.length === 1 || n === 1) {\n // Just the peek\n return [this.heapArray[0]];\n }\n else if (n >= this.heapArray.length) {\n // The whole peek\n return __spreadArray([], __read(this.heapArray), false);\n }\n else {\n // Some elements\n return this._topN_push(~~n);\n }\n };\n /**\n * Clone the heap's internal array\n * @return {Array}\n */\n Heap.prototype.toArray = function () {\n return __spreadArray([], __read(this.heapArray), false);\n };\n /**\n * String output, call to Array.prototype.toString()\n * @return {String}\n */\n Heap.prototype.toString = function () {\n return this.heapArray.toString();\n };\n /**\n * Get the element at the given index.\n * @param {Number} i Index to get\n * @return {any} Element at that index\n */\n Heap.prototype.get = function (i) {\n return this.heapArray[i];\n };\n /**\n * Get the elements of these node's children\n * @param {Number} idx Node index\n * @return {Array(any)} Children elements\n */\n Heap.prototype.getChildrenOf = function (idx) {\n var _this = this;\n return Heap.getChildrenIndexOf(idx)\n .map(function (i) { return _this.heapArray[i]; })\n .filter(function (e) { return e !== undefined; });\n };\n /**\n * Get the element of this node's parent\n * @param {Number} idx Node index\n * @return {any} Parent element\n */\n Heap.prototype.getParentOf = function (idx) {\n var pi = Heap.getParentIndexOf(idx);\n return this.heapArray[pi];\n };\n /**\n * Iterator interface\n */\n Heap.prototype[Symbol.iterator] = function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.length) return [3 /*break*/, 2];\n return [4 /*yield*/, this.pop()];\n case 1:\n _a.sent();\n return [3 /*break*/, 0];\n case 2: return [2 /*return*/];\n }\n });\n };\n /**\n * Returns an iterator. To comply with Java interface.\n */\n Heap.prototype.iterator = function () {\n return this.toArray();\n };\n /**\n * Limit heap size if needed\n */\n Heap.prototype._applyLimit = function () {\n if (this._limit > 0 && this._limit < this.heapArray.length) {\n var rm = this.heapArray.length - this._limit;\n // It's much faster than splice\n while (rm) {\n this.heapArray.pop();\n --rm;\n }\n }\n };\n /**\n * Return the bottom (lowest value) N elements of the heap, without corner cases, unsorted\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n Heap.prototype._bottomN_push = function (n) {\n // Use an inverted heap\n var bottomHeap = new Heap(this.compare);\n bottomHeap.limit = n;\n bottomHeap.heapArray = this.heapArray.slice(-n);\n bottomHeap.init();\n var startAt = this.heapArray.length - 1 - n;\n var parentStartAt = Heap.getParentIndexOf(startAt);\n var indices = [];\n for (var i = startAt; i > parentStartAt; --i) {\n indices.push(i);\n }\n var arr = this.heapArray;\n while (indices.length) {\n var i = indices.shift();\n if (this.compare(arr[i], bottomHeap.peek()) > 0) {\n bottomHeap.replace(arr[i]);\n if (i % 2) {\n indices.push(Heap.getParentIndexOf(i));\n }\n }\n }\n return bottomHeap.toArray();\n };\n /**\n * Move a node to a new index, switching places\n * @param {Number} j First node index\n * @param {Number} k Another node index\n */\n Heap.prototype._moveNode = function (j, k) {\n var temp = this.heapArray[j];\n this.heapArray[j] = this.heapArray[k];\n this.heapArray[k] = temp;\n };\n /**\n * Move a node down the tree (to the leaves) to find a place where the heap is sorted.\n * @param {Number} i Index of the node\n */\n Heap.prototype._sortNodeDown = function (i) {\n var length = this.heapArray.length;\n var originalIndex = i;\n var value = this.heapArray[i];\n var left = 2 * i + 1;\n while (left < length) {\n var right = left + 1;\n var best = right >= length || this.compare(this.heapArray[left], this.heapArray[right]) < 0 ? left : right;\n if (this.compare(this.heapArray[best], value) < 0) {\n this.heapArray[i] = this.heapArray[best];\n i = best;\n left = 2 * i + 1;\n }\n else\n break;\n }\n if (i !== originalIndex) {\n this.heapArray[i] = value;\n }\n };\n /**\n * Move a node up the tree (to the root) to find a place where the heap is sorted.\n * @param {Number} i Index of the node\n */\n Heap.prototype._sortNodeUp = function (i) {\n var value = this.heapArray[i];\n var originalIndex = i;\n while (i > 0) {\n var pi = Heap.getParentIndexOf(i);\n if (this.compare(value, this.heapArray[pi]) < 0) {\n this.heapArray[i] = this.heapArray[pi];\n i = pi;\n }\n else\n break;\n }\n if (i !== originalIndex) {\n this.heapArray[i] = value;\n }\n };\n /**\n * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n * Implementation: push.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n Heap.prototype._topN_push = function (n) {\n // Use an inverted heap\n var topHeap = new Heap(this._invertedCompare);\n topHeap.limit = n;\n var indices = [0];\n var arr = this.heapArray;\n while (indices.length) {\n var i = indices.shift();\n if (i < arr.length) {\n if (topHeap.length < n) {\n topHeap.push(arr[i]);\n indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i)), false));\n }\n else if (this.compare(arr[i], topHeap.peek()) < 0) {\n topHeap.replace(arr[i]);\n indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i)), false));\n }\n }\n }\n return topHeap.toArray();\n };\n /**\n * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n * Implementation: init + push.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n Heap.prototype._topN_fill = function (n) {\n // Use an inverted heap\n var heapArray = this.heapArray;\n var topHeap = new Heap(this._invertedCompare);\n topHeap.limit = n;\n topHeap.heapArray = heapArray.slice(0, n);\n topHeap.init();\n var branch = Heap.getParentIndexOf(n - 1) + 1;\n var indices = [];\n for (var i = branch; i < n; ++i) {\n indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i).filter(function (l) { return l < heapArray.length; })), false));\n }\n if ((n - 1) % 2) {\n indices.push(n);\n }\n while (indices.length) {\n var i = indices.shift();\n if (i < heapArray.length) {\n if (this.compare(heapArray[i], topHeap.peek()) < 0) {\n topHeap.replace(heapArray[i]);\n indices.push.apply(indices, __spreadArray([], __read(Heap.getChildrenIndexOf(i)), false));\n }\n }\n }\n return topHeap.toArray();\n };\n /**\n * Return the top (highest value) N elements of the heap, without corner cases, unsorted\n * Implementation: heap.\n *\n * @param {Number} n Number of elements.\n * @return {Array} Array of length <= N.\n */\n Heap.prototype._topN_heap = function (n) {\n var topHeap = this.clone();\n var result = [];\n for (var i = 0; i < n; ++i) {\n result.push(topHeap.pop());\n }\n return result;\n };\n /**\n * Return index of the top element\n * @param list\n */\n Heap.prototype._topIdxOf = function (list) {\n if (!list.length) {\n return -1;\n }\n var idx = 0;\n var top = list[idx];\n for (var i = 1; i < list.length; ++i) {\n var comp = this.compare(list[i], top);\n if (comp < 0) {\n idx = i;\n top = list[i];\n }\n }\n return idx;\n };\n /**\n * Return the top element\n * @param list\n */\n Heap.prototype._topOf = function () {\n var list = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n list[_i] = arguments[_i];\n }\n var heap = new Heap(this.compare);\n heap.init(list);\n return heap.peek();\n };\n return Heap;\n}());\n\nexport { Heap, HeapAsync, Heap as default, toInt };\n","import { Heap } from 'heap-js'\n\nfunction triangleArea (a, b, c) {\n return Math.abs(\n (a[0] * (b[1] - c[1]) +\n b[0] * (c[1] - a[1]) +\n c[0] * (a[1] - b[1])) / 2\n )\n}\n\nexport function simplify (coords, { tolerance = 0, getWeight = () => 1 } = {}) {\n if (coords.length <= 2) return coords\n\n const pts = coords.map((coord, i) => ({ coord, i, area: Infinity, removed: false, prev: null, next: null }))\n for (let i = 0; i < pts.length; i++) {\n if (i > 0) pts[i].prev = pts[i - 1]\n if (i < pts.length - 1) pts[i].next = pts[i + 1]\n }\n\n const computeArea = (node) => {\n if (!node.prev || !node.next) return Infinity\n const area = triangleArea(node.prev.coord, node.coord, node.next.coord)\n return area * getWeight(node.coord, node.i)\n }\n\n const heap = new Heap((a, b) => a.area - b.area)\n for (let i = 1; i < pts.length - 1; i++) {\n pts[i].area = computeArea(pts[i])\n pts[i]._currentArea = pts[i].area\n heap.push(pts[i])\n }\n\n let maxArea = 0\n\n while (heap.size() > 0) {\n const node = heap.pop()\n if (node.removed) continue\n if (node.area !== node._currentArea) continue\n if (node.area < maxArea) node.area = maxArea\n else maxArea = node.area\n\n if (node.area >= tolerance) break\n\n node.removed = true\n if (node.prev) node.prev.next = node.next\n if (node.next) node.next.prev = node.prev\n\n if (node.prev?.prev) {\n node.prev.area = computeArea(node.prev)\n node.prev._currentArea = node.prev.area\n heap.push(node.prev)\n }\n if (node.next?.next) {\n node.next.area = computeArea(node.next)\n node.next._currentArea = node.next.area\n heap.push(node.next)\n }\n }\n\n const result = []\n let cur = pts[0]\n while (cur) {\n if (!cur.removed) result.push(cur.coord)\n cur = cur.next\n }\n return result\n}\n","import { assert } from '@kalisio/common-core'\nimport { GEOMETRY_TYPES, isLikeGeometry } from '../is-like'\nimport { simplify } from './visvalingam-whyatt.js'\n\nexport function simplifyGeometry (geometry, options) {\n assert.all([\n { value: geometry, validator: isLikeGeometry, message: 'geometry must be a GeoJson geometry' }\n ])\n switch (geometry.type) {\n case GEOMETRY_TYPES.LINESTRING:\n geometry.coordinates = simplify(geometry.coordinates, options)\n break\n case GEOMETRY_TYPES.POLYGON:\n case GEOMETRY_TYPES.MULTI_LINESTRING:\n geometry.coordinates = geometry.coordinates.map(ring => simplify(ring, options))\n break\n case GEOMETRY_TYPES.MULTI_POLYGON:\n geometry.coordinates = geometry.coordinates.map(poly => poly.map(ring => simplify(ring, options)))\n break\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION:\n geometry.geometries.forEach(g => simplifyGeometry(g, options))\n break\n }\n return geometry\n}\n","import { getLogger } from '@logtape/logtape'\nimport { assert, is } from '@kalisio/common-core'\nimport { FEATURE_TYPES, GEOMETRY_TYPES, isLikeGeoJson } from '../is-like'\nimport { simplifyGeometry } from './geometry.js'\n\nconst logger = getLogger(['common-ekosystem', 'simplify', 'geojson'])\n\nfunction simplifyFeature (feature, options) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) simplifyGeometry(feature.geometry, options)\n } else if (feature.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n for (const feat of feature.features) simplifyFeature(feat, options)\n } else {\n logger.warn('Unknown feature type \"{type}\", skipping.', { type: feature.type })\n }\n return feature\n}\n\nexport function simplifyGeoJson (geoJson, options) {\n assert.all([\n { value: geoJson, validator: isLikeGeoJson, message: 'geoJson must be a GeoJson object' }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) return simplifyGeometry(geoJson, options)\n return simplifyFeature(geoJson, options)\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { COORDINATE_TRUNCATION_FACTORS } from '../../foundation'\nimport { isLikeBBox } from '../is-like'\n\nexport function truncateBBox (bbox, precision = 7) {\n assert.all([\n { value: bbox, validator: isLikeBBox, message: 'bbox must be bounding box' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n for (let i = 0; i < bbox.length; i++) {\n bbox[i] = Math.round(bbox[i] * factor) / factor\n }\n return bbox\n}\n","// index.ts\nvar earthRadius = 63710088e-1;\nvar factors = {\n centimeters: earthRadius * 100,\n centimetres: earthRadius * 100,\n degrees: 360 / (2 * Math.PI),\n feet: earthRadius * 3.28084,\n inches: earthRadius * 39.37,\n kilometers: earthRadius / 1e3,\n kilometres: earthRadius / 1e3,\n meters: earthRadius,\n metres: earthRadius,\n miles: earthRadius / 1609.344,\n millimeters: earthRadius * 1e3,\n millimetres: earthRadius * 1e3,\n nauticalmiles: earthRadius / 1852,\n radians: 1,\n yards: earthRadius * 1.0936\n};\nvar areaFactors = {\n acres: 247105e-9,\n centimeters: 1e4,\n centimetres: 1e4,\n feet: 10.763910417,\n hectares: 1e-4,\n inches: 1550.003100006,\n kilometers: 1e-6,\n kilometres: 1e-6,\n meters: 1,\n metres: 1,\n miles: 386e-9,\n nauticalmiles: 29155334959812285e-23,\n millimeters: 1e6,\n millimetres: 1e6,\n yards: 1.195990046\n};\nfunction feature(geom, properties, options = {}) {\n const feat = { type: \"Feature\" };\n if (options.id === 0 || options.id) {\n feat.id = options.id;\n }\n if (options.bbox) {\n feat.bbox = options.bbox;\n }\n feat.properties = properties || {};\n feat.geometry = geom;\n return feat;\n}\nfunction geometry(type, coordinates, _options = {}) {\n switch (type) {\n case \"Point\":\n return point(coordinates).geometry;\n case \"LineString\":\n return lineString(coordinates).geometry;\n case \"Polygon\":\n return polygon(coordinates).geometry;\n case \"MultiPoint\":\n return multiPoint(coordinates).geometry;\n case \"MultiLineString\":\n return multiLineString(coordinates).geometry;\n case \"MultiPolygon\":\n return multiPolygon(coordinates).geometry;\n default:\n throw new Error(type + \" is invalid\");\n }\n}\nfunction point(coordinates, properties, options = {}) {\n if (!coordinates) {\n throw new Error(\"coordinates is required\");\n }\n if (!Array.isArray(coordinates)) {\n throw new Error(\"coordinates must be an Array\");\n }\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be at least 2 numbers long\");\n }\n if (!isNumber(coordinates[0]) || !isNumber(coordinates[1])) {\n throw new Error(\"coordinates must contain numbers\");\n }\n const geom = {\n type: \"Point\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction points(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return point(coords, properties);\n }),\n options\n );\n}\nfunction polygon(coordinates, properties, options = {}) {\n for (const ring of coordinates) {\n if (ring.length < 4) {\n throw new Error(\n \"Each LinearRing of a Polygon must have 4 or more Positions.\"\n );\n }\n if (ring[ring.length - 1].length !== ring[0].length) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n for (let j = 0; j < ring[ring.length - 1].length; j++) {\n if (ring[ring.length - 1][j] !== ring[0][j]) {\n throw new Error(\"First and last Position are not equivalent.\");\n }\n }\n }\n const geom = {\n type: \"Polygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction polygons(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return polygon(coords, properties);\n }),\n options\n );\n}\nfunction lineString(coordinates, properties, options = {}) {\n if (coordinates.length < 2) {\n throw new Error(\"coordinates must be an array of two or more positions\");\n }\n const geom = {\n type: \"LineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction lineStrings(coordinates, properties, options = {}) {\n return featureCollection(\n coordinates.map((coords) => {\n return lineString(coords, properties);\n }),\n options\n );\n}\nfunction featureCollection(features, options = {}) {\n const fc = { type: \"FeatureCollection\" };\n if (options.id) {\n fc.id = options.id;\n }\n if (options.bbox) {\n fc.bbox = options.bbox;\n }\n fc.features = features;\n return fc;\n}\nfunction multiLineString(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiLineString\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPoint(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPoint\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction multiPolygon(coordinates, properties, options = {}) {\n const geom = {\n type: \"MultiPolygon\",\n coordinates\n };\n return feature(geom, properties, options);\n}\nfunction geometryCollection(geometries, properties, options = {}) {\n const geom = {\n type: \"GeometryCollection\",\n geometries\n };\n return feature(geom, properties, options);\n}\nfunction round(num, precision = 0) {\n if (precision && !(precision >= 0)) {\n throw new Error(\"precision must be a positive number\");\n }\n const multiplier = Math.pow(10, precision || 0);\n return Math.round(num * multiplier) / multiplier;\n}\nfunction radiansToLength(radians, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return radians * factor;\n}\nfunction lengthToRadians(distance, units = \"kilometers\") {\n const factor = factors[units];\n if (!factor) {\n throw new Error(units + \" units is invalid\");\n }\n return distance / factor;\n}\nfunction lengthToDegrees(distance, units) {\n return radiansToDegrees(lengthToRadians(distance, units));\n}\nfunction bearingToAzimuth(bearing) {\n let angle = bearing % 360;\n if (angle < 0) {\n angle += 360;\n }\n return angle;\n}\nfunction azimuthToBearing(angle) {\n angle = angle % 360;\n if (angle > 180) {\n return angle - 360;\n } else if (angle < -180) {\n return angle + 360;\n }\n return angle;\n}\nfunction radiansToDegrees(radians) {\n const normalisedRadians = radians % (2 * Math.PI);\n return normalisedRadians * 180 / Math.PI;\n}\nfunction degreesToRadians(degrees) {\n const normalisedDegrees = degrees % 360;\n return normalisedDegrees * Math.PI / 180;\n}\nfunction convertLength(length, originalUnit = \"kilometers\", finalUnit = \"kilometers\") {\n if (!(length >= 0)) {\n throw new Error(\"length must be a positive number\");\n }\n return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);\n}\nfunction convertArea(area, originalUnit = \"meters\", finalUnit = \"kilometers\") {\n if (!(area >= 0)) {\n throw new Error(\"area must be a positive number\");\n }\n const startFactor = areaFactors[originalUnit];\n if (!startFactor) {\n throw new Error(\"invalid original units\");\n }\n const finalFactor = areaFactors[finalUnit];\n if (!finalFactor) {\n throw new Error(\"invalid final units\");\n }\n return area / startFactor * finalFactor;\n}\nfunction isNumber(num) {\n return !isNaN(num) && num !== null && !Array.isArray(num);\n}\nfunction isObject(input) {\n return input !== null && typeof input === \"object\" && !Array.isArray(input);\n}\nfunction validateBBox(bbox) {\n if (!bbox) {\n throw new Error(\"bbox is required\");\n }\n if (!Array.isArray(bbox)) {\n throw new Error(\"bbox must be an Array\");\n }\n if (bbox.length !== 4 && bbox.length !== 6) {\n throw new Error(\"bbox must be an Array of 4 or 6 numbers\");\n }\n bbox.forEach((num) => {\n if (!isNumber(num)) {\n throw new Error(\"bbox must only contain numbers\");\n }\n });\n}\nfunction validateId(id) {\n if (!id) {\n throw new Error(\"id is required\");\n }\n if ([\"string\", \"number\"].indexOf(typeof id) === -1) {\n throw new Error(\"id must be a number or a string\");\n }\n}\nexport {\n areaFactors,\n azimuthToBearing,\n bearingToAzimuth,\n convertArea,\n convertLength,\n degreesToRadians,\n earthRadius,\n factors,\n feature,\n featureCollection,\n geometry,\n geometryCollection,\n isNumber,\n isObject,\n lengthToDegrees,\n lengthToRadians,\n lineString,\n lineStrings,\n multiLineString,\n multiPoint,\n multiPolygon,\n point,\n points,\n polygon,\n polygons,\n radiansToDegrees,\n radiansToLength,\n round,\n validateBBox,\n validateId\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { feature, point, lineString, isObject } from \"@turf/helpers\";\nfunction coordEach(geojson, callback, excludeWrapCoord) {\n if (geojson === null) return;\n var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === \"FeatureCollection\", isFeature = type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (var featureIndex = 0; featureIndex < stop; featureIndex++) {\n geometryMaybeCollection = isFeatureCollection ? (\n // @ts-expect-error: Known type conflict\n geojson.features[featureIndex].geometry\n ) : isFeature ? (\n // @ts-expect-error: Known type conflict\n geojson.geometry\n ) : geojson;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (var geomIndex = 0; geomIndex < stopG; geomIndex++) {\n var multiFeatureIndex = 0;\n var geometryIndex = 0;\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection;\n if (geometry === null) continue;\n coords = geometry.coordinates;\n var geomType = geometry.type;\n wrapShrink = excludeWrapCoord && (geomType === \"Polygon\" || geomType === \"MultiPolygon\") ? 1 : 0;\n switch (geomType) {\n case null:\n break;\n case \"Point\":\n if (\n // @ts-expect-error: Known type conflict\n callback(\n coords,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n multiFeatureIndex++;\n break;\n case \"LineString\":\n case \"MultiPoint\":\n for (j = 0; j < coords.length; j++) {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n coords[j],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n if (geomType === \"MultiPoint\") multiFeatureIndex++;\n }\n if (geomType === \"LineString\") multiFeatureIndex++;\n break;\n case \"Polygon\":\n case \"MultiLineString\":\n for (j = 0; j < coords.length; j++) {\n for (k = 0; k < coords[j].length - wrapShrink; k++) {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n coords[j][k],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n if (geomType === \"MultiLineString\") multiFeatureIndex++;\n if (geomType === \"Polygon\") geometryIndex++;\n }\n if (geomType === \"Polygon\") multiFeatureIndex++;\n break;\n case \"MultiPolygon\":\n for (j = 0; j < coords.length; j++) {\n geometryIndex = 0;\n for (k = 0; k < coords[j].length; k++) {\n for (l = 0; l < coords[j][k].length - wrapShrink; l++) {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n coords[j][k][l],\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n coordIndex++;\n }\n geometryIndex++;\n }\n multiFeatureIndex++;\n }\n break;\n case \"GeometryCollection\":\n for (j = 0; j < geometry.geometries.length; j++)\n if (\n // @ts-expect-error: Known type conflict\n coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false\n )\n return false;\n break;\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n }\n}\nfunction coordReduce(geojson, callback, initialValue, excludeWrapCoord) {\n var previousValue = initialValue;\n coordEach(\n geojson,\n function(currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) {\n if (coordIndex === 0 && initialValue === void 0)\n previousValue = currentCoord;\n else\n previousValue = callback(\n // @ts-expect-error: Known type conflict\n previousValue,\n currentCoord,\n coordIndex,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n },\n excludeWrapCoord\n );\n return previousValue;\n}\nfunction propEach(geojson, callback) {\n var i;\n switch (geojson.type) {\n case \"FeatureCollection\":\n for (i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i].properties, i) === false) break;\n }\n break;\n case \"Feature\":\n callback(geojson.properties, 0);\n break;\n }\n}\nfunction propReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n propEach(geojson, function(currentProperties, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentProperties;\n else\n previousValue = callback(previousValue, currentProperties, featureIndex);\n });\n return previousValue;\n}\nfunction featureEach(geojson, callback) {\n if (geojson.type === \"Feature\") {\n callback(geojson, 0);\n } else if (geojson.type === \"FeatureCollection\") {\n for (var i = 0; i < geojson.features.length; i++) {\n if (callback(geojson.features[i], i) === false) break;\n }\n }\n}\nfunction featureReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n featureEach(geojson, function(currentFeature, featureIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else previousValue = callback(previousValue, currentFeature, featureIndex);\n });\n return previousValue;\n}\nfunction coordAll(geojson) {\n var coords = [];\n coordEach(geojson, function(coord) {\n coords.push(coord);\n });\n return coords;\n}\nfunction geomEach(geojson, callback) {\n var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === \"FeatureCollection\", isFeature = geojson.type === \"Feature\", stop = isFeatureCollection ? geojson.features.length : 1;\n for (i = 0; i < stop; i++) {\n geometryMaybeCollection = isFeatureCollection ? (\n // @ts-expect-error: Known type conflict\n geojson.features[i].geometry\n ) : isFeature ? (\n // @ts-expect-error: Known type conflict\n geojson.geometry\n ) : geojson;\n featureProperties = isFeatureCollection ? (\n // @ts-expect-error: Known type conflict\n geojson.features[i].properties\n ) : isFeature ? (\n // @ts-expect-error: Known type conflict\n geojson.properties\n ) : {};\n featureBBox = isFeatureCollection ? (\n // @ts-expect-error: Known type conflict\n geojson.features[i].bbox\n ) : isFeature ? (\n // @ts-expect-error: Known type conflict\n geojson.bbox\n ) : void 0;\n featureId = isFeatureCollection ? (\n // @ts-expect-error: Known type conflict\n geojson.features[i].id\n ) : isFeature ? (\n // @ts-expect-error: Known type conflict\n geojson.id\n ) : void 0;\n isGeometryCollection = geometryMaybeCollection ? geometryMaybeCollection.type === \"GeometryCollection\" : false;\n stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1;\n for (g = 0; g < stopG; g++) {\n geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection;\n if (geometry === null) {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n // @ts-expect-error: Known type conflict\n null,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n continue;\n }\n switch (geometry.type) {\n case \"Point\":\n case \"LineString\":\n case \"MultiPoint\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\": {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n geometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n break;\n }\n case \"GeometryCollection\": {\n for (j = 0; j < geometry.geometries.length; j++) {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n geometry.geometries[j],\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n ) === false\n )\n return false;\n }\n break;\n }\n default:\n throw new Error(\"Unknown Geometry Type\");\n }\n }\n featureIndex++;\n }\n}\nfunction geomReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n geomEach(\n geojson,\n function(currentGeometry, featureIndex, featureProperties, featureBBox, featureId) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentGeometry;\n else\n previousValue = callback(\n // @ts-expect-error: Known type conflict\n previousValue,\n currentGeometry,\n featureIndex,\n featureProperties,\n featureBBox,\n featureId\n );\n }\n );\n return previousValue;\n}\nfunction flattenEach(geojson, callback) {\n geomEach(geojson, function(geometry, featureIndex, properties, bbox, id) {\n var type = geometry === null ? null : geometry.type;\n switch (type) {\n case null:\n case \"Point\":\n case \"LineString\":\n case \"Polygon\":\n if (\n // @ts-expect-error: Known type conflict\n callback(\n feature(geometry, properties, { bbox, id }),\n featureIndex,\n 0\n ) === false\n )\n return false;\n return;\n }\n var geomType;\n switch (type) {\n case \"MultiPoint\":\n geomType = \"Point\";\n break;\n case \"MultiLineString\":\n geomType = \"LineString\";\n break;\n case \"MultiPolygon\":\n geomType = \"Polygon\";\n break;\n }\n for (\n var multiFeatureIndex = 0;\n // @ts-expect-error: Known type conflict\n multiFeatureIndex < geometry.coordinates.length;\n multiFeatureIndex++\n ) {\n var coordinate = geometry.coordinates[multiFeatureIndex];\n var geom = {\n type: geomType,\n coordinates: coordinate\n };\n if (\n // @ts-expect-error: Known type conflict\n callback(feature(geom, properties), featureIndex, multiFeatureIndex) === false\n )\n return false;\n }\n });\n}\nfunction flattenReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n flattenEach(\n geojson,\n function(currentFeature, featureIndex, multiFeatureIndex) {\n if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === void 0)\n previousValue = currentFeature;\n else\n previousValue = callback(\n // @ts-expect-error: Known type conflict\n previousValue,\n currentFeature,\n featureIndex,\n multiFeatureIndex\n );\n }\n );\n return previousValue;\n}\nfunction segmentEach(geojson, callback) {\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n var segmentIndex = 0;\n if (!feature2.geometry) return;\n var type = feature2.geometry.type;\n if (type === \"Point\" || type === \"MultiPoint\") return;\n var previousCoords;\n var previousFeatureIndex = 0;\n var previousMultiIndex = 0;\n var prevGeomIndex = 0;\n if (\n // @ts-expect-error: Known type conflict\n coordEach(\n feature2,\n function(currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) {\n if (\n // @ts-expect-error: Known type conflict\n previousCoords === void 0 || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex\n ) {\n previousCoords = currentCoord;\n previousFeatureIndex = featureIndex;\n previousMultiIndex = multiPartIndexCoord;\n prevGeomIndex = geometryIndex;\n segmentIndex = 0;\n return;\n }\n var currentSegment = lineString(\n // @ts-expect-error: Known type conflict\n [previousCoords, currentCoord],\n feature2.properties\n );\n if (\n // @ts-expect-error: Known type conflict\n callback(\n // @ts-expect-error: Known type conflict\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n ) === false\n )\n return false;\n segmentIndex++;\n previousCoords = currentCoord;\n }\n ) === false\n )\n return false;\n });\n}\nfunction segmentReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n var started = false;\n segmentEach(\n geojson,\n function(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) {\n if (started === false && initialValue === void 0)\n previousValue = currentSegment;\n else\n previousValue = callback(\n previousValue,\n // @ts-expect-error: Known type conflict\n currentSegment,\n featureIndex,\n multiFeatureIndex,\n geometryIndex,\n segmentIndex\n );\n started = true;\n }\n );\n return previousValue;\n}\nfunction lineEach(geojson, callback) {\n if (!geojson) throw new Error(\"geojson is required\");\n flattenEach(geojson, function(feature2, featureIndex, multiFeatureIndex) {\n if (feature2.geometry === null) return;\n var type = feature2.geometry.type;\n var coords = feature2.geometry.coordinates;\n switch (type) {\n case \"LineString\":\n if (callback(feature2, featureIndex, multiFeatureIndex, 0, 0) === false)\n return false;\n break;\n case \"Polygon\":\n for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) {\n if (\n // @ts-expect-error: Known type conflict\n callback(\n // @ts-expect-error: Known type conflict\n lineString(coords[geometryIndex], feature2.properties),\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n ) === false\n )\n return false;\n }\n break;\n }\n });\n}\nfunction lineReduce(geojson, callback, initialValue) {\n var previousValue = initialValue;\n lineEach(\n geojson,\n function(currentLine, featureIndex, multiFeatureIndex, geometryIndex) {\n if (featureIndex === 0 && initialValue === void 0)\n previousValue = currentLine;\n else\n previousValue = callback(\n previousValue,\n currentLine,\n featureIndex,\n multiFeatureIndex,\n geometryIndex\n );\n }\n );\n return previousValue;\n}\nfunction findSegment(geojson, options) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var segmentIndex = options.segmentIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1;\n return lineString(\n // @ts-expect-error: Known type conflict\n [coords[segmentIndex], coords[segmentIndex + 1]],\n properties,\n options\n );\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[geometryIndex].length + segmentIndex - 1;\n return lineString(\n [\n // @ts-expect-error: Known type conflict\n coords[geometryIndex][segmentIndex],\n // @ts-expect-error: Known type conflict\n coords[geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (segmentIndex < 0)\n segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1;\n return lineString(\n [\n // @ts-expect-error: Known type conflict\n coords[multiFeatureIndex][segmentIndex],\n // @ts-expect-error: Known type conflict\n coords[multiFeatureIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (segmentIndex < 0)\n segmentIndex = // @ts-expect-error: Known type conflict\n coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1;\n return lineString(\n [\n // @ts-expect-error: Known type conflict\n coords[multiFeatureIndex][geometryIndex][segmentIndex],\n // @ts-expect-error: Known type conflict\n coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]\n ],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nfunction findPoint(geojson, options) {\n options = options || {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var featureIndex = options.featureIndex || 0;\n var multiFeatureIndex = options.multiFeatureIndex || 0;\n var geometryIndex = options.geometryIndex || 0;\n var coordIndex = options.coordIndex || 0;\n var properties = options.properties;\n var geometry;\n switch (geojson.type) {\n case \"FeatureCollection\":\n if (featureIndex < 0)\n featureIndex = geojson.features.length + featureIndex;\n properties = properties || geojson.features[featureIndex].properties;\n geometry = geojson.features[featureIndex].geometry;\n break;\n case \"Feature\":\n properties = properties || geojson.properties;\n geometry = geojson.geometry;\n break;\n case \"Point\":\n case \"MultiPoint\":\n return null;\n case \"LineString\":\n case \"Polygon\":\n case \"MultiLineString\":\n case \"MultiPolygon\":\n geometry = geojson;\n break;\n default:\n throw new Error(\"geojson is invalid\");\n }\n if (geometry === null) return null;\n var coords = geometry.coordinates;\n switch (geometry.type) {\n case \"Point\":\n return point(coords, properties, options);\n case \"MultiPoint\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n return point(coords[multiFeatureIndex], properties, options);\n case \"LineString\":\n if (coordIndex < 0) coordIndex = coords.length + coordIndex;\n return point(coords[coordIndex], properties, options);\n case \"Polygon\":\n if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[geometryIndex].length + coordIndex;\n return point(coords[geometryIndex][coordIndex], properties, options);\n case \"MultiLineString\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex].length + coordIndex;\n return point(coords[multiFeatureIndex][coordIndex], properties, options);\n case \"MultiPolygon\":\n if (multiFeatureIndex < 0)\n multiFeatureIndex = coords.length + multiFeatureIndex;\n if (geometryIndex < 0)\n geometryIndex = coords[multiFeatureIndex].length + geometryIndex;\n if (coordIndex < 0)\n coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex;\n return point(\n coords[multiFeatureIndex][geometryIndex][coordIndex],\n properties,\n options\n );\n }\n throw new Error(\"geojson is invalid\");\n}\nexport {\n coordAll,\n coordEach,\n coordReduce,\n featureEach,\n featureReduce,\n findPoint,\n findSegment,\n flattenEach,\n flattenReduce,\n geomEach,\n geomReduce,\n lineEach,\n lineReduce,\n propEach,\n propReduce,\n segmentEach,\n segmentReduce\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { coordEach } from \"@turf/meta\";\nimport { isObject } from \"@turf/helpers\";\nfunction truncate(geojson, options) {\n options = options != null ? options : {};\n if (!isObject(options)) throw new Error(\"options is invalid\");\n var precision = options.precision;\n var coordinates = options.coordinates;\n var mutate = options.mutate;\n precision = precision === void 0 || precision === null || isNaN(precision) ? 6 : precision;\n coordinates = coordinates === void 0 || coordinates === null || isNaN(coordinates) ? 3 : coordinates;\n if (!geojson) throw new Error(\"<geojson> is required\");\n if (typeof precision !== \"number\")\n throw new Error(\"<precision> must be a number\");\n if (typeof coordinates !== \"number\")\n throw new Error(\"<coordinates> must be a number\");\n if (mutate === false || mutate === void 0)\n geojson = JSON.parse(JSON.stringify(geojson));\n var factor = Math.pow(10, precision);\n coordEach(geojson, function(coords) {\n truncateCoords(coords, factor, coordinates);\n });\n return geojson;\n}\nfunction truncateCoords(coords, factor, coordinates) {\n if (coords.length > coordinates) coords.splice(coordinates, coords.length);\n for (var i = 0; i < coords.length; i++) {\n coords[i] = Math.round(coords[i] * factor) / factor;\n }\n return coords;\n}\nvar index_default = truncate;\nexport {\n index_default as default,\n truncate\n};\n//# sourceMappingURL=index.js.map","import { assert, is } from '@kalisio/common-core'\nimport truncate from '@turf/truncate'\nimport { isLikeGeometry } from '../is-like'\nimport { truncateBBox } from './bbox.js'\n\nexport function truncateGeometry (geometry, precision = 7) {\n assert.all([\n { value: geometry, validator: isLikeGeometry, message: 'geometry must be a GeoJson geometry' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const result = truncate(geometry, { precision, mutate: true })\n if (result.bbox) truncateBBox(result.bbox, precision)\n return result\n}\n","import { getLogger } from '@logtape/logtape'\nimport { assert, is } from '@kalisio/common-core'\nimport { FEATURE_TYPES, GEOMETRY_TYPES, isLikeGeoJson } from '../is-like'\nimport { truncateBBox } from './bbox.js'\nimport { truncateGeometry } from './geometry.js'\n\nconst logger = getLogger(['common-ekosystem', 'truncate', 'geojson'])\n\nfunction truncateFeature (feature, precision) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) truncateGeometry(feature.geometry, precision)\n } else if (feature.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n for (const feat of feature.features) truncateFeature(feat, precision)\n } else {\n logger.warn('Unknown feature type \"{type}\", skipping.', { type: feature.type })\n }\n if (feature.bbox) truncateBBox(feature.bbox, precision)\n return feature\n}\n\nexport function truncateGeoJson (geoJson, precision = 7) {\n assert.all([\n { value: geoJson, validator: isLikeGeoJson, message: 'geoJson must be a valid GeoJson' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) return truncateGeometry(geoJson, precision)\n return truncateFeature(geoJson, precision)\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { COORDINATE_TRUNCATION_FACTORS } from '../../foundation'\nimport { isLikePosition } from '../is-like'\n\nexport function truncatePosition (position, precision = 7) {\n assert.all([\n { value: position, validator: isLikePosition, message: 'position must be a position' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n for (let i = 0; i < position.length; i++) {\n position[i] = Math.round(position[i] * factor) / factor\n }\n return position\n}\n","import { is } from '@kalisio/common-core'\nimport { getCoordinatePrecision } from '../../foundation'\n\nexport function validatePosition (coordinates) {\n if (!is.arrayOfLengthBetween(coordinates, 2, 3)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: must be an array of 2 or 3 coordinates' }],\n warnings: []\n }\n }\n if (!is.inRange(coordinates[0], -180, 180)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: longitude must be in the range -180 to 180' }],\n warnings: []\n }\n }\n if (!is.inRange(coordinates[1], -90, 90)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: latitude must be in the range -90 to 90' }],\n warnings: []\n }\n }\n if (coordinates.length === 3 && !is.number(coordinates[2])) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: altitude must be a number' }],\n warnings: []\n }\n }\n const response = { valid: true, errors: [], warnings: [] }\n const lonPrecision = getCoordinatePrecision(coordinates[0])\n if (lonPrecision > 6) {\n response.warnings.push({ message: `longitude precision is high (${lonPrecision} decimals, max recommended: 6)` })\n }\n const latPrecision = getCoordinatePrecision(coordinates[1])\n if (latPrecision > 6) {\n response.warnings.push({ message: `latitude precision is high (${latPrecision} decimals, max recommended: 6)` })\n }\n return response\n}\n","import { is } from '@kalisio/common-core'\nimport { validatePosition } from './position.js'\n\nexport function validateBBox (bbox) {\n // Must be array of 4 (2D) or 6 (3D) numbers\n if (!is.arrayOfLength(bbox, 4) && !is.arrayOfLength(bbox, 6)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid bbox: must be an array of 4 (2D) or 6 (3D) numbers' }],\n warnings: []\n }\n }\n const is2D = bbox.length === 4\n const min = is2D ? [bbox[0], bbox[1]] : [bbox[0], bbox[1], bbox[2]]\n const max = is2D ? [bbox[2], bbox[3]] : [bbox[3], bbox[4], bbox[5]]\n const minResult = validatePosition(min)\n if (!minResult.valid) {\n return {\n valid: false,\n errors: minResult.errors.map(e => ({ ...e, message: `Invalid bbox south-west: ${e.message}` })),\n warnings: []\n }\n }\n const maxResult = validatePosition(max)\n if (!maxResult.valid) {\n return {\n valid: false,\n errors: maxResult.errors.map(e => ({ ...e, message: `Invalid bbox north-east: ${e.message}` })),\n warnings: []\n }\n }\n const [west, south] = min\n const [east, north] = max\n if (south > north) {\n return {\n valid: false,\n errors: [{ message: `Invalid bbox: south (${south}) must be <= north (${north})` }],\n warnings: []\n }\n }\n const response = { valid: true, errors: [], warnings: [] }\n if (west > east) {\n response.warnings.push({ message: `bbox crosses the antimeridian (west: ${west} > east: ${east})` })\n }\n // Retrieve warnings from both points\n response.warnings.push(...minResult.warnings.map(w => ({ ...w, message: `south-west: ${w.message}` })))\n response.warnings.push(...maxResult.warnings.map(w => ({ ...w, message: `north-east: ${w.message}` })))\n return response\n}\n","import { is } from '@kalisio/common-core'\nimport { CRS_TYPES } from '../is-like'\n\nexport function validateCRS (crs) {\n if (!is.plainObject(crs)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid crs: must be an object' }],\n warnings: []\n }\n }\n switch (crs.type) {\n case CRS_TYPES.NAME: {\n if (!is.nonEmptyString(crs.properties?.name)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid crs: linked crs must have a non-empty properties.name string' }],\n warnings: []\n }\n }\n return { valid: true, errors: [], warnings: [] }\n }\n case CRS_TYPES.LINK: {\n if (!is.nonEmptyString(crs.properties?.href)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid crs: linked crs must have a non-empty properties.href string' }],\n warnings: []\n }\n }\n return { valid: true, errors: [], warnings: [] }\n }\n default:\n return {\n valid: false,\n errors: [{ message: `Invalid crs: unknown type: ${crs.type}` }],\n warnings: []\n }\n }\n}\n","// index.ts\nimport { isNumber } from \"@turf/helpers\";\nfunction getCoord(coord) {\n if (!coord) {\n throw new Error(\"coord is required\");\n }\n if (!Array.isArray(coord)) {\n if (coord.type === \"Feature\" && coord.geometry !== null && coord.geometry.type === \"Point\") {\n return [...coord.geometry.coordinates];\n }\n if (coord.type === \"Point\") {\n return [...coord.coordinates];\n }\n }\n if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {\n return [...coord];\n }\n throw new Error(\"coord must be GeoJSON Point or an Array of numbers\");\n}\nfunction getCoords(coords) {\n if (Array.isArray(coords)) {\n return coords;\n }\n if (coords.type === \"Feature\") {\n if (coords.geometry !== null) {\n return coords.geometry.coordinates;\n }\n } else {\n if (coords.coordinates) {\n return coords.coordinates;\n }\n }\n throw new Error(\n \"coords must be GeoJSON Feature, Geometry Object or an Array\"\n );\n}\nfunction containsNumber(coordinates) {\n if (coordinates.length > 1 && isNumber(coordinates[0]) && isNumber(coordinates[1])) {\n return true;\n }\n if (Array.isArray(coordinates[0]) && coordinates[0].length) {\n return containsNumber(coordinates[0]);\n }\n throw new Error(\"coordinates must only contain numbers\");\n}\nfunction geojsonType(value, type, name) {\n if (!type || !name) {\n throw new Error(\"type and name required\");\n }\n if (!value || value.type !== type) {\n throw new Error(\n \"Invalid input to \" + name + \": must be a \" + type + \", given \" + value.type\n );\n }\n}\nfunction featureOf(feature, type, name) {\n if (!feature) {\n throw new Error(\"No feature passed\");\n }\n if (!name) {\n throw new Error(\".featureOf() requires a name\");\n }\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\n \"Invalid input to \" + name + \", Feature with geometry required\"\n );\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\n \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n );\n }\n}\nfunction collectionOf(featureCollection, type, name) {\n if (!featureCollection) {\n throw new Error(\"No featureCollection passed\");\n }\n if (!name) {\n throw new Error(\".collectionOf() requires a name\");\n }\n if (!featureCollection || featureCollection.type !== \"FeatureCollection\") {\n throw new Error(\n \"Invalid input to \" + name + \", FeatureCollection required\"\n );\n }\n for (const feature of featureCollection.features) {\n if (!feature || feature.type !== \"Feature\" || !feature.geometry) {\n throw new Error(\n \"Invalid input to \" + name + \", Feature with geometry required\"\n );\n }\n if (!feature.geometry || feature.geometry.type !== type) {\n throw new Error(\n \"Invalid input to \" + name + \": must be a \" + type + \", given \" + feature.geometry.type\n );\n }\n }\n}\nfunction getGeom(geojson) {\n if (geojson.type === \"Feature\") {\n return geojson.geometry;\n }\n return geojson;\n}\nfunction getType(geojson, _name) {\n if (geojson.type === \"FeatureCollection\") {\n return \"FeatureCollection\";\n }\n if (geojson.type === \"GeometryCollection\") {\n return \"GeometryCollection\";\n }\n if (geojson.type === \"Feature\" && geojson.geometry !== null) {\n return geojson.geometry.type;\n }\n return geojson.type;\n}\nexport {\n collectionOf,\n containsNumber,\n featureOf,\n geojsonType,\n getCoord,\n getCoords,\n getGeom,\n getType\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { getCoords } from \"@turf/invariant\";\nfunction booleanClockwise(line) {\n const ring = getCoords(line);\n let sum = 0;\n let i = 1;\n let prev;\n let cur;\n while (i < ring.length) {\n prev = cur || ring[0];\n cur = ring[i];\n sum += (cur[0] - prev[0]) * (cur[1] + prev[1]);\n i++;\n }\n return sum > 0;\n}\nvar index_default = booleanClockwise;\nexport {\n booleanClockwise,\n index_default as default\n};\n//# sourceMappingURL=index.js.map","// index.ts\nimport { point } from \"@turf/helpers\";\nfunction kinks(featureIn) {\n let coordinates;\n let feature;\n const results = {\n type: \"FeatureCollection\",\n features: []\n };\n if (featureIn.type === \"Feature\") {\n feature = featureIn.geometry;\n } else {\n feature = featureIn;\n }\n if (feature.type === \"LineString\") {\n coordinates = [feature.coordinates];\n } else if (feature.type === \"MultiLineString\") {\n coordinates = feature.coordinates;\n } else if (feature.type === \"MultiPolygon\") {\n coordinates = [].concat(...feature.coordinates);\n } else if (feature.type === \"Polygon\") {\n coordinates = feature.coordinates;\n } else {\n throw new Error(\n \"Input must be a LineString, MultiLineString, Polygon, or MultiPolygon Feature or Geometry\"\n );\n }\n coordinates.forEach((line1) => {\n coordinates.forEach((line2) => {\n for (let i = 0; i < line1.length - 1; i++) {\n for (let k = i; k < line2.length - 1; k++) {\n if (line1 === line2) {\n if (Math.abs(i - k) === 1) {\n continue;\n }\n if (\n // segments are first and last segment of lineString\n i === 0 && k === line1.length - 2 && // lineString is closed\n line1[i][0] === line1[line1.length - 1][0] && line1[i][1] === line1[line1.length - 1][1]\n ) {\n continue;\n }\n }\n const intersection = lineIntersects(\n line1[i][0],\n line1[i][1],\n line1[i + 1][0],\n line1[i + 1][1],\n line2[k][0],\n line2[k][1],\n line2[k + 1][0],\n line2[k + 1][1]\n );\n if (intersection) {\n results.features.push(point([intersection[0], intersection[1]]));\n }\n }\n }\n });\n });\n return results;\n}\nfunction lineIntersects(line1StartX, line1StartY, line1EndX, line1EndY, line2StartX, line2StartY, line2EndX, line2EndY) {\n let denominator;\n let a;\n let b;\n let numerator1;\n let numerator2;\n const result = {\n x: null,\n y: null,\n onLine1: false,\n onLine2: false\n };\n denominator = (line2EndY - line2StartY) * (line1EndX - line1StartX) - (line2EndX - line2StartX) * (line1EndY - line1StartY);\n if (denominator === 0) {\n if (result.x !== null && result.y !== null) {\n return result;\n } else {\n return false;\n }\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b;\n numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b;\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n result.x = line1StartX + a * (line1EndX - line1StartX);\n result.y = line1StartY + a * (line1EndY - line1StartY);\n if (a >= 0 && a <= 1) {\n result.onLine1 = true;\n }\n if (b >= 0 && b <= 1) {\n result.onLine2 = true;\n }\n if (result.onLine1 && result.onLine2) {\n return [result.x, result.y];\n } else {\n return false;\n }\n}\nvar index_default = kinks;\nexport {\n index_default as default,\n kinks\n};\n//# sourceMappingURL=index.js.map","import { is } from '@kalisio/common-core'\nimport { validateBBox } from './bbox.js'\nimport { validateCRS } from './crs.js'\n\nexport function emptyStatistics () {\n return { Feature: 0, FeatureCollection: 0, geometries: {} }\n}\n\nfunction mergeStatistics (...results) {\n const statistics = emptyStatistics()\n for (const result of results) {\n const s = result.statistics\n if (!s) continue\n statistics.Feature += s.Feature ?? 0\n statistics.FeatureCollection += s.FeatureCollection ?? 0\n for (const [type, count] of Object.entries(s.geometries ?? {})) {\n statistics.geometries[type] = (statistics.geometries[type] ?? 0) + count\n }\n }\n return statistics\n}\n\nexport function validateArray (items, validator, path = '') {\n const response = {\n valid: true,\n errors: [],\n warnings: []\n }\n for (let i = 0; i < items.length; i++) {\n const itemPath = `${path}/${i}`\n const result = validator(items[i], itemPath, i)\n if (!result.valid) {\n response.valid = false\n response.errors = response.errors.concat(result.errors.map(e => ({ ...e, path: e.path || itemPath, index: i })))\n continue\n }\n if (!is.empty(result.warnings)) {\n response.warnings = response.warnings.concat(result.warnings.map(w => ({ ...w, path: w.path || itemPath, index: i })))\n }\n if (result.statistics) {\n response.statistics = mergeStatistics(response, result)\n }\n }\n return response\n}\n\nexport function validateOptionalCRS (obj, result) {\n if (!is.defined(obj.crs)) return result\n const crsResult = validateCRS(obj.crs)\n if (!crsResult.valid) {\n result.valid = false\n result.errors.push(...crsResult.errors.map(e => ({ ...e, path: '/crs' })))\n }\n result.warnings.push(...crsResult.warnings.map(w => ({ ...w, path: '/crs' })))\n return result\n}\n\nexport function validateOptionalBBox (obj, result, path = '') {\n if (!is.defined(obj.bbox)) return result\n const bboxResult = validateBBox(obj.bbox)\n if (!bboxResult.valid) {\n result.valid = false\n result.errors.push(...bboxResult.errors.map(e => ({ ...e, path: `${path}/bbox` })))\n }\n result.warnings.push(...bboxResult.warnings.map(w => ({ ...w, path: `${path}/bbox` })))\n return result\n}\n","import booleanClockwise from '@turf/boolean-clockwise'\nimport kinks from '@turf/kinks'\nimport { is } from '@kalisio/common-core'\nimport { GEOMETRY_TYPES } from '../is-like/index.js'\nimport { validatePosition } from './position.js'\nimport { validateOptionalBBox, validateArray } from './utils.js'\n\nfunction validateCoordinatesArray (coordinates, minimumLength = 0, path = '') {\n if (!is.arrayOfLengthAtLeast(coordinates, minimumLength)) {\n return {\n valid: false,\n errors: [{ message: `Invalid coordinates: must have at least ${minimumLength} positions`, path }],\n warnings: []\n }\n }\n return validateArray(coordinates, validatePosition, path)\n}\n\nfunction validateLineStringCoordinates (coordinates, path = '') {\n const result = validateCoordinatesArray(coordinates, 2, path)\n if (!result.valid) return result\n // Check for antimeridian crossings\n for (let i = 0; i < coordinates.length - 1; i++) {\n const lon1 = coordinates[i][0]\n const lon2 = coordinates[i + 1][0]\n if (Math.abs(lon2 - lon1) > 180) {\n result.warnings.push({\n message: `LineString crosses the antimeridian between positions ${i} and ${i + 1}, consider using MultiLineString`,\n path: `${path}/${i}`\n })\n }\n }\n return result\n}\n\nfunction validateMultiLineStringCoordinates (coordinates, path = '') {\n if (!is.nonEmptyArray(coordinates)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid MultiLineString: coordinates must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(coordinates, validateLineStringCoordinates, path)\n}\n\nfunction validateLinearRing (coordinates, expectedWindingOrder, path = '') {\n const result = validateCoordinatesArray(coordinates, 4, path)\n if (!result.valid) return result\n // check ring is closed\n const first = coordinates[0]\n const last = coordinates[coordinates.length - 1]\n if (first[0] !== last[0] || first[1] !== last[1]) {\n result.valid = false\n result.errors.push({ message: 'Invalid LinearRing: first and last position must be identical', path })\n return result\n }\n // check winding order\n const isClockwise = booleanClockwise(coordinates)\n const actualWindingOrder = isClockwise ? 'clockwise' : 'counter-clockwise'\n if (actualWindingOrder !== expectedWindingOrder) {\n result.warnings.push({ message: `Ring must be ${expectedWindingOrder} but is ${actualWindingOrder}`, path })\n }\n // check self-intersection\n const intersections = kinks({ type: 'Polygon', coordinates: [coordinates] })\n if (intersections.features.length > 0) {\n result.valid = false\n result.errors.push({ message: `Invalid LinearRing: ${intersections.features.length} self-intersection(s) detected`, path })\n }\n return result\n}\n\nfunction validatePolygonCoordinates (coordinates, path = '') {\n if (!is.nonEmptyArray(coordinates)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid Polygon: coordinates must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(coordinates, (ring, p, i) => validateLinearRing(ring, i === 0 ? 'counter-clockwise' : 'clockwise', p), path)\n}\n\nfunction validateMultiPolygonCoordinates (coordinates, path = '') {\n if (!is.nonEmptyArray(coordinates)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid MultiPolygon: coordinates must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(coordinates, (c, p) => validatePolygonCoordinates(c, p), path)\n}\n\nfunction validateGeometryCollectionGeometries (geometries, path = '') {\n if (!is.nonEmptyArray(geometries)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid geometries: geometries must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(geometries, (g, p) => validateGeometry(g, p), path)\n}\n\nexport function validateGeometry (geometry, path = '') {\n if (!is.nonEmptyObject(geometry)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid geometry: geometry must be a non empty object', path }],\n warnings: []\n }\n }\n const coordsPath = `${path}/coordinates`\n let result\n switch (geometry.type) {\n case GEOMETRY_TYPES.POINT: {\n const positionResult = validatePosition(geometry.coordinates, coordsPath)\n result = {\n valid: positionResult.valid,\n errors: positionResult.errors.map(e => ({ ...e, path: coordsPath })),\n warnings: positionResult.warnings.map(w => ({ ...w, path: coordsPath }))\n }\n break\n }\n case GEOMETRY_TYPES.MULTI_POINT: {\n result = validateCoordinatesArray(geometry.coordinates, 0, coordsPath)\n break\n }\n case GEOMETRY_TYPES.LINESTRING: {\n result = validateLineStringCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.MULTI_LINESTRING: {\n result = validateMultiLineStringCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.POLYGON: {\n result = validatePolygonCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.MULTI_POLYGON: {\n result = validateMultiPolygonCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION: {\n result = validateGeometryCollectionGeometries(geometry.geometries, `${path}/geometries`)\n break\n }\n default:\n return {\n valid: false,\n errors: [{ message: `Invalid geometry type: ${geometry.type}`, path }],\n warnings: []\n }\n }\n return validateOptionalBBox(geometry, result, path)\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { FEATURE_TYPES, GEOMETRY_TYPES } from '../is-like/index.js'\nimport { emptyStatistics, validateArray, validateOptionalBBox, validateOptionalCRS } from './utils.js'\nimport { validateGeometry } from './geometry.js'\n\nfunction validateFeature (feature, path = '') {\n if (!is.nonEmptyObject(feature)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid feature: must be a non empty object', path }],\n warnings: [],\n statistics: emptyStatistics()\n }\n }\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (is.nonEmptyObject(feature.geometry)) {\n const result = validateGeometry(feature.geometry, `${path}/geometry`)\n const bboxResult = validateOptionalBBox(feature, result, path)\n return {\n ...bboxResult,\n statistics: {\n Feature: 1,\n FeatureCollection: 0,\n geometries: { [feature.geometry.type]: 1 }\n }\n }\n }\n return {\n valid: true,\n errors: [],\n warnings: [{ message: 'Feature has no geometry', path }],\n statistics: { Feature: 1, FeatureCollection: 0, geometries: {} }\n }\n }\n if (feature.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n if (is.nonEmptyArray(feature.features)) {\n const result = validateArray(feature.features, validateFeature, `${path}/features`)\n const bboxResult = validateOptionalBBox(feature, result, path)\n return {\n ...bboxResult,\n statistics: { ...result.statistics, FeatureCollection: result.statistics.FeatureCollection + 1 }\n }\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid FeatureCollection: features must be a non empty array', path }],\n warnings: [],\n statistics: emptyStatistics()\n }\n }\n return {\n valid: false,\n errors: [{ message: `Invalid feature: unknown type: ${feature.type}`, path }],\n warnings: [],\n statistics: emptyStatistics()\n }\n}\n\nexport function validateGeoJson (geoJson) {\n assert.that(geoJson, is.nonEmptyObject, 'geojson must be a non empty object')\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) {\n const result = validateGeometry(geoJson, '')\n return {\n ...result,\n statistics: { Feature: 0, FeatureCollection: 0, geometries: { [geoJson.type]: 1 } }\n }\n }\n if (geoJson.type === FEATURE_TYPES.FEATURE || geoJson.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n const result = validateFeature(geoJson, '')\n return validateOptionalCRS(geoJson, result)\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid GeoJson: type must be either a Geometry, a Feature or a FeatureCollection' }],\n warnings: [],\n statistics: emptyStatistics()\n }\n}\n"],"names":["AXES","isAxis","axis","assert","is","isLatitude","isLongitude","isAltitude","LOCALE_SCHEMA","LOCALES","en","fr","CURRENT_LOCALE","listLocales","registerLocale","code","content","v","has","conform","setLocale","getLocale","getAll","isDirectionOf","type","dir","all","label","symbol","getDirections","directions","getNorth","getSouth","getEast","getWest","isDirection","isNorth","isSouth","isEast","isWest","getDirectionAxis","SCHEMA","optional","REGEX_SIGNED","REGEX_DIR","DD","dd","_degrees","_direction","pattern","match","decimalPlaces","str","DDM","ddm","_minutes","REGEX_LAT","REGEX_LON","DDMAero","isLon","deg","min","DMS","dms","_seconds","decimalToDDM","degrees","minutes","decimalToDMS","minutesDecimal","seconds","converter","direction","COORDINATE_FORMATS","COORDINATE_MODELS","COORDINATE_TRUNCATION_FACTORS","_","i","guessCoordinateAxis","coord","getCoordinatePrecision","base","exp","decimalsInBase","truncateCoordinate","precision","factor","normalizeCoordinate","lon","convertCoordinate","from","to","parseCoordinate","format","parsePosition","parts","first","second","firstDD","secondDD","firstAxis","secondAxis","signedDegrees","isLikeBBox","object","CRS_TYPES","isLikeCRS","GEOMETRY_TYPES","isLikeGeometry","FEATURE_TYPES","isLikeFeature","isLikeFeatureCollection","isLikeGeoJson","isLikePosition","dntGlobals","dntGlobalThis","createMergeProxy","baseObj","extObj","_target","prop","_receiver","value","success","baseKeys","extKeys","extKeysSet","k","desc","getLogger","category","LoggerImpl","globalRootLoggerSymbol","rootLogger","dntShim.dntGlobalThis","parent","subcategory","name","childRef","child","logger","properties","LoggerCtx","record","filter","sink","bypassSinks","error","bypassSinks2","metaLogger","level","rawMessage","implicitContext","cachedProps","parseMessageTemplate","callback","msg","realizeMessage","tpl","values","renderMessage","messageTemplate","message","template","part","char","nextChar","args","util","require","nodeUtil","levelAbbreviations","inspect","opts","getTextFormatter","options","timestampRenderer","ts","categorySeparator","valueRenderer","levelRenderer","formatter","timestamp","RESET","ansiColors","ansiStyles","defaultLevelColors","getAnsiColorFormatter","timestampStyle","timestampColor","timestampPrefix","timestampSuffix","levelStyle","levelColors","categoryStyle","categoryColor","categoryPrefix","categorySuffix","levelColor","fs","fs_1","webDriver","fsMod","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","reject","fulfilled","step","e","rejected","result","__generator$1","body","t","f","y","g","verb","n","op","__read$1","o","m","r","ar","__spreadArray$1","pack","l","__values","s","HeapAsync","compare","_this","a","b","res","idx","whichChildren","_a","heap","deep","pi","repeat","times","out","node","lines","maxLines","maxLength","nodeText","line","el","half","arr","heapArr","item","iterable","element","elements","_b","j","children","children_1","children_1_1","ch","e_1_1","e_1","cloned","o_1","fn","e_2_1","e_2","_c","_d","array","_l","last","_i","queue","c","peek","rm","bottomHeap","startAt","parentStartAt","indices","temp","length","originalIndex","left","right","best","topHeap","heapArray","branch","list","top","comp","__generator","__read","__spreadArray","Heap","callbackFn","indexes","currentIndex","currentElement","foundIndexes","triangleArea","simplify","coords","tolerance","getWeight","pts","computeArea","maxArea","cur","simplifyGeometry","geometry","ring","poly","simplifyFeature","feature","feat","simplifyGeoJson","geoJson","truncateBBox","bbox","geom","point","coordinates","isNumber","num","isObject","input","coordEach","geojson","excludeWrapCoord","stopG","geometryMaybeCollection","wrapShrink","coordIndex","isGeometryCollection","isFeatureCollection","isFeature","stop","featureIndex","geomIndex","multiFeatureIndex","geometryIndex","geomType","truncate","mutate","truncateCoords","index_default","truncateGeometry","truncateFeature","truncateGeoJson","truncatePosition","position","validatePosition","response","lonPrecision","latPrecision","validateBBox","is2D","max","minResult","maxResult","west","south","east","north","w","validateCRS","crs","getCoords","booleanClockwise","sum","prev","kinks","featureIn","results","line1","line2","intersection","lineIntersects","line1StartX","line1StartY","line1EndX","line1EndY","line2StartX","line2StartY","line2EndX","line2EndY","denominator","numerator1","numerator2","emptyStatistics","mergeStatistics","statistics","count","validateArray","items","validator","path","itemPath","validateOptionalCRS","obj","crsResult","validateOptionalBBox","bboxResult","validateCoordinatesArray","minimumLength","validateLineStringCoordinates","lon1","lon2","validateMultiLineStringCoordinates","validateLinearRing","expectedWindingOrder","actualWindingOrder","intersections","validatePolygonCoordinates","p","validateMultiPolygonCoordinates","validateGeometryCollectionGeometries","geometries","validateGeometry","coordsPath","positionResult","validateFeature","validateGeoJson"],"mappings":"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","x_google_ignoreList":[16,17,18,19,20,21,22,23,28,29,30,37,38,39]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/foundation/axes.js","../src/foundation/locale.js","../src/foundation/directions.js","../src/foundation/coordinate-formats/dd.js","../src/foundation/coordinate-formats/ddm.js","../src/foundation/coordinate-formats/ddm-aero.js","../src/foundation/coordinate-formats/dms.js","../src/foundation/coordinate-formats/converter.js","../src/foundation/coordinate-formats/index.js","../src/foundation/coordinate.js","../src/foundation/position.js","../src/operators/is-like/bbox.js","../src/operators/is-like/crs.js","../src/operators/is-like/geometry.js","../src/operators/is-like/geojson.js","../src/operators/is-like/position.js","../src/operators/simplify/visvalingam-whyatt.js","../src/operators/simplify/geometry.js","../src/operators/simplify/geojson.js","../src/operators/truncate/bbox.js","../src/operators/truncate/geometry.js","../src/operators/truncate/geojson.js","../src/operators/truncate/position.js","../src/operators/validate/position.js","../src/operators/validate/bbox.js","../src/operators/validate/crs.js","../src/operators/validate/utils.js","../src/operators/validate/geometry.js","../src/operators/validate/geojson.js"],"sourcesContent":["import { assert, is } from '@kalisio/common-core'\n\nexport const AXES = {\n LATITUDE: 'LAT',\n LONGITUDE: 'LON',\n ALTITUDE: 'ALT'\n}\n\nexport function isAxis (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return Object.values(AXES).includes(axis)\n}\n\nexport function isLatitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.LATITUDE\n}\n\nexport function isLongitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.LONGITUDE\n}\n\nexport function isAltitude (axis) {\n assert.that(axis, is.string, 'axis must be a string')\n return axis === AXES.ALTITUDE\n}\n","import { assert, is, has, conform } from '@kalisio/common-core'\nimport fr from './locales/fr.json'\nimport en from './locales/en.json'\n\nconst LOCALE_SCHEMA = {\n DIRECTIONS: {\n NORTH: { label: is.string, symbol: is.string },\n SOUTH: { label: is.string, symbol: is.string },\n EAST: { label: is.string, symbol: is.string },\n WEST: { label: is.string, symbol: is.string }\n }\n}\n\nconst LOCALES = {\n en,\n fr\n}\n\nlet CURRENT_LOCALE = 'en'\n\nexport function listLocales () {\n return Object.keys(LOCALES)\n}\n\nexport function registerLocale (code, content) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => !has.key(LOCALES, v), message: 'locale already registered' },\n { value: content, validator: is.plainObject, message: 'content must be an object' },\n { value: content, validator: (v) => conform.schema(v, LOCALE_SCHEMA), message: 'content does not conform to schema' }\n ])\n LOCALES[code] = content\n}\n\nexport function setLocale (code) {\n assert.all([\n { value: code, validator: is.string, message: 'code must be a string' },\n { value: code, validator: (v) => has.key(LOCALES, v), message: 'code is unknown' }\n ])\n CURRENT_LOCALE = code\n}\n\nexport function getLocale () {\n return {\n code: CURRENT_LOCALE,\n content: LOCALES[CURRENT_LOCALE]\n }\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { getLocale } from './locale.js'\nimport { AXES, isLatitude, isLongitude, isAxis } from './axes.js'\n\nfunction getAll () {\n return getLocale().content.DIRECTIONS\n}\n\nfunction isDirectionOf (type, dir) {\n const all = getAll()\n const label = all[type].label.toUpperCase()\n const symbol = all[type].symbol.toUpperCase()\n return dir.toUpperCase() === label || dir.toUpperCase() === symbol\n}\n\nexport function getDirections (axis = null) {\n const directions = getAll()\n if (is.defined(axis)) {\n assert.that(axis, isAxis, 'axis must be a valid axis')\n if (isLatitude(axis)) return [directions.SOUTH, directions.NORTH]\n if (isLongitude(axis)) return [directions.EAST, directions.WEST]\n return []\n }\n return [directions.SOUTH, directions.NORTH, directions.EAST, directions.WEST]\n}\n\nexport function getNorth () { return getAll().NORTH }\nexport function getSouth () { return getAll().SOUTH }\nexport function getEast () { return getAll().EAST }\nexport function getWest () { return getAll().WEST }\n\nexport function isDirection (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isNorth(dir) || isSouth(dir) || isEast(dir) || isWest(dir)\n}\n\nexport function isNorth (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('NORTH', dir)\n}\n\nexport function isSouth (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('SOUTH', dir)\n}\n\nexport function isEast (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('EAST', dir)\n}\n\nexport function isWest (dir) {\n assert.that(dir, is.string, 'dir must be a string')\n return isDirectionOf('WEST', dir)\n}\n\nexport function getDirectionAxis (dir) {\n assert.that(dir, isDirection, 'dir must be a direction')\n if (isWest(dir) || isEast(dir)) return AXES.LONGITUDE\n return AXES.LATITUDE\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\n\nconst SCHEMA = {\n degrees: is.number,\n direction: optional(isDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3}(?:\\.\\d+)?)°?$/\nconst REGEX_DIR = /^(\\d{1,3}(?:\\.\\d+)?)°?([NSEW])$/\n\nexport function DD (dd) {\n let _degrees = null\n let _direction = null\n\n if (is.plainObject(dd) && conform.schema(dd, SCHEMA)) {\n if (is.defined(dd.direction)) {\n if (dd.degrees >= 0) {\n _degrees = dd.degrees\n _direction = dd.direction\n }\n } else {\n _degrees = dd.degrees\n }\n } else if (is.string(dd)) {\n const pattern = dd.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(REGEX_DIR)\n if (match) {\n _degrees = parseFloat(match[1])\n _direction = match[2] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get direction () { return _direction },\n get format () { return 'DD' },\n\n isValid () {\n return is.number(_degrees)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees.toFixed(decimalPlaces)}°`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees, direction: _direction })\n }\n }\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.integer,\n minutes: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: optional(isDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3})°(\\d{1,2}(?:\\.\\d+)?)'?$/\nconst REGEX_DIR = /^(\\d{1,3})°(\\d{1,2}(?:\\.\\d+)?)'?([NSEW])$/\n\nexport function DDM (ddm) {\n let _degrees = null\n let _minutes = null\n let _direction = null\n\n if (is.plainObject(ddm) && conform.schema(ddm, SCHEMA)) {\n if (is.defined(ddm.direction)) {\n if (ddm.degrees >= 0) {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n _direction = ddm.direction\n }\n } else {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n }\n } else if (is.string(ddm)) {\n const pattern = ddm.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(REGEX_DIR)\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2])\n _direction = match[3] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get direction () { return _direction },\n get format () { return 'DDM' },\n\n isValid () {\n return is.integer(_degrees) && is.inRangeExclusiveMax(_minutes, 0, 60)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees}° ${_minutes.toFixed(decimalPlaces)}'`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60, direction: _direction })\n }\n }\n}\n","import { is, conform } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.nonNegativeInteger,\n minutes: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: isDirection\n}\n\nconst REGEX_LAT = /^(\\d{2})(\\d{3})([NS])$/\nconst REGEX_LON = /^(\\d{3})(\\d{3})([EW])$/\n\nexport function DDMAero (ddm) {\n let _degrees = null\n let _minutes = null\n let _direction = null\n\n if (is.plainObject(ddm) && conform.schema(ddm, SCHEMA)) {\n _degrees = ddm.degrees\n _minutes = ddm.minutes\n _direction = ddm.direction\n } else if (is.string(ddm)) {\n const pattern = ddm.trim()\n const match = pattern.match(REGEX_LAT) ?? pattern.match(REGEX_LON)\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2]) / 10\n _direction = match[3]\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get direction () { return _direction },\n get format () { return 'DDM_AERO' },\n\n isValid () {\n return is.nonNegativeInteger(_degrees) &&\n is.inRangeExclusiveMax(_minutes, 0, 60) &&\n isDirection(_direction)\n },\n\n toString () {\n if (!this.isValid()) return ''\n const isLon = _direction === 'E' || _direction === 'W'\n const deg = String(_degrees).padStart(isLon ? 3 : 2, '0')\n const min = Math.floor(_minutes * 10).toString().padStart(3, '0')\n return `${deg}${min}${_direction}`\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60, direction: _direction })\n }\n }\n}\n","import { assert, is, conform, optional } from '@kalisio/common-core'\nimport { isDirection } from '../directions.js'\nimport { DD } from './dd.js'\n\nconst SCHEMA = {\n degrees: is.integer,\n minutes: (v) => is.integer(v) && is.inRange(v, 0, 59),\n seconds: (v) => is.inRangeExclusiveMax(v, 0, 60),\n direction: optional(isDirection)\n}\n\nconst REGEX_SIGNED = /^(-?\\d{1,3})°(\\d{1,2})'(\\d{1,2}(?:\\.\\d+)?)\"?$/\nconst REGEX_DIR = /^(\\d{1,3})°(\\d{1,2})'(\\d{1,2}(?:\\.\\d+)?)\"?([NSEW])$/\n\nexport function DMS (dms) {\n let _degrees = null\n let _minutes = null\n let _seconds = null\n let _direction = null\n\n if (is.plainObject(dms) && conform.schema(dms, SCHEMA)) {\n if (is.defined(dms.direction)) {\n if (dms.degrees >= 0) {\n _degrees = dms.degrees\n _minutes = dms.minutes\n _seconds = dms.seconds\n _direction = dms.direction\n }\n } else {\n _degrees = dms.degrees\n _minutes = dms.minutes\n _seconds = dms.seconds\n }\n } else if (is.string(dms)) {\n const pattern = dms.replace(/\\s+/g, '')\n const match = pattern.match(REGEX_SIGNED) ?? pattern.match(REGEX_DIR)\n if (match) {\n _degrees = parseFloat(match[1])\n _minutes = parseFloat(match[2])\n _seconds = parseFloat(match[3])\n _direction = match[4] ?? null\n }\n }\n\n return {\n get degrees () { return _degrees },\n get minutes () { return _minutes },\n get seconds () { return _seconds },\n get direction () { return _direction },\n get format () { return 'DMS' },\n\n isValid () {\n return is.integer(_degrees) &&\n is.integer(_minutes) && is.inRange(_minutes, 0, 59) &&\n is.inRangeExclusiveMax(_seconds, 0, 60)\n },\n\n toString (decimalPlaces) {\n assert.that(decimalPlaces, is.positiveInteger, 'decimalPlaces must be a positive integer')\n if (!this.isValid()) return ''\n let str = `${_degrees}° ${_minutes}' ${_seconds.toFixed(decimalPlaces)}\"`\n if (_direction) str += ` ${_direction}`\n return str\n },\n\n toDecimal () {\n if (!this.isValid()) return null\n return DD({ degrees: _degrees + _minutes / 60 + _seconds / 3600, direction: _direction })\n }\n }\n}\n","import { assert } from '@kalisio/common-core'\nimport { DDM } from './ddm.js'\nimport { DDMAero } from './ddm-aero.js'\nimport { DMS } from './dms.js'\n\nfunction decimalToDDM (dd) {\n const degrees = Math.floor(dd.degrees)\n const minutes = (dd.degrees - degrees) * 60\n return { degrees, minutes, direction: dd.direction }\n}\n\nfunction decimalToDMS (dd) {\n const degrees = Math.floor(dd.degrees)\n const minutesDecimal = (dd.degrees - degrees) * 60\n const minutes = Math.floor(minutesDecimal)\n const seconds = (minutesDecimal - minutes) * 60\n return { degrees, minutes, seconds, direction: dd.direction }\n}\n\nexport const converter = {\n DD: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n return dd\n },\n\n DDM: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, direction } = decimalToDDM(dd)\n return DDM(direction ? { degrees, minutes, direction } : { degrees, minutes })\n },\n\n DMS: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, seconds, direction } = decimalToDMS(dd)\n return DMS(direction ? { degrees, minutes, seconds, direction } : { degrees, minutes, seconds })\n },\n\n DDM_AERO: (dd) => {\n assert.that(dd, (v) => v.isValid(), 'dd must be a valid coordinate')\n const { degrees, minutes, direction } = decimalToDDM(dd)\n return DDMAero({ degrees, minutes, direction })\n }\n}\n","import { DD } from './dd.js'\nimport { DDM } from './ddm.js'\nimport { DDMAero } from './ddm-aero.js'\nimport { DMS } from './dms.js'\nexport * from './converter.js'\n\nexport const COORDINATE_FORMATS = {\n DD: 'DD',\n DDM: 'DDM',\n DDM_AERO: 'DDM_AERO',\n DMS: 'DMS'\n}\n\nexport const COORDINATE_MODELS = {\n DD,\n DDM,\n DDM_AERO: DDMAero,\n DMS\n}\n","import { assert, is, has } from '@kalisio/common-core'\nimport { AXES, isLatitude, isLongitude } from './axes.js'\nimport { isDirection, getDirectionAxis } from './directions.js'\nimport { COORDINATE_FORMATS, COORDINATE_MODELS, converter } from './coordinate-formats'\nexport { COORDINATE_FORMATS, COORDINATE_MODELS } from './coordinate-formats'\n\nexport const COORDINATE_TRUNCATION_FACTORS = Array.from({ length: 9 }, (_, i) => 10 ** i)\n\nexport function guessCoordinateAxis (coord, dir) {\n assert.that(coord, is.number, 'coord must be a number')\n if (is.defined(dir)) {\n assert.that(dir, isDirection, 'dir must be a direction')\n return getDirectionAxis(dir)\n }\n if (Math.abs(coord) > 90) return AXES.LONGITUDE\n return undefined\n}\n\nexport function getCoordinatePrecision (coord) {\n assert.that(coord, is.number, 'coord must be a number')\n const str = coord.toExponential()\n const [base, exp] = str.split('e').map(Number)\n const decimalsInBase = (base.toString().split('.')[1] || '').length\n return Math.max(0, decimalsInBase - exp)\n}\n\nexport function truncateCoordinate (coord, precision = 7) {\n assert.all([\n { value: coord, validator: is.number, message: 'coord must be a number' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n return Math.round(coord * factor) / factor\n}\n\nexport function normalizeCoordinate (coord, axis) {\n assert.all([\n { value: coord, validator: is.number, message: 'coord must be a number' },\n { value: axis, validator: (v) => isLongitude(v) || isLatitude(v), message: 'axis must be either a longitude or latitude' }\n ])\n if (isLatitude(axis)) {\n return Math.max(-90, Math.min(90, coord))\n }\n let lon = ((coord + 180) % 360 + 360) % 360 - 180\n if (lon === -180) lon = 180\n if (Object.is(lon, -0)) lon = 0\n return lon\n}\n\nexport function convertCoordinate (from, to) {\n assert.all([\n { value: from, validator: (v) => is.defined(v) && v.isValid(), message: 'from must be a valid coordinate' },\n { value: to, validator: (v) => has.key(converter, v), message: `unknown format: ${to}` }\n ])\n const dd = from.format === COORDINATE_FORMATS.DD ? from : from.toDecimal()\n if (!dd.isValid()) return null\n if (to === COORDINATE_FORMATS.DD) {\n return dd\n }\n return converter[to](dd)\n}\n\nexport function parseCoordinate (pattern) {\n assert.that(pattern, is.nonEmptyString, 'pattern must be a non empty string')\n for (const format of Object.keys(COORDINATE_FORMATS)) {\n const coord = COORDINATE_MODELS[format](pattern)\n if (coord.isValid()) return coord\n }\n return null\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { AXES } from './axes.js'\nimport { isWest, isSouth } from './directions.js'\nimport { guessCoordinateAxis, parseCoordinate } from './coordinate.js'\n\nexport function parsePosition (pattern) {\n assert.that(pattern, (v) => is.nonEmptyString(v), 'pattern must be a non-empty string')\n const parts = pattern.split(/[,;|]/)\n if (parts.length !== 2) return null\n const [first, second] = parts.map(parseCoordinate)\n if (!first || !second) return null\n const firstDD = first.toDecimal()\n const secondDD = second.toDecimal()\n const firstAxis = guessCoordinateAxis(firstDD.degrees, firstDD.direction)\n const secondAxis = guessCoordinateAxis(secondDD.degrees, secondDD.direction)\n // Apply signedDegrees based on direction\n const signedDegrees = (dd) => {\n const { degrees, direction } = dd\n if (!direction) return degrees\n return (isWest(direction) || isSouth(direction)) ? -degrees : degrees\n }\n if (firstAxis === AXES.LONGITUDE && secondAxis === AXES.LATITUDE) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (secondAxis === AXES.LONGITUDE && firstAxis === AXES.LATITUDE) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (firstAxis === AXES.LONGITUDE && !secondAxis) return [signedDegrees(firstDD), secondDD]\n if (firstAxis === AXES.LATITUDE && !secondAxis) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (secondAxis === AXES.LONGITUDE && !firstAxis) return [signedDegrees(secondDD), signedDegrees(firstDD)]\n if (secondAxis === AXES.LATITUDE && !firstAxis) return [signedDegrees(firstDD), signedDegrees(secondDD)]\n if (!firstAxis && !secondAxis) {\n return [\n [signedDegrees(firstDD), signedDegrees(secondDD)],\n [signedDegrees(secondDD), signedDegrees(firstDD)]\n ]\n }\n}\n","import { is } from '@kalisio/common-core'\n\nexport function isLikeBBox (object) {\n if (!is.arrayOfLength(object, 4) && !is.arrayOfLength(object, 6)) return false\n return object.every(is.number)\n}\n","import { is } from '@kalisio/common-core'\n\nexport const CRS_TYPES = {\n NAME: 'name',\n LINK: 'link'\n}\n\nexport function isLikeCRS (object) {\n if (!is.plainObject(object)) return false\n if (object.type === CRS_TYPES.NAME) {\n return is.nonEmptyString(object.properties?.name)\n }\n if (object.type === CRS_TYPES.LINK) {\n return is.nonEmptyString(object.properties?.href)\n }\n return false\n}\n","import { is } from '@kalisio/common-core'\n\nexport const GEOMETRY_TYPES = {\n POINT: 'Point',\n MULTI_POINT: 'MultiPoint',\n LINESTRING: 'LineString',\n MULTI_LINESTRING: 'MultiLineString',\n POLYGON: 'Polygon',\n MULTI_POLYGON: 'MultiPolygon',\n GEOMETRY_COLLECTION: 'GeometryCollection'\n}\n\nexport function isLikeGeometry (object) {\n if (!is.plainObject(object)) return false\n if (!is.oneOf(object.type, Object.values(GEOMETRY_TYPES))) return false\n if (object.type === GEOMETRY_TYPES.GEOMETRY_COLLECTION) {\n return is.array(object.geometries)\n }\n return is.array(object.coordinates)\n}\n","import { is } from '@kalisio/common-core'\nimport { isLikeGeometry } from './geometry.js'\n\nexport const FEATURE_TYPES = {\n FEATURE: 'Feature',\n FEATURE_COLLECTION: 'FeatureCollection'\n}\n\nexport function isLikeFeature (object) {\n if (!is.plainObject(object)) return false\n return FEATURE_TYPES.FEATURE === object.type\n}\n\nexport function isLikeFeatureCollection (object) {\n if (!is.plainObject(object)) return false\n if (object.type !== FEATURE_TYPES.FEATURE_COLLECTION) return false\n return is.array(object.features)\n}\n\nexport function isLikeGeoJson (object) {\n if (!is.plainObject(object)) return false\n if (isLikeGeometry(object)) return true\n if (isLikeFeature(object)) return true\n return isLikeFeatureCollection(object)\n}\n","import { is } from '@kalisio/common-core'\n\nexport function isLikePosition (object) {\n if (!is.arrayOfLengthBetween(object, 2, 3)) return false\n return object.every(is.number)\n}\n","import { Heap } from 'heap-js'\n\nfunction triangleArea (a, b, c) {\n return Math.abs(\n (a[0] * (b[1] - c[1]) +\n b[0] * (c[1] - a[1]) +\n c[0] * (a[1] - b[1])) / 2\n )\n}\n\nexport function simplify (coords, { tolerance = 0, getWeight = () => 1 } = {}) {\n if (coords.length <= 2) return coords\n\n const pts = coords.map((coord, i) => ({ coord, i, area: Infinity, removed: false, prev: null, next: null }))\n for (let i = 0; i < pts.length; i++) {\n if (i > 0) pts[i].prev = pts[i - 1]\n if (i < pts.length - 1) pts[i].next = pts[i + 1]\n }\n\n const computeArea = (node) => {\n if (!node.prev || !node.next) return Infinity\n const area = triangleArea(node.prev.coord, node.coord, node.next.coord)\n return area * getWeight(node.coord, node.i)\n }\n\n const heap = new Heap((a, b) => a.area - b.area)\n for (let i = 1; i < pts.length - 1; i++) {\n pts[i].area = computeArea(pts[i])\n pts[i]._currentArea = pts[i].area\n heap.push(pts[i])\n }\n\n let maxArea = 0\n\n while (heap.size() > 0) {\n const node = heap.pop()\n if (node.removed) continue\n if (node.area !== node._currentArea) continue\n if (node.area < maxArea) node.area = maxArea\n else maxArea = node.area\n\n if (node.area >= tolerance) break\n\n node.removed = true\n if (node.prev) node.prev.next = node.next\n if (node.next) node.next.prev = node.prev\n\n if (node.prev?.prev) {\n node.prev.area = computeArea(node.prev)\n node.prev._currentArea = node.prev.area\n heap.push(node.prev)\n }\n if (node.next?.next) {\n node.next.area = computeArea(node.next)\n node.next._currentArea = node.next.area\n heap.push(node.next)\n }\n }\n\n const result = []\n let cur = pts[0]\n while (cur) {\n if (!cur.removed) result.push(cur.coord)\n cur = cur.next\n }\n return result\n}\n","import { assert } from '@kalisio/common-core'\nimport { GEOMETRY_TYPES, isLikeGeometry } from '../is-like'\nimport { simplify } from './visvalingam-whyatt.js'\n\nexport function simplifyGeometry (geometry, options) {\n assert.all([\n { value: geometry, validator: isLikeGeometry, message: 'geometry must be a GeoJson geometry' }\n ])\n switch (geometry.type) {\n case GEOMETRY_TYPES.LINESTRING:\n geometry.coordinates = simplify(geometry.coordinates, options)\n break\n case GEOMETRY_TYPES.POLYGON:\n case GEOMETRY_TYPES.MULTI_LINESTRING:\n geometry.coordinates = geometry.coordinates.map(ring => simplify(ring, options))\n break\n case GEOMETRY_TYPES.MULTI_POLYGON:\n geometry.coordinates = geometry.coordinates.map(poly => poly.map(ring => simplify(ring, options)))\n break\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION:\n geometry.geometries.forEach(g => simplifyGeometry(g, options))\n break\n }\n return geometry\n}\n","import { getLogger } from '@logtape/logtape'\nimport { assert, is } from '@kalisio/common-core'\nimport { FEATURE_TYPES, GEOMETRY_TYPES, isLikeGeoJson } from '../is-like'\nimport { simplifyGeometry } from './geometry.js'\n\nconst logger = getLogger(['common-ekosystem', 'simplify', 'geojson'])\n\nfunction simplifyFeature (feature, options) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) simplifyGeometry(feature.geometry, options)\n } else if (feature.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n for (const feat of feature.features) simplifyFeature(feat, options)\n } else {\n logger.warn('Unknown feature type \"{type}\", skipping.', { type: feature.type })\n }\n return feature\n}\n\nexport function simplifyGeoJson (geoJson, options) {\n assert.all([\n { value: geoJson, validator: isLikeGeoJson, message: 'geoJson must be a GeoJson object' }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) return simplifyGeometry(geoJson, options)\n return simplifyFeature(geoJson, options)\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { COORDINATE_TRUNCATION_FACTORS } from '../../foundation'\nimport { isLikeBBox } from '../is-like'\n\nexport function truncateBBox (bbox, precision = 7) {\n assert.all([\n { value: bbox, validator: isLikeBBox, message: 'bbox must be bounding box' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n for (let i = 0; i < bbox.length; i++) {\n bbox[i] = Math.round(bbox[i] * factor) / factor\n }\n return bbox\n}\n","import truncate from '@turf/truncate'\nimport { assert, is } from '@kalisio/common-core'\nimport { isLikeGeometry } from '../is-like'\nimport { truncateBBox } from './bbox.js'\n\nexport function truncateGeometry (geometry, precision = 7) {\n assert.all([\n { value: geometry, validator: isLikeGeometry, message: 'geometry must be a GeoJson geometry' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const result = truncate(geometry, { precision, mutate: true })\n if (result.bbox) truncateBBox(result.bbox, precision)\n return result\n}\n","import { getLogger } from '@logtape/logtape'\nimport { assert, is } from '@kalisio/common-core'\nimport { FEATURE_TYPES, GEOMETRY_TYPES, isLikeGeoJson } from '../is-like'\nimport { truncateBBox } from './bbox.js'\nimport { truncateGeometry } from './geometry.js'\n\nconst logger = getLogger(['common-ekosystem', 'truncate', 'geojson'])\n\nfunction truncateFeature (feature, precision) {\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (feature.geometry) truncateGeometry(feature.geometry, precision)\n } else if (feature.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n for (const feat of feature.features) truncateFeature(feat, precision)\n } else {\n logger.warn('Unknown feature type \"{type}\", skipping.', { type: feature.type })\n }\n if (feature.bbox) truncateBBox(feature.bbox, precision)\n return feature\n}\n\nexport function truncateGeoJson (geoJson, precision = 7) {\n assert.all([\n { value: geoJson, validator: isLikeGeoJson, message: 'geoJson must be a valid GeoJson' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) return truncateGeometry(geoJson, precision)\n return truncateFeature(geoJson, precision)\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { COORDINATE_TRUNCATION_FACTORS } from '../../foundation'\nimport { isLikePosition } from '../is-like'\n\nexport function truncatePosition (position, precision = 7) {\n assert.all([\n { value: position, validator: isLikePosition, message: 'position must be a position' },\n { value: precision, validator: (v) => is.inRange(v, 0, 8), message: 'precision must be in range [0, 8]' }\n ])\n const factor = COORDINATE_TRUNCATION_FACTORS[precision]\n for (let i = 0; i < position.length; i++) {\n position[i] = Math.round(position[i] * factor) / factor\n }\n return position\n}\n","import { is } from '@kalisio/common-core'\nimport { getCoordinatePrecision } from '../../foundation'\n\nexport function validatePosition (coordinates) {\n if (!is.arrayOfLengthBetween(coordinates, 2, 3)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: must be an array of 2 or 3 coordinates' }],\n warnings: []\n }\n }\n if (!is.inRange(coordinates[0], -180, 180)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: longitude must be in the range -180 to 180' }],\n warnings: []\n }\n }\n if (!is.inRange(coordinates[1], -90, 90)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: latitude must be in the range -90 to 90' }],\n warnings: []\n }\n }\n if (coordinates.length === 3 && !is.number(coordinates[2])) {\n return {\n valid: false,\n errors: [{ message: 'Invalid coordinates: altitude must be a number' }],\n warnings: []\n }\n }\n const response = { valid: true, errors: [], warnings: [] }\n const lonPrecision = getCoordinatePrecision(coordinates[0])\n if (lonPrecision > 6) {\n response.warnings.push({ message: `longitude precision is high (${lonPrecision} decimals, max recommended: 6)` })\n }\n const latPrecision = getCoordinatePrecision(coordinates[1])\n if (latPrecision > 6) {\n response.warnings.push({ message: `latitude precision is high (${latPrecision} decimals, max recommended: 6)` })\n }\n return response\n}\n","import { is } from '@kalisio/common-core'\nimport { validatePosition } from './position.js'\n\nexport function validateBBox (bbox) {\n // Must be array of 4 (2D) or 6 (3D) numbers\n if (!is.arrayOfLength(bbox, 4) && !is.arrayOfLength(bbox, 6)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid bbox: must be an array of 4 (2D) or 6 (3D) numbers' }],\n warnings: []\n }\n }\n const is2D = bbox.length === 4\n const min = is2D ? [bbox[0], bbox[1]] : [bbox[0], bbox[1], bbox[2]]\n const max = is2D ? [bbox[2], bbox[3]] : [bbox[3], bbox[4], bbox[5]]\n const minResult = validatePosition(min)\n if (!minResult.valid) {\n return {\n valid: false,\n errors: minResult.errors.map(e => ({ ...e, message: `Invalid bbox south-west: ${e.message}` })),\n warnings: []\n }\n }\n const maxResult = validatePosition(max)\n if (!maxResult.valid) {\n return {\n valid: false,\n errors: maxResult.errors.map(e => ({ ...e, message: `Invalid bbox north-east: ${e.message}` })),\n warnings: []\n }\n }\n const [west, south] = min\n const [east, north] = max\n if (south > north) {\n return {\n valid: false,\n errors: [{ message: `Invalid bbox: south (${south}) must be <= north (${north})` }],\n warnings: []\n }\n }\n const response = { valid: true, errors: [], warnings: [] }\n if (west > east) {\n response.warnings.push({ message: `bbox crosses the antimeridian (west: ${west} > east: ${east})` })\n }\n // Retrieve warnings from both points\n response.warnings.push(...minResult.warnings.map(w => ({ ...w, message: `south-west: ${w.message}` })))\n response.warnings.push(...maxResult.warnings.map(w => ({ ...w, message: `north-east: ${w.message}` })))\n return response\n}\n","import { is } from '@kalisio/common-core'\nimport { CRS_TYPES } from '../is-like'\n\nexport function validateCRS (crs) {\n if (!is.plainObject(crs)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid crs: must be an object' }],\n warnings: []\n }\n }\n switch (crs.type) {\n case CRS_TYPES.NAME: {\n if (!is.nonEmptyString(crs.properties?.name)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid crs: linked crs must have a non-empty properties.name string' }],\n warnings: []\n }\n }\n return { valid: true, errors: [], warnings: [] }\n }\n case CRS_TYPES.LINK: {\n if (!is.nonEmptyString(crs.properties?.href)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid crs: linked crs must have a non-empty properties.href string' }],\n warnings: []\n }\n }\n return { valid: true, errors: [], warnings: [] }\n }\n default:\n return {\n valid: false,\n errors: [{ message: `Invalid crs: unknown type: ${crs.type}` }],\n warnings: []\n }\n }\n}\n","import { is } from '@kalisio/common-core'\nimport { validateBBox } from './bbox.js'\nimport { validateCRS } from './crs.js'\n\nexport function emptyStatistics () {\n return { Feature: 0, FeatureCollection: 0, geometries: {} }\n}\n\nfunction mergeStatistics (...results) {\n const statistics = emptyStatistics()\n for (const result of results) {\n const s = result.statistics\n if (!s) continue\n statistics.Feature += s.Feature ?? 0\n statistics.FeatureCollection += s.FeatureCollection ?? 0\n for (const [type, count] of Object.entries(s.geometries ?? {})) {\n statistics.geometries[type] = (statistics.geometries[type] ?? 0) + count\n }\n }\n return statistics\n}\n\nexport function validateArray (items, validator, path = '') {\n const response = {\n valid: true,\n errors: [],\n warnings: []\n }\n for (let i = 0; i < items.length; i++) {\n const itemPath = `${path}/${i}`\n const result = validator(items[i], itemPath, i)\n if (!result.valid) {\n response.valid = false\n response.errors = response.errors.concat(result.errors.map(e => ({ ...e, path: e.path || itemPath, index: i })))\n continue\n }\n if (!is.empty(result.warnings)) {\n response.warnings = response.warnings.concat(result.warnings.map(w => ({ ...w, path: w.path || itemPath, index: i })))\n }\n if (result.statistics) {\n response.statistics = mergeStatistics(response, result)\n }\n }\n return response\n}\n\nexport function validateOptionalCRS (obj, result) {\n if (!is.defined(obj.crs)) return result\n const crsResult = validateCRS(obj.crs)\n if (!crsResult.valid) {\n result.valid = false\n result.errors.push(...crsResult.errors.map(e => ({ ...e, path: '/crs' })))\n }\n result.warnings.push(...crsResult.warnings.map(w => ({ ...w, path: '/crs' })))\n return result\n}\n\nexport function validateOptionalBBox (obj, result, path = '') {\n if (!is.defined(obj.bbox)) return result\n const bboxResult = validateBBox(obj.bbox)\n if (!bboxResult.valid) {\n result.valid = false\n result.errors.push(...bboxResult.errors.map(e => ({ ...e, path: `${path}/bbox` })))\n }\n result.warnings.push(...bboxResult.warnings.map(w => ({ ...w, path: `${path}/bbox` })))\n return result\n}\n","import booleanClockwise from '@turf/boolean-clockwise'\nimport kinks from '@turf/kinks'\nimport { is } from '@kalisio/common-core'\nimport { GEOMETRY_TYPES } from '../is-like/index.js'\nimport { validatePosition } from './position.js'\nimport { validateOptionalBBox, validateArray } from './utils.js'\n\nfunction validateCoordinatesArray (coordinates, minimumLength = 0, path = '') {\n if (!is.arrayOfLengthAtLeast(coordinates, minimumLength)) {\n return {\n valid: false,\n errors: [{ message: `Invalid coordinates: must have at least ${minimumLength} positions`, path }],\n warnings: []\n }\n }\n return validateArray(coordinates, validatePosition, path)\n}\n\nfunction validateLineStringCoordinates (coordinates, path = '') {\n const result = validateCoordinatesArray(coordinates, 2, path)\n if (!result.valid) return result\n // Check for antimeridian crossings\n for (let i = 0; i < coordinates.length - 1; i++) {\n const lon1 = coordinates[i][0]\n const lon2 = coordinates[i + 1][0]\n if (Math.abs(lon2 - lon1) > 180) {\n result.warnings.push({\n message: `LineString crosses the antimeridian between positions ${i} and ${i + 1}, consider using MultiLineString`,\n path: `${path}/${i}`\n })\n }\n }\n return result\n}\n\nfunction validateMultiLineStringCoordinates (coordinates, path = '') {\n if (!is.nonEmptyArray(coordinates)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid MultiLineString: coordinates must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(coordinates, validateLineStringCoordinates, path)\n}\n\nfunction validateLinearRing (coordinates, expectedWindingOrder, path = '') {\n const result = validateCoordinatesArray(coordinates, 4, path)\n if (!result.valid) return result\n // check ring is closed\n const first = coordinates[0]\n const last = coordinates[coordinates.length - 1]\n if (first[0] !== last[0] || first[1] !== last[1]) {\n result.valid = false\n result.errors.push({ message: 'Invalid LinearRing: first and last position must be identical', path })\n return result\n }\n // check winding order\n const isClockwise = booleanClockwise(coordinates)\n const actualWindingOrder = isClockwise ? 'clockwise' : 'counter-clockwise'\n if (actualWindingOrder !== expectedWindingOrder) {\n result.warnings.push({ message: `Ring must be ${expectedWindingOrder} but is ${actualWindingOrder}`, path })\n }\n // check self-intersection\n const intersections = kinks({ type: 'Polygon', coordinates: [coordinates] })\n if (intersections.features.length > 0) {\n result.valid = false\n result.errors.push({ message: `Invalid LinearRing: ${intersections.features.length} self-intersection(s) detected`, path })\n }\n return result\n}\n\nfunction validatePolygonCoordinates (coordinates, path = '') {\n if (!is.nonEmptyArray(coordinates)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid Polygon: coordinates must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(coordinates, (ring, p, i) => validateLinearRing(ring, i === 0 ? 'counter-clockwise' : 'clockwise', p), path)\n}\n\nfunction validateMultiPolygonCoordinates (coordinates, path = '') {\n if (!is.nonEmptyArray(coordinates)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid MultiPolygon: coordinates must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(coordinates, (c, p) => validatePolygonCoordinates(c, p), path)\n}\n\nfunction validateGeometryCollectionGeometries (geometries, path = '') {\n if (!is.nonEmptyArray(geometries)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid geometries: geometries must be a non empty array', path }],\n warnings: []\n }\n }\n return validateArray(geometries, (g, p) => validateGeometry(g, p), path)\n}\n\nexport function validateGeometry (geometry, path = '') {\n if (!is.nonEmptyObject(geometry)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid geometry: geometry must be a non empty object', path }],\n warnings: []\n }\n }\n const coordsPath = `${path}/coordinates`\n let result\n switch (geometry.type) {\n case GEOMETRY_TYPES.POINT: {\n const positionResult = validatePosition(geometry.coordinates, coordsPath)\n result = {\n valid: positionResult.valid,\n errors: positionResult.errors.map(e => ({ ...e, path: coordsPath })),\n warnings: positionResult.warnings.map(w => ({ ...w, path: coordsPath }))\n }\n break\n }\n case GEOMETRY_TYPES.MULTI_POINT: {\n result = validateCoordinatesArray(geometry.coordinates, 0, coordsPath)\n break\n }\n case GEOMETRY_TYPES.LINESTRING: {\n result = validateLineStringCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.MULTI_LINESTRING: {\n result = validateMultiLineStringCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.POLYGON: {\n result = validatePolygonCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.MULTI_POLYGON: {\n result = validateMultiPolygonCoordinates(geometry.coordinates, coordsPath)\n break\n }\n case GEOMETRY_TYPES.GEOMETRY_COLLECTION: {\n result = validateGeometryCollectionGeometries(geometry.geometries, `${path}/geometries`)\n break\n }\n default:\n return {\n valid: false,\n errors: [{ message: `Invalid geometry type: ${geometry.type}`, path }],\n warnings: []\n }\n }\n return validateOptionalBBox(geometry, result, path)\n}\n","import { assert, is } from '@kalisio/common-core'\nimport { FEATURE_TYPES, GEOMETRY_TYPES } from '../is-like/index.js'\nimport { emptyStatistics, validateArray, validateOptionalBBox, validateOptionalCRS } from './utils.js'\nimport { validateGeometry } from './geometry.js'\n\nfunction validateFeature (feature, path = '') {\n if (!is.nonEmptyObject(feature)) {\n return {\n valid: false,\n errors: [{ message: 'Invalid feature: must be a non empty object', path }],\n warnings: [],\n statistics: emptyStatistics()\n }\n }\n if (feature.type === FEATURE_TYPES.FEATURE) {\n if (is.nonEmptyObject(feature.geometry)) {\n const result = validateGeometry(feature.geometry, `${path}/geometry`)\n const bboxResult = validateOptionalBBox(feature, result, path)\n return {\n ...bboxResult,\n statistics: {\n Feature: 1,\n FeatureCollection: 0,\n geometries: { [feature.geometry.type]: 1 }\n }\n }\n }\n return {\n valid: true,\n errors: [],\n warnings: [{ message: 'Feature has no geometry', path }],\n statistics: { Feature: 1, FeatureCollection: 0, geometries: {} }\n }\n }\n if (feature.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n if (is.nonEmptyArray(feature.features)) {\n const result = validateArray(feature.features, validateFeature, `${path}/features`)\n const bboxResult = validateOptionalBBox(feature, result, path)\n return {\n ...bboxResult,\n statistics: { ...result.statistics, FeatureCollection: result.statistics.FeatureCollection + 1 }\n }\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid FeatureCollection: features must be a non empty array', path }],\n warnings: [],\n statistics: emptyStatistics()\n }\n }\n return {\n valid: false,\n errors: [{ message: `Invalid feature: unknown type: ${feature.type}`, path }],\n warnings: [],\n statistics: emptyStatistics()\n }\n}\n\nexport function validateGeoJson (geoJson) {\n assert.that(geoJson, is.nonEmptyObject, 'geojson must be a non empty object')\n if (is.oneOf(geoJson.type, Object.values(GEOMETRY_TYPES))) {\n const result = validateGeometry(geoJson, '')\n return {\n ...result,\n statistics: { Feature: 0, FeatureCollection: 0, geometries: { [geoJson.type]: 1 } }\n }\n }\n if (geoJson.type === FEATURE_TYPES.FEATURE || geoJson.type === FEATURE_TYPES.FEATURE_COLLECTION) {\n const result = validateFeature(geoJson, '')\n return validateOptionalCRS(geoJson, result)\n }\n return {\n valid: false,\n errors: [{ message: 'Invalid GeoJson: type must be either a Geometry, a Feature or a FeatureCollection' }],\n warnings: [],\n statistics: emptyStatistics()\n }\n}\n"],"names":["AXES","isAxis","axis","assert","is","isLatitude","isLongitude","isAltitude","LOCALE_SCHEMA","LOCALES","en","fr","CURRENT_LOCALE","listLocales","registerLocale","code","content","v","has","conform","setLocale","getLocale","getAll","isDirectionOf","type","dir","all","label","symbol","getDirections","directions","getNorth","getSouth","getEast","getWest","isDirection","isNorth","isSouth","isEast","isWest","getDirectionAxis","SCHEMA","optional","REGEX_SIGNED","REGEX_DIR","DD","dd","_degrees","_direction","pattern","match","decimalPlaces","str","DDM","ddm","_minutes","REGEX_LAT","REGEX_LON","DDMAero","isLon","deg","min","DMS","dms","_seconds","decimalToDDM","degrees","minutes","decimalToDMS","minutesDecimal","seconds","converter","direction","COORDINATE_FORMATS","COORDINATE_MODELS","COORDINATE_TRUNCATION_FACTORS","_","i","guessCoordinateAxis","coord","getCoordinatePrecision","base","exp","decimalsInBase","truncateCoordinate","precision","factor","normalizeCoordinate","lon","convertCoordinate","from","to","parseCoordinate","format","parsePosition","parts","first","second","firstDD","secondDD","firstAxis","secondAxis","signedDegrees","isLikeBBox","object","CRS_TYPES","isLikeCRS","GEOMETRY_TYPES","isLikeGeometry","FEATURE_TYPES","isLikeFeature","isLikeFeatureCollection","isLikeGeoJson","isLikePosition","triangleArea","a","b","c","simplify","coords","tolerance","getWeight","pts","computeArea","node","heap","Heap","maxArea","result","cur","simplifyGeometry","geometry","options","ring","poly","g","logger","getLogger","simplifyFeature","feature","feat","simplifyGeoJson","geoJson","truncateBBox","bbox","truncateGeometry","truncate","truncateFeature","truncateGeoJson","truncatePosition","position","validatePosition","coordinates","response","lonPrecision","latPrecision","validateBBox","is2D","max","minResult","e","maxResult","west","south","east","north","w","validateCRS","crs","emptyStatistics","mergeStatistics","results","statistics","s","count","validateArray","items","validator","path","itemPath","validateOptionalCRS","obj","crsResult","validateOptionalBBox","bboxResult","validateCoordinatesArray","minimumLength","validateLineStringCoordinates","lon1","lon2","validateMultiLineStringCoordinates","validateLinearRing","expectedWindingOrder","last","actualWindingOrder","booleanClockwise","intersections","kinks","validatePolygonCoordinates","p","validateMultiPolygonCoordinates","validateGeometryCollectionGeometries","geometries","validateGeometry","coordsPath","positionResult","validateFeature","validateGeoJson"],"mappings":"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"}
|